【Arduino蓝牙小车】L298N电机驱动模块详解
原文链接:[Arduino] 从零制作蓝牙小车 - 饮猫的学习日志
1. L298N模块的使用
这是一个L298N电机驱动模块的图片。你可能会觉得接口有一点点多。但其实搞清楚它的控制原理后就能很快完成接线。
输出A、输出B两个接口分别与小车的两个电机相连(不用区分正负);12V供电接口与12V锂电池正极相连;GND接口同时与电池负极和Arduino的GND接口相连;5V供电接口与Arduino的Vin接口相连。
对于通道A使能、逻辑输入这几个接口,网络上的文章描述的都较为复杂。此处我会给出一个更简单的理解方式。注:由于通道AB的功能相同,下文只对一个通道进行描述。
图中的两个5V针脚会恒定输出5V电压;两个使能针脚可以理解为开关,当接到5V电压时,对应通道打开;1、2针脚用于控制电机的转动方向,1、2针脚分别为高电平时电机会转动且转动方向相反,其他情况电机不转动。
2. 接线方式
如果我们想利用PWM来对电机进行调速,我们有两种接线方式:
2.1 接线方式一(不推荐)
我们不拔除通道使能与5V之间的跳帽。这种情况下,通道会一直保持打开状态。我们分别将1、2两个针脚接到Arduino的两个PWM接口,通过分别控制1、2两个针脚对应的输出来控制电机旋转方向和速度。显然,这种接线方式会占用较多的PWM引脚(对于每个通道需要占用两个PWM引脚),但不需要占用普通引脚。在PWM引脚较少的情况下不推荐使用这种方案。
2.2 接线方式二(推荐)
拔除通道使能与5V之间的跳帽,将使能针脚与Arduino的PWM引脚相连、1、2两个针脚与Arduino的两个普通引脚相连。这是,我们可以通过PWM引脚来控制通道的开关,用于调速;控制1、2两个针脚的电平来控制电机的转动方向。对于每个通道,这种接线方式只需要占用一个PWM引脚,但是会占用两个普通引脚。我们需要根据实际的引脚数量在两种接线方式中进行权衡。本文接下来的代码部分以第二种接线方式为例。
3. Arduino代码
3.1 电机基础信息配置
#define Motor1_M1_Port 12
#define Motor1_M2_Port 13
#define Motor1_PWM_Port 3
#define Motor2_M1_Port A4
#define Motor2_M2_Port A5
#define Motor2_PWM_Port 11
3.2 电机初始化函数
void motorInit() {
// 设置引脚模式
pinMode(Motor1_M1_Port, OUTPUT);
pinMode(Motor1_M2_Port, OUTPUT);
pinMode(Motor2_M1_Port, OUTPUT);
pinMode(Motor2_M2_Port, OUTPUT);
// 将引脚置于低电平
digitalWrite(Motor1_M1_Port, LOW);
digitalWrite(Motor1_M2_Port, LOW);
digitalWrite(Motor2_M1_Port, LOW);
digitalWrite(Motor2_M2_Port, LOW);
}
3.3 电机速度设置函数
void motorSetSpeed(int v1, int v2) {
// 设置转动方向
if (v1 >= 0) {
digitalWrite(Motor1_M1_Port, LOW);
digitalWrite(Motor1_M2_Port, HIGH);
} else {
digitalWrite(Motor1_M1_Port, HIGH);
digitalWrite(Motor1_M2_Port, LOW);
}
if (v2 >= 0) {
digitalWrite(Motor2_M1_Port, LOW);
digitalWrite(Motor2_M2_Port, HIGH);
} else {
digitalWrite(Motor2_M1_Port, HIGH);
digitalWrite(Motor2_M2_Port, LOW);
}
// 设置速度 通过PWM控制
analogWrite(Motor1_PWM_Port, abs(v1)); // Value = 0 ~ 255
analogWrite(Motor2_PWM_Port, abs(v2)); // Value = 0 ~ 255
}
至此,电机的驱动代码全部完成。
更多推荐
所有评论(0)