首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

ULN2003减速步进电机28BYJ-48五线四相Python/C++编程树莓派与ESP32例程

  15 
 0
 0
RASPI   ydxhuo.com 
文章主图

一:UNL2003驱动板介绍

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

Image

1.技术参数

驱动芯片: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 开关):板载跳线帽用于控制是否给电机总线接入电源,拔下即可切断电机动力电

2.工作逻辑

ULN2003 为低电平有效输出(集电极开路灌电流结构):

单片机引脚输出 1 (高电平)ULN2003 内部达林顿管导通电机对应相线圈下拉接地形成回路线圈通电

单片机引脚输出 0 (低电平)  达林顿管截止线圈断电

芯片内部集成了续流二极管 (Flyback Diode),用于吸收电机线圈断电时产生的反向感应电动势,保护单片机与驱动芯片。


二:树莓派例程

1.树莓派Pico接线图

本次以树莓派Pico主板为例,按下图接好连接线,驱动板接树莓派VBUS-5V供电,务必注意不可接反否则会烧毁设备

驱动板+ → 树莓派VBUS

驱动板-  → 树莓派GND

驱动板IN1 → 树莓派GP1

驱动板IN2 → 树莓派GP2

驱动板IN3 → 树莓派GP3

驱动板IN4 → 树莓派GP4

Image


2.Python程序

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


Image


3.重要说明

转动圈数换算:常见的 28BYJ-48 步进电机减速比约为 64:1,采用 8 拍驱动时,旋转 360° 对应 4096 步。


速度调节:通过修改 delay 参数调节转速。延时过小(如小于 0.0008s)可能导致电机失步堵转。


停机释放:电机静止时线圈仍会持续通电锁死发热,闲置时调用 stop_motor() 可彻底断电降温。


三:ESP32例程

1.ESP32接线图

本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁设备

驱动板+ 开发板5V

驱动板-  → 开发板GND

驱动板IN1 → 开发板GPIO6

驱动板IN2 → 开发板GPIO7

驱动板IN3 → 开发板GPIO15

驱动板IN4 → 开发板GPIO16

Image


2.C++程序

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


Image



3.代码解析

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 秒,以此往复循环。


作者签名: www.ydxhuo.com   楼主  2026-08-15 22:10:48
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 10.1.94.54 , 2026-08-16 18:32:09
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(0) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏