【硬件避坑】H桥一上电就“炸管”冒青烟?一文彻底讲透驱动死区(Dead Time)的生死劫
在单片机课上老师教我们的 H 桥逻辑极其简单左上和右下的开关MOS 管闭合电机正转右上和左下的开关闭合电机反转。你觉得这有何难于是你写下代码让 STM32 的两个 GPIO 口一个瞬间拉高一个瞬间拉低试图让电机瞬间反转。结果代码刚烧进去你的两颗昂贵的 N-MOS 管瞬间爆裂甚至连铜皮都烧断了。为什么“理论完全正确”的代码在物理世界却引发了灾难因为你忽略了微观世界中的“时间差”。一、 残酷的物理现实MOSFET 不是完美的开关在代码里一个变量从 1 变成 0 只需要一个时钟周期几纳秒。但在物理世界中MOSFET 的栅极Gate实际上是一个微小的电容由于寄生电容 $C_{gs}$ 和米勒电容 $C_{gd}$ 的存在。导通Turn-on给栅极充电电压上升沟道逐渐打开。关断Turn-off把栅极的电荷抽干电压下降沟道逐渐关闭。最要命的物理特性在于MOS 管的关断速度通常比导通速度要慢把它完全关断往往需要几十到几百纳秒的时间。二、 史诗级灾难“桥臂直通”Shoot-ThroughH 桥的同一侧桥臂由一个上管接 VCC和一个下管接 GND组成。当你的代码发出指令让上管关断的同时让下管导通时灾难发生了因为关断比导通慢下管已经迅雷不及掩耳之势导通了而上管由于电荷还没放完仍然处于半导通状态在这一瞬间可能只有短短的 100 纳秒VCC 和 GND 之间形成了一条没有经过任何负载电机的超级短路通道。上百安培的短路电流瞬间贯穿上下两个 MOS 管产生极其恐怖的焦耳热芯片内部瞬间熔毁甚至把封装直接炸开。这就是闻风丧胆的**“炸管”**。三、 续命神药死区时间Dead Time为了防止这种“青黄不接”导致的短路硬件工程师引入了一个救命的机制——死区时间Dead Time。死区时间的逻辑非常粗暴且有效“让子弹飞一会儿”。当我们需要切换上下管的状态时先发出指令关断上管。强制等待一段极短的时间死区时间比如 500ns。在这个时间段内上管和下管都是处于关断状态的全关。确认上管的电荷绝对已经放光彻底死透了再发出指令导通下管。这个人为加入的“强制全关断空白期”就是死区。四、 怎么加死区硬件派 vs 软件派在电赛实战中加入死区通常有两种做法硬件死区驱动芯片自带这是最稳妥的做法。像 IR2104、EG2104 这种半桥驱动芯片内部集成了死区生成电路。单片机只需要给一个 PWM 信号芯片会自动生成两路互补的、且带死区的控制信号。好处是绝对安全单片机程序怎么跑飞都不会炸管。软件死区STM32 高级定时器如果你是用独立栅极驱动器如 IR2110自己搭全桥就必须用单片机生成带死区的 PWM。STM32 的 TIM1 和 TIM8 是高级定时器内部有一个极其强大的寄存器——BDTR刹车和死区寄存器。只需配置这个寄存器硬件底层的时基单元就会自动在两路互补输出之间插入精确到纳秒级的死区极其强大五、 终极博弈死区越长越好吗既然死区能防炸管那我设个 10 微秒行不行绝对不行死区时间内电机是没有驱动力输入的。如果死区太长波形严重失真输出的电压波形会被“削去”一大块。转矩脉动电机在低速时会发出“嗡嗡”的异响转动极其不平滑。非线性严重你算出来的 PID 输出会被过长的死区吃掉很大一部分导致控制系统无法收敛。结论死区时间是一门**“刀尖上跳舞”**的艺术。你必须查阅你所用 MOS 管的 Datasheet看 $T_{d(off)}$ 和 $T_f$结合栅极电阻的大小将死区时间卡在一个“刚好足够关断又尽量短”的极限位置通常在 100ns 到 1us 之间。今日互动你在调电机的时候炸过几块板子最惨烈的一次烧了几个 MOS 管你当时的死区是怎么设置的欢迎在评论区开个“比惨大会”