3、噪声源分析(上):PWM开关噪声、死区效应、采样噪声对电流环的影响
做FOC电流环,最头疼的事是什么?
我个人觉得,不是PI参数调不出来,而是明明调好了,一上电机就炸。或者电流波形看着还行,一加负载就抖得像筛糠。
这些问题的根源,十有八九是噪声。今天咱们就把电流环里最常见的三种噪声——PWM开关噪声、死区效应、采样噪声——掰开揉碎了讲清楚。
核心观点:电流环的带宽上限,往往不是由PI参数决定的,而是由噪声水平决定的。噪声压不住,PI调得再激进也是白搭。
3.1 PWM开关噪声:电流环的头号天敌
PWM开关噪声,说白了就是功率管在开关瞬间产生的电压电流尖峰。这个尖峰通过寄生电容、共模路径耦合到电流采样电路,直接污染了ADC的读数。
我在项目中遇到过最夸张的一次,PWM开关瞬间的噪声幅度达到了50mV,而我的电流采样满量程才3.3V。你想想看,这相当于1.5%的误差直接怼进了电流环。
3.1.1 噪声耦合路径
PWM开关噪声是怎么进到电流环的?主要有三条路:
- 传导耦合:母线电压在开关瞬间剧烈跳变,通过驱动电源、地平面直接传导到采样电路。
- 电容耦合:功率管漏极和栅极之间的寄生电容(Cgd),在开关瞬间把高压跳变耦合到驱动侧。
- 共模耦合:电机三相绕组对地的共模电压,通过Y电容、电机寄生电容形成回路。
我的经验:排查噪声源时,先看PWM开关时刻的电流波形。如果ADC读数在PWM边沿附近出现毛刺,基本可以锁定是开关噪声。这时候别急着调PI,先把采样窗口挪开。
3.1.2 采样窗口对齐策略
对付PWM开关噪声,最有效的手段就是——躲。
把ADC采样时刻安排在PWM周期的中间,避开开关边沿。具体做法是:
- 确定PWM开关边沿位置(通常是载波顶点和底点)。
- 将ADC触发时刻设置在两个边沿的正中间。
- 留出足够的死区时间(至少1-2μs)。
// 以STM32为例,配置ADC触发时刻
// PWM中心对齐模式,载波周期10kHz(100μs)
// 采样窗口设置在50μs处(避开0μs和100μs的开关边沿)
TIM_HandleTypeDef htim1;
htim1.Instance = TIM1;
htim1.Init.Period = 10000 - 1; // 10kHz
htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED1;
// ADC触发由TIM1的TRGO产生
// 设置TRGO为更新事件(发生在载波顶点和底点)
// 实际采样时刻通过软件延迟调整到中间位置
注意:采样窗口不是越宽越好。窗口太宽,可能覆盖到开关边沿;窗口太窄,采样电容充电时间不够。我一般留3-5μs的采样窗口,具体看ADC的采样保持时间。
3.2 死区效应:电流波形的隐形杀手
死区效应,是逆变器为了防止上下桥臂直通而故意插入的延迟时间。这个延迟会导致输出电压波形畸变,进而产生电流谐波。
嗯,这里要注意:死区效应产生的谐波,频率和PWM载波频率相关,但幅度和死区时间成正比。死区时间越大,谐波越严重。
3.2.1 死区效应的数学描述
死区效应造成的电压误差,可以用一个简单的公式描述:
ΔV = (T_dead / T_pwm) * V_dc * sign(I_phase)
其中:
- T_dead:死区时间
- T_pwm:PWM周期
- V_dc:母线电压
- sign(I_phase):相电流的符号(正或负)
这个电压误差,在电流过零点附近会引发严重的畸变。我调试过一个项目,死区时间设了3μs,结果电流波形在过零点附近出现了明显的“台阶”,电机低速运行时嗡嗡响。
3.2.2 死区补偿方法
死区补偿的思路很简单:把死区造成的电压误差补偿回去。常用的方法有两种:
| 补偿方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 电压前馈补偿 | 根据电流方向,在电压指令中叠加补偿量 | 实现简单,计算量小 | 对电流方向检测精度敏感 |
| 脉冲宽度补偿 | 直接调整PWM占空比,抵消死区影响 | 补偿精度高 | 需要精确的PWM硬件支持 |
我曾经踩过的坑:电压前馈补偿时,电流过零点附近的符号判断容易出错。后来我加了一个滞环比较器,电流绝对值小于某个阈值时不做补偿,效果反而更好。
3.3 采样噪声:ADC读数的“抖动”问题
采样噪声,指的是ADC转换结果中出现的随机波动。这种噪声的来源很多:电源纹波、参考电压漂移、PCB布局不合理、甚至温度变化都会影响。
你想想看,如果ADC读数本身就在抖动,电流环的反馈值就不准,PI控制器自然没法好好工作。
3.3.1 采样噪声的分类
- 量化噪声:ADC分辨率有限造成的误差。12位ADC的理论量化噪声约为0.8mV(3.3V参考)。
- 热噪声:采样电阻、运放内部电阻的热运动产生的噪声。频率范围很宽,难以滤除。
- 电源噪声:ADC参考电压或供电电源上的纹波,直接耦合到转换结果中。
3.3.2 硬件滤波 vs 软件滤波
对付采样噪声,硬件和软件两手都要硬。
| 滤波方式 | 典型实现 | 适用场景 | 注意事项 |
|---|---|---|---|
| 硬件RC低通 | 采样电阻后接RC滤波器,截止频率设为PWM载波频率的1/10 | 高频噪声严重时 | RC时间常数不能太大,否则会引入相位延迟 |
| 软件均值滤波 | 连续采样N次,取平均值 | 随机噪声为主时 | N值过大会降低响应速度 |
| 软件中值滤波 | 连续采样N次,取中间值 | 存在偶发尖峰时 | 计算量稍大,适合低速应用 |
重要提醒:软件滤波会引入延迟。均值滤波的延迟约为(N-1)/2个采样周期。如果你的电流环带宽要求很高(比如>1kHz),滤波阶数必须严格控制。我一般不超过4次均值。
3.4 三种噪声的叠加效应
实际系统中,这三种噪声不是独立存在的。它们会相互叠加,甚至相互放大。
举个例子:PWM开关噪声通过耦合进入采样电路,导致ADC读数出现尖峰。这个尖峰经过死区补偿算法时,可能被错误地识别为电流过零点,从而触发错误的补偿动作。结果就是,电流波形上出现额外的谐波。
我的建议:排查噪声问题时,先隔离再分析。先把PWM频率降到最低(比如1kHz),看电流波形是否改善。如果改善了,说明开关噪声是主因;如果没改善,再检查死区补偿和采样电路。
3.5 本章知识体系
下面这张图,把三种噪声的来源、影响和应对措施串起来了。建议你保存下来,调试时对照着看。
3.6 实战排查清单
最后,给你一份我平时用的排查清单。遇到电流环噪声问题时,按这个顺序查一遍,基本能定位到问题根源。
- 第一步:检查PWM开关时刻的电流波形。如果有毛刺,优先调整采样窗口对齐。
- 第二步:检查电流过零点附近的波形。如果有台阶或畸变,检查死区时间和补偿算法。
- 第三步:检查ADC读数的标准差。如果抖动超过1个LSB,检查硬件滤波和参考电压。
- 第四步:如果以上都正常,但电流环带宽还是上不去,考虑是不是PI参数本身的问题——这个我们后面章节会详细讲。
一个小技巧:调试时,先把电流环的积分项去掉(Ki=0),只保留比例项。这时候电流波形应该能跟随指令,但会有静差。如果连跟随都做不到,那肯定是噪声问题,不是PI参数的问题。