死区带来的影响以及死区补偿详解 在无刷直流电机BLDC或永磁同步电机PMSM的磁场定向控制FOC中三相全桥逆变器是连接微控制器大脑和电机肌肉的“心脏”。它的作用是将直流电DC转换为三相交流电AC从而在电机内部产生旋转磁场。我们分四个阶段来循序渐进地理解它的工作原理。第一阶段理想情况下的三相全桥硬件结构三相全桥由三组“桥臂”U相、V相、W相组成。每个桥臂包含两个功率开关管通常是MOSFET或IGBT分为“上管”和“下管”。上管连接正极直流母线电压VdcV_{dc}Vdc​下管连接负极地 GND 或0V0V0V上下管的中间节点连接电机的一相绕组。2. Ideal Switching Behavior在理想的物理世界中开关管的打开和关闭是瞬间完成的耗时为000。为了控制某一相的电压微控制器会发送PWM脉宽调制信号。在理想状态下同一桥臂的上下管是严格互补的当上管导通时下管必定关闭该相输出高电平VdcV_{dc}Vdc​。当下管导通时上管必定关闭该相输出低电平0V0V0V。通过快速切换这三个桥臂的上下管组合配合SVPWM算法全桥可以在三相绕组中合成出任意方向和大小的电压矢量从而驱动电机平滑旋转。第二阶段现实的物理限制与“死区保护” (Dead-Time)现实的骨感开关延迟在现实中MOSFET或IGBT并不能瞬间完成状态切换。它们存在开通时间 (tont_{on}ton​)从发指令到管子完全导通所需的时间。关断时间 (tofft_{off}toff​)从发指令到管子完全关断所需的时间。通常情况下关断速度比开通速度慢即tofftont_{off} t_{on}toff​ton​。灾难性的后果直通短路因为关断更慢如果我们在同一时刻命令上管关闭、下管打开那么上管还没来得及完全关闭时下管就已经打开了。此时正极和负极通过上下管直接短路这被称为桥臂直通极大的短路电流会在几毫秒内烧毁开关管。解决方案死区插入 (Dead-Time Insertion)为了防止直通在软件或硬件底层必须加入死区时间 (TdT_dTd​)。规则改变了当我们想让上管关闭、下管打开时我们先发送指令关闭上管然后等待一段额外的时间即死区时间TdT_dTd​确保上管绝对关断后再发送指令打开下管。在死区时间TdT_dTd​内上管和下管都处于关闭状态。第三阶段死区带来的负面影响死区效应虽然死区保护了硬件但它破坏了控制的精准性。失去控制的瞬间当上下管都关闭时死区期间桥臂与电源断开。但电机绕组是电感性负载电流不能突变。为了维持电流流动电流会通过开关管旁边并联的续流二极管形成回路。这意味着在死区时间内桥臂的输出电压不再由你的PWM信号决定而是由电流的方向决定误差的积累死区时间每次PWM周期都会出现两次。由于死区期间的实际输出电压与期望输出电压不符这会产生一个电压误差误差电压矢量。宏观表现相电流波形在过零点附近发生扭曲平顶现象电机产生转矩脉动表现为低速时的振动、噪音以及发热增加。第四阶段微观跳变边缘拆解与死区补偿为了消除上述误差FOC算法中会加入“死区补偿”。但在补偿之前我们必须在微观尺度上弄清楚在一个PWM周期的两次死区时间里到底是哪一瞬间产生了误差我们以U相桥臂为例假设定义电流从逆变器流向电机为正方向iu0i_u 0iu​0从电机流向逆变器为负方向iu0i_u 0iu​0。情况 A电流为正 (iu0i_u 0iu​0)在一个PWM周期的两次状态切换中表现完全不同上管关断下管将通下降沿死区上管关断后下管还未开通。电流失去正极通道为了保持连续性只能从GND抽水导致下管的续流二极管瞬间导通。此时实际电压立刻变为0V0V0V。这与理想状态下无死区时本该变为0V0V0V的预期完全重合此处并没有产生误差。下管关断上管将通上升沿死区下管关断后上管由于死区延迟还没有打开。电流依然必须保持连续只能继续走下管的二极管实际电压依然被死死钳位在0V0V0V。而理想状态下此时上管应该已经开通并输出高电平VdcV_{dc}Vdc​了。结论实际电压丢失的误差全都在这个延迟的上升沿产生补偿动作既然每次都在上升沿丢了一部分高电平我们就要在软件里增加上管的PWM脉宽即增加占空比把丢失的电压“补”回来。情况 B电流为负 (iu0i_u 0iu​0)同样我们将跳变边缘拆开来看下管关断上管将通上升沿死区下管关断后上管还未开通。电流从电机流回逆变器无路可走立刻顶开上管的续流二极管流回正极母线实际电压立刻变为VdcV_{dc}Vdc​。这与理想状态下本该变为VdcV_{dc}Vdc​的预期完全重合此处也没有误差。上管关断下管将通下降沿死区上管关断后下管由于死区延迟还没有打开。电流依然无路可走只能继续顶开上管的二极管实际电压依然被钳位在VdcV_{dc}Vdc​。而理想状态下此时本该输出低电平0V0V0V。结论实际电压多出来的误差全都在这个延迟的下降沿产生补偿动作既然每次都在下降沿多给了一部分高电平我们就要在软件里减少上管的PWM脉宽即减小占空比把多余的电压“扣”掉。第四阶段:补偿在哪里??一针见血地说最直接补的是端电压也就是单个逆变器桥臂输出端相对于直流母线负极/GND的电压。背后的逻辑是这样的误差的源头在“端”死区效应是发生在U、V、W各自独立的半桥硬件上的。是因为单个桥臂的二极管被动续流导致该桥臂输出的端电压偏离了理想值。补偿的动作也在“端”在软件算法中我们是根据U、V、W各自相电流的极性独立去增减这三相对应的PWM占空比。这直接改变的正是这三个桥臂各自的端电压。最终的宏观效果当你把三个半桥的端电压都各自补偿精准了那么由它们两两相减构成的线电压以及相对于电机中性点的相电压自然也就顺理成章地恢复成了完美的正弦波。所以我们是在“端电压”上做手术最终治好了“相电压”和“线电压”的病。第五阶段: 死区补偿中的电流极性判断与过零点优化死区补偿中的电流极性判断与过零点优化理论上判断电流极性非常简单只需要通过ADC读取电流传感器的值写一句 if (i 0) 即可。但如果在实际工程中真的这么写电机在低速时绝对会发出刺耳的噪音甚至震荡。1. 为什么“直接判断”行不通过零点噪声灾难在实际电路中ADC采样的相电流信号总是伴随着开关噪声和纹波的。当相电流在正弦波的过零点0A0A0A附近徘徊时真实的电流可能是在0.01A0.01A0.01A和−0.01A-0.01A−0.01A之间微小波动。如果直接判断极性MCU的补偿逻辑会在这一瞬间发生成百上千次的“疯狂横跳”上一微秒补偿ΔT \Delta TΔT下一微秒补偿−ΔT- \Delta T−ΔT这种在正负补偿电压之间的高频剧烈切换不仅完全失去了补偿的意义还会人为注入巨大的谐波导致电流波形在过零点严重畸变。2. 工程上的极性判断策略为了解决过零点抖动工程师通常会采用以下几种策略来判断极性策略一引入“滞回比较器”最常用的纯硬件思路算法化我们不再使用单一的000作为分界线而是设立一个死区阈值阈值环。比如设定阈值为0.1A0.1A0.1A当电流从负向上升时只有超过0.1A0.1A0.1A系统才认定极性翻转为正。当电流从正向下降时只有低于−0.1A-0.1A−0.1A系统才认定极性翻转为负。在−0.1A-0.1A−0.1A到0.1A0.1A0.1A这个“灰地带”保持上一次的极性判断不变或者直接停止死区补偿输出000补偿。优点算法简单能完美滤除过零点附近的极性误跳变。策略二低通滤波后的电流专门用于判断极性ADC采样得到的高频原始电流用于PID控制因为PID需要极快的响应而将这个原始电流经过一个重度低通滤波器后得到一个极其平滑的基波电流信号。我们专门用这个平滑信号的符号函数sign(ifilter)sign(i_{filter})sign(ifilter​)来做死区补偿的极性判断。注意低通滤波会带来相位延迟所以在高速运行时需要对这个延迟角度进行数学前馈补偿。策略三基于电流参考指令无感/干净信号如果我们相信我们的电流闭环控制做得足够好实际电流紧紧跟随着指令电流那么我们完全可以不用实际采样的电流而是用经过帕克逆变换算出来的期望相电流指令值来判断极性。因为指令值是纯软件生成的完美正弦波完全没有物理噪声过零点极其干净利落。优点彻底摆脱了硬件噪声干扰高端伺服系统中经常采用。策略四观测器估算最高阶在复杂的无感FOC中直接利用电机模型如滑模观测器或龙伯格观测器观测出的反电动势或定子磁链角度通过三角函数直接推算出当前定子电流应该处于的相位极性。这种方法不受低速ADC精度的限制。第六阶段:总结补偿公式实际上需要补偿的时间ΔT\Delta TΔT的大小不仅与死区时间TdT_dTd​有关还与管子的开关延迟有关。通常的补偿时间公式为ΔTTdton−toff\Delta T T_d t_{on} - t_{off}ΔTTd​ton​−toff​控制器会实时检测三相电流的方向取符号函数sign(i)sign(i)sign(i)并在输出PWM之前进行修正当i0i 0i0时期望脉冲宽度TpwmTpwm_idealΔTT_{pwm} T_{pwm\_ideal} \Delta TTpwm​Tpwm_ideal​ΔT当i0i 0i0时期望脉冲宽度TpwmTpwm_ideal−ΔTT_{pwm} T_{pwm\_ideal} - \Delta TTpwm​Tpwm_ideal​−ΔT通过这种精确到开关边缘的前馈补偿机制FOC能够让电机在加了死区保护的前提下依然输出完美的正弦电流极大地改善了电机的低速平稳性和噪音。