L298P-Twin 2x2A电机驱动Arduino扩展板

外观

外观

简介

  • 这是一款基于L298芯片的Arduino平台双路电机驱动扩展板,可以直接插入Arudino控制板使用。
  • 控制端口为4个,减少了对Arduino数字端口的开销,而且控制程序也更为简单。
  • 扩展板采用跳线选择Arduino VIN供电还是外接电源供电。

产品参数

  • 驱动工作电压:4.8 ~ 35V
  • 最大输出电流:单路2A
  • 最大耗散功率:25W(T=75℃)
  • 驱动形式:双路H桥驱动
  • 驱动电源接口:一路外部电源端子 / Arduino-VIN
  • 驱动输出接口:两路电机接线端子 / 排针
  • Arduino控制端口:数字口10,11,12,13
  • 工作温度:-25℃ ~ 130℃
  • 模块尺寸:56x57mm

应用

  • 电动小车

引脚说明

DRI0017 pinout cn.png

  • 驱动电源选择跳线:用于选择驱动电源,一路是外部驱动电源(PWMIN),一路是来自于母板(比如使用Arduino UNO)的VIN;根据驱动电机的电压和电流要求选择使用。默认是选择VIN,即图示的方式。

注意:这里的两组跳线是并联的,两个跳线帽需要同步使用以满足大电流通过的要求。

  • 外部电源端子(PWMIN):用于连接外部电源给驱动供电。

  • 驱动输出接口:用于连接2路直流电机;提供接线端子和排针两种连接方式,接线端子(M1- M1+ M2- M2+)和排针(1 2 3 4)相对应,根据实际情况选择使用。

  • 模拟3PIN接口:用于连接3PIN接口的传感器、执行器等模块。 注意:这里线序是(+ - S)。

  • Mn指示灯:Mn+为正时红色灯亮,反之绿色灯亮,用于调试。注意:电机工作时有反电动势,因此存在两个灯同时亮的情况。

  • 控制端口:用于控制电机的转速和方向。在模块上印刷有“控制表”方便查看端口功能,其中En用于控制电机转速(PWM调速),Mn用于控制电机旋转方向。控制端口的真值表为:

En Mn 状态
L X Mn禁止
H L Mn正转(Mn+为正)
H H Mn反转(Mn+为负)

注1:n=1,2。 注2:H表示高电平1;L表示低电平0;X表示任意电平。

使用教程

控制直流电机

目标:对直流电机进行调速和方向控制
步骤一:硬件清单

  • UNO 1
  • 直流电机 2
  • 稳压电源 1
  • 本模块 1
  • 导线

步骤二:软件清单

  • Arduino IDE

步骤三:连线图

DRI0017 MotorConnect.png

步骤四:操作步骤

  • 打开Arduino IDE
  • 将下面的代码上传到UNO
  • 库安装
/**set control port**/
 const int E1Pin = 10;   
 const int M1Pin = 12;
 const int E2Pin = 11;                         
 const int M2Pin = 13; 

 /**inner definition**/
 typedef struct
 {
    byte enPin;
    byte directionPin;
 }MotorContrl;

 const int M1 = 0;
 const int M2 = 1;
 const int MotorNum = 2;

 const MotorContrl MotorPin[] ={ {E1Pin,M1Pin}, {E2Pin,M2Pin} } ; 

 const int Forward = LOW;
 const int Backward = HIGH;

 /**program**/
 void setup() 
 { 
   initMotor();
 } 
 void loop() 
 { 
   int value;
   /**test M1 **/
   setMotorDirection( M1, Forward );
   setMotorSpeed( M1, 100 );
   delay(1000);
   setMotorSpeed( M1, 0 );
   delay(100);
   
   setMotorDirection( M1, Backward );
   setMotorSpeed( M1, 50 );
   delay(1000);
   setMotorSpeed( M1, 0 );
   delay(100);   
   
   /**test M2**/
   setMotorDirection( M2, Backward );  
   for(value = 0 ; value <= 100; value+=5) 
   { 
     setMotorSpeed( M2, value );
     delay(100); 
   }  
   setMotorSpeed( M2, 0 );
   setMotorDirection( M2, Forward );  
   for(value = 0 ; value <= 100; value+=5) 
   { 
     setMotorSpeed( M2, value );
     delay(100); 
   }
   setMotorSpeed( M2, 0 );   
 }

 /**functions**/
 void initMotor( )
 {
    int i;
    for ( i = 0; i < MotorNum; i++ )
    {
      digitalWrite(MotorPin[i].enPin, LOW);   
      
      pinMode(MotorPin[i].enPin, OUTPUT);   
      pinMode(MotorPin[i].directionPin, OUTPUT);   
    }
 }
 
 /**  motorNumber: M1, M2
        direction:          Forward, Backward **/
 void setMotorDirection( int motorNumber, int direction )
 {
     digitalWrite( MotorPin[motorNumber].directionPin, direction);   
 }

 /** speed:  0-100   * */
 inline void setMotorSpeed( int motorNumber, int speed )
 {     
     analogWrite(MotorPin[motorNumber].enPin, 255.0 * (speed/100.0) );   //PWM
 }

步骤五:实验结果

M1将全速正转,然后半速反转; M2速度由大到小,先反转,然后正转。

注意:电机的旋转方向是相对的,其转速大小也是相对的。

本文整理于 DFRobot wiki

标签: Arduino传感器