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周期的中间,避开开关边沿。具体做法是:

  1. 确定PWM开关边沿位置(通常是载波顶点和底点)。
  2. 将ADC触发时刻设置在两个边沿的正中间。
  3. 留出足够的死区时间(至少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 本章知识体系

下面这张图,把三种噪声的来源、影响和应对措施串起来了。建议你保存下来,调试时对照着看。

电流环噪声源分析框架 电流环噪声源分析框架 PWM开关噪声 死区效应 采样噪声 影响:ADC读数毛刺 电流反馈值跳变 影响:电压波形畸变 电流过零点台阶 影响:ADC读数抖动 反馈值随机波动 应对:采样窗口对齐 硬件RC滤波 应对:电压前馈补偿 脉冲宽度补偿 应对:均值/中值滤波 硬件低通滤波 最终目标:降低噪声水平,提升电流环带宽 说明:三种噪声往往同时存在,排查时建议先隔离再分析,逐步缩小范围 PWM开关噪声 → 采样窗口对齐;死区效应 → 补偿算法;采样噪声 → 滤波

3.6 实战排查清单

最后,给你一份我平时用的排查清单。遇到电流环噪声问题时,按这个顺序查一遍,基本能定位到问题根源。

  1. 第一步:检查PWM开关时刻的电流波形。如果有毛刺,优先调整采样窗口对齐。
  2. 第二步:检查电流过零点附近的波形。如果有台阶或畸变,检查死区时间和补偿算法。
  3. 第三步:检查ADC读数的标准差。如果抖动超过1个LSB,检查硬件滤波和参考电压。
  4. 第四步:如果以上都正常,但电流环带宽还是上不去,考虑是不是PI参数本身的问题——这个我们后面章节会详细讲。

一个小技巧:调试时,先把电流环的积分项去掉(Ki=0),只保留比例项。这时候电流波形应该能跟随指令,但会有静差。如果连跟随都做不到,那肯定是噪声问题,不是PI参数的问题。