分享

Arduino L298N 电机驱动扩展板

 quasiceo 2015-08-09

Arduino L298N 电机驱动扩展板

2013-08-29 12:45 [ ] 来源: 未知 转发至: 分享到QQ空间 百度收藏 人人网 开心网 豆瓣网

 之前设计的基于L293D的直流电机驱动扩展板,虽然也能够接两个直流电机,但由于从于对接口数目的考虑,因此无法分别控制两路电机的旋转方向。此外,在带动较大功能的电机时,L293D也显得稍有些不足。出于这些考虑,在吸纳了一些网友的建议之后,此处设计了一个基于L298N的电机驱动扩展板。L298N是S一种高电压、大电流电机驱动芯片,其中最高工作电压可达46V,持续工作电流为2A,瞬间峰值电流更是可达 3A。该芯片内含两个H桥的高电压大电流全桥式驱动器,可以直接驱动两个直流电动机。

该扩展板在电路连接上首先要考虑的是如何给电机供电,如果你的Arduino采用的是外部供电方式(比如接9V的变压器时),而且该供电方式同你的电机也是驱配的(比如9V的直流电机),那么就可以将电机接到MA(A+和A-两个接线座)或者MB(B+和B-两个接线座)上:

然后再将VM跳线接到VIN端就:

另外一起连接方式是直接给电机单独提供一个不超过35V的电源,分别接在电机扩展板的GND和VEX接线座上,电机同样还是接在MA或者MB上:

但VM跳线此时则需要接到VEX端:

从控制原理上讲,L298N与L293D基本是一样的,都是分别通过两根方向引脚来控制电机的旋转方向,再通过一根使能引脚上的PWM信号来控制电机的转速。具体到该扩展板上,电机MA的方向引脚为Arduino的13和12号管脚,速度引脚则是Arduino的10号管脚;电机MB的方向引脚为Arduino的11和8号管脚,速度引脚则是Arduino的9号管脚。示例代码如下所示:

C/C++ 代码复制内容到剪贴板
  1. // motor A  
  2. int dir1PinA = 13;  
  3. int dir2PinA = 12;  
  4. int speedPinA = 10;  
  5.   
  6. // motor B  
  7. // motor A  
  8. int dir1PinB = 11;  
  9. int dir2PinB = 8;  
  10. int speedPinB = 9;  
  11.   
  12. unsigned long time;  
  13. int speed;  
  14. int dir;  
  15.   
  16. void setup() {  
  17.   pinMode(dir1PinA, OUTPUT);  
  18.   pinMode(dir2PinA, OUTPUT);  
  19.   pinMode(speedPinA, OUTPUT);  
  20.   pinMode(dir1PinB, OUTPUT);  
  21.   pinMode(dir2PinB, OUTPUT);  
  22.   pinMode(speedPinB, OUTPUT);  
  23.   
  24.   time = millis();  
  25.   speed = 0;  
  26.   dir = 1;  
  27. }  
  28.   
  29. void loop() {  
  30.   analogWrite(speedPinA, speed);  
  31.   analogWrite(speedPinB, 255 - speed);  
  32.   // set direction  
  33.   if (1 == dir) {  
  34.     digitalWrite(dir1PinA, LOW);  
  35.     digitalWrite(dir2PinA, HIGH);  
  36.     digitalWrite(dir1PinB, HIGH);  
  37.     digitalWrite(dir2PinB, LOW);  
  38.   } else {  
  39.     digitalWrite(dir1PinA, HIGH);  
  40.     digitalWrite(dir2PinA, LOW);  
  41.     digitalWrite(dir1PinB, LOW);  
  42.     digitalWrite(dir2PinB, HIGH);  
  43.   }  
  44.   if (millis() - time > 5000)  {  
  45.     time = millis();  
  46.     speed += 20;  
  47.     if (speed > 255) {  
  48.       speed = 0;  
  49.     }  
  50.     if (1 == dir) {  
  51.       dir = 0;  
  52.     } else {  
  53.       dir =1;  
  54.     }  
  55.   }  
  56. }  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多