一、产品简介
ULN2003A,是一种高压大电流的共发射极达林顿晶体管数组集成电路,内含7组达林顿对管,每组对管的电流容量是500mA,输出的电压最高50V,该电路同时内置了7只共阴极形式连接的续流二极管,用于电感性负载的开关动作的电流续流,本驱动是通过ULN2003A控制5线4相步进电机。应用场景:3D打印机里最常用的就是步进电机了,用步进电机,可以精确的控制移动的距离和位置。
引脚定义
- 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__)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
a | GPIO | 是 | 传入GPIO对象 |
a_ | GPIO | 是 | 传入GPIO对象 |
b | GPIO | 是 | 传入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控制步进电机的正转反转。
- 正转序列
序号 | 功能说明 | 命令字宏定义 |
1 | GPIO A 输出高电平 | CMD_PINA_OUT_HIGH |
2 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
3 | GPIO B 输出低电平 | CMD_PINB_OUT_LOW |
4 | GPIO B_ 输出低电平 | CMD_PINB__OUT_LOW |
5 | delay xx ms | CMD_DELAY_XX_MS |
6 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
7 | GPIO A_ 输出高电平 | CMD_PINA__OUT_HIGH |
8 | GPIO B 输出低电平 | CMD_PINB_OUT_LOW |
9 | GPIO B_ 输出低电平 | CMD_PINB__OUT_LOW |
10 | delay xx ms | CMD_DELAY_XX_MS |
11 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
12 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
13 | GPIO B 输出高电平 | CMD_PINB_OUT_HIGH |
14 | GPIO B_ 输出低电平 | CMD_PINB__OUT_LOW |
15 | delay xx ms | CMD_DELAY_XX_MS |
16 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
17 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
18 | GPIO B 输出低电平 | CMD_PINB_OUT_LOW |
19 | GPIO B_ 输出高电平 | CMD_PINB__OUT_HIGH |
20 | delay xx ms | CMD_DELAY_XX_MS |
- 反转序列
序号 | 功能说明 | 命令字宏定义 |
1 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
2 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
3 | GPIO B 输出低电平 | CMD_PINB_OUT_LOW |
4 | GPIO B_ 输出高电平 | CMD_PINB__OUT_HIGH |
5 | delay xx ms | CMD_DELAY_XX_MS |
6 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
7 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
8 | GPIO B 输出高电平 | CMD_PINB_OUT_HIGH |
9 | GPIO B_ 输出低电平 | CMD_PINB__OUT_LOW |
10 | delay xx ms | CMD_DELAY_XX_MS |
11 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
12 | GPIO A_ 输出高电平 | CMD_PINA__OUT_HIGH |
13 | GPIO B 输出低电平 | CMD_PINB_OUT_HIGH |
14 | GPIO B_ 输出低电平 | CMD_PINB__OUT_LOW |
15 | delay xx ms | CMD_DELAY_XX_MS |
16 | GPIO A 输出高电平 | CMD_PINA_OUT_HIGH |
17 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
18 | GPIO B 输出低电平 | CMD_PINB_OUT_LOW |
19 | GPIO B_ 输出低电平 | CMD_PINB__OUT_HIGH |
20 | delay xx ms | CMD_DELAY_XX_MS |
- 停止序列
序号 | 功能说明 | 命令字宏定义 |
1 | GPIO A 输出低电平 | CMD_PINA_OUT_LOW |
2 | GPIO A_ 输出低电平 | CMD_PINA__OUT_LOW |
3 | GPIO B 输出低电平 | CMD_PINB_OUT_LOW |
4 | GPIO B_ 输出低电平 | CMD_PINB__OUT_LOW |
- 控制电机流程
可以通过控制MCU的gpio 来输出正向旋转序列、反向旋转序列或停止序列来控制步进电机的正转、反转或者停止,并且可以通过控制正向序列或反向序列之间的延时间隔来控制步进电机的速度。
六、工作原理
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件, 通过GPIO控制脉冲变化从而触发磁场周期性变化,即可牵引转子周期性的变化,而ULN2003A能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲期来处理的数据。
如下是ULN2003内部的框图,1-7是ULN2003的输入段,经过达林顿管的电流放大,9-16进行输出。