简介
这款电机驱动模块是DFRobot最新推出的一款专用于航模遥控的PPM信号电机驱动板,通过该驱动板,可以将航模接收器输出的PPM信号直接转换成驱动电机的PWM信号,从而改变电机的方向及转速。板上设有两个信号接收通道(CH1,CH2)以及两个电机通道(M1,M2),每个信号输入通道都采用标准的50Hz频率的PPM信号,占空比为5%~10%,当摇杆回归到中间时,电机停止转动,上下(或左右)波动摇杆,电机随之正转或反转。
该电机驱动模块的额定输入电压7~12V,允许最高输入电压40V,其单通道持续带载最为3A,允许的峰值电流为6A,如果超过6A,则驱动芯片处于保护状态(处于保护状态时,需要重新给模块上电)。该模块自带LDO电源管理系统,能对外提供5V/200mA的输出电流,因此,可以直接将航模遥控接收器连接到该驱动板上,无需再给接收器额外供电。
特性
- 2路独立电机驱动
- PPM信号控制,兼容舵机控制信号
- 专为航模和格斗机器人设计
- 支持专业航模遥控器控制
- 7~12V宽电压输入
- 自带过载保护
技术规格
- 输入电压:7~12V
- 逻辑电源:5V(兼容3.3V控制器)
- 主控芯片:STM8S105
- 驱动芯片:TLE5205
- 驱动信号:
- 1000~1469us 正转递减
- 1470~1560us 停止域
- 1561~2000us 反转递增
- 3A电流持续驱动能力
- 6A峰值电流保护
- 支持独立两通道电机驱动
- 规格尺寸:90mm×30mm
- 重量:35 g
接口及尺寸图
标号 |
---|
DC:7-12V端 "+ " |
DC:7-12V端 "-" |
M1 |
M2 |
CH1 |
CH2 |
使用教程
控制信号输入
PPM Motor Driver Module电机驱动板支持2路独立直流电机驱动,驱动信号从CH1和CH2输入,分别对应M1和M2电机驱动输出。CH1、CH2可直接与航模遥控器的接收机相连(如FS-IA6B航模遥控器),也可以通过Arduino控制器输出PPM信号进行控制。
注:PPM Motor Driver Module提供了5V电源输出,在连接航模遥控器接收机时,不需要外接5V电源。
控制信号
PPM Motor Driver Module电机驱动板采用的控制信号,是航模遥控标准的PPM输出信号,可以直接连接航模遥控接收机。该信号是一个频率为50Hz的PWM信号,滑动遥控器摇杆,该信号的高电平持续时间在1000us~2000us之间变化(持续时间是指PWM信号的每个周期内)。
- 当控制信号高电平持续时间由1000us向1469us递增时,电机正转,且转速逐渐减弱;
- 当控制信号高电平持续时间由1561us向2000us递增时,电机反转,且转速逐渐增加;
- 当控制信号高电平持续时间在1470us至1560us之间时(即摇杆回归到中心点附近),电机停止转动,且电机驱动端口输出低电平。(由于遥控器可能存在机械误差,故增加了一个中间停止域。)
注:PPM Motor Driver Module只提供电机驱动能力,不具备刹车功能。
驱动信号
驱动信号是指PPM Motor Drvier电机驱动板接收到控制信号后,通过STM8S105主控芯片计算,驱动电机转动的信号。该信号是两个频率为1000Hz的PWM信号,分别控制电机的转速和方向。
信号发生器
用Arduino微控制器做一个PWM信号发生器,让其产生一个频率为50Hz,高电平持续时间在1000us~2000us的PWM信号,以作为PPM直流电机驱动模块的控制信号。
- 硬件
- Arduino UNO 微型控制器
- USB cable线
- PPM Motor Driver Module
- 杜邦线 若干
- 软件
- Arduino IDE V1.8.5 点击下载Arduino IDE;
- 样例代码
/*PPM的输出信号是一个50HZ的PWM信号,所以每个控制信号要保证为20ms
* 所以每个控制信号里的delayMicroseconds的和要为20ms
* 电机会根据每个控制信号的高电平持续时间来决定转速、正转、反转、停止。
* 高电平持续时间为1500us时停止转动
* 高电平持续时间由1500us向2000us递增时,电机反转且转速增
* 高电平持续时间由1500us向1000us递减时,电机正转且转速增
* delayMicroseconds()由于20ms会溢出,里面的值最好不超过16000,故将其延时两次以达到20ms的PWM周期
*/
uint8_t motor1_pin=3; /*设置电机1的控制引脚*/
uint8_t motor2_pin=5; /*设置电机2的控制引脚*/
int num = 50;
void motor_rotation(uint8_t pin,int t) /*电机转动*/
{
digitalWrite(pin,HIGH);
delayMicroseconds(t);
digitalWrite(pin,LOW);
delayMicroseconds(10000);
delayMicroseconds(10000-t);
}
void all_motor_rotation(uint8_t pin0, uint8_t pin1, int t) /*两路电机以相同速度和方向转动*/
{
digitalWrite(pin0,HIGH);
digitalWrite(pin1,HIGH);
delayMicroseconds(t);
digitalWrite(pin0,LOW);
digitalWrite(pin1,LOW);
delayMicroseconds(10000);
delayMicroseconds(10000-t);
}
void motor_forward_acc(uint8_t pin) { /*电机正转加速*/
for(int i = 0; i<10; i++) {
for(int j = 0; j<num; j++) {
motor_rotation( pin, 1500-i*50); /*高电平持续时间为由1500-1000us递减,电机正转且转速递增*/
}
}
}
void motor_reversal_acc(uint8_t pin) { /*电机反转加速*/
for(int i = 0; i<10; i++) {
for(int j = 0; j<num; j++) {
motor_rotation( pin, 1500+i*50); /*高电平持续时间为由1500-2000us递增,电机反转且转速递增*/
}
}
}
void setup()
{
pinMode(motor1_pin,OUTPUT);
pinMode(motor2_pin,OUTPUT);
}
void loop()
{
//motor_forward_acc(motor1_pin); /*电机1正转加速*/
//motor_forward_acc(motor2_pin); /*电机2正转加速*/
//motor_reversal_acc(motor1_pin); /*电机1反转加速*/
//motor_reversal_acc(motor2_pin); /*电机2反转加速*/
for(int i =0; i<num; i++) { /*电机1反转*/
motor_rotation( motor1_pin, 1800); /*高电平持续时间为1800us,在1500us-2000us范围内,所以电机1反转*/
}
for(int i =0; i<num; i++) { /*电机1停止*/
motor_rotation(motor1_pin, 1500); /*高电平持续时间等于1500us时,电机1停止转动*/
}
for(int i =0; i<num; i++) { /*电机1正转*/
motor_rotation( motor1_pin, 1200); /*高电平持续时间为1200us,在1500us-1000us范围内,所以电机1正转*/
}
for(int i =0; i<num; i++) { /*电机1停止*/
motor_rotation( motor1_pin, 1500); /*高电平持续时间等于1500us时,电机1停止转动*/
}
for(int i =0; i<num; i++) { /*电机2反转*/
motor_rotation( motor2_pin, 1800); /*高电平持续时间为1800us,在1500us-2000us范围内,所以电机2反转*/
}
for(int i =0; i<num; i++) { /*电机2停止*/
motor_rotation( motor2_pin, 1500); /*高电平持续时间等于1500us时,电机2停止转动*/
}
for(int i =0; i<num; i++) { /*电机2正转*/
motor_rotation( motor2_pin, 1200); /*高电平持续时间为1200us,在1500us-1000us范围内,所以电机2正转*/
}
for(int i =0; i<num; i++) { /*电机2停止*/
motor_rotation( motor2_pin, 1500); /*高电平持续时间等于1500us时,电机2停止转动*/
}
for(int i =0; i<num; i++) { /*电机1和2反转*/
all_motor_rotation(motor1_pin, motor2_pin, 1800);/*高电平持续时间为1800us,在1500us-2000us范围内,所以电机1和2反转*/
}
for(int i =0; i<num; i++) { /*电机1和2停止*/
all_motor_rotation(motor1_pin, motor2_pin, 1500);/*高电平持续时间等于1500us时,电机1和2停止转动*/
}
for(int i =0; i<num; i++) { /*电机1和2正转*/
all_motor_rotation(motor1_pin, motor2_pin, 1200);/*高电平持续时间为1200us,在1500us-1000us范围内,所以电机1和2正转*/
}
for(int i =0; i<num; i++) { /*电机1和2停止*/
all_motor_rotation(motor1_pin, motor2_pin, 1500);/*高电平持续时间等于1500us时,电机1和2停止转动*/
}
}
尺寸图
疑难解答
更多问题及有趣的应用,请访问论坛