PPM 电机驱动模块

简介

这款电机驱动模块是DFRobot最新推出的一款专用于航模遥控的PPM信号电机驱动板,通过该驱动板,可以将航模接收器输出的PPM信号直接转换成驱动电机的PWM信号,从而改变电机的方向及转速。板上设有两个信号接收通道(CH1,CH2)以及两个电机通道(M1,M2),每个信号输入通道都采用标准的50Hz频率的PPM信号,占空比为5%~10%,当摇杆回归到中间时,电机停止转动,上下(或左右)波动摇杆,电机随之正转或反转。 该电机驱动模块的额定输入电压7~12V,允许最高输入电压40V,其单通道持续带载最为3A,允许的峰值电流为6A,如果超过6A,则驱动芯片处于保护状态(处于保护状态时,需要重新给模块上电)。该模块自带LDO电源管理系统,能对外提供5V/200mA的输出电流,因此,可以直接将航模遥控接收器连接到该驱动板上,无需再给接收器额外供电。

特性

技术规格

接口及尺寸图

正面示意图

底面示意图 (底面在电源输入口及电机接口处为用户预留了焊盘,方便用户焊线)

标号
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信号的每个周期内)。

控制信号波形图

注: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商城购买链接