欢迎光临
我们一直在努力

L298N电机驱动板 示例教程 适用于Arduino平台

1. 产品图片

2. 产品购买地址点我购买

3. 产品概述
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。

4. 产品参数
驱动芯片:全新L298N双H桥直流电机驱动芯片
驱动部分端子供电范围Vs:+5V~+35V ;如需要板内取电,则供电范围Vs:+7V~+35V
驱动部分峰值电流Io:2A
逻辑部分端子供电范围Vss:+5V~+7V(可板内取电+5V)
逻辑部分工作电流范围:0~36mA
控制信号输入电压范围:低电平:-0.3V≤Vin≤1.5V高电平:2.3V≤Vin≤Vss
使能信号输入电压范围:低电平:-0.3≤Vin≤1.5V(控制信号无效)高电平:2.3V≤Vin≤Vss(控制信号有效)
最大功耗:20W(温度T=75℃时)
存储温度:-25℃~+130℃
驱动板尺寸:53mm*43mm
驱动板重量:35g
其他扩展:控制方向指示灯、逻辑部分板内取电接口。

5. 接口定义

6. 使用方法
输出A、输出B,接直流电机正负极。(并没有说1或2哪个是正极,统一即可。)

板载5V使能:
当你在12V供电输入的电压是7-12V的时候,插销需要插上状态,这时候可以反向提供5V供电给Arduino,也就是独立供电电源接12V和GND,然后从GND和5V接入Arduino的GND+VIN给arduino供电。如果你Arduino已经独立供电了,那只要接一根GND即可,保持电压电势差基础一致。
当你的供电12-24V时候,插销必须拔掉。这时候你的独立供电电源对外外部逻辑电路电机供电,不对L298N供电。也就是独立供电电源接12V和GND,然后从GND和5V接入Arduino的GND和5V,需要从arduino给L298N板子内部逻辑电路供电,也就是给L298N板子供电。

通道A使能和通道B使能。插销插着,则无PWM功能,电压直接全力输出(参考实验一)。插销拔掉后,需要在跟逻辑输入同排的那个引脚接上Arduino板子上带PWM功能的引脚,去进行PWM功能的控制(可以参考实验二)。通道A接的控制PWM的引脚控制输出A,通道B相同。

7. 接线方式

蓝色接线端子说明:请将蓝色接线端子的螺丝拧松,随后将导线或者杜邦线(或面包线)放入接线端子,拧紧螺丝即可。
信号如图所示:

8. 示例程序一

//中贝斯特UltiRobot电机驱动板L298N示例教程
//程序效果:两个直流电机先正转一秒 暂停一秒 反转一秒 如此反复
//淘宝店地址:zhongbest.taobao.com
//专业Arduino资料网站:www.arduino365.com
//这个电机驱动板使用数字端口4 5 6 7 控制电机
//正确连接你的电机到M1+ M1- M2+ M2-
int IN1=4;
int IN2=5;
int IN3=6;
int IN4=7;

//数字端口4与5为一组,6与7为另一组

void setup()
{
  int i;
  for (i=4;i<=7;i++) //为Ardunio 电机驱动板
  pinMode(i,OUTPUT); //设置数字端口4,5,6,7为输出模式
  for (i=4;i<=7;i++) 
  digitalWrite(i,HIGH); //设置数字端口4,5,6,7为HIGH,电机保持不动
  pinMode(10,OUTPUT);//设置数字端口10  11为输出模式
  pinMode(11,OUTPUT);
  Serial.begin(9600);

}

void loop()
{
  aa();//两个直流电机正转1秒 暂停一秒 反转一秒
}

void aa()//先正转1秒停1秒后反转1秒
{
  //正转
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  delay(1000);
  //暂停一秒

  //反转
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  delay(1000);
  // 暂停一秒
}

9. 示例程序二
IN1-4 分别接Arduino mega2560的PIN4-7,将L298N上的ENA、ENB插口上的插销拔掉,随后,将ENA与Arduino mega2560 的PIN11脚相连,ENB与Arduino mega2560的PIN8相连。

//中贝斯特UltiRobot电机驱动板L298N示例教程
//程序效果:直流电机B电机匀速转动,A电机从100加速到255转动,也就是慢慢加速到全速。
//淘宝店地址:zhongbest.taobao.com
//专业Arduino资料网站:www.arduino365.com
#define motor1pin1 4                             //定义IN1引脚
#define motor1pin2 5                             //定义IN2引脚
#define motor1pwm 11                             //定义ENA引脚(我的是Mega2560的板子)
#define motor2pin1 6                             //定义IN3引脚
#define motor2pin2 7                             //定义IN4引脚
#define motor2pwm 8                              //定义ENB引脚
void motor(int motorpin1,int motorpin2,int motorpwm,int val)  //定义一个电机转动函数
{
pinMode(motorpin1,OUTPUT);                       //输出第一个引脚
pinMode(motorpin2,OUTPUT);                       //输出第二个引脚
digitalWrite(motorpin2,0);                       //将第二个引脚置低
digitalWrite(motorpin1,1);                       //将第一个引脚抬高
analogWrite(motorpwm,val);                       //给EN引脚设定模拟值,设定转速
}
void setup()
{  
}
void loop()
{
  int i;
  for(i=100;i<=255;i++) //让电机的转速从100到255转动,A,B转速不一样,完成转向
  {
    motor(motor2pin1,motor2pin2,motor2pwm,255);            //电机B保持255匀速转动
    motor(motor1pin1,motor1pin2,motor1pwm,i);              //电机A从100到255转动
    delay(500);                                            //间隔500ms
  }
  for(i=100;i<=255;i++)                                    //让电机从100到255转动,功能同上
  {
    motor(motor1pin1,motor1pin2,motor1pwm,255);
    motor(motor2pin1,motor2pin2,motor2pwm,i);
    delay(500);
  }
  motor(motor1pin1,motor1pin2,motor1pwm,255);               //电机A以最大转速转动
  delay(5000);
  motor(motor1pin2,motor1pin1,motor1pwm,255);               //电机A反向转动
  delay(5000);
}

10. 示例程序三(太麻烦,建议L298N就用来驱动直流电机就行了。)
5V步进电机蓝线、粉线、橙线、黄线分别接L298N驱动板的OUT1、OUT2、OUT3、OUT4;L298N驱动板的+5V接UNO的5V,GND接UNO的GND;L298N的IN1、IN2、IN3、IN4分别接UNO的数字引脚8、9、10、11。如果将UNO上的数字引脚4,接高电平,步进电机顺时针转动;接低电平,步进电机逆时针转动;不接,则默认逆时针转动(低电平)。

//中贝斯特UltiRobot电机驱动板L298N示例教程
//程序效果:上电后,步进电机默认逆时针转动。如UNO上数字引脚4接高电平,则顺时针转动。
//淘宝店地址:zhongbest.taobao.com
//专业Arduino资料网站:www.arduino365.com
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 11;
int _step =0 ;
boolean dir; //= -1;正反转
int stepperSpeed = 2;//电机转速

void setup()
{
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(4,INPUT);
}

void loop()
{
if(digitalRead(4))
{up();
}else{
down();
}
}

void down()
{
switch(_step){
case 0:

//stepperSpeed++;
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);//32A
break;

case 1:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);//10B
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;

case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;

case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;

case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;

case 5:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;

case 6:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;

case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;

default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}

_step++;
if(_step>7){   _step=0;  }
delay(stepperSpeed);
}

void up()
{
switch(_step){

case 0:

//stepperSpeed++;
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);//32A
break;

case 1:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);//10B
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;

case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;

case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;

case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;

case 5:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;

case 6:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;

case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;

default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}

_step++;
if(_step>7){   _step=0;  }
delay(stepperSpeed);
}

11. 注意事项
1.当你的驱动电压(上图标识为12V输入,实际可以接受的输入范围是7-12V)为7V-12V的时候,可以使能板载的5V逻辑供电,当使用板载5V供电之后,接口中的+5V,供电不要输入电压,但是可以引出5V电压供外部使用。(这种即为常规应用!)

2.当驱动电压高于12V,小于等于24V(芯片手册中提出可以支持到35V,但是按照经验一般298保守应用最大电压支持到24V已经很了不起!)时,比如要驱动额定电压为18V的电机。首先必须拔除板载5V输出使能的跳线帽。然后在5V输出端口外部接入5V,5V使能即 一个电平为5V的控制信号,当此信号输入有效时,且电机驱动模块中电源供电正常时,电机驱动模块输出电流。否则即使电源供电正常,电机上也无电流。电压对L298N内部逻辑电路供电。(这种是高压驱动的非常规应用!)

12. 相关下载
百度网盘:点我下载

未经允许不得转载:Arduino-Maker » L298N电机驱动板 示例教程 适用于Arduino平台

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 11

评论前必须登录!

 

  1. #3

    各位大神,这个程序下载后两个马达在抽动是怎么回事?

    xiaopangzi3年前 (2016-10-10)
    • 你的供电够么?

      arron3年前 (2016-10-10)
      • 完全按照上图连线,程序是直接复制粘贴的。电池与马达直接连的话就能转

        xiaopangzi3年前 (2016-10-10)
        • 所以我问的是你的供电啊,一般电机不转,就是供电不足,你怎么供电的?

          arron3年前 (2016-10-10)
          • 新买的9V电池一节,难道是因为这个? 谢谢你耐心的指导

            xiaopangzi3年前 (2016-10-10)
          • 确实是电池的电压不行,我改用9V外接电源线插在DC头上就能正常转了。谢谢你的耐心指导!

            xiaopangzi3年前 (2016-10-10)
  2. #2

    第二个程序应该为A速度递增,但是实际效果感觉都是匀速。IO口8能调速吗?不是得带~的才能吗

    xiaopangzi3年前 (2016-10-10)
    • 使能A、B(ENA、ENB)可以输入PWM脉宽信号对电机进行调速,我们的程序只是基础的测试。我的板子是MEGA2560

      arron3年前 (2016-10-11)
  3. #1

    请问一下第一个程序,使能EA,EB怎么跟10和11引脚连接,直接拿杜邦线的有针的那一头插在EA使能端那个帽子上吗,差不紧呀,并且一直没反应求解答

    wisteria2年前 (2017-05-13)
    • 拔掉跳线帽。有两个针,与IN1-4并排的那个针为ENA,

      arron2年前 (2017-05-31)

线上商城

中贝斯特创客空间蘑菇云创客教育