模板: Motor Control Shield for Arduino use
来自Waveshare Wiki
本例程已经在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型号跟端口好,再进行编译下载。
现象
两路步进电机同时旋转。