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 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停止转动*/
            }
    }

尺寸图

PPM Motor Driver Module尺寸图

疑难解答

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

更多

DFshopping_car1.png DFRobot商城购买链接