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

学物联网,来万物简单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] 购买链接

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编程步骤如下: 1. 定义引脚:首先需要定义使用的引脚,包括步进电机的控制引脚和ULN2003A芯片的输入引脚。 2. 定义控制指令:根据步进电机的类型和参数,定义控制指令,包括控制步数、转动方向、转速等信息。这些指令可以通过编写函数或使用现成的库来实现。 3. 初始化引脚:在程序中需要将使用的引脚进行初始化,设置为输入或输出模式,并设置初始状态。 4. 发送控制信号:将控制指令转换为控制信号,通过ULN2003A芯片输出到步进电机上,从而实现步进电机的转动。 5. 循环控制:控制步进电机的转动需要使用循环控制,通过循环不断发送控制信号,使步进电机按照预定的步数和方向进行转动。 以下是一个简单的ULN2003A步进电机控制程序的示例代码: ``` #define IN1 2 #define IN2 3 #define IN3 4 #define IN4 5 void setup() { // 初始化引脚 pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void loop() { // 正转 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); delay(10); // 反转 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); delay(10); } ``` 这段代码实现了步进电机的正转和反转,通过控制引脚的电平来实现步进电机的转动。具体控制方式和参数需要根据步进电机的具体型号进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值