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 Q2 Q3 Q4 M 电机 VCC (电源正极) GND (电源负极)

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 调参,那不就是空中楼阁吗?

嗯,这一章就到这里。把这些基础打牢,后面我们才能玩更高级的。


专注资料整理