1. 从一块烧掉的驱动板说起:为什么三相全桥布局值得单独拎出来讲
很多人第一次做无刷电机驱动,注意力全在代码上——FOC算法、SVPWM调制、霍尔换向逻辑,觉得只要算法对了电机就能转。结果板子一上电,管子炸了,或者电机转起来噪声大得离谱,再或者低速时抖动得像筛糠。回头查代码查了半天,最后发现根子在PCB布局和死区时间上。
我这些年经手的无刷驱动板子,从几十瓦的小云台到几千瓦的工业伺服,烧过的MOSFET加起来能铺满一张A4纸。总结下来,功率级布局和死区时间设置是硬件层面最容易翻车的两个点,而且它们有个共同特征:代码里看不出来,示波器上才现原形。
这篇内容就是围绕6个MOSFET构成的三相全桥展开,把布局思路和死区时间的来龙去脉讲透。适合正在画第一块无刷驱动板的朋友,也适合已经能跑起来但想搞清楚“为什么这么设计”的进阶玩家。我不打算只给结论,每个选择背后的逻辑都会拆开说,包括我自己踩过的坑。
先明确一个基本盘:三相全桥由三个半桥组成,每个半桥有上下两个MOSFET,共6个管子。电机三相分别接在三个半桥的中点。通过控制6个管子的开关顺序和占空比,就能在电机三相上产生旋转磁场。听起来简单,但6个管子怎么摆、驱动走线怎么走、死区给多少,每一个都直接影响效率和可靠性。
2. 6个MOSFET的选型逻辑:不是参数越高越好
2.1 耐压与电流的余量怎么留
选MOSFET第一个看耐压。母线电压如果是24V,管子的VDS至少选40V以上;48V母线就选75V或100V。为什么不是刚好选24V或48V?因为电机是感性负载,关断瞬间会产生尖峰电压,加上走线寄生电感,实际管子承受的电压可能是母线的1.5到2倍。我一般按母线电压的2倍来选耐压,24V系统用40V或60V,48V系统用100V。
电流方面,看的是持续电流和峰值电流。假设电机额定电流10A,峰值可能到20A甚至30A。管子的ID额定值要覆盖峰值,但更关键的是看RDS(on)和热阻。RDS(on)决定了导通损耗,热阻决定了热量能不能散出去。有个常见误区:只看ID不看热阻。实际上同样标称30A的管子,封装不同热阻差好几倍,实际能扛的持续电流可能差一半。
2.2 RDS(on)与Qg的权衡
RDS(on)越小,导通损耗越低,但通常意味着芯片面积越大,Qg(栅极总电荷)也越大。Qg大,开关损耗就高,驱动电路负担也重。这两个参数是跷跷板关系。
低频PWM(比如20kHz以下)可以偏向低RDS(on),因为导通损耗占主导。高频PWM(比如40kHz以上)就要兼顾Qg,否则开关损耗会急剧上升。我一般这样估算:先算导通损耗P_cond = I² × RDS(on) × D,再算开关损耗P_sw ≈ 0.5 × VDS × ID × (tr + tf) × fsw,两者相加看总损耗,再结合热阻算结温。
2.3 封装选择:TO-220还是贴片
TO-220直插封装热阻低,方便加散热片,适合大功率场合。贴片封装如TO-252、TO-263、PowerPAK等节省空间,但散热依赖PCB铜箔。我个人的经验是:持续电流超过15A的场合优先考虑TO-220或TO-247,低于10A可以用贴片加足够的铺铜。
贴片管子的散热焊盘一定要大面积铺铜,并且打过孔到背面铜层。过孔不是随便打几个就行,要算热阻。一个0.3mm孔径的过孔热阻大约在100°C/W左右,打10个并联能把热阻降到10°C/W。如果背面还有铜层,效果更好。
3. 三相全桥的PCB布局:电流路径决定成败
3.1 半桥的功率回路面积要最小
每个半桥的功率回路是:母线电容正极 → 上管漏极 → 上管源极 → 下管漏极 → 下管源极 → 采样电阻(如果有)→ 母线电容负极。这个回路里电流在开关瞬间变化率极高,回路面积越大,寄生电感越大,尖峰电压越高。
布局时,上下管要尽量靠近,母线电容要尽量靠近半桥。理想情况下,母线电容的高频去耦电容(比如MLCC)就放在半桥旁边,距离不超过5mm。电解电容可以稍远,但也要在同一个功率区域内。
我见过不少板子把母线电容放在板子另一头,结果开关尖峰高得吓人,管子耐压不够直接炸。后来把MLCC挪到半桥旁边,尖峰立刻降了一半。
3.2 三个半桥的排列方式
三个半桥在PCB上的排列有两种常见方式:一字排开和品字形排列。
一字排开适合散热器统一安装,但三相走线长度不一致,会导致三相阻抗不对称,影响电流采样精度和电机运行平稳性。品字形排列可以让三相走线等长,但散热器安装麻烦一些。
我的做法是:如果功率不大(每相10A以下),优先品字形,保证三相对称。如果功率大需要加散热器,就一字排开,但通过调整走线宽度和长度尽量补偿对称性。
3.3 相线走线:宽度和过孔
相线走的是电机电流,宽度要按电流算。1oz铜厚下,1mm线宽大约能走1A(温升10°C)。10A电流至少10mm宽,或者用2oz铜厚减半。如果空间不够,可以用多层并联走线,但要注意层间电流分配均匀。
过孔也是瓶颈。一个0.3mm孔径的过孔载流大约0.5A到1A,大电流路径上要打足够多的过孔。我一般按每安培2到3个过孔来打,比如10A就打20到30个过孔。
3.4 驱动走线的隔离与抗干扰
驱动走线是弱电信号,功率走线是强电,两者必须隔离。驱动走线不要和功率走线平行,更不要从功率走线下方穿过。如果必须交叉,尽量垂直交叉,减少耦合。
自举电容的走线尤其要注意。自举电容连接在驱动芯片的VB和VS之间,VS又连接到半桥中点。这段走线要短而粗,否则自举电压不稳,上管驱动会出问题。我一般把自举电容放在驱动芯片旁边,VS走线直接连到半桥中点,中间不打过孔。
4. 死区时间:不是随便填个值就行
4.1 死区时间到底在防什么
死区时间是为了防止上下管同时导通造成直通短路。上下管同时导通时,母线电压直接加在两个管子串联的路径上,电流只受RDS(on)限制,瞬间电流可能上百安培,管子几微秒内就炸了。
死区时间就是在关断一个管子之后,延迟一段时间再开通另一个管子,确保先关的管子已经完全关断。这个时间不能太短,太短起不到保护作用;也不能太长,太长会导致输出波形畸变,电机低速时抖动,效率下降。
4.2 死区时间的计算依据
死区时间至少要大过关断延迟时间。关断延迟包括:驱动芯片的传输延迟、MOSFET的关断延迟时间(td(off))、关断下降时间(tf)。这几个参数在数据手册里都有。
以常见的IR2104驱动加IRF3205为例:IR2104的传输延迟约200ns,IRF3205的td(off)约30ns,tf约50ns。加起来约280ns。所以死区时间至少设300ns。实际我会设500ns到1us,留足余量。
但死区时间也不是越大越好。假设PWM频率20kHz,周期50us,死区1us占周期的2%。这2%的时间里输出电压是不确定的,会导致电流波形畸变。低速时反电动势小,这个畸变占比更大,所以低速抖动更明显。
4.3 死区时间对低速性能的影响
低速时电机反电动势很小,死区时间造成的电压误差占比大。假设母线24V,死区1us,PWM周期50us,死区造成的平均电压误差约24V × (1us/50us) = 0.48V。如果低速时相电压只有2V,这0.48V就是24%的误差,电流波形严重畸变,电机抖动。
解决办法有两个:一是减小死区时间,用更快的驱动芯片和MOSFET;二是做死区补偿,在软件里根据电流方向补偿死区造成的电压误差。死区补偿需要知道电流方向,用霍尔电流传感器或采样电阻都能做。
4.4 死区时间的实测方法
死区时间设了之后怎么验证?最直接的方法是用示波器看上下管的栅极波形。两个探头的地夹在一起,分别接上下管栅极,看两个波形的死区时间。注意示波器探头要选高压差分探头或者做好隔离,否则会短路。
另一个方法是看半桥中点的电压波形。死区期间中点电压处于悬浮状态,波形上会有一个平台。平台宽度就是死区时间。这个方法更安全,不需要直接测栅极。
5. 自举驱动电路:上管驱动的关键细节
5.1 自举电容的选型
自举电容给上管驱动提供浮动电源。选型主要看容量和耐压。容量要足够大,能在上管导通期间维持驱动电压。一般按Qg来算:C_boot ≥ 10 × Qg / V_boot。假设Qg=50nC,V_boot=12V,C_boot ≥ 10 × 50nC / 12V ≈ 42nF。实际选100nF到1uF。
耐压要大于母线电压加驱动电压。24V母线加12V驱动,耐压至少36V,实际选50V以上。电容类型选X7R或X5R陶瓷电容,ESR低,高频特性好。
5.2 自举二极管的选型
自举二极管要从驱动电源向自举电容充电,反向耐压要大于母线电压。正向电流要能承受自举电容的充电电流。选快恢复二极管或肖特基二极管,反向恢复时间短,减少开关损耗。
我一般选耐压100V、电流1A的快恢复二极管,比如ES1J或US1M。肖特基二极管反向漏电流大,高温下漏电流更严重,可能导致自举电容电压下降,所以高温场合慎用。
5.3 自举电路的常见问题
自举电路最常见的问题是自举电容充不满电。原因可能是:自举二极管反向漏电大、自举电容容量不够、下管导通时间太短来不及充电。
下管导通时间太短的情况出现在高占空比时。上管导通时间长,下管导通时间短,自举电容放电多充电少,电压逐渐下降。解决办法是限制最大占空比,保证下管有足够的导通时间,或者用独立电源给上管驱动供电。
6. 电流采样与保护:别等炸管了才后悔
6.1 采样电阻的位置选择
电流采样电阻可以放在三个位置:母线负极、半桥下管源极、电机相线。
母线负极采样最简单,一个电阻采总电流,但无法区分是哪一相的电流。半桥下管源极采样可以采到每相电流,但下管源极有开关噪声,需要好的滤波。相线采样最准确,但需要隔离或高压运放,成本高。
FOC控制一般用半桥下管源极采样,因为需要每相电流做坐标变换。采样电阻要选低温度系数的,比如锰铜电阻或合金电阻,温度系数低于50ppm/°C。
6.2 采样信号的滤波
采样电阻上的电压信号很小,10A电流用0.01Ω电阻只有0.1V。这么小的信号容易受开关噪声干扰。需要在采样电阻两端加RC滤波,截止频率要高于电流环带宽但低于PWM频率。
假设PWM频率20kHz,电流环带宽2kHz,RC截止频率可以设10kHz。R=1kΩ,C=15nF,截止频率约10.6kHz。注意RC滤波会引入相位延迟,在电流环里要补偿。
6.3 过流保护的响应时间
过流保护要快,慢了管子就炸了。比较器响应时间加驱动关断延迟,总共要控制在几微秒内。我一般用比较器直接触发驱动芯片的关断引脚,不经过MCU,因为MCU中断响应太慢。
比较器阈值按峰值电流的1.5倍设。比如峰值30A,阈值设45A。采样电阻0.01Ω,阈值电压0.45V。比较器输出直接拉到驱动芯片的SD引脚,硬件关断。
7. 实测中遇到的几个典型问题与排查过程
7.1 上电就炸管:直通短路的排查
第一次上电炸管,最常见的原因是直通。排查步骤:先不接电机,只给驱动板供电,用示波器看上下管栅极波形。如果发现上下管有同时为高电平的时刻,说明死区时间不够或者驱动芯片有问题。
我遇到过一次,死区时间设了1us,但驱动芯片的输入信号有毛刺,导致上下管瞬间同时导通。后来在MCU输出和驱动芯片输入之间加了RC滤波,毛刺消失,问题解决。
7.2 电机低速抖动:死区时间过大的排查
电机能转但低速抖动,先看死区时间。用示波器看半桥中点波形,如果死区平台很明显,说明死区时间偏大。逐步减小死区时间,直到抖动消失或达到最小值。
但死区时间不能无限减小,要保证大于关断延迟。我一般从1us开始试,逐步减到500ns、300ns,找到不炸管的最小值,然后加50%余量。
7.3 管子发热严重:开关损耗的排查
管子发热严重但电流不大,多半是开关损耗大。用示波器看栅极波形,如果上升下降沿很缓,说明驱动电流不够,管子工作在放大区时间长,损耗大。
解决办法是减小栅极电阻,增大驱动电流。但栅极电阻太小会导致振铃,需要在栅极串联小电阻加二极管加速关断。我一般用10Ω到22Ω的栅极电阻,具体值用示波器调。
7.4 自举电压不稳:自举电路的排查
上管驱动不正常,先查自举电压。用示波器看自举电容两端电压,如果电压波动大或逐渐下降,说明自举电路有问题。检查自举二极管方向、自举电容容量、下管导通时间。
我遇到过一次自举二极管焊反了,上管完全打不开,电机只靠下管续流二极管工作,效率极低。后来检查原理图和实物,发现二极管方向搞反了,换过来就好了。
8. 从原理图到实物:几个容易忽略的细节
8.1 母线电容的选型与布局
母线电容分两类:大容量电解电容和高频MLCC。电解电容提供低频能量缓冲,MLCC提供高频去耦。电解电容按每安培100uF选,MLCC按每半桥10uF到100uF选。
布局上,MLCC要尽量靠近半桥,电解电容可以稍远。MLCC的接地回路要短,最好直接连到半桥下管源极。我一般把MLCC放在半桥正上方,用过孔直接连到功率层。
8.2 栅极电阻的功率
栅极电阻虽然阻值小,但瞬间电流大。驱动电压12V,栅极电阻10Ω,峰值电流1.2A。电阻功率按I²R算,1.2² × 10 = 14.4W,但这是瞬间功率,平均功率小得多。实际选0805或1206封装的电阻就够了,但要注意脉冲功率承受能力。
8.3 死区时间的软件配置
死区时间在MCU里配置,不同MCU配置方式不同。以STM32为例,用高级定时器的死区配置寄存器。死区时间 = 死区时钟周期 × 死区分频系数。假设定时器时钟72MHz,死区分频系数1,死区寄存器值72,死区时间 = 72 / 72MHz = 1us。
配置时要注意死区寄存器的范围,不同系列MCU范围不同。STM32F103的高级定时器死区寄存器是8位,最大255,对应最大死区时间取决于时钟分频。
8.4 驱动芯片的供电
驱动芯片供电要干净,最好用LDO单独供电,不要和MCU共用。驱动芯片的电源引脚要加去耦电容,100nF加10uF组合。自举电路的自举二极管和电容要靠近驱动芯片的VB和VS引脚。
我见过一次驱动芯片供电和MCU共用,电机一转MCU就复位,原因是驱动芯片开关噪声通过电源耦合到MCU。后来给驱动芯片单独加LDO,问题解决。
9. 一些实测数据和经验值
9.1 死区时间与PWM频率的搭配
| PWM频率 | 推荐死区时间 | 说明 |
|---|---|---|
| 10kHz | 1us-2us | 低频对死区不敏感,可放宽 |
| 20kHz | 500ns-1us | 常用频率,兼顾效率和噪声 |
| 40kHz | 300ns-500ns | 高频需减小死区,否则波形畸变 |
| 80kHz | 100ns-300ns | 需要快速驱动和低Qg管子 |
9.2 栅极电阻的参考值
| MOSFET Qg | 推荐栅极电阻 | 说明 |
|---|---|---|
| <20nC | 10Ω-22Ω | 小管子,驱动容易 |
| 20-50nC | 5Ω-15Ω | 中等管子,兼顾速度和振铃 |
| 50-100nC | 2Ω-10Ω | 大管子,需要大驱动电流 |
| >100nC | 1Ω-5Ω | 很大管子,可能需要推挽驱动 |
9.3 母线电容的参考值
| 母线电压 | 电解电容 | MLCC | 说明 |
|---|---|---|---|
| 12V | 100uF/A | 10uF/半桥 | 低压小功率 |
| 24V | 100uF/A | 22uF/半桥 | 常用电压 |
| 48V | 47uF/A | 47uF/半桥 | 高压需注意耐压 |
| 100V | 33uF/A | 100uF/半桥 | 高压大功率 |
10. 最后聊几句个人体会
做无刷驱动这些年,最大的感受是:硬件问题永远比软件问题更隐蔽,也更致命。代码写错了电机不转,你能立刻发现;布局错了死区设错了,电机可能转,但转不久,或者转得不好,等你发现的时候管子已经炸了。
我现在的习惯是:每次画新板子,功率回路一定先画,画完自己检查三遍。死区时间一定从大往小调,找到临界值再加余量。上电一定先不接电机,用示波器看波形,确认没问题再接电机。
还有一点:数据手册要仔细看,但不要全信。手册上的参数是理想条件下的,实际用起来要打折扣。比如RDS(on)是在25°C测的,结温100°C时可能翻倍。热阻是在特定散热条件下测的,实际PCB散热条件不同,热阻可能差很多。留余量,永远留余量。
如果你正在做第一块无刷驱动板,建议先用低电压小电流调试,比如12V、5A,跑通了再往上加。炸几个管子是正常的,但别炸大管子,大管子贵。