死区时间
上一页最后给出了三个占空比,并声称将它们加载到定时器中就能产生所需的电压。但事实并非如此。
同一桥臂上的两个开关管绝不能同时导通。一旦同时导通,它们会将直流母线直接短路,此时的电流仅受回路电感及器件自身电阻的限制。这种现象称为“直通”,会导致桥臂损坏。
解决办法是在一个器件关断与另一个器件导通之间插入一段间隙——即死区时间。通常为几百纳秒。在这段间隙内,两个晶体管均处于关断状态,该桥臂的输出电压不由调制器决定,而是由其他因素决定。
死区间隙内究竟发生了什么
电机绕组中的电流流经电感,因此不能瞬间中断或突变。在死区时间内电流必须继续流动,而此时上下两个开关管均已关断,唯一的续流路径就是体二极管。究竟流经哪一个体二极管,取决于电流原本的流向,而这又决定了整个死区期间桥臂输出电压被钳位在哪个母线电平。
下面分别看这两种情况:
电流流出桥臂(流入绕组)。在死区时间内,电流必须通过下桥臂体二极管从负母线续流,因此桥臂输出被钳位在低电平。无论指令要求什么,整个死区期间该桥臂都停留在负母线电平,最终输出的高电平脉冲比指令宽度更短。
电流流入桥臂(从绕组流回)。此时电流通过上桥臂体二极管流向正母线,将桥臂输出钳位在高电平,最终输出的高电平脉冲比指令宽度更长。
因此,误差具有固定的幅值,其符号与相电流一致:
对于20 kHz、占空比为1%(即500 ns死区时间)的系统,在48 V母线电压下,每相约为0.48 V。听起来很小,但其实并不小。
为何其重要性超出表面所见
有三项特性使得死区时间的影响比其大小所暗示的更为严重。
它不随请求电压按比例缩放。 死区误差是直流母线电压的固定比例,而非请求电压的固定比例。请求 30 V 时,0.72 V 的误差仅占 2.4%;而请求 5 V 时(低速运行时的典型值),同样的 0.72 V 误差占比高达 14.4%。
拖动下方平台上的速度滑块并观察 as % of demanded V:
| 转速 | 所需电压 | 1.5% 死区误差占请求电压的比例 |
|---|---|---|
| 300 rpm | 5.43 V | 13.3% |
| 1200 rpm | 8.31 V | 8.7% |
| 3500 rpm | 16.77 V | 4.3% |
死区时间是一个 低速问题。在高速时,反电动势迫使你要求较高的电压,而固定的误差便被其掩盖了。
这是一个方波,而不是平滑的误差信号。 当某一相电流过零时,符号就会翻转——每电气周期内三相共发生六次。基波频率下的方波含有较强的 5 次和 7 次谐波,这些谐波在 dq 轴上表现为 六次谐波纹波。
电流环无法消除它。 PI 调节器的积分项可以消除平均误差,事实也的确如此——无论有无死区时间, 的平均值都稳定在 8.000 A。但积分器无法跟踪远高于电流环带宽的六次谐波。因此,在闭环电流控制中,死区时间不会损失平均转矩,它带来的是转矩脉动、噪声和发热。
在试验台上 这一点需要明确说明,因为许多资料声称死区时间会“降低可用转矩”。在开环 V/f 控制系统中确实如此;而在带有积分器的闭环电流环中则不然——电流环会恢复平均值,剩下的只是谐波畸变。如果您的转矩确实下降,请检查角度误差,而不是死区时间。
其后果
观察相电流过零时的情况:它会变得平缓。这有时被称为零电流钳位,也是示波器上最明显的死区时间特征。在过零附近,电流很小,该相所需的电压也很小,而固定误差与之相当——因此,在几个PWM周期内,该桥臂几乎不输出任何电压,电流便停留在零附近,而不是平稳地穿过零点。
id 面板显示了能量的去向:频率为电气频率六倍的纹波,作用于完全不产生转矩的轴上。
补偿,以及其失效之处
解决方法显而易见。已知死区时间且可测量电流,因此只需将即将被扣除的部分补偿回来:
/* Applied to the duties BEFORE the gate driver sees them. */
for (int k = 0; k < 3; k++)
duty[k] += sign(i[k]) * (t_dead / t_pwm);
在理想电流测量的仿真中,这是精确的——图中的理想轨迹位于零纹波之上。但在硬件上并非如此,原因只有一个:sign(i) 在过零点附近是不可知的。
测量得到的该电流值非常小,淹没在开关纹波和ADC噪声之中。其符号几乎随机地在每个周期内翻转,而跟随该电流的补偿器反而会在原本要解决的问题之上叠加一个明显的方波干扰,且该干扰声频可闻。
因此,每一个实际实现都会在某个电流阈值以下逐渐减弱校正项,这恰恰承认了在该区域极性不可信:
/* Ramp through zero instead of stepping. */
float s = clampf(i[k] / i_threshold, -1.0f, 1.0f);
duty[k] += s * (t_dead / t_pwm);
这种衰减并非免费,试验台测量了其代价。在1200 rpm、8 A负载电流及1.5%死区时间下:
| 补偿 | id 纹波(RMS) | 纹波消除比例 | 处于阈值以下的时间占比 |
|---|---|---|---|
| 无 | 0.163 A | — | — |
| 理想补偿(符号完全准确) | 0.000 A | 100% | — |
| 阈值 1 A | 0.058 A | 65% | 9% |
| 阈值 2 A | 0.105 A | 36% | 17% |
| 阈值 4 A | 0.165 A | 0% | 35% |
最后一行说明了关键教训:在8 A峰值电流下设置4 A的阈值会使补偿器在整个周期的35%时间内处于关闭状态,且完全无法消除纹波——这纯粹是增加了代码风险而毫无益处。阈值必须远小于你实际运行的电流,或者说,这种补偿只是形式上的摆设。
在试验台上 请注意,该表格中的指标为有效值(RMS),而非峰峰值。采用阈值时,残余误差会在每个过零点形成一个窄尖峰,因此峰峰值几乎没有变化——未补偿时为0.485 A,而使用2 A阈值时为0.455 A;但有效值却下降了三分之一。峰峰值反映的是最恶劣的瞬时情况,而有效值则反映了总畸变程度。应根据您所关注的症状来选择相应的测量指标。
控制链中的实际顺序
死区时间补偿应在控制链中的特定位置进行,若顺序错误,则会悄然破坏整个系统:
- 电流环产生 , .
- 反Park变换、反Clarke变换 → 三相参考值。
- 调制器→三个占空比。
- 死区时间补偿在此处调整占空比, 使用本周期内采样的电流。
- 比较寄存器。
- 栅极驱动器插入死区时间,其余部分由物理过程完成。
在调制器之前进行补偿是行不通的,因为死区补偿是按每个桥臂独立进行的,取决于各相自身的电流符号——它不是一个空间电压矢量,也无法表示为空间矢量。
在试验台上 在考虑引入补偿之前,请先检查死区时间是否过大。死区时间通常按器件最差关断延迟与驱动器传播延迟不匹配的情况来设定,而供应商示例中的默认值往往较为保守。将1 µs减半至500 ns,即可免费使误差减半,无需任何额外成本,也无需编写新代码——只需查阅数据手册,并用示波器观测栅极节点即可。采用快速且匹配良好的驱动器时,现代器件完全可以轻松实现150–300 ns的死区时间。
要点回顾
- 死区时间的存在是为了防止直通现象,且不可省略。它引起的电压误差是物理规律的必然结果,而非设计失误。
- 误差是 的一个固定比例,其符号与相电流一致, 因此在低速时影响最大,因为此时所需的电压较小。
- 在闭环电流环中,它带来的代价是纹波,而非平均转矩。dq 平面上出现六次谐波纹波,相电流的过零点也被压平。
- 死区补偿只需三行代码且确实有效——唯独在电流过零点附近除外,因为那里的电流符号无法可靠判断,所有实际工程实现都必须在此区间做渐变衰减。
- 使衰减阈值远小于工作电流。若阈值与电流幅值相当,则根本无法消除纹波。
- 缩短死区时间本身比对其进行补偿更有效。
接下来:在没有编码器的情况下,转子角度是如何得到的——以及为什么每种无传感器方案在死区时间已经造成影响的低速段都会遇到困难。