IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【HaaS Python硬件积木】ULN2003A步进电机驱动 -> 正文阅读

[嵌入式]【HaaS Python硬件积木】ULN2003A步进电机驱动

一、产品简介

ULN2003A,是一种高压大电流的共发射极达林顿晶体管数组集成电路,内含7组达林顿对管,每组对管的电流容量是500mA,输出的电压最高50V。该集成电路还集成了7只共阴极形式连接的续流二极管,用于电感性负载的开关动作的电流续流,本驱动是通过ULN2003A控制5线4相步进电机。

引脚定义

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

二、技术参数

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

三、软件接口

ULN2003A步进电机驱动HaaS Python驱动:下载地址

ULN2003(A, A_, B, B_) - 创建ULN2003驱动对象

  • 函数原型:

motorObj = ULN2003(a, a_, b, b_)

  • 参数说明:
参数类型必选参数?说明
aGPIO调用此函数前需确保a对象已经处于open状态
a_GPIO调用此函数前需确保a_对象已经处于open状态
bGPIO调用此函数前需确保b对象已经处于open状态
b_GPIO调用此函数前需确保b_对象已经处于open状态
  • 返回值: 创建对象成功,返回ULN2003对象;ULN2003A对象创建失败,抛出Exception
  • 示例代码:
from uln2003 import *                        # ULN2003驱动库
A = GPIO()
A.open("uln2003_a")
A_ = GPIO()
A_.open("uln2003_a_")
B = GPIO()
B.open("uln2003_b")
B_ = GPIO()
B_.open("uln2003_b_")
motorDev = 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 uln2003 import *                    # MQ3温湿度传感器驱动库
A = GPIO()
A.open("uln2003_a")
A_ = GPIO()
A_.open("uln2003_a_")
B = GPIO()
B.open("uln2003_b")
B_ = GPIO()
B_.open("uln2003_b_")
motorDev = ULN2003(A, A_, B, B_)
while 1:
    motorDev.motorCw()
  • 输出: 无

四、接口案例

此使用实例在board.json中定义了名为uln2003的gpio数据类型,并控制步进电机正向旋转。

  • 代码:
# board.json配置:
{
    "name": "board-name",
    "version": "1.0.0",
    "io": {
      "uln2003_a": {
        "type": "GPIO",
        "port": 19,
        "dir": "output",
        "pull": "pullup"
      },
      "uln2003_a_": {
        "type": "GPIO",
        "port": 27,
        "dir": "output",
        "pull": "pullup"
      },
      "uln2003_b": {
        "type": "GPIO",
        "port": 0,
        "dir": "output",
        "pull": "pullup"
      },
      "uln2003_b_": {
        "type": "GPIO",
        "port": 2,
        "dir": "output",
        "pull": "pullup"
      }
    },
    "debugLevel": "ERROR",
    "repl": "disable"
}
# Python代码
print("Testing uln2003  ...")
A = GPIO()
A.open("uln2003_a")
A_ = GPIO()
A_.open("uln2003_a_")
B = GPIO()
B.open("uln2003_b")
B_ = GPIO()
B_.open("uln2003_b_")
motorDev = ULN2003(A, A_, B, B_)
while 1:
    motorDev.motorCw()
A.close()
A_.close()
B.close()
B_.close()
del motorDev
print("Test uln2003 done!")
  • 输出: 无

五、通信协议

主控芯片通过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进行输出。

参考文献及购买链接

[1] ULN2003A驱动器

[2] 购买链接

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:49:03  更:2022-05-18 17:50:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:31:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码