物联网AI MicroPython传感器学习 之 ULN2003A步进电机驱动器

本文介绍了ULN2003A驱动器,一种用于控制高压大电流步进电机的集成电路,详细阐述了其产品特性、引脚定义、技术参数以及在3D打印等场景中的应用,包括软件接口、工作原理和通信协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学物联网,来万物简单IoT物联网!!在这里插入图片描述

一、产品简介

ULN2003A,是一种高压大电流的共发射极达林顿晶体管数组集成电路,内含7组达林顿对管,每组对管的电流容量是500mA,输出的电压最高50V,该电路同时内置了7只共阴极形式连接的续流二极管,用于电感性负载的开关动作的电流续流,本驱动是通过ULN2003A控制5线4相步进电机。应用场景:3D打印机里最常用的就是步进电机了,用步进电机,可以精确的控制移动的距离和位置。
image.png

引脚定义

  • VCC: 5-12V
  • IN1: host GPIO
  • IN2: host GPIO
  • IN3: host GPIO
  • IN4: host GPIO
  • GND: GND

二、技术参数

  • 钳位二极管输出
  • 高电压输出:50V
  • 可兼容各类逻辑的输入

三、软件接口

ULN2003(A, A__, B, B__) - 创建ULN2003驱动对象

  • 函数原型:

motorObj = ULN2003(a, a__, b, b__)

  • 参数说明:
参数类型必选参数?说明
aGPIO传入GPIO对象
a_GPIO传入GPIO对象
bGPIO传入GPIO对象
b_GPIO传入GPIO对象
  • 返回值:
    创建对象成功,返回ULN2003对象;ULN2003A对象创建失败,抛出Exception
  • 示例代码:
from machine import Pin      # 导入machine驱动库
import uln2003               # ULN2003驱动库

A = Pin(2, Pin.OUT)
A_ = Pin(4, Pin.OUT)
B = Pin(16, Pin.OUT)
B_ = Pin(17, Pin.OUT)
motorObj = ULN2003(A, A_, B, B_)
  • 输出:

motorCw(speed) - 步进电机正向旋转

  • 函数功能:
    驱动步进电机正向旋转
  • 函数原型:

ULN2003.motorCw(speed=4)

  • 参数说明:
    speed: 单位ms,步进电机旋转速度,speed越小,速度越快
  • 返回值:

motorCcw(speed) - 步进电机反向旋转

  • 函数功能:
    驱动步进电机反向旋转
  • 函数原型:

ULN2003.motorCcw(speed=4)

  • 参数说明:
    speed: 单位ms,步进电机旋转速度,speed越小,速度越快
  • 返回值:

motorStop() - 停止步进电机旋转

  • 函数功能:
    停止步进电机旋转
  • 函数原型:

ULN2003.motorStop()

  • 参数说明:
  • 返回值:
  • 示例:
from machine import Pin      # 导入machine驱动库
import uln2003               # ULN2003驱动库

A = Pin(2, Pin.OUT)
A_ = Pin(4, Pin.OUT)
B = Pin(16, Pin.OUT)
B_ = Pin(17, Pin.OUT)
motorObj = ULN2003(A, A_, B, B_)
while True:
    motorObj.motorCw()
  • 输出:

四、接口案例

  • 示例代码:
# Python代码
from machine import Pin      # 导入machine驱动库
import uln2003               # ULN2003驱动库

A = Pin(2, Pin.OUT)
A_ = Pin(4, Pin.OUT)
B = Pin(16, Pin.OUT)
B_ = Pin(17, Pin.OUT)
motorObj = ULN2003(A, A_, B, B_)
while 1:
    motorDev.motorCw()
  • 输出:

五、通信协议

主控芯片通过GPIO控制步进电机的正转反转。

  • 正转序列
序号功能说明命令字宏定义
1GPIO A 输出高电平CMD_PINA_OUT_HIGH
2GPIO A_ 输出低电平CMD_PINA__OUT_LOW
3GPIO B 输出低电平CMD_PINB_OUT_LOW
4GPIO B_ 输出低电平CMD_PINB__OUT_LOW
5delay xx msCMD_DELAY_XX_MS
6GPIO A 输出低电平CMD_PINA_OUT_LOW
7GPIO A_ 输出高电平CMD_PINA__OUT_HIGH
8GPIO B 输出低电平CMD_PINB_OUT_LOW
9GPIO B_ 输出低电平CMD_PINB__OUT_LOW
10delay xx msCMD_DELAY_XX_MS
11GPIO A 输出低电平CMD_PINA_OUT_LOW
12GPIO A_ 输出低电平CMD_PINA__OUT_LOW
13GPIO B 输出高电平CMD_PINB_OUT_HIGH
14GPIO B_ 输出低电平CMD_PINB__OUT_LOW
15delay xx msCMD_DELAY_XX_MS
16GPIO A 输出低电平CMD_PINA_OUT_LOW
17GPIO A_ 输出低电平CMD_PINA__OUT_LOW
18GPIO B 输出低电平CMD_PINB_OUT_LOW
19GPIO B_ 输出高电平CMD_PINB__OUT_HIGH
20delay xx msCMD_DELAY_XX_MS
  • 反转序列
序号功能说明命令字宏定义
1GPIO A 输出低电平CMD_PINA_OUT_LOW
2GPIO A_ 输出低电平CMD_PINA__OUT_LOW
3GPIO B 输出低电平CMD_PINB_OUT_LOW
4GPIO B_ 输出高电平CMD_PINB__OUT_HIGH
5delay xx msCMD_DELAY_XX_MS
6GPIO A 输出低电平CMD_PINA_OUT_LOW
7GPIO A_ 输出低电平CMD_PINA__OUT_LOW
8GPIO B 输出高电平CMD_PINB_OUT_HIGH
9GPIO B_ 输出低电平CMD_PINB__OUT_LOW
10delay xx msCMD_DELAY_XX_MS
11GPIO A 输出低电平CMD_PINA_OUT_LOW
12GPIO A_ 输出高电平CMD_PINA__OUT_HIGH
13GPIO B 输出低电平CMD_PINB_OUT_HIGH
14GPIO B_ 输出低电平CMD_PINB__OUT_LOW
15delay xx msCMD_DELAY_XX_MS
16GPIO A 输出高电平CMD_PINA_OUT_HIGH
17GPIO A_ 输出低电平CMD_PINA__OUT_LOW
18GPIO B 输出低电平CMD_PINB_OUT_LOW
19GPIO B_ 输出低电平CMD_PINB__OUT_HIGH
20delay xx msCMD_DELAY_XX_MS
  • 停止序列
序号功能说明命令字宏定义
1GPIO A 输出低电平CMD_PINA_OUT_LOW
2GPIO A_ 输出低电平CMD_PINA__OUT_LOW
3GPIO B 输出低电平CMD_PINB_OUT_LOW
4GPIO B_ 输出低电平CMD_PINB__OUT_LOW
  • 控制电机流程
    可以通过控制MCU的gpio 来输出正向旋转序列、反向旋转序列或停止序列来控制步进电机的正转、反转或者停止,并且可以通过控制正向序列或反向序列之间的延时间隔来控制步进电机的速度。

六、工作原理

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件, 通过GPIO控制脉冲变化从而触发磁场周期性变化,即可牵引转子周期性的变化,而ULN2003A能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲期来处理的数据。
如下是ULN2003内部的框图,1-7是ULN2003的输入段,经过达林顿管的电流放大,9-16进行输出。
image.png

参考文献及购买链接

[1] ULN2003A驱动器
[2] 购买链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值