4、电机驱动基础:直流电机、步进电机、无刷直流电机(BLDC)的驱动原理与PWM控制
做机器人控制,电机是绕不开的坎。我见过不少新手,一上来就盯着算法和传感器,结果电机都转不利索,整个系统就崩了。说白了,电机驱动是机器人的「手脚」,手脚不听使唤,脑子再好也没用。
今天咱们就聊聊三种最常见的电机:直流电机、步进电机、无刷直流电机(BLDC)。它们的驱动原理和PWM控制,我会结合自己踩过的坑来讲。
4.1 直流电机:最朴素的动力源
直流电机,结构最简单。你给它通上电,它就转。电压越高,转得越快;负载越大,电流就越大。嗯,就这么直白。
驱动原理
直流电机内部有电刷和换向器。电流通过电刷流入转子线圈,在磁场中受力旋转。换向器负责在转子转到特定位置时切换电流方向,保证电机一直朝一个方向转。
PWM控制
控制直流电机转速,最常用的就是PWM(脉宽调制)。说白了,就是快速开关电源,通过调整「开」的时间比例(占空比)来改变平均电压。
核心公式:
平均电压 = 电源电压 × 占空比
占空比 0% → 电机停转;占空比 100% → 电机全速
举个例子,12V的电机,占空比50%,平均电压就是6V。转速大概就是全速的一半。
// 简单的PWM控制代码(Arduino风格)
int motorPin = 9; // PWM引脚
int speed = 128; // 0-255,对应0%-100%占空比
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
analogWrite(motorPin, speed); // 输出PWM
delay(2000);
analogWrite(motorPin, 0); // 停止
delay(2000);
}
注意:直流电机启动瞬间电流很大,可能达到额定电流的5-10倍。我曾经在项目里没加软启动,结果电源直接保护了。建议用PWM从低占空比慢慢往上加。
4.2 步进电机:位置控制的利器
步进电机跟直流电机不一样。它不是连续旋转,而是一步一步地走。你给它一个脉冲,它就转一个固定的角度。你想想看,这对位置控制来说多方便。
驱动原理
步进电机内部有多组线圈(通常是两相或四相)。通过按特定顺序给线圈通电,转子就会一步步转动。常见的步进角有1.8°(200步/圈)和0.9°(400步/圈)。
PWM控制
步进电机的PWM控制,其实是用PWM来调节线圈电流的大小。但更关键的是脉冲频率——频率越高,转速越快。
转速计算公式:
转速(rpm)= 脉冲频率(Hz)× 60 / 步数每圈
例如:1.8°步进电机,脉冲频率1000Hz,转速 = 1000 × 60 / 200 = 300 rpm
我个人习惯用A4988或DRV8825这类驱动芯片。它们内部集成了电流控制和细分功能,用起来省心不少。
// 步进电机控制示例
int stepPin = 2;
int dirPin = 3;
int stepsPerRev = 200;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
digitalWrite(dirPin, HIGH); // 正转
for (int i = 0; i < stepsPerRev; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000); // 脉冲宽度
digitalWrite(stepPin, LOW);
delayMicroseconds(1000); // 脉冲间隔
}
delay(1000);
}
避坑指南:我曾经遇到过步进电机高速运行时丢步的问题。后来发现是加速太猛了。步进电机有「自启动频率」的限制,超过这个频率直接启动就会丢步。解决办法是:用梯形加减速曲线,慢慢加速到目标速度。
4.3 无刷直流电机(BLDC):高效与精密的代表
BLDC电机,说白了就是去掉了电刷的直流电机。它用电子换向器代替了机械电刷,效率更高、寿命更长、噪音更小。现在无人机、机器人关节里用的基本都是它。
驱动原理
BLDC电机有三相绕组(U、V、W)。转子是永磁体。驱动时,需要按特定顺序给三相通电,产生旋转磁场,拉着转子转。这个顺序必须跟转子位置同步,所以需要位置传感器(霍尔传感器)或者无传感器算法(反电动势检测)。
PWM控制
BLDC的PWM控制比前两种复杂。它不仅要控制转速(通过PWM占空比),还要控制换相时序。常用的控制方式有:
- 方波控制(六步换向):最简单,每60°电角度换一次相。适合对噪音不敏感的场景。
- 正弦波控制:输出正弦波电流,运行更平滑、噪音更低。我做的机器人关节基本都用这个。
- FOC(磁场定向控制):最高级的控制方式,能精确控制转矩和转速。但算法复杂,需要高性能MCU。
BLDC驱动核心逻辑:
1. 检测转子位置(霍尔或反电动势)
2. 根据位置确定下一步该给哪两相通电
3. 用PWM控制通电相的电压(占空比决定转速)
4. 循环执行,电机就转起来了
// BLDC六步换向伪代码(简化版)
// 假设有3个霍尔传感器,输出6种状态
void BLDC_Commutation(int hallState) {
switch (hallState) {
case 0b001: // 霍尔状态1
PWM_U_HIGH = dutyCycle; // U相上桥臂PWM
PWM_V_LOW = 255; // V相下桥臂全开
PWM_W = 0; // W相悬空
break;
case 0b010: // 霍尔状态2
// ... 其他换相逻辑
break;
// ... 共6种状态
}
}
重要提醒:BLDC驱动不能把上下桥臂同时导通,否则会烧毁MOS管。我刚开始做BLDC驱动时,就因为在换相瞬间没处理好死区时间,烧了三块驱动板。一定要在代码里加死区补偿。
4.4 三种电机对比总结
| 特性 | 直流电机 | 步进电机 | BLDC电机 |
|---|---|---|---|
| 控制方式 | PWM占空比 | 脉冲频率+方向 | PWM+换相逻辑 |
| 位置控制 | 需加编码器 | 开环即可 | 需加编码器 |
| 效率 | 低(电刷摩擦) | 中(低速效率低) | 高(无电刷损耗) |
| 噪音 | 大(电刷火花) | 中(低速有振动) | 小(运行平滑) |
| 典型应用 | 玩具、简单驱动 | 3D打印机、数控机床 | 无人机、机器人关节 |
4.5 知识体系结构图
下面这张图,是我梳理的三种电机驱动核心逻辑。你看一眼就能明白它们之间的关系。
这张图把三种电机的驱动原理、PWM控制方式和典型应用串在了一起。你对照着看,思路会清晰很多。
我的建议:刚开始做电机控制,别一上来就搞FOC。先拿直流电机练手,理解PWM的本质。然后试试步进电机,感受一下位置控制的精度。最后再碰BLDC。一步一步来,基础才扎实。
好了,电机驱动的基础就聊到这儿。记住,理论是骨架,实践才是血肉。多动手,多烧几块板子(当然别烧太多),你自然就懂了。
可可精品资料库