第1章 电机驱动基础:H桥原理、MOSFET开关逻辑、PWM调速原理

各位同学,欢迎来到《售货机电机驱动控制算法实战解析》的第一课。

做售货机驱动,说白了就是跟直流电机打交道。你想想看,货道要转、弹簧要推、升降台要动,背后都是电机在干活。而控制电机最核心的硬件基础,就是我今天要讲的这三个东西:H桥、MOSFET、PWM

我刚开始做电机驱动那会儿,总觉得H桥就是个开关组合,没什么难的。结果第一次上电,MOS管直接冒烟了……嗯,从那以后我再也不敢小看这几个基础元件了。

1.1 H桥原理:让电机正转、反转、刹车

H桥为什么叫H桥?你看它的电路拓扑,四个开关管摆成“H”形,电机横在中间,像一座桥。它的任务很简单:控制电流方向

核心逻辑:

  • 正转:左上Q1 + 右下Q4 导通,电流从左往右流过电机
  • 反转:右上Q2 + 左下Q3 导通,电流从右往左流过电机
  • 刹车(急停):同时导通上管Q1+Q2,或同时导通下管Q3+Q4,电机两端短路
  • 滑行(自由停止):四个管子全关,电机靠惯性转

我在项目中遇到过一个问题:售货机出货时,电机到位后需要立刻刹车,防止货物甩出去。如果只用滑行,弹簧会多转半圈,货物就卡住了。所以刹车逻辑必须用H桥的“同侧导通”来实现。

个人经验: 我建议你在设计H桥控制逻辑时,永远不要同时导通上下两个管子(比如Q1和Q2同时开)。那叫“直通”,相当于电源短路,MOSFET瞬间就炸了。我曾经因为代码里一个延时没处理好,烧了三个驱动板才长记性。

1.2 MOSFET开关逻辑:从“通”到“断”的细节

H桥里的开关,实际用的是MOSFET(金属氧化物半导体场效应管)。它有三个脚:栅极G、漏极D、源极S。控制逻辑其实就一句话:G极电压高于S极一定值,管子就导通;低于阈值,管子就关断

但实际用起来,坑不少。我列几个关键点:

参数 说明 我的建议
Vgs(th) 阈值电压 管子开始导通的最小G-S电压 选3V以下逻辑电平的MOSFET,3.3V单片机直接驱动
Rds(on) 导通电阻 导通时D-S之间的电阻,越小发热越少 售货机电机电流一般1-3A,选Rds(on) < 50mΩ的
Qg 栅极电荷 开关一次需要的电荷量,影响开关速度 PWM频率高时(>10kHz),选Qg小的管子

为什么会烧管子?我遇到过两种情况:

  • 开关速度太慢:MOSFET在导通和关断的中间状态,内阻很大,电流一过就发热。PWM频率越高,这个问题越明显。
  • 栅极振荡:G极走线太长,寄生电感导致电压振荡,管子反复开关。我后来在G极串了个10Ω电阻,问题就解决了。

避坑指南: 我曾经在批量生产时发现,同一批MOSFET的Vgs(th)能差0.5V。如果你的驱动电压刚好卡在阈值附近,有些板子能工作,有些不行。所以我建议驱动电压留足余量,比如用12V驱动,Vgs(th)选2-3V的管子。

1.3 PWM调速原理:用“占空比”控制速度

电机调速,最常用的方法就是PWM(脉冲宽度调制)。说白了就是:给电机通一会儿电,断一会儿电,通断交替。通的时间比例越大,电机转得越快。

这里有个关键概念——占空比

  • 占空比 = 导通时间 / 周期 × 100%
  • 占空比50%:电机半速
  • 占空比100%:全速
  • 占空比0%:停止

你想想看,电机是个大电感,电流不会突变。PWM频率足够高时(比如20kHz),电流波形基本是连续的,电机转起来就很平滑。频率太低呢?电机会“咔咔咔”地抖动,噪音大,还容易烧管子。

我常用的PWM参数:

  • 频率:20kHz(人耳听不到,安静)
  • 分辨率:8位(0-255),步进1%
  • 死区时间:500ns(防止上下管直通)

代码实现其实很简单,以STM32为例:

// 初始化定时器TIM1,输出PWM到PA8
void PWM_Init(void) {
    HAL_TIM_PWM_Init(&htim1);
    TIM_OC_InitTypeDef sConfigOC = {0};
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 128;  // 初始占空比50%
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}

// 设置占空比,speed范围0-255
void SetMotorSpeed(uint8_t speed) {
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, speed);
}

嗯,这里要注意:PWM频率不是越高越好。频率太高,MOSFET的开关损耗会急剧增加,管子发热严重。我一般控制在16kHz到25kHz之间,既听不到噪音,发热也能接受。

一个小技巧: 如果你发现电机在低速时(占空比<10%)不转,别急着换硬件。先检查PWM分辨率够不够。8位分辨率下,1%的占空比对应2.5左右的脉宽,有些电机启动需要更大的初始力矩。我习惯在软件里加个“软启动”,前50ms给一个30%的占空比,然后再降到目标值。

小结一下

这一章我们聊了三个基础:

  • H桥:控制电流方向,实现正反转和刹车
  • MOSFET:H桥里的开关,注意阈值电压和开关速度
  • PWM:通过占空比调速,频率选20kHz左右最合适

这些是电机驱动的“地基”。下一章我会讲怎么用PID算法让电机转得又稳又准,到时候你会发现,今天这些基础理解得越深,后面调PID就越顺手。

好,今天就到这儿。有问题欢迎在课程群里讨论,咱们下章见。


公众号:蓝海资料掘金营,微信deep3321