第四节:电流极性检测——死区补偿的“眼睛”
做FOC死区补偿,最头疼的问题是什么?
我个人觉得,不是算法有多复杂,而是你根本不知道电流到底往哪个方向流。
电流极性检测,说白了就是给死区补偿装上一双“眼睛”。你看不到电流方向,补偿就是瞎补。我在项目里吃过这个亏,补了半天,谐波反而更大了。后来才明白,问题出在极性判断上。
4.1 相电流采样方法
先说说采样。电流极性判断的前提,是你得先把电流采准了。
目前主流的方法有三种,我一个个讲。
4.1.1 单电阻采样
低成本方案,一个采样电阻放在母线下面。通过不同开关状态,重构出三相电流。
嗯,这里要注意:单电阻采样在扇区边界附近,采样窗口会非常窄。我遇到过采样点刚好落在死区时间里,读出来的电流全是噪声。
4.1.2 双电阻采样
两相电阻,一相计算。这是目前工业上最常用的方案。
为什么?因为双电阻能避开大部分采样盲区。你想想看,两相直接采,剩下一相用基尔霍夫算,可靠性高很多。
4.1.3 三电阻采样
三相各一个电阻,精度最高,成本也最高。
我建议,如果做高端伺服,直接上三电阻。省下来的调试时间,比那点成本值钱多了。
| 采样方式 | 成本 | 精度 | 采样盲区 | 推荐场景 |
|---|---|---|---|---|
| 单电阻 | 低 | 中 | 扇区边界 | 风机、泵类 |
| 双电阻 | 中 | 高 | 极小 | 通用伺服 |
| 三电阻 | 高 | 极高 | 无 | 高端伺服 |
4.2 电流极性判断的难点
采到电流值了,然后呢?
很多人觉得,电流正负还不简单?大于零就是正,小于零就是负。
实际做起来,完全不是这么回事。
4.2.1 噪声干扰
电机运行时的噪声有多大?我测过,在PWM开关瞬间,采样值能跳变几十个LSB。
你直接用这个值判断极性,结果就是正负来回跳。死区补偿跟着来回跳,电流波形比锯齿还难看。
4.2.2 零点附近的模糊区
电流在零点附近时,信噪比极差。信号本身很小,噪声相对就很大。
说白了,你根本分不清这个“小值”到底是正还是负。
4.3 零电流钳位现象
这个现象,我估计做过实际项目的都遇到过。
什么叫零电流钳位?就是电流在过零点附近,被“吸”在零轴上,下不去了。
为什么会这样?
因为死区时间的存在。你想想看,当电流很小的时候,死区时间内续流二极管导通,电流路径被强制改变。结果就是,电流本该平滑过零,却被死区“卡”住了。
我在做一款低压伺服时,零电流钳位导致电流波形出现了明显的“平顶”。一开始我还以为是传感器坏了,查了半天,最后发现是死区补偿没做好。
4.4 过零点检测延迟问题
最后一个难点,是延迟。
电流过零了,但你的检测系统要多久才能知道?
4.4.1 采样延迟
ADC采样需要时间,滤波需要时间。我常用的做法是在PWM载波中点触发采样,但即使这样,从电流实际过零到采样值更新,也有几十微秒的延迟。
4.4.2 滤波延迟
为了抑制噪声,我们通常会加低通滤波。但滤波会引入相位延迟。
你想想看:滤波后的电流过零点,和实际电流过零点,差了多少?
我实测过,一阶RC滤波在50Hz电流下,延迟大约3ms。这个延迟在低速时还能忍,高速时就完全不能接受了。
4.4.3 算法处理延迟
从采样完成,到极性判断结果出来,中间还有CPU处理时间、通信延迟等。
4.5 我的建议
讲了这么多难点,最后给点实操建议。
- 采样时刻要选对:我习惯在PWM载波中点触发采样,避开开关噪声。
- 加滞回比较:不要用单阈值判断极性。设一个滞回区间,比如±5%额定电流,在这个区间内保持上一次的极性判断结果。
- 做预测补偿:根据电流变化率,提前估算过零点,补偿采样和滤波带来的延迟。
- 注意零电流钳位:如果发现电流波形有平顶,优先检查死区补偿参数,而不是调PI。
电流极性检测,看着简单,做起来全是坑。但只要你把这些坑都踩一遍,后面就顺了。
嗯,下一节我们聊聊具体的死区补偿算法实现,到时候会用到今天讲的这些内容。