TAG | 电机
Arduino电机驱动扩展板 L298N V03是我们最新的电机驱动扩展板:
同前一版本的Arduino L298N 电机驱动扩展板相比,V03版本的改动主要是添加了更多的设置开关,以满足不同场合下的应用要求:
- VLO(Voltage Logic Onboard)
电机驱动芯片L298N在工作的时候有两个电压:逻辑电压和电机电压,其中逻辑电压是5V,一般会小于电机电压(比如7.2V,9V或者12V)。为了能够将接在VEX端子上的电机电压转换成5V逻辑电压使用,电机驱动板上提供了相应的电压转换电路。电压转换电路的工作电压是受限的(小于20V),所以如果电机大于20V的时候,就不能使用这个电压转换电路了。VLO开关的作用就是选择是打开(开关置于ON)还是关闭(开关置于OFF)板上这一逻辑转换电路。
- VLC(Voltage Logic Connected)
L298N电机驱动扩展板上的逻辑电压除了可以通过上面介绍的电压转换电路提供之后,也可以通过与Arduino控制板上的5V逻辑电压直接连接来提供。VLC开关的作用是决定是否将电机驱动扩展板上的5V逻辑电压与Arduino控制板上的5V逻辑电压连接起来:当开关置于ON的位置上时连接,当开关置于OFF的位置上时不连接。
- VM(Voltage Motor):
VM的作用是对电机电压进行选择。当L298N电机驱动扩展板与Arduino连接起来之后,有两种办法为电机提供电源:通过Arduino板上的Vin引脚(开关置于VIN)和通过电机驱动扩展板上的VEX端子(开关置于VEX)。
相对于Arduino来讲,L298N电机驱动扩展板所承载的电流和电压都是比较高的,因此在使用的过程中要特别注意连线。下面提供几种典型的电路连接方式供大家在使用中参考:
1. 电机电压为6~12V
一般来讲,Arduino可以通过外接的6V-12V变压器进行供电(Arduino上的Vin引脚),如果你的电机电压正好在这个范围之内,那就正好可以利用这一外接电源来同时为Arduino和电机供电。这种情况下VLO、VLC和VM三者的设置为:
- VLO:OFF,不需要电机驱动扩展板上的电压转换电路
- VLC:ON,与Arduino的5V引脚进行连接,为电机驱动扩展板提供逻辑电压
- VM:VIN,与Arduino的Vin引脚进行连接,为电机驱动扩展板提供电机电压
2. 电机电压小于6V
这种情况下只能通过电机驱动扩展板上的GND和VEX两个端子来给电机供电,此时电机驱动扩展板上的5V逻辑电压转换电路无法正常工作(VEX电压太低),所以我们只能同Arduino板上的5V引脚连接来为电机驱动扩展板提供5V逻辑电压。这种情况下电机驱动扩展板的设置为:
- VLO:OFF,不需要电机驱动扩展板上的电压转换电路
- VLC:ON,与Arduino的5V引脚进行连接,为电机驱动扩展板提供5V逻辑电压
- VM:VEX,通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压
3. 电机电压为12V-20V
这种情况下也只能是通过电机驱动扩展板上的GND和VEX两个端子来给电机供电,此时电机驱动扩展板上的5V 逻辑电压转换电路可以正常工作。这种情况下电机 驱动扩展板的设置为:
- VLO:ON,需要电机驱动扩展板上的电压转换电路
- VLC:OFF,不与Arduino的5V引脚进行连接,安全隔离
- VM:VEX,通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压
上述设置中因为VLC并没有将Arduino的5V引脚与电机扩展板上的5V逻辑电压连接起来,因此我们仍需要再额外为Arduino供电(通过USB线或者外接电源),主要是出于安全隔离的考虑,特别是在VEX上的电压比较高的情况下。
4. 电机电压为20V-46V
这种情况下也只能是通过电机驱动扩展板上的GND和VEX两个端子来给电机供电,此时电机驱动扩展板上的5V 逻辑电压转换电路无法正常工作(VEX电压太低)。这种情况下电机 驱动扩展板的设置为:
- VLO:OFF,不需要电机驱动扩展板上的电压转换电路
- VLC:ON,与Arduino的5V引脚进行连接,为电机驱动扩展板提供5V逻辑电压
- VM:VEX,通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压
除了这些配置上的不同之外,V03与前一版本不存在太大的区别,因此你可以参考Arduino L298N 电机驱动扩展板中的代码进行电机的驱动。
之前设计的基于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号管脚。示例代码如下所示:
// motor A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;
// motor B
// motor A
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;
unsigned long time;
int speed;
int dir;
void setup() {
pinMode(dir1PinA, OUTPUT);
pinMode(dir2PinA, OUTPUT);
pinMode(speedPinA, OUTPUT);
pinMode(dir1PinB, OUTPUT);
pinMode(dir2PinB, OUTPUT);
pinMode(speedPinB, OUTPUT);
time = millis();
speed = 0;
dir = 1;
}
void loop() {
analogWrite(speedPinA, speed);
analogWrite(speedPinB, 255 - speed);
// set direction
if (1 == dir) {
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
} else {
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
if (millis() - time > 5000) {
time = millis();
speed += 20;
if (speed > 255) {
speed = 0;
}
if (1 == dir) {
dir = 0;
} else {
dir =1;
}
}
}
为了对电机的工作状态有更加直观的理解,扩展板上还专门添加了4个LED来分别表示电机的转动方向,其亮度也正好表明了电机转速的高低,非常方便:

另外,该扩展板上还设计了一个VL跳线,是用来对为L298N选择逻辑电平的,通常我们接到V5V这端,即从Arduino板子上取得该逻辑电压。

上述VL跳线如果接VEX的话,相应的逻辑电压则是通过电机外接电源VEX分压后得到的,该分压器采用的是LM3940,其最高耐压值为35V,这也一定程序上决定了该扩展能够随受的最高电压为35V。
