ULN2003 步进电机驱动板常用于驱动 5V/12V 单极性五线四相步进电机(如 28BYJ-48),其核心芯片为高耐压、大电流的达林顿晶体管阵列。

驱动芯片:ULN2003AN(内置 7 组达林顿管及续流保护二极管)
逻辑电平:3.3V ~ 5V
供电电压:DC 5V ~ 12V
输出电流:最大 500mA(持续工作建议不超过 200~300mA)
IO输入端 :(IN1 ~ IN4):连接单片机 GPIO 引脚。输入高电平 (HIGH) 时,对应通道输出导通接地(灌电流导通),对应线圈通电,LED 点亮;输入低电平 (LOW) 时,通道截止。
电机插座:(XH-5P):防呆插座,对应 28BYJ-48 五线接口(红线为公共端 VCC,其余四线分别对应 A/B/C/D 相线圈)
电源接口:+接驱动电源正极(5V~12V),-接系统电源地(GND必须与单片机共地)
跳线帽: (5-12V 开关):板载跳线帽用于控制是否给电机总线接入电源,拔下即可切断电机动力电
ULN2003 为低电平有效输出(集电极开路灌电流结构):
单片机引脚输出 1 (高电平)→ULN2003 内部达林顿管导通→电机对应相线圈下拉接地形成回路→线圈通电
单片机引脚输出 0 (低电平) →达林顿管截止→线圈断电
芯片内部集成了续流二极管 (Flyback Diode),用于吸收电机线圈断电时产生的反向感应电动势,保护单片机与驱动芯片。
| 本次以树莓派Pico主板为例,按下图接好连接线,驱动板接树莓派VBUS-5V供电,务必注意不可接反否则会烧毁设备 |
驱动板+ → 树莓派VBUS
驱动板- → 树莓派GND
驱动板IN1 → 树莓派GP1
驱动板IN2 → 树莓派GP2
驱动板IN3 → 树莓派GP3
驱动板IN4 → 树莓派GP4

| ULN2003 下载这个源代码直接上传到树莓派Pico文件内,点击运行程序后步进电机正转一圈反转一圈(如下图) |

转动圈数换算:常见的 28BYJ-48 步进电机减速比约为 64:1,采用 8 拍驱动时,旋转 360° 对应 4096 步。
速度调节:通过修改 delay 参数调节转速。延时过小(如小于 0.0008s)可能导致电机失步堵转。
停机释放:电机静止时线圈仍会持续通电锁死发热,闲置时调用 stop_motor() 可彻底断电降温。
| 本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁设备 |
驱动板+ → 开发板5V
驱动板- → 开发板GND
驱动板IN1 → 开发板GPIO6
驱动板IN2 → 开发板GPIO7
驱动板IN3 → 开发板GPIO15
驱动板IN4 → 开发板GPIO16

| ULN2003下载这个源代码直接用Arduino IDE编译上传程序,在查看步进电机一直正转一圈反转一圈(如下图) |

1. 步进序列与分辨率 (stepSequence 与 4096 步)
代码采用 8 拍半步(Half-step) 序列驱动:A -> AB -> B -> BC -> C -> CD -> D -> DA,相比 4 拍转动更平滑且扭矩更大。28BYJ-48 电机内部转子单圈需 64 拍,加上约 64:1 的减速齿轮箱,输出轴转满 1 圈需要 64x64 = 4096步。
2. 核心转动控制 (rotateSteps)
方向切换:通过 dir 布尔值决定读取步序数组的正向 i % 8 或反向 7 - (i % 8),实现顺时针与逆时针转动。
速度调节:每走一步调用 delayMicroseconds(stepDelayUs)。延时决定转速,通常设置在 1000 ~2000之间,延时过小会导致电机失步堵转。
3. 发热防护 (stopMotor)
ULN2003 在引脚保持高电平时会持续给线圈供电锁死转子,导致电机和驱动板迅速发热。
在每次转动结束后将 4 个 GPIO 全部拉低(LOW),切断线圈电流以保护硬件。
4. 主循环逻辑 (loop)
顺时针转动 4096 步(1 圈) ->调用 stopMotor() 断电并等待 1 秒。
逆时针转动 4096 步(1 圈) ->调用 stopMotor() 断电并等待 1 秒,以此往复循环。