Motor Control Shield
| ||||||||||||||||||||
| ||||||||||||||||||||
说明
产品概述
本产品是基于 Arduino/ NUCLEO 的点击驱动扩展板,板载双桥驱动芯片 L293D,能够同时驱动四路直流电机或两路步进电机。
提供 Arduino 和 STM32 控制例程
产品特性
- 可同时驱动四路直流电机或两路步进电机
- 电机驱动电源可通过调休配置为 5V 或可调电源
- o 使用 5V 电源驱动电机时,可同时驱动 4 路 5V 直流电机
- o 使用可调电源驱动电机时,可同时驱动两路 1.25V-6.45V 直流电机
- 采用双桥驱动芯片 L293D
- o 该芯片可同时驱动两路直流电机或一路步进电机
- o 4 路 H 桥,每路 H 桥输出电流为 600mA,峰值电流可达 1.2A
- o 自带 ESD 保护
接口说明
引脚 | 功能 |
M1A | 直流电机/步进电机控制脚 |
M1B | |
M2A | |
M2B | |
M3A | |
M3B | |
M4A | |
M4B | |
M1EN | M1A, M1B 使能控制 |
M2EN | M2A, M2B 使能控制 |
M3EN | M3A, M3B 使能控制 |
M4EN | M4A, M4B 使能控制 |
STM32使用教程
我们提供的例程是基于STM32F103RBT6,提供的连接方式是对应的STM32F103RBT6的引脚为例,如果有需要使用其他STM32,请按实际引脚连接
硬件连接
Motor | STM32 | 直流电机 | 步进电机 |
M1A | PA10 | 直流电机 1 | 步进电机 1 |
M1B | PB3 | ||
M2A | PB5 | 直流电机 2 | |
M2B | PB4 | ||
M3A | PA8 | 直流电机 3 | 步进电机 2 |
M3B | PA9 | ||
M4A | PA6 | 直流电机 4 | |
M4B | PA5 | ||
M1EN | PB10 | M1A, M1B 使能控制 | |
M2EN | PC7 | M2A, M2B 使能控制 | |
M3EN | PB6 | M3A, M3B 使能控制 | |
M4EN | PA7 | M4A, M4B 使能控制 |
软件说明
例程是基于HAL库进行开发的。
请在资料里面下载程序,找到XNUCLEO-F103RB程序文件目录,打开Motor_Control_Shield_Code\XNUCLEO-F103RB
直流电机
- 打开DC_Motor/MDK-ARM/DC_Motor.uvprojx文件
- 编译下载即可
现象
四路直流电机同时旋转。
步进电机
- 打开Stepper_Motor/MDK-ARM/Stepper_Motor.uvprojx文件
- 编译下载即可
现象
两路步进电机依次旋转一周。
Arduino使用教程
本例程已经在Arduino uno上测试通过,直接按下表连接Arduino uno即可
硬件连接
Motor | Arduino | 直流电机 | 步进电机 |
M1A | D2 | 直流电机 1 | 步进电机 1 |
M1B | D3 | ||
M2A | D4 | 直流电机 2 | |
M2B | D5 | ||
M3A | D7 | 直流电机 3 | 步进电机 2 |
M3B | D8 | ||
M4A | D12 | 直流电机 4 | |
M4B | D13 | ||
M1EN | D6 | M1A, M1B 使能控制 | |
M2EN | D9 | M2A, M2B 使能控制 | |
M3EN | D10 | M3A, M3B 使能控制 | |
M4EN | D11 | M4A, M4B 使能控制 |
安装编译软件(Windows教程)
运行程序
在我们提供的资料里面下载程序,并解压,再进入Motor_Control_Shield_Code/Arduino目录下
直流电机
- 对于直流电机而言:M1EN、M2EN、M3EN、M4EN 接至了 Arduino 的 D6、D9、D10、D11,
这些引脚具有 PWM 功能,因此控制 PWM 的占空比可以控制直流电机的转速。
- analogWrite(uint8_t pin, int value)为写模拟引脚函数,对于参数 value 而言当设置为 0 时,输出
低电平,设置为 255 时输出占空比为 100%的高电平。
- 打开DC_Motor/DC_Motor.ino,选择Arduino型号跟端口好,再进行编译下载。
- 以一个直流电机为例:设置管脚为输出状态,然后配置初始状态,D12 管脚设置为低电
平,D13 设置为高电平(当然这两个管脚可以反过来,那么电机转动方向也将改变),D11 输 出高电平使能 L293 驱动芯片。
- 在 loop()函数中设置 D11 的 PWM 占空比为 50%(value = 128 即 50%),也就间接的控制了电机转
动速度。
现象
四路直流电机同时旋转。
步进电机
- 以 28BYJ-48 步进电机为例 : 该电机是一个五线四相八拍电机。
- 因为使用的为 M1A、M1B、M2A、M2B 来模拟时序控制,因此需要控制 M1EN、M2EN 为高电
平使能 L293 芯片。
- 查阅 28BYJ-48 相关资料可以发现如下这样的两个表格:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
P1-红 | VCC | VCC | VCC | VCC | VCC | VCC | VCC | VCC |
P2-橙 | GND | GND | GND | |||||
P3-黄 | GND | GND | GND | |||||
P4-粉 | GND | GND | GND | |||||
P5-蓝 | GND | GND | GND |
供电电压 | 相数 | 相电阻Ω | 步进角度 | 减速比 | 启动频率P.P.S | 转矩g.cm | 噪声dB | 绝缘介电强度 |
5V | 4 | 50±10% | 5.625/64 | 1:64 | ≥550 | ≥200 | ≤35 | 600VAC |
- 第一个表说明了电机的四相八拍是如何控制的:
- 四相分别是 A,B,C,D,若要使 A 相导通则需要控制橙线接地,即控制 M1A 低电平。
- 类似的控制其他几个引脚,如果把四个控制引脚看作成 4 位 bit 连续数据,那么用 8 个字节即可
表示这组逻辑的控制(橙线为最低位):
Char BeatCode[8] = { //Stepper motor eight eight beat code 0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06 };
- 第二个表说明了控制的频率:
- 可以看到步进电机的启动频率,步进电机在空载情况下能够正常启动的最高脉冲频率,如果脉
冲频率高于该值,电机就不能正常启动。给出的参数是≥550,单位是 P.P.S,即每秒脉冲数,
这里的意思就是说:电机保证在你每秒给出 550 个步进脉冲的情况下,可以正常启动。那么
换算成单节拍持续时间就是 1s/550=1.8ms,那么每个节拍的间隔大于该值即可转动,不过延时
越久,电机转动一步所用的时间将会变长。
- 得到了上述信息即可以转动步进电机,但无法精确控制,28BYJ-48 是减速电机,其内部有四级
减速,减速比为 1:64,转子转 64 圈,最终输出轴才会转一圈,也就是需要 64*64=4096 个
节拍输出轴才转过一圈,如果每步 2ms,那么 2ms*4096=8192ms,需要 8 秒多才能够转一圈。
但是实际上硬件上的减速比不一定符合标称值,这里采取经验值:4076 个节拍,实际误差万分
之 0.56。
- 打开Stepper_Motor/Stepper_Motor.ino选择Arduino型号跟端口好,再进行编译下载。
现象
两路步进电机同时旋转。
FAQ
- 发烫属于正常现象。
- 因为可调稳压芯片使用的是AMS1117-ADJ,它的最大输出电流是800MA,对于一般的小功率电机,每个大概需要300MA的电流,功率达不到,此时可选择使用5V的电源供电。
IN1 为高电平, IN2为低电平,电机正转
IN1 为低电平, IN2为高电平,电机反转
PWM为电机速度控制
如果IN1和IN2同时为高电平或底电平,电机不转
正反转取决于电机的实际接法