电机驱动原理:直流电机工作原理、H桥电路、电机调速方法

各位同学,今天我们来聊聊电机驱动最核心的几个知识点。说实话,我刚开始做嵌入式的时候,觉得电机驱动不就是给个电压让它转嘛。直到第一次把MOS管烧冒烟了,才老老实实回来补基础。

直流电机、H桥、调速方法,这三块是电机控制的基石。你想想看,不管你是做四轴飞行器、智能小车,还是工业伺服,底层原理都离不开它们。咱们一个一个来拆解。

直流电机工作原理

直流电机为什么能转?说白了就是「电生磁,磁生力」。电机内部有定子(永磁体或电磁铁)和转子(线圈绕组)。当你给线圈通电,它就成了一个电磁铁。定子的磁场和转子的磁场相互作用,产生转矩,转子就转起来了。

这里有个关键点——换向器。转子每转半圈,电流方向就得换一次,否则转子会被卡在某个位置不动。这就是为什么直流电机需要电刷和换向片。嗯,我在一个项目中用过无刷直流电机(BLDC),那又是另一套玩法,但基础原理是一样的。

核心公式:

  • 转速 n = (U - I×R) / (Ke×Φ) —— 电压越高,转速越快
  • 转矩 T = Kt×I —— 电流越大,力气越大
  • 反电动势 E = Ke×n —— 转速越高,反电动势越大

你可能会问:为什么电机堵转时电流特别大?因为转速为零,反电动势为零,电源电压全部加在线圈电阻上。我曾经调试一个直流电机驱动板,堵转电流飙到额定电流的8倍,直接把电源拉保护了。所以,堵转保护一定要做。

H桥电路

直流电机只能正转?当然不是。H桥电路就是用来控制电机正反转的。为什么叫H桥?你看它的电路拓扑,四个开关管(MOS管或三极管)摆成H形,电机在中间横杠上。

H桥电路拓扑结构 Q1 (高侧) Q2 (高侧) Q3 (低侧) Q4 (低侧) 电机 M VCC (电源正) GND (电源负) 电流方向(正转) 正转:Q1+Q4导通,电流从左向右流过电机;反转:Q2+Q3导通,电流从右向左

H桥有四种工作状态,我整理了一个表格,方便你对照:

工作模式 Q1 Q2 Q3 Q4 电机状态
正转 ON OFF OFF ON 正转(电流从左到右)
反转 OFF ON ON OFF 反转(电流从右到左)
刹车(能耗制动) OFF OFF ON ON 电机两端短路,快速停转
滑行(自由停止) OFF OFF OFF OFF 电机惯性自由旋转

致命陷阱:千万不要让Q1和Q2同时导通,或者Q3和Q4同时导通!这叫「直通短路」,电流会直接从VCC灌到GND,MOS管瞬间烧毁。我曾经在调试时因为软件时序问题,让上下管同时导通了0.5ms,结果MOS管直接炸裂。所以,一定要加死区时间(Dead Time)。

电机调速方法

调速是电机控制的核心需求。直流电机调速有三种主流方法,我按实际工程中的使用频率排序:

  1. PWM调压调速 —— 最常用,效率高
  2. 电枢串电阻调速 —— 老式方法,效率低
  3. 调磁调速 —— 用于弱磁升速场景

咱们重点讲PWM调速,因为这是本课程的核心。PWM调速的原理很简单:用固定频率的方波控制MOS管的导通和关断。通过改变占空比,改变电机两端的平均电压。

关键公式:

Uavg = D × VCC

其中 D 是占空比(0~1),VCC 是电源电压。

占空比50%时,平均电压就是电源电压的一半。电机转速也差不多是一半。

PWM频率怎么选?我一般遵循这个原则:

应用场景 推荐PWM频率 说明
普通直流电机(玩具、小车) 1kHz ~ 10kHz 频率太低电机会抖动,有噪音
精密直流电机(伺服、机器人) 10kHz ~ 50kHz 频率高,电流纹波小,控制更平滑
有刷电机(大功率) 500Hz ~ 2kHz 频率太高,MOS管开关损耗大

我的经验:对于大多数小功率直流电机,我习惯用10kHz左右的PWM频率。这个频率人耳基本听不到,电机运行也平稳。如果电机发出尖锐的啸叫声,说明PWM频率落在了人耳敏感区(2kHz~5kHz),适当调高或调低就能解决。

PWM调速的代码实现,以STM32为例,配置定时器输出PWM:

// 以STM32 TIM2 通道1为例,输出PWM控制电机
// 假设定时器时钟为72MHz,预分频器72-1,自动重载1000-1
// 则PWM频率 = 72MHz / 72 / 1000 = 1000Hz

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

// 1. 使能时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

// 2. 配置定时器
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;        // 预分频
TIM_TimeBaseStructure.TIM_Period = 1000 - 1;          // 自动重载值
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

// 3. 配置PWM通道
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500;                  // 初始占空比50%
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);

// 4. 使能定时器
TIM_Cmd(TIM2, ENABLE);

// 5. 运行时修改占空比
void set_motor_speed(uint16_t duty_cycle) {
    // duty_cycle范围:0~1000,对应0%~100%
    TIM_SetCompare1(TIM2, duty_cycle);
}

嗯,这里要注意一点:PWM调速虽然简单,但实际工程中要考虑电机电感和电流纹波。电感越大,电流越平滑,但响应速度会变慢。我做过一个项目,电机电感很小,PWM频率又偏低,结果电流纹波大得离谱,电机发热严重。后来把频率从1kHz提到20kHz,问题就解决了。

调速方法对比

三种调速方法各有优劣,我直接给你结论:

调速方法 效率 调速范围 成本 适用场景
PWM调压 高(>90%) 宽(0~100%) 低 绝大多数现代应用
串电阻 低(发热严重) 窄(只能降速) 极低 老式设备、临时调试
调磁 中 窄(只能升速) 高 需要弱磁升速的场合

说白了,现在做电机控制,99%的情况都用PWM。串电阻调速我只有在实验室临时测试时用过,调磁调速在永磁电机上基本用不到。

避坑指南

最后,分享几个我踩过的坑:

  • 死区时间不够:我曾经在H桥驱动中只设了100ns死区,结果MOS管开关速度太快,上下管还是瞬间导通了。建议死区时间至少设为MOS管开关时间的3~5倍。
  • PWM频率与电机谐振:有一次电机在某个转速下剧烈抖动,查了半天发现是PWM频率的谐波和电机机械谐振频率重合了。解决办法是微调PWM频率,避开谐振点。
  • 电源滤波不足:电机启动瞬间电流很大,会把电源电压拉低,导致MCU复位。一定要在电机电源入口加足够大的电解电容(建议1000μF以上)。

好了,直流电机的工作原理、H桥电路和调速方法就讲到这里。这些是电机控制的底层逻辑,后面讲PWM部署时,你会反复用到这些知识。