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

外观

外观

简介

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

产品参数

  • 驱动部分输入电压:4.8-35V
  • 最大输出电流:单路15A@13.8V
  • 单路峰值电流:20A@13.8V
  • PWM最高输出频率:25KHZ
  • 驱动输出接口:5.08mm间距接线柱
  • 控制接口:4路数字信号(其中2路PWM信号)
  • 驱动形式:双路大功率H桥驱动
  • 尺寸:73x68x14mm
  • 保护功能:
    • 电流隔离功能,保护单片机
    • 双路电流检测诊断功能
    • 短路,过热,过压保护

使用教程
连线图
DRI0018 Diagram

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控制一样。程序代码如下:

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

演示代码:

//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",电机会有相应的动作。

本文整理于DFRobot wiki

标签: Arduino传感器