之前我们研究了如何用Arduino驱动舵机,本次我们将一起探究一下如何用Arduino驱动直流电机。Arduino本事是无法对直流电机进行控制的,需要通过一块电机驱动板来控制电机的正转反转。这里我们选择的是L298驱动板,当然也有其他同类驱动板或者扩展板可供选择。如图,L298:
这块板子可以驱动两路电机,电机线已经接在板子的motora上了,motora中间的是外接电源的输出口,这里接在电池盒上。
简单介绍下黄色部分的8个引脚:
ENA 电机A模拟值输出端,用来控制电机的转速
IN1 为电机A提供电流,控制正反转
IN2 为电机A提供电流,控制正反转
ENB 电机B模拟值输出端,用来控制电机的转速
IN3 为电机B提供电流,控制正反转
IN4 为电机B提供电流,控制正反转
GND 接地
+5V 正极
网上找了一张更详细的图
大致接线如下:
ENA、IN1、IN2、ENB、IN3、IN4 分别接在D2-D13引脚,GND接在Arduino的GND上,+5V给Arduino供电,但是电压可能不够,所以可以在Vin接口并联一根6V以上的VCC进Arduino板卡的Vin接口,这个+5V就可以空出来
连线完毕之后开始编写代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #define ENA 8 //定义引脚ENA... #define IN1 9 #define IN2 10 #define ENB 13 #define IN3 11 #define IN4 12 void setup(){ pinMode(IN1,OUTPUT);//设置IN1引脚为OUTPUT模式 pinMode(IN2,OUTPUT); pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT); pinMode(ENA,OUTPUT); pinMode(ENB,OUTPUT); } void loop(){ Back();//测试用,调用后退函数 analogWrite(ENA,255);//调速0-255,255为全速 analogWrite(ENB,255); } //以下是自定义函数 void Forward(){ LeftForward(); RightForward(); } void Back(){ LeftBack(); RightBack(); } void TurnLeft(){ LeftBack(); RightForward(); } void TurnRight(){ LeftForward(); RightBack(); } //右轮反转 void RightBack(){ digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH); } //右轮正转 void RightForward(){ digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW); } void LeftBack(){ digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH); } void LeftForward(){ digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW); } void Stop(){ digitalWrite(IN1,LOW); digitalWrite(IN2,LOW); digitalWrite(IN3,LOW); digitalWrite(IN4,LOW); } |
通过代码可以看到,假设需要控制电机A的正反转和速度,需要通过IN1、IN2、ENA三处引脚的PWM数字脉冲信号来控制。当IN1为高电平,IN2为低电平,电机A正转。当IN1为低电平,IN2为高电平,电机A为反转。电机B同理。总之电机的正反转是通过IN的电平差来控制的。
所以当IN1、IN2同为HIGH或同位LOW,则停止转动。
这里建议,stop时,电平均为Low。
ENA,ENB用于调速,这里调用analogWrite进行占空比的输出,值为0-255。
P.S:接线不同或板卡不同可能直接套用此代码的效果会有不同,但原理不变。
烧入以下代码就可以测试机器人减速电机的正反旋转与速度控制。
同时,通过代码的拓展与其他控制器模块的对接,即可完成实时遥控等功能。
本篇为最基础的电机驱动,基于此基础的深入千变万化。本篇到此,谢谢关注。
BeiTown
2013.04.02