4、执行器控制基础:直流电机工作原理、PWM调速原理、H桥驱动电路、舵机控制原理
各位同学,欢迎来到第四章。
前面我们聊了传感器怎么感知世界,也聊了控制器怎么处理信息。但底盘最终要动起来,靠的是谁?靠的是执行器。说白了,就是电机和舵机这些“肌肉”。
这一章,我们就来彻底搞懂底盘上最常用的几种执行器。我个人习惯,先把原理吃透,再去调代码,这样遇到问题才不会慌。
4.1 直流电机工作原理
直流电机,大家都不陌生。玩具车、电动牙刷、你的硬盘,里面都有它。但你真的理解它怎么转起来的吗?
核心原理就一句话:通电导体在磁场中受力。初中物理的知识,但工程应用里全是细节。
电机内部有定子(永磁体或电磁铁)和转子(线圈绕组)。当你给线圈通电,电流在磁场中产生安培力,推动转子旋转。转子转起来后,通过换向器(有刷电机)或电子控制器(无刷电机)改变电流方向,保证转子持续朝一个方向转。
关键参数:
- 转速 (RPM):与电压成正比。电压越高,转得越快。
- 转矩 (Torque):与电流成正比。电流越大,力气越大。
- 反电动势 (Back EMF):电机转动时,线圈切割磁感线,会产生一个与输入电压相反的电压。转速越高,反电动势越大,最终会限制电机的最高转速。
我的经验: 我在项目中遇到过电机选型失误的情况。选了个空载转速很高的电机,结果一加上底盘负载,转速掉得厉害,因为转矩不够。记住,选电机要看“额定转矩”和“堵转转矩”,别只看空载转速。
4.2 PWM调速原理
好,电机原理懂了。那怎么控制它的速度?
最简单粗暴的方法:调电压。但模拟调压效率低,发热大。工程上我们几乎都用 PWM(脉冲宽度调制)。
PWM 说白了,就是让电源以极高的频率“开-关-开-关”。通过改变一个周期内“开”的时间占比(占空比),来等效地调节平均电压。
- 占空比 0%:一直关,电机停。
- 占空比 50%:一半时间开,一半时间关,平均电压是电源电压的一半。
- 占空比 100%:一直开,电机全速转。
为什么电机不会一抖一抖的?因为电机本身有惯性和电感。PWM 频率足够高(通常几 kHz 到几十 kHz),电机来不及反应单个脉冲,只会感受到平均电压,从而平滑转动。
PWM 调速的核心公式:
V_avg = V_supply × DutyCycle
其中 DutyCycle 取值范围 0.0 ~ 1.0。
注意: PWM 频率不能太低。我曾经在调试一个底盘时,把 PWM 频率设成了 50Hz,结果电机发出刺耳的啸叫声,而且低速时一顿一顿的。后来把频率提到 20kHz(人耳听不到的范围),问题解决。频率太低,电机电感会“放电”不充分,导致转矩脉动。
4.3 H桥驱动电路
PWM 能调速了,但怎么让电机正转、反转、刹车?
这就轮到 H 桥 出场了。你看它的电路图,四个开关管(MOSFET 或三极管)组成一个“H”形状,电机在中间横杠上。
H 桥有四种基本工作状态:
| 状态 | 导通的开关管 | 电机行为 | 说明 |
|---|---|---|---|
| 正转 | Q1 + Q4 | 正向旋转 | 电流从 VCC → Q1 → 电机 → Q4 → GND |
| 反转 | Q2 + Q3 | 反向旋转 | 电流从 VCC → Q2 → 电机 → Q3 → GND |
| 刹车 | Q3 + Q4 (或 Q1 + Q2) | 急停 | 电机两端短路,反电动势产生制动转矩 |
| 滑行 | 全部断开 | 自由停止 | 电机靠惯性转动,无制动 |
致命陷阱: 绝对不能让 Q1 和 Q2 同时导通!这叫做“直通”或“穿通”,相当于直接把电源正负极短路,瞬间烧毁 MOS 管。我在调试第一版驱动板时就犯过这个错,冒烟了才反应过来。所以,软件里一定要加死区时间(Dead Time),确保一个关断后再打开另一个。
实际应用中,我们通常把 PWM 信号加到 Q1 和 Q2 上(上管),而 Q3 和 Q4(下管)只做方向控制。这样就能实现“PWM 调速 + 方向切换”的完整功能。
4.4 舵机控制原理
说完旋转的电机,再来说说能精确控制角度的 舵机。底盘转向、机械臂关节,都靠它。
舵机内部其实是一个“小系统”:直流电机 + 减速齿轮 + 位置反馈电位计 + 控制电路。
控制方式非常简单:50Hz 的 PWM 信号,周期 20ms。通过改变脉冲宽度(占空比)来控制角度。
- 0.5ms 脉宽 (2.5% 占空比):对应 0°
- 1.5ms 脉宽 (7.5% 占空比):对应 90°(中位)
- 2.5ms 脉宽 (12.5% 占空比):对应 180°
舵机内部的控制电路会不断比较“输入脉宽”和“电位计反馈的当前位置脉宽”。如果有偏差,就驱动电机转动,直到偏差为零。这就是一个典型的 闭环控制 系统。
舵机控制代码示例(基于 Arduino):
#include <Servo.h>
Servo myServo; // 创建一个舵机对象
void setup() {
myServo.attach(9); // 信号线接在引脚9
}
void loop() {
// 从 0° 转到 180°,步进 1°
for (int angle = 0; angle <= 180; angle++) {
myServo.write(angle);
delay(15); // 给舵机时间转到目标位置
}
}
我的经验: 舵机有个“死区”概念。你发一个微小角度变化(比如 1°),舵机可能没反应。因为内部比较器有阈值。另外,别让舵机长时间堵转(比如被外力卡住),电流会很大,容易烧坏舵机或驱动板。我曾经在底盘转向测试时,忘了加机械限位,舵机硬生生把自己齿轮打坏了。
4.5 本章小结
这一章我们聊了底盘执行器的四大核心:
- 直流电机:靠电流和磁场产生旋转力,电压定转速,电流定转矩。
- PWM 调速:通过高速开关调节平均电压,频率别太低。
- H 桥驱动:四个开关管实现正反转和刹车,严防直通。
- 舵机控制:50Hz PWM 脉宽对应角度,内部闭环定位。
这些是底盘控制最底层的“肌肉”知识。你想想看,如果连电机怎么转、怎么调速都不清楚,后面写运动控制算法、做 PID 调参,那不就是空中楼阁吗?
嗯,这一章就到这里。把这些基础打牢,后面我们才能玩更高级的。