直流有刷电机基础与H桥驱动原理

各位同学,今天我们来聊聊电机控制里最基础、也最绕不开的一个话题——直流有刷电机和它的驱动方式。说实话,我入行那会儿,第一个接触的电机就是这种。它结构简单,控制起来也直观,但你要是真把它玩透了,后面学无刷电机、步进电机都会轻松很多。

直流有刷电机工作原理

直流有刷电机,说白了就是靠电刷换向的直流电机。你给它通上电,转子就会转。为什么?因为里面有两样东西:定子上的永磁体(或者励磁绕组),和转子上的线圈。电流通过电刷和换向器流进转子线圈,产生磁场,这个磁场和定子磁场一相互作用,就产生了转矩。

我打个比方:就像你拿两块磁铁,同极相斥,异极相吸。转子线圈每转到一个位置,换向器就自动切换电流方向,保证转矩方向始终一致。这就是它自己能一直转下去的秘密。

关键参数:

  • 转速:和电压成正比。电压越高,转得越快。
  • 转矩:和电流成正比。电流越大,力气越大。
  • 反电动势:转子转动时,线圈切割磁感线会产生一个反向电压。转速越高,反电动势越大。

嗯,这里要注意一点:电机启动瞬间,转子还没转,反电动势为零。这时候电流会非常大,可能烧坏电机或驱动电路。我在项目中遇到过好几次,新手一上来就给电机满电压启动,结果MOS管直接冒烟。所以启动时一定要做限流或软启动。

H桥电路拓扑

直流有刷电机要正反转,怎么办?你想想看,改变电流方向就行了。H桥就是干这个活的。

H桥由4个MOS管组成,名字叫Q1、Q2、Q3、Q4。它们接成一个大写的"H"形,电机接在中间横杠上。Q1和Q3是上管,Q2和Q4是下管。每个MOS管都有一个续流二极管,保护管子不被反电动势击穿。

我个人习惯:选MOS管时,除了看耐压和电流,一定要关注Rds(on)(导通电阻)。这个值越小,管子发热越少。我早期吃过亏,选了个Rds(on) 100毫欧的管子,结果跑2A电流就烫得不行。后来换成20毫欧的,散热片都省了。

H桥的四种基本状态:

状态 Q1 Q2 Q3 Q4 电机行为
正转 ON OFF OFF ON 电流从左到右,电机正转
反转 OFF ON ON OFF 电流从右到左,电机反转
刹车(慢速) OFF ON OFF ON 电机两端短路,产生制动转矩
刹车(快速) ON OFF ON OFF 同样短路,但电流方向相反
滑行 OFF OFF OFF OFF 所有管子关闭,电机自由转动

警告:绝对不能让Q1和Q2同时导通,也不能让Q3和Q4同时导通。这就是所谓的"直通"或"穿通"。一旦发生,电源直接短路,电流瞬间爆表,MOS管秒烧。我曾经调试时手抖了一下,代码里延时没写够,结果两个管子同时开了0.1毫秒,砰的一声,板子废了。从那以后,我写PWM驱动时一定会加死区时间。

正反转与刹车控制逻辑

控制正反转,其实就是控制H桥的导通组合。但实际工程中,不能直接从正转切到反转。为什么?因为电机有惯性。你正转着突然给它反转信号,电流会瞬间反向,产生巨大的冲击电流,可能烧驱动。

我建议的做法是:先让电机滑行(所有管子关断)或者刹车(上下管短路),等转速降下来,再切换方向。具体用哪种,看你的应用场景。

  • 滑行:电机靠摩擦力自然减速。适合对停车位置没要求的场景。
  • 刹车:电机两端短路,利用反电动势产生制动转矩。停车快,但会有电流冲击。
  • 再生制动:把电机的动能转化成电能回馈给电源。效率高,但电路复杂。

我在做AGV小车项目时,用的是刹车+滑行组合。先刹车0.5秒让速度降下来,然后切滑行,最后再切反转。这样既保证了停车精度,又不会把MOS管烧掉。

PWM调速原理

直流有刷电机调速,最常用的方法就是PWM(脉宽调制)。说白了,就是给电机通一个方波信号,通过调节占空比来控制平均电压。

占空比 = 高电平时间 / 整个周期时间。占空比50%,平均电压就是电源电压的一半。占空比100%,就是满电压。

为什么不用直接调电压?因为线性调压效率低,发热大。PWM用的是开关方式,MOS管要么全开要么全关,损耗很小。你想想看,管子全开时电阻只有几十毫欧,全关时电流为零,都不怎么发热。只有开关切换那一下有损耗,但频率高了,这部分损耗也可以忽略。

PWM频率怎么选?

  • 太低:电机能听到"嗡嗡"声,甚至能看到抖动。一般低于1kHz就会有明显噪音。
  • 太高:MOS管开关损耗增加,驱动芯片发热。超过100kHz就不太划算了。
  • 推荐:10kHz~20kHz。人耳听不到,开关损耗也小。我一般用16kHz,刚好避开音频范围。

代码实现其实很简单。以STM32为例,用定时器输出PWM:

// 假设定时器2,通道1,输出PWM
// 初始化代码略...
// 设置占空比50%
TIM2->CCR1 = 500;  // 如果ARR=1000,占空比50%

// 调速函数
void motor_set_speed(uint16_t speed) {
    // speed范围0~1000
    if(speed > 1000) speed = 1000;
    TIM2->CCR1 = speed;
}

嗯,这里有个坑:PWM频率和电机电感要匹配。电感大的电机,电流纹波小,可以用低频率。电感小的电机,电流纹波大,频率要高一些。我在做微型电机驱动时,电机电感只有几十微亨,PWM频率用到40kHz才把电流纹波压下去。

避坑指南:我曾经在调试时发现电机低速抖动严重。查了半天,发现是PWM分辨率不够。占空比从0变到1时,电机电压跳变太大。后来把定时器ARR设成10000,分辨率提高到0.01%,低速就平稳了。所以,如果你做低速控制,一定要提高PWM分辨率。

最后总结一下:直流有刷电机控制,核心就是H桥+PWM。H桥负责换向,PWM负责调速。两者结合,就能实现平滑的正反转和速度控制。下一章我们讲电流检测和闭环控制,到时候你会看到,有了反馈,电机控制才能真正做到精准。