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 知识体系结构图

下面这张图,是我梳理的三种电机驱动核心逻辑。你看一眼就能明白它们之间的关系。

电机驱动核心知识体系 直流电机 步进电机 无刷直流电机(BLDC) 驱动原理 电刷+换向器 电压控制转速 驱动原理 脉冲控制步进 顺序通电 驱动原理 电子换向 三相绕组 PWM控制 占空比→平均电压 调速简单 PWM控制 脉冲频率→转速 电流调节 PWM控制 占空比+换相时序 方波/正弦波/FOC 典型应用 玩具、简单驱动 典型应用 3D打印机、数控机床 典型应用 无人机、机器人关节

这张图把三种电机的驱动原理、PWM控制方式和典型应用串在了一起。你对照着看,思路会清晰很多。

我的建议:刚开始做电机控制,别一上来就搞FOC。先拿直流电机练手,理解PWM的本质。然后试试步进电机,感受一下位置控制的精度。最后再碰BLDC。一步一步来,基础才扎实。

好了,电机驱动的基础就聊到这儿。记住,理论是骨架,实践才是血肉。多动手,多烧几块板子(当然别烧太多),你自然就懂了。

可可精品资料库