Arduino机器人开发指南(七)电机驱动篇

之前我们研究了如何用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

本文链接:Arduino机器人开发指南(七)电机驱动篇

转载声明:BeiTown原创,转载请注明来源:BeiTown's Coder 编码之源,谢谢


Tags: , , ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>