Arduino驱动直流电机教程
控制原理
转向控制
控制直流有刷电机的转向可通过H桥电路实现。H桥由四个开关组成(实际中常用晶体管),电机位于H桥的桥部分。当不同的开关组合闭合时,能改变施加在电机上电压的极性,从而实现电机的正反转。例如,闭合特定的两个开关,电流按一个方向流过电机,电机顺时针旋转;打开这两个开关,闭合另外两个开关,电流方向改变,电机逆时针旋转。需注意避免同时闭合会导致电源短路的开关。
转速控制
PWM(脉冲宽度调制)技术是控制电机转速的常用方法。它通过调整进入电机的电压平均值来控制电机运动,平均电压取决于占空比,即信号在一段时间内打开的时间与关闭的时间之比。可以将Arduino的PWM输出连接到晶体管的基极或MOSFET的栅极,通过控制PWM输出来控制电机的速度。
驱动方式选择
自行搭建电路
使用电子元件自行搭建H桥电路来驱动电机,但这种方式对于初学者来说比较困难,需要对电子电路知识有一定的了解。
使用电机控制模块
这是更简便的方法,无需自己搭建电路,不仅能控制电机旋转方向、速度,还能实现急停、待速等功能。不过,需要先确定自己的电机参数和型号,然后通过电机参数和型号适配电机控制模块。
常见电机控制模块及使用
XY – 2.5AD电机控制模块
这是一个双H桥模块,可以同时控制两个直流有刷电机。使用时不要用Arduino引脚的5V电压对其供电,功率达不到,要单独给电机控制模块配备独立电源,且GND要共地。它共有IN1、IN2、IN3、IN4共四个引脚,不同引脚输出不同信号可达到不同效果,如:
控制状态 | IN1、IN2引脚状态(控制电机A) | 说明 |
---|---|---|
待机 | 低电平 | 若之前电机有转速,则此时慢慢减速停止 |
刹车 | 高电平 | 电机旋转时使其突然停止 |
引脚未连接信号 | 等效于引脚低电平 | 无特殊信号输入时的状态 |
实验可通过向串口监视器输入控制Arduino串口指令来控制电机,例如:
- 使得3号引脚高电平,5号引脚低电平,可让电机A正传以最大速度。
- 使得6号引脚PWM信号200,5号引脚低电平,可让电机A正传以PWM200的速度。
L298P直流电机驱动板
这是Arduino作品中最入门、使用最广泛的电机驱动。它基于L298芯片,是Arduino平台双路电机驱动扩展板,可以直接插入Arduino控制板使用。该扩展板可用跳线选择Arduino VIN供电还是外接电源供电,最大电压可达35V。其技术规格如下:
参数 | 详情 |
---|---|
驱动工作电压 | 4.8~35V |
最大输出电流 | 单路2A |
最大耗散功率 | 25W(T = 75℃) |
驱动形式 | 双路H桥驱动 |
驱动电源接口 | 一路外部电源端子/Arduino – VIN |
驱动输出接口 | 两路电机接线端子/排针 |
Arduino控制端口 | 数字口10,11,12,13 |
工作温度 | -25℃~130℃ |
模块尺寸 | 56x57mm |
由于其应用完整使用教程篇幅过长,建议查看相关原文链接。
实验示例
材料准备
- Arduino开发板(如Arduino Uno)
- 直流电机
- 对应的电机控制模块(如L298N、XY – 2.5AD等)
- 电源
- 杜邦线等连接材料
代码示例(以使用Arduino Uno的PWM引脚控制电机速度和方向为例)
// 定义控制电机的引脚
const int motorPin1 = 2; // 控制电机方向
const int motorPin2 = 4; // 控制电机方向
const int pwmPin = 5; // 控制电机速度
void setup() {// 设置引脚为输出模式
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(pwmPin, OUTPUT);
// 初始化串口通信
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
int speed = Serial.parseInt(); // 从串口读取速度值
if (speed > 0) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(pwmPin, speed); // 设置电机速度
} else if (speed < 0) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(pwmPin, -speed); // 设置电机速度
} else {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(pwmPin, 0); // 停止电机
}
}
}
代码解释
-
setup()
函数:设置控制电机的引脚为输出模式,并初始化串口通信。
-
loop()
函数:不断检查串口是否有数据输入。如果有,读取输入的速度值。根据速度值的正负来控制电机的旋转方向,使用
analogWrite()
函数设置电机的速度。当速度值为0时,停止电机转动。
连接方法
- 将电机控制模块的IN1、IN2等引脚连接到Arduino的对应控制引脚(如示例中的2、4引脚)。
- 将电机控制模块的PWM输入引脚连接到Arduino的PWM引脚(如示例中的5引脚)。
- 为电机控制模块单独连接合适的电源,并将GND与Arduino的GND共地。
- 将电机连接到电机控制模块的输出端口。
注意事项
- 选择电机控制模块时,要根据电机的工作电压、平均电流、失速电流等电气规格进行匹配,理想情况下,驱动器的额定电流应高于电机平均电流30 – 50%,且能处理电机的失速电流至少一分钟。
- 不要使用Arduino引脚的5V电压直接对电机控制模块供电,功率可能不足,需单独配备合适的电源。
- 在使用H桥电路时,要注意避免短路情况的发生,确保开关的正确闭合和断开。