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桥电路时,要注意避免短路情况的发生,确保开关的正确闭合和断开。