双路15A大功率电机驱动 - Lite

简介

该大功率电机驱动模块除了可用于4WD移动机器人平台,战斗机器人,智能车竞赛等场合还可用于驱动水泵,电风扇,传送带等。有了它,您可以搭建很多与电机相关的项目。该模块采用了4块高性能大电流的驱动芯片BTS7960,具有短路过温过压保护功能。只需4个数字IO口便可同时控制2路电机运转。经实测单路最大输出电流可达15A@13.8V,响应性好,制动性能强。同时两路电机都具有正反转指示灯,方便您在不接电机的情况下进行调试。该大功率电机驱动模块直接兼容Arduino。

产品参数

使用教程

连线图


LA_IS,LB_IS,RA_IS和RB_IS这几个引脚是用于电流检测的。正常情况下,IS引脚输出是一个低电平。非正常情况下,输出的高电平。下面的样例代码会详细指出如何操作。

样例代码

PWM 模式

    /*
     # 这个样例代码用来测试DC Motor Driver 2x15A_lite module.

     # Editor : Phoebe
     # Date   : 2012.11.6
     # Ver    : 0.1
     # Product: DC Motor Driver 2x15A_lite
     # SKU    : DRI0018

     # 描述:
     # 用DC Motor Driver module驱动2个电机

     # 硬件:
     1. Arduino UNO
     2. DC Motor Driver 2x15A_lite
     3. DC motors x2

     步骤:
     1.M1_PWM & M2_PWM --> digital 5 & 6
     2.M1_EN & M2_EN --> digital 4 & 7
     3.+5V --> 5V
     4.GND --> GND

     下面代码中注释掉的部分是用来电流检测的,如需检测连接:
     1.LA_IS 和 RA_IS 同时连接 数字口2
     2.LB_IS 和 RB_IS 同时连接 数字口3
     */

    int E1 = 5;     //M1 速度控制
    int E2 = 6;     //M2 速度控制
    int M1 = 4;     //M1 方向控制
    int M2 = 7;     //M1 方向控制
    int counter=0;

    void stop(void)
    {                   //停止
      digitalWrite(E1,0);
      digitalWrite(M1,LOW);
      digitalWrite(E2,0);
      digitalWrite(M2,LOW);
    }
    void advance(char a,char b)          //前进
    {
      analogWrite (E1,a);      //PWM 速度控制
      digitalWrite(M1,HIGH);
      analogWrite (E2,b);
      digitalWrite(M2,HIGH);
    }
    void back_off (char a,char b)          //后退
    {
      analogWrite (E1,a);
      digitalWrite(M1,LOW);
      analogWrite (E2,b);
      digitalWrite(M2,LOW);
    }
    void turn_L (char a,char b)             //左转
    {
      analogWrite (E1,a);
      digitalWrite(M1,LOW);
      analogWrite (E2,b);
      digitalWrite(M2,HIGH);
    }
    void turn_R (char a,char b)             //右转
    {
      analogWrite (E1,a);
      digitalWrite(M1,HIGH);
      analogWrite (E2,b);
      digitalWrite(M2,LOW);
    }

    void current_sense()                  // 电流检测
    {
      int val1=digitalRead(2);
      int val2=digitalRead(3);
      if(val1==HIGH || val2==HIGH){
        counter++;
        if(counter==3){
          counter=0;
          Serial.println("Warning");
        }
      }
    }

    void setup(void)
    {
      int i;
      for(i=4;i<=7;i++)
        pinMode(i, OUTPUT);
      Serial.begin(19200);      //Set Baud Rate设置波特率
      Serial.println("Run keyboard control");
      digitalWrite(E1,LOW);
      digitalWrite(E2,LOW);
    }

    void loop(void)
    {
      /*
      static unsigned long timePoint = 0;    // 如需电流检测,不要忘记引脚连接
       if(millis() - timePoint > 1000){
       current_sense();
       timePoint = millis();
       }
       */
      if(Serial.available()){
        char val = Serial.read();
        if(val != -1)
        {
          switch(val)
          {
          case 'w'://Move Forward
         advance (255,255);       //以最大速度前进
            break;
          case 's'://Move Backward
            back_off (255,255);   //以最大速度后退
            break;
          case 'a'://Turn Left
            turn_L (100,100);
            break;
          case 'd'://Turn Right
            turn_R (100,100);
            break;
          case 'z':
            Serial.println("Hello");
            break;
          case 'x':
            stop();
            break;
          }
        }
        else stop();
      }

    }

PLL控制模式

PLL模式

DRI0018电机驱动也支持PLL相位锁相环控制模式。电机连线与PWM控制一样。程序代码如下:

引脚 功能
4 电机1启用控制
5 电机1方向控制
6 电机2方向控制
7 电机2启用控制

"PLL模式"

演示代码:

//Standard DLL Speed control

int E1 = 4;     //M1 Speed Control
int E2 = 7;     //M2 Speed Control
int M1 = 5;    //M1 Direction Control
int M2 = 6;    //M1 Direction Control

//When m1p/m2p is 127, it stops the motor
//when m1p/m2p is 255, it gives the maximum speed for one direction
//When m1p/m2p is 0, it gives the maximum speed for reverse direction

void DriveMotorP(byte m1p, byte m2p)//Drive Motor Power Mode
{

  digitalWrite(E1, HIGH);
  analogWrite(M1, (m1p));

  digitalWrite(E2, HIGH);
  analogWrite(M2, (m2p));

}

void setup(void) {
  int i;
  for(i=4;i<=7;i++)
    pinMode(i, OUTPUT);
  Serial.begin(19200);      //Set Baud Rate
}

void loop(void) {
  if(Serial.available()){
    char val = Serial.read();
    if(val!=-1){
      switch(val){
      case 'w'://Move Forward
        DriveMotorP(0xff,0xff); // Max speed
        break;
      case 'x'://Move Backward
        DriveMotorP(0x00,0x00);
        ; // Max speed
        break;
      case 's'://Stop
        DriveMotorP(0x7f,0x7f);
        break;
      }
    }
  }
}

程序功能:串口输入"w","x","s",电机会有相应的动作。

疑难解答

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

更多

DFshopping_car1.png 购买 DFRobot商城购买链接