PWM功率放大器设计实战:H桥、死区与自举电容避坑
做运动控制或者电机驱动的朋友多多少少都会被一门叫「自控元件及线路」的课或者一本同类教材绊一下其中 PWM 功率放大器这一节往往是最容易字都认识、连起来看不懂的地方。原因很简单前面讲运算放大器、讲反馈、讲积分校正都还在小信号世界里电流是毫安级随手搭个面包板就能跑到了 PWM 功率放大器画风突变——电流直接上到几安培甚至几十安培母线电压几十伏场效应管开始烫手示波器上的波形开始长毛刺电机还可能突然飞车。我当年第一次做 H 桥驱动的时候烧掉的管子加起来够买两顿火锅也正是从那时候起我才真正把开关型功率放大这套逻辑理顺。这篇文章就按我自己复现这套电路的顺序来写先把 PWM 功率放大器的三层结构拆开讲清楚再讲拓扑和驱动怎么选、载波频率和 LC 滤波器怎么算、死区和自举电容这些看着不起眼但决定成败的细节最后把我踩过的坑整理成一张速查表。不管你是正在上这门课的学生还是拿着 8051、STM32 或者 CCU6 模块做电机驱动的工程新手都能照着往下走。1. PWM 功率放大器到底在自控系统里扮演什么角色1.1 把放大拆成三层调制、功率、解调很多人第一次听到PWM 功率放大器会本能地把它和音频功放联系起来觉得应该是一个能把小信号线性放大的器件。这个理解只对了一半。PWM 功率放大器本质上是开关型D 类功率放大它的核心思路不是让晶体管工作在线性放大区去承受压差而是让晶体管工作在饱和与截止两个极端状态用占空比这个变量来携带信息最后再靠后级把信息还原出来。按这个思路一台完整的 PWM 功率放大器可以拆成三层调制级把连续的参考量一个控制电压、一个速度给定、一路音频信号编码成占空比 D。这一层通常由 MCU 的定时器完成比如 STM32 的 TIM1 互补输出、Infineon CCU6 的 T12 通道、或者 8051 的定时器软件模拟。功率级由 MOSFET 或 IGBT 组成的桥臂把占空比 D 变成平均值等于 D·Vin的输出电压或者受控电流。这一层才是真正放大的地方——它放大的不是瞬时幅度而是功率控制侧可能只有几毫瓦的驱动需求输出侧却是几百瓦。解调级用电感、电容组成的低通网络或者干脆用负载自身的电感比如直流电机的电枢电感把高频开关纹波滤掉留下我们想要的低频分量。之所以要这样分层理解是因为每一层的设计目标和失败模式完全不同。调制级出错表现是占空比不准、死区时间不对功率级出错表现是管子发热、波形振铃甚至直通炸管解调级出错表现是纹波大、电流断续、电机有啸叫。把三层分清你排查问题时就直接知道该把探头放到哪个点上。我在带新人时反复强调这一点先定位层次再定位元件否则你在桥臂上量半天问题其实出在定时器的死区寄存器没配。1.2 和线性功放算一笔账为什么非要用开关方式要理解为什么自控系统里几乎全用 PWM 功率放大最直接的办法是算损耗。线性功放的晶体管工作在放大区流过管子的电流等于负载电流 Io管子两端的压降等于电源电压 − 输出电压。所以管子上的瞬时损耗是Ploss_linear (Vcc − Vo) × Io假设你要用 24 V 母线驱动一个 24 V、5 A 的直流电机在低速时输出电压只有 6 V那么管子上的损耗就是 (24 − 6) × 5 90 W。这个热量意味着一个巨大的散热片和一个随时可能触发热保护的系统。而 A 类功放的理论最高效率只有 25% 左右B 类理论最高 78.5%实际做出来有 60% 到 70% 就算不错了。PWM 功率放大器的路子完全不同。管子要么导通压降只有 I × Rds(on)比如 10 mΩ 的管子过 5 A 只有 0.25 W要么截止几乎没有电流损耗主要来自两部分损耗类型表达式典型占比导通损耗I² × Rds(on) × D主要部分低频时开关损耗0.5 × Vds × Id × (tr tf) × fsw随载波频率线性增长栅极驱动损耗Qg × Vgs × fsw通常很小但高频时不可忽略死区体二极管损耗Vf × Io × td × fsw死区越大越明显理想情况下效率趋近 100%实际做得好能到 90% 以上。同样那个 24 V / 5 A 的场景用全桥 PWM 驱动选一颗 10 mΩ 的 MOS导通损耗两个管子加起来也就 0.5 W 量级加上开关损耗整体发热能压到 2 W 以内。这个差距不是优化而是数量级的差别。当然代价也是有的开关方式会引入高频纹波、电磁干扰、死区导致的非线性还有死区时间引发的低占空比失真。这些我们在后面章节一个个处理。但就自控元件及线路这门课的知识框架来说你需要记住的是功率放大的主矛盾是效率与发热而 PWM 是绕开线性损耗最有效的手段。1.3 场景盘点从直流电机到舵机、从 D 类音频到轮速信号PWM 功率放大器的应用面比想象中宽得多我把常见的几类列出来你在做项目时可以对号入座直流电机调速这是最典型的场景。单片机输出 PWM 给 H 桥H 桥输出给电机占空比决定平均电压从而决定转速。风扇 PWM 调速电路也属于这一类只是载波频率通常选在 25 kHz 左右避开了人耳敏感频段。舵机控制注意这里和上面不太一样。舵机接受的是位置指令型 PWM标准是 50 Hz 周期、0.5 ms 到 2.5 ms 的高电平宽度。它内部其实还有一个自己的闭环功放你只需要把指令送对就行。D 类音频功放载波频率通常在 200 kHz 到 1 MHz 之间调制方式有 PWM 和更高效的 Σ-Δ 调制输出接 LC 低通滤波器还原音频。H 桥整流与逆变单相 H 桥 PWM 整流器就是把这个结构反过来用用 PWM 控制桥臂让交流侧电流跟踪给定功率因数可以做到接近 1。传感器信号输出一些轮速传感器输出的就是 PWM 协议信号占空比或频率携带转速信息MCU 端用输入捕获解读。这一侧是信号而非功率但理解调制原理是相通的。PWM 加 DMA用 DMA 自动刷新比较寄存器可以输出任意波形的等效调制比如用 SPWM 生成正弦波驱动电机做 FOC 的前级。这些场景里功率级的拓扑其实高度相似区别主要在载波频率、调制方式和保护策略。所以你把一套 H 桥吃透迁移到其他场景的成本很低。2. 电路设计与选型拓扑、驱动、滤波器2.1 三种主电路拓扑怎么选不后悔功率级拓扑从简单到复杂常用的有三种拓扑开关数能力适用场景主要缺点单管低边1单向调速、不可逆小功率风扇、简单调光无法换向、无法制动半桥2单向调速 能耗制动单向旋转、要求快速停车的场合无法反向运行全桥 H 桥4四象限运行、正反转、回馈制动直流电机正反转、舵机、逆变需要高边驱动、控制复杂选拓扑的核心判断就三句话需不需要反转、需不需要制动、需不需要能量回馈。只是单向调速一个低边 MOS 加续流二极管就够了多一个开关就多一份故障率。要正反转就必须上 H 桥。如果还要求电机减速时把能量送回母线比如电动车、机器人关节那 H 桥的四个管子都得配体二极管或者外加快恢复二极管母线上还要有能吸收回馈能量的电容乃至制动斩波电路。我在实际项目里见过的最典型错误是拿半桥去驱动一个需要频繁换向的机构结果靠继电器换向机械触点几个月就报废了。如果你预算不算紧张能上全桥就直接上全桥因为 H 桥的控制代码是通用的后期需求变化时不用重画板子。2.2 驱动级才是成败关键高边驱动怎么喂H 桥里最容易被低估的是高边驱动。低边 MOS 的源极接地栅极给个相对于地的电压就行高边 MOS 的源极浮在桥臂中点上会随着开关在 0 V 和母线电压之间来回跳。你的 MCU 输出 3.3 V 显然是没法直接驱动的而且参考点也在跳用普通电路根本驱动不了。三种常见解法自举电容方案用一个二极管加一个电容在低边导通时给电容充电高边导通时用电容上的电压作为高边驱动电源。成本最低但要求占空比不能做到 100%因为高边持续导通时自举电容得不到补充。隔离电源方案每个高边配一路独立的隔离 DC-DC占用布板面积和成本但占空比可以做到全范围。变压器/光耦隔离驱动适合高压场合同时提供电气隔离。对绝大多数实验室项目半桥驱动 IC 加自举电容是最优解。这类芯片一般有 HIN、LIN 两个输入HO、LO 两个输出还有 VB、VS 两个自举引脚外加一个防止高低边同时导通的内部互锁。选型时重点关注三个参数峰值驱动电流决定开关速度、死区时间有的芯片内部固定有的靠外部电阻设置、以及是否带欠压锁定和故障输出。栅极峰值驱动电流的估算很简单Ipeak Qg / t_switch例如一颗 Qg 60 nC 的 MOS你希望开关时间控制在 30 ns那驱动电流至少要 2 A。很多新手直接拿 MCU 引脚去驱动 MOS输出电流只有几十毫安开关时间被拉到微秒级管子就长期工作在线性区——这正是PWM 接 MOS 管发热最经典的原因。2.3 LC 滤波器与载波频率必须联合设计解调级的低通滤波器不能单独设计它和载波频率是一对耦合参数。二阶 LC 滤波器的截止频率是fc 1 / (2π√(LC))设计原则有两条。第一条截止频率要远低于载波频率一般取 fc fsw / 10 到 fsw / 20这样在载波频率处能获得 30 dB 以上的衰减。第二条截止频率要高于你要还原的信号带宽否则有用信号也被滤掉了。做音频功放时fc 通常取 30 kHz 到 50 kHz做电机驱动时电机自身的电感已经构成了天然的低通往往只需要在桥臂输出加小容量的 RC 吸收网络抑制尖峰。举个具体的音频 D 类例子取 L 22 µHC 0.47 µF则fc 1 / (2π × √(22×10⁻⁶ × 0.47×10⁻⁶)) ≈ 49.5 kHz如果载波频率选 400 kHz那么载波处衰减大约是 −40 × log10(400/49.5) ≈ −36 dB用二阶滤波器来说这个结果是可以接受的。但要注意电感的饱和电流必须大于峰值输出电流一旦电感饱和等效电感骤降截止频率上移纹波会突然变大还可能触发过流保护。电容的选择也有讲究电解电容容量大但等效串联电阻高、高频特性差必须并联 MLCC 小电容使用。母线侧的电解电容负责低频能量缓冲桥臂侧的 MLCC 负责吸收高频开关电流两者不能互相替代。3. 关键参数计算与实操要点3.1 载波频率的取舍听感、纹波和损耗的三方博弈载波频率定不好整个系统会处处别扭。我把影响列成一张表便于你按项目优先级取舍提高载波频率的收益提高载波频率的代价输出纹波电流减小开关损耗线性增加LC 滤波器可以做小栅极驱动损耗增加驱动芯片发热电流环带宽可以做高动态响应更快电磁干扰增强布板要求更高避开人耳可听范围减少啸叫死区占比增大低占空比非线性加重经验值可以这样记有刷直流电机16 kHz 到 25 kHz。低于 16 kHz 会有明显的可听啸叫高于 25 kHz 又白白增加开关损耗。有刷电机常选 20 kHz 左右。无刷电机 FOC20 kHz 到 40 kHz 比较常见配合电流采样窗口设计。如果 MCU 算力有限降到 16 kHz 也要注意噪声。音频 D 类200 kHz 到 1 MHz。低端用 300 kHz 左右高端为了降低输出滤波器的体积会做到 600 kHz 以上。舵机指令固定 50 Hz这不是功率放大的载波只是位置指令的周期。还有一个容易被忽略的点载波频率要避开机械共振。有些小型减速机构在 8 kHz 附近有明显共振如果你恰好把 PWM 频率设在那个点上整机会嗡嗡响。我遇到过一台云台把载波从 8 kHz 改到 20 kHz 之后噪声直接消失了。3.2 电感、电容的定量算例24 V / 5 A 系统拿一个具体系统练手母线 24 V驱动有刷电机额定电流 5 A载波频率 20 kHz要求纹波电流不超过额定的 20%。BUCK 型降压工作时电感上的纹波电流公式是ΔI (Vin − Vout) × D / (L × fsw)其中 D Vout / Vin最恶劣的情况通常出现在 D 0.5 附近此时ΔI (24 − 12) × 0.5 / (L × 20000) 6 / (20000L)要求 ΔI ≤ 1 A5 A 的 20%则L ≥ 6 / (20000 × 1) 300 µH实际取 330 µH 标称值实测 ΔI ≈ 0.91 A符合预期。注意这个算法里假设了电感电流连续如果电机轻载导致电流断续纹波会比计算值大这也是为什么轻载时测量到的波形常常更好看——因为电流进了断续模式。输出电容按纹波电压要求算ΔVout ΔI / (8 × fsw × C)要求 ΔVout ≤ 0.1 V则C ≥ 0.91 / (8 × 20000 × 0.1) 57 µF理论上 57 µF 就够但实际我会放 220 µF 电解并联两颗 10 µF 的 MLCC。多出来的余量用来对付负载突变和母线回馈不要卡着理论值做。这个留三倍余量的习惯是我烧了几次管子之后养成的。3.3 死区、自举电容、栅极电阻三个小参数决定成败死区时间是最容易被忽视又最容易出问题的参数。H 桥同一桥臂的上下管如果同时导通母线会经两个管子直接短路电流只受回路寄生电阻限制几微秒就能把管子烧穿。死区时间必须大于开关管的关断延时加驱动器的传输延时通常取 200 ns 到 1 µs。死区也不是越大越好。死区期间输出电流通过体二极管续流会造成输出电压偏差在小占空比时这个偏差占比很大表现为低速时电机转不动或者波形明显失真。实测经验是满足不直通的前提下取最小值然后用软件补偿比如在低占空比区做非线性补偿曲线。自举电容的取值有明确公式Cboot ≥ Qg / ΔV其中 ΔV 是允许的自举电压跌落假设 MOS 的 Qg 50 nC希望自举电压在开通期间跌落不超过 0.5 V则 Cboot ≥ 100 nF。考虑自举二极管反向漏电和 PCB 漏电实际取 10 倍余量用 1 µF 的 X7R 瓷片电容。自举二极管必须用快恢复型普通整流二极管的反向恢复时间太长会把自举电压拉垮。另外自举回路要串一个 2 Ω 到 10 Ω 的限流电阻抑制自举电容充电时对低边管产生的冲击。栅极电阻 Rg控制开关速度。估算开关时间可以用t ≈ 2.2 × Rg × Ciss以 Ciss 2 nF、Rg 10 Ω 计算t ≈ 44 ns属于比较健康的范围。Rg 太小会导致栅极振铃和电磁干扰太大又会让管子长时间处在放大区开关损耗剧增。一般从 10 Ω 起步观察栅极波形的过冲和振铃再上下调整。如果发现栅极波形上有明显的米勒平台振荡可以在栅极和源极之间并一颗十几到几十欧姆的放电电阻或者适当加大关断电阻把开通和关断回路用二极管分开。3.4 保护做在前面过流、欠压、堵转和飞车功率级出故障的速度远比软件反应快所以保护必须硬件优先、软件兜底。过流保护在母线或桥臂下串采样电阻用比较器判断一旦超阈值直接拉低驱动芯片的使能脚或者触发 MCU 的刹车输入BKIN。这种硬件路径的响应时间在微秒级软件轮询至少要几十微秒差别就是管子能不能保住。欠压锁定驱动电压不足时 MOS 会进入放大区瞬间过热。几乎所有半桥驱动芯片都有 UVLO但你要确认它工作在正确的电压范围尤其是在电池供电、电压缓慢下降的场景。堵转保护电机被卡住时电流达到堵转电流发热急剧上升。用电流采样加时间积分判断持续超标就停机。这个逻辑建议放在定时器中断里做不要放到慢速任务中。飞车保护——也就是热词里的PWM 电机飞车——成因主要有三类一是上电初始化时 MCU 引脚处于高阻态驱动芯片输入悬空导致误触发二是复位瞬间引脚状态不确定三是软件中出现占空比变量越界。对策很直接驱动芯片输入端加下拉电阻MCU 初始化第一件事就是把 PWM 输出关掉并使能主输出关闭MOE 清零然后再配置定时器。这个顺序反了就等着电机自己跑起来。4. 从配置到联调的完整实操过程4.1 定时器与 PWM 通道配置以手头最常见的 STM32 为例用 CubeMX 配置一路互补 PWM 输出加死区加刹车输入关键步骤如下选择高级定时器TIM1 或 TIM8这类定时器才有互补输出和死区插入功能。时钟源选内部时钟预分频器和自动重载值按目标频率计算。以 72 MHz 主频、20 kHz 载波、中心对齐模式为例中心对齐时计数频率要乘 2所以ARR 72 000 000 / (2 × 20000) − 1 1799通道配置为 PWM Generation CH1 CH1N也就是互补输出对。死区时间按驱动芯片传输延时和 MOS 关断时间设置比如 500 ns。CubeMX 会自动算出对应的 DTG 寄存器值。刹车输入配置为使能极性选低电平有效这样硬件比较器一拉低就能立刻关断输出。生成代码后记得手动使能主输出否则互补通道不会工作。/* 使能主输出否则 CH1N 无波形 */ __HAL_TIM_MOE_ENABLE(htim1); /* 启动 PWM注意要先启动再改占空比 */ HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1); /* 设置占空比CCR 范围为 0 ~ ARR */ __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, 900);这段代码里有两个新手常踩的坑。第一个是忘记__HAL_TIM_MOE_ENABLE结果通道 CH1 有波形、CH1N 死活不动。第二个是HAL_TIM_PWM_Start和HAL_TIMEx_PWMN_Start的调用漏了后者导致互补通道没被启动。这两个问题我在论坛上见过的提问次数多得数不清。4.2 单极性与双极性调制H 桥代码怎么写H 桥的调制方式直接影响电流纹波和电磁干扰两种方式必须搞清楚。双极性调制对角两个管子同时开关另一对互补。占空比 50% 时输出电压为零占空比大于 50% 输出正电压小于 50% 输出负电压。优点是控制简单、电流连续性好缺点是同样的输出电压下电流纹波是单极性调制的两倍开关损耗也大。单极性调制一个桥臂用 PWM 控制另一个桥臂保持固定状态正转时下管常通、上管常断或者两个桥臂用同一频率但相位差 180° 的 PWM。优点是纹波小、效率高缺点是换向逻辑要处理清楚否则容易出现直通。typedef enum { DIR_STOP 0, DIR_FORWARD, DIR_REVERSE } motor_dir_t; void motor_set(motor_dir_t dir, uint16_t duty) { /* duty 范围 0 ~ 1000 */ uint32_t ccr (uint32_t)duty * (htim1.Init.Period 1) / 1000; switch (dir) { case DIR_FORWARD: /* 左桥臂 PWM右桥臂下管常通 */ __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, ccr); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET); break; case DIR_REVERSE: /* 右桥臂 PWM左桥臂下管常通 */ __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_2, ccr); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET); break; case DIR_STOP: default: __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, 0); __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_2, 0); break; } }换向时必须先停机、等电流衰减到零附近再切换方向否则电机反电动势和母线电容之间会产生很大的冲击电流。这个换向前先停 50 到 100 ms的小动作能让管子寿命长很多。4.3 上电调试顺序一定不要跳步调试功率电路最忌讳一上来就接满电压和满载。我自己的固定流程是这样的不接功率级先看驱动波形。把驱动芯片的输出接到示波器上或者接几个栅极电容模拟负载确认高低边波形正确、死区时间符合预期、没有重叠。低压空载。母线给 5 V接电机但不加载看桥臂中点波形是否为干净的方波占空比是否随设定变化。低压带载。加上机械负载观察电流波形和管子温度。逐步升压。每次提高 5 V停下来观察十分钟重点看管子温度、母线电流纹波和波形过冲。满压满负载。这时候才是真正的验收测试同时记录温升曲线。测点选择也很关键。栅极波形看驱动能力重点看上升沿时间和过冲桥臂中点看开关质量重点看振铃和下降沿的电压尖峰母线电流看纹波和回馈用电流探头或者采样电阻加差分探头管壳温度看热设计余量用热电偶贴在管子背面。四个点看下来问题基本都能定位。4.4 低端 MCU 上做高分辨率 PWM 的变通做法热词里有用 8051 单片机模拟出 16 位 PWM这个问题很有代表性。8051 的定时器通常是 8 位或 16 位自动重载直接做高分辨率 PWM 会遇到两个限制一是定时器位宽不够二是中断频率太高 CPU 扛不住。几套可行的变通方案抖动法dithering用 8 位 PWM 做粗调再在多个周期之间交替改变占空比来实现等效的高分辨率。比如需要 10.5 个计数的占空比就一半周期给 10、一半周期给 11平均下来就是 10.5。这个方法在低频信号上等效分辨率可以提升 4 到 6 位代价是输出有低频抖动分量。定时器级联用一个定时器产生高位、另一个产生低位通过溢出中断联动。思路类似于把 16 位拆成两个 8 位但中断处理开销大载波频率做不高。PCA 或专用 PWM 模块很多增强型 8051比如带 PCA 的型号有可编程计数阵列可以产生比纯定时器更高分辨率的 PWM且不占用 CPU。这是我最推荐的路子。外扩 PWM 芯片如果 MCU 资源实在紧张用 I2C 或 SPI 接一颗专用 PWM 发生器把分辨率问题交给专用芯片。/* 抖动法示意在周期中断里交替更新比较值 */ static uint8_t frac 0; static uint8_t base 100; /* 粗调值 */ static uint8_t fine 5; /* 小数部分范围 0~15 */ void timer0_isr(void) interrupt 1 { frac (frac fine) 0x0F; if (frac fine) { /* 进位本周期加 1 */ TH0 base 1; } else { TH0 base; } }这段代码只是个骨架实际使用要结合具体芯片的定时器模式和重载方式。要点是进位判断要均匀分布不能集中在一个时间段否则抖动会变成可听的低频噪声。5. 故障排查与避坑实录5.1 常见问题速查表下面这张表是我这些年攒下来的覆盖了热词里出现频率最高的几类问题现象高概率原因排查动作MOS 管发烫但能工作栅极驱动电流不足、开关时间长、Rg 偏大测栅极波形上升时间换更大驱动电流的驱动芯片MOS 管瞬间炸毁同一桥臂直通、死区不足、驱动芯片互锁失效先断开功率级只测驱动波形确认死区电机上电就飞车MCU 引脚复位期间悬空、驱动输入无下拉、MOE 提前使能驱动输入加 10 kΩ 下拉初始化先关输出波形上有高频振铃栅极回路寄生电感大、探头地线过长缩短栅极走线用弹簧地环测量占空比小的时候电机不转死区占比过大、体二极管压降、启动转矩不足减小死区或改用单极性调制电流波形有尖刺母线去耦不足、换向瞬间回馈母线加 MLCC软件加换向延时采样电流不准采样时刻落在开关瞬间、地线共阻抗在中心对齐模式的计数谷点采样电平转换后 PWM 失真转换芯片速率不够、驱动能力不足换高速电平转换或直接选宽压驱动芯片5.2 波形异常和热问题的定位思路很多人一看到管子发热就加大散热片这是治标。判断热问题的性质看一个指标就够了发热是否随载波频率上升而明显加剧。如果是说明主要是开关损耗要从驱动能力和死区入手如果发热基本不随频率变化那八成是导通损耗要么是管子 Rds(on) 偏大要么是电流超出了预期。波形振铃的判断也有规律。振铃频率通常在几十兆赫兹来源于栅极回路的寄生电感和输入电容构成的谐振。你可以粗算一下f_ring 1 / (2π√(L_loop × Ciss))假设 L_loop 20 nH、Ciss 2 nF则 f_ring ≈ 25 MHz量级对得上。降低振铃的办法是缩短栅极走线、加大 Rg、在栅源之间加小电容或者把驱动芯片紧贴管子放置。切记不要用加长探头的办法看到干净波形那只是探头带宽不够把振铃滤掉了管子上照样有。5.3 几条踩坑换来的经验第一驱动级和功率级一定要分开调试。我早期图省事一次性把驱动芯片和 MOS 全焊上结果一上电就炸管根本不知道是驱动参数不对还是功率回路有问题。分开调之后至少能确定驱动波形是干净的再往上加功率级排错面就小很多。第二母线去耦电容要按回路面积布置。电解电容和 MLCC 都要有而且 MLCC 必须紧贴桥臂的电源和地引脚越近越好。我做过一个对比MLCC 从 2 cm 外移到 3 mm 内桥臂中点的电压尖峰从 12 V 降到 4 V效果比换管子明显得多。第三采样时刻要挑在电流纹波的谷点。中心对齐模式下计数器的零点或顶点正好对应电感电流的平均值附近这时候采样的结果最接近真实平均电流。如果在开关瞬间采样量到的是纹波峰值控制器会把电流环调偏。第四PWM 加 DMA 是个被低估的组合。用 DMA 自动把预先算好的占空比序列送到比较寄存器可以做到零 CPU 开销输出任意调制波形做正弦调制、软启动斜率、甚至自定义补偿曲线都很方便。我后来做电流环软启动就直接用一张 256 点的斜率表配 DMA 循环搬运代码量比定时器中断里算还少。第五留测量点比留调试口更值钱。板子上提前引出栅极、桥臂中点、母线电流、母线电压这几个测试点用测试环而不是测试针后期排障会轻松太多。一块省了测试点的板子返修的时候会让你多花十倍时间。最后分享一点我自己的体会。PWM 功率放大器这一类电路参数表上看着都是标准做法真正的难点其实在边界情况上上电那一瞬间的引脚状态、换向那一瞬间的电流回馈、低占空比时死区带来的非线性、高温下 Rds(on) 上升导致的连锁反应。这些东西教材上讲得少只有在实验室里一次次把管子烧掉、把示波器探头接错、把电机看着它自己飞出去才能真正记住。我现在做新板的习惯是先在纸上把最坏的三种情况写下来再决定保护电路怎么加。如果你正在啃「自控元件及线路」里这一章我建议你不要停在算公式上找一块现成的驱动板从示波器上看一遍栅极波形和桥臂中点的方波那些公式会一下子变得有画面感。