_SKU_DFR0513_PPM_Motor_Driver_Module - jimaobian/DFRobotWikiCn GitHub Wiki

PPM 电机驱动模块

简介

这款电机驱动模块是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信号进行控制。

warning_yellow.png
注:PPM Motor Driver Module提供了5V电源输出,在连接航模遥控器接收机时,不需要外接5V电源。

控制信号

PPM Motor Driver Module电机驱动板采用的控制信号,是航模遥控标准的PPM输出信号,可以直接连接航模遥控接收机。该信号是一个频率为50Hz的PWM信号,滑动遥控器摇杆,该信号的高电平持续时间在1000us~2000us之间变化(持续时间是指PWM信号的每个周期内)。

  • 当控制信号高电平持续时间由1000us向1469us递增时,电机正转,且转速逐渐减弱
  • 当控制信号高电平持续时间由1561us向2000us递增时,电机反转,且转速逐渐增加
  • 当控制信号高电平持续时间在1470us至1560us之间时(即摇杆回归到中心点附近),电机停止转动,且电机驱动端口输出低电平。(由于遥控器可能存在机械误差,故增加了一个中间停止域。)

控制信号波形图

warning_yellow.png
注:PPM Motor Driver Module只提供电机驱动能力,不具备刹车功能。

驱动信号

驱动信号是指PPM Motor Drvier电机驱动板接收到控制信号后,通过STM8S105主控芯片计算,驱动电机转动的信号。该信号是两个频率为1000Hz的PWM信号,分别控制电机的转速和方向。 驱动信号波形图

信号发生器

用Arduino微控制器做一个PWM信号发生器,让其产生一个频率为50Hz,高电平持续时间在1000us~2000us的PWM信号,以作为PPM直流电机驱动模块的控制信号。

/*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 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-2000us递增,电机正转且转速递增*/
    }
  }
}

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-1000us递减,电机反转且转速递增*/
    }
  }
}

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正转*/
    motor_rotation( motor1_pin, 1800);          /*高电平持续时间为1800us,在1500us-2000us范围内,所以电机1正转*/
    motor_rotation( motor2_pin, 1800);          /*高电平持续时间为1800us,在1500us-2000us范围内,所以电机2正转*/
  }

  for(int i =0; i<num;i++){                     /*电机1和2停止*/
    motor_rotation( motor1_pin, 1500);          /*高电平持续时间等于1500us时,电机1停止转动*/
    motor_rotation( motor2_pin, 1500);          /*高电平持续时间等于1500us时,电机2停止转动*/
  }

  for(int i =0; i<num;i++){                     /*电机1和2反转*/
    motor_rotation( motor1_pin, 1200);          /*高电平持续时间为1200us,在1500us-1000us范围内,所以电机1反转*/
    motor_rotation( motor2_pin, 1200);          /*高电平持续时间为1200us,在1500us-1000us范围内,所以电机2反转*/
  }

  for(int i =0; i<num;i++){                     /*电机1和2停止*/
    motor_rotation( motor1_pin, 1500);          /*高电平持续时间等于1500us时,电机1停止转动*/
    motor_rotation( motor2_pin, 1500);          /*高电平持续时间等于1500us时,电机2停止转动*/
  }
}

尺寸图

PPM Motor Driver Module尺寸图

疑难解答

更多问题及有趣的应用,请访问论坛

更多

DFshopping_car1.png DFRobot商城购买链接