做电机控制这些年,接触过的工程师几乎都会遇到同一个场景:电流波形上毛刺扎手,转速反馈抖得像筛子,反电动势波形上高频噪声盖过了有效信号。这时大家不约而同想到“加个滤波器”,而工程上用得最多的,就是IIR数字滤波器。从我自己的实践经验看,IIR在电机控制中的地位非常特殊,它不像FIR那样“稳得让人放心”,但计算量小、实时性好、参数调整直观,特别适合DSP和MCU这种算力有限的平台。尤其在FOC矢量控制和低速高频注入的无感方案里,滤波器选型、截止频率、阶数和相位补偿直接决定了系统能不能转得稳、能不能在零速附近把转子位置辨识出来。这篇文章我就从Z平面讲起,把低通、带通在电机控制里的具体分工,以及它们在FOC和高频注入中的完整工作逻辑,一条线捋清楚。
1. 从Z平面说起:IIR滤波器为什么能在电机控制里站稳脚跟
1.1 先理解Z平面:极点和零点决定滤波器的“性格”
数字滤波器的本质是一个差分方程,它把当前输出和过去若干时刻的输入、输出联系起来。要判断这个滤波器稳不稳定、频率响应长什么样,不能只看时域波形,得放到Z平面里看。Z平面是一个复平面,横轴是实部,纵轴是虚部,单位圆就是模长等于1的圆。IIR滤波器的传递函数是:
[ H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2} + \dots}{1 + a_1 z^{-1} + a_2 z^{-2} + \dots} ]
分母的根叫极点,分子的根叫零点。极点的位置决定滤波器的稳定性:所有极点都必须落在单位圆内部,系统才稳定。说句人话,如果某个极点的模大于1,那这个滤波器在运行中就会自己振荡起来,输出一路放大直到饱和。电机控制系统里最不能接受的就是这种“隐藏振荡”,因为它不像仿真里会明显爆掉,实际中可能表现为电流环高频啸叫、转速低频摆动,甚至某个工况下突然失控。
在电机控制场景里,我们更关注的是单位圆内的极点分布在什么角度、什么半径上。半径越接近1,滤波器越“尖锐”,对应频带的带宽越窄,但动态响应也越慢;角度则对应滤波器的中心频率。比如一个中心频率50Hz、品质因子Q较高的带通滤波器,其极点就落在单位圆内靠近圆周、角度对应50Hz的位置。理解了这一点,后面调IIR参数时就不会像盲人摸象一样瞎试。
1.2 为什么电机控制偏爱IIR而不是FIR
FIR滤波器也有自己的优势:线性相位、无条件稳定、可以用窗函数法直接设计。但FIR要做到和IIR同等的滤波效果,阶数通常是IIR的5到10倍。在电机控制里,DSP的中断周期通常是10kHz到20kHz,某些高频注入方案甚至要跑到40kHz以上,每个PWM周期里留给滤波器的计算时间可能只有几十微秒。在这个前提下,一个4阶IIR低通滤波器只需要做几次乘加运算,而一个同等效果的40阶FIR,光数据缓冲就要占用不少RAM,更别说计算延时了。
我之前在一个基于STM32F103的无感FOC项目里做过对比:用二阶IIR巴特沃斯低通滤波器处理相电流采样值,截止频率设1kHz,整个滤波函数只需要不到10条C语句。而换成等纹波FIR,需要32个系数,循环展开后还是比IIR多占用了将近25%的CPU时间。对实时性极高的电流环来说,省下来的时间就是控制裕量。
不过IIR的缺点也必须正视:它的相位响应是非线性的,或者说相位延迟随频率变化。这个特性会直接影响观测器对反电动势相位的估计。比如滑模观测器里,如果反电动势信号经过低通滤波后相位被滞后了20度,那估算出的转子位置也会出现偏差。这个问题不能靠“加个补偿角”粗暴解决,因为不同转速下相位滞后量是变化的,后面我会专门聊怎么处理相位延迟。
1.3 从模拟滤波器到数字IIR:双线性变换是主流
实际工程中很少有人直接凭空写出IIR差分方程,常规做法是先设计模拟滤波器原型,比如巴特沃斯、切比雪夫或贝塞尔,再通过双线性变换映射到数字域。双线性变换的公式是:
[ s = \frac{2}{T_s} \cdot \frac{1 - z^{-1}}{1 + z^{-1}} ]
其中(T_s)是采样周期。这个变换的好处是:模拟域稳定的系统映射到数字域依然稳定,且整个频率轴被压缩到单位圆内。但它有个副作用——频率被非线性压缩了,高频段的频率对应关系会“畸变”,所以设计数字滤波器时不能直接把模拟截止频率写进去,要先做一次频率预畸变(pre-warping):
[ f_{c_analog} = \frac{f_s}{\pi} \cdot \tan\left(\frac{\pi f_{c_digital}}{f_s}\right) ]
举个例子:采样频率(f_s = 10kHz),想要数字截止频率(f_c = 500Hz),代入公式算出预畸变后的模拟截止频率约506Hz。这个差别在低频时很小,但如果截止频率接近奈奎斯特频率,畸变就会非常明显。这个坑我踩过一次:有次设计截止频率2kHz的滤波器用在10kHz采样上,没做预畸变,结果实测-3dB点跑到了2.3kHz,电流环带宽随之变化,整机噪声变大,后来做频率响应测试才发现问题。
2. 电机控制系统里的低通与带通:各自的岗位和职责
2.1 低通滤波器的第一战场:相电流采样与反电动势提取
FOC的第一个输入是相电流。由于PWM开关频率通常在8kHz到20kHz,电流传感器输出叠加了大量开关纹波,如果不滤波直接进电流环,PI调节器会产生明显的周期性偏差。典型的做法是在ADC采样值进入Clarke变换之前做一次低通滤波。这个滤波器的截止频率要兼顾两方面:一方面要抑制开关纹波,另一方面不能把电流环的有效带宽压得太低。
我在调电流环时常用的经验值是:截止频率设在开关频率的1/10到1/20左右。比如10kHz开关频率,低通截止频率取500Hz到1kHz。这样既能滤掉开关噪声,又不会把10kHz采样上电流环的响应拖得太慢。但要注意,低通滤波带来相移,电流环相位裕度会变小。如果滤波阶数太高,比如三阶四阶,电流环就容易在高转速下振荡。所以电流采样通道的低通滤波器,我倾向用一阶或二阶,最多二阶巴特沃斯。
反电动势提取是另一个典型场景。无感FOC里,中高速段通常用反电动势法估算转子位置,但电机本体在中高速下反电动势信号幅值大、噪声相对小,而低速时反电动势非常弱,信噪比很差。此时低通滤波器的截止频率会随工况切换:速度环输出速度高时,低通截止频率可以放宽到1kHz以上,滤掉高频机械噪声;速度低时,截止频率可能要降到200Hz以下,把反电动势信号从噪声里“捞”出来。但这个过程中相位变化也会加剧,所以很多方案会引入锁相环做位置跟踪,而不是简单对滤波后的信号取反正切。
2.2 带通滤波器在信号调制与解调中的角色
低频的转速控制和高频的PWM噪声之间,还有一个中间地带,就是高频注入法。这种方法会主动在估计的d轴上叠加一个高频电压信号,频率通常在500Hz到2kHz之间,远高于基波频率、又低于开关频率。此时如果只靠低通滤波器,无法把这一小段高频信号从基波背景中分离出来;带通滤波器就是为了干这件事而生的。
带通滤波器的设计目标很明确:中心频率对准注入信号频率,带宽尽量窄,阶数适中。带宽窄意味着选择性好,中心频率附近的信号能通过,其他频率被大幅衰减。但带宽窄到一定程度后,滤波器对中心频率偏移就特别敏感。电感参数随温度、电流变化时,高频注入信号的有效响应频率也会漂移,滤波器的带宽如果太窄反而会漏掉有效信号。我一般把带通品质因子控制在0.5到2之间,也就是相对带宽大约在中心频率的50%到200%范围。
在信号解调端,还会再配一个低通滤波器。高频注入信号经过带通提取后,与本振信号相乘进行解调,得到的结果里既有位置误差的低频分量,又有二倍频甚至更高频的乘积项。此时低通滤波器的作用是只保留低频分量,剔除高频乘积项。这一“带通+低通”的组合,就是高频注入法的标准信号链。
2.3 相位延迟问题:多个滤波器级联时最容易失控
滤波器级联是最容易出问题的环节。我在调试一台采用FOC的永磁同步电机驱动器时,电流采样通道加了一个二阶低通,速度环反馈又加了一个二阶低通,反电动势观测器前面还加了一个带宽更低的低通。算下来,从实际电流到观测器输入,信号经历了6阶滤波,也就是总共12个极点。低频段还好,但到了500Hz以上,相位滞后加起来超过100度,直接导致高速段位置估算偏差达十几度电角度。电机表现为深度弱磁时出力不足、发热严重。
解决这个问题的思路有几个:一是尽量减少不必要的滤波器级数,比如电流采样处只要滤波到能抑制开关纹波即可,不需要为了美观把波形滤得非常平滑;二是对关键通道的相位滞后做查表或解析补偿;三是把多个窄带滤波器替换为一个设计得当的宽带滤波器。无论哪种方案,都要在系统联调时通过频率响应实测验证,而不能只在理论模型里“觉得没问题”。相位延迟就像房间里的灰尘,单看每一处都不严重,攒在一起就成了大问题。
3. FOC控制链路中的IIR滤波器:从采样到输出的完整通路
3.1 电流采样、Clarke/Park变换中的滤波位置选择
FOC的经典链路是:ADC采集相电流 → Clarke变换把三相静止坐标变成两相静止坐标 → Park变换旋转到旋转坐标系 → 电流PI调节器 → 逆Park变换 → SVPWM生成。
滤波器放在哪一步,效果差别很大。放在ADC之后、Clarke之前,是最自然的选择,因为这时信号还是原始时域波形,滤波对后续所有变换都有效,计算开销也最低。但问题在于,采样值本身含有谐波,而这些谐波在Clarke变换后会有特定的频率迁移现象。如果滤波器放在Clarke之前,它无法区分基波和高次谐波在静止坐标系与旋转坐标系中的频率差异。
我的做法通常是:ADC后的原始电流做一次截止频率较低的低通处理,用于保护电流环;同时单独采一路未滤波的原始采样值,用于电流环带宽更高的快速响应。这个“双通道”思路在很多商用驱动器里很常见。对无感FOC来说,未滤波的电流更适合滑模观测器输入,因为观测器本身设计时就考虑了一定的噪声鲁棒性,而滤波引入的相位滞后反而更致命。
3.2 速度环与位置估算中的IIR实践
速度环通常比电流环慢得多,带宽只有几十赫兹。对速度反馈进行低通滤波时,截止频率可以放得很低,比如10Hz到50Hz,以平滑编码器或反电动势观测器输出的速度估算值。这里要特别注意的是,速度环的输出是电流环的给定,如果速度反馈滤波太狠,速度环相位裕度会下降,容易引起转速超调和振荡。
在处理位置估算时,我用过一种实用的IIR组合方案:先用带通滤波器提取反电动势中的基波分量,然后对提取后的信号做锁相环跟踪,锁相环输出的角度再做一次低通平滑。这个方案的原理是:带通滤波器把反电动势里与转速无关的杂散成分滤掉,锁相环相当于一个非线性跟踪滤波器,低通平滑则消除锁相环输出中的残余纹波。整个链路里IIR滤波器扮演了“预处理器”的角色,而不是依赖单一滤波器一步到位。
有一次项目里转子初始位置检测需要特别的信号调理:在静止状态下注入短时脉冲,通过电流响应判断磁极位置。此时电流信号里既有脉冲激励的高频响应,也有驱动器本身的偏置噪声。我用了一组中心频率对准脉冲频率的窄带带通滤波器来提取响应幅值,效果明显优于直接用ADC原始值做阈值判断。这个过程中带通IIR的稳定性和选择性是成败关键。
3.3 STM32平台上的一组低通滤波实现示例
以STM32F103为例,12位ADC采样相电流,每相电流有一个由二阶巴特沃斯双线性变换得到的IIR滤波器,代码如下:
typedef struct { float b0, b1, b2; float a1, a2; float x1, x2; float y1, y2; } IIR_LPF2; float iir_lpf2_process(IIR_LPF2 *f, float x) { float y = f->b0 * x + f->b1 * f->x1 + f->b2 * f->x2 - f->a1 * f->y1 - f->a2 * f->y2; f->x2 = f->x1; f->x1 = x; f->y2 = f->y1; f->y1 = y; return y; }系数计算方式:对采样频率10kHz、截止频率1kHz的二阶巴特沃斯低通,先做频率预畸变,再代入双线性变换,可以得到一组典型系数:
| 系数 | 数值 |
|---|---|
| b0 | 0.2066 |
| b1 | 0.4131 |
| b2 | 0.2066 |
| a1 | -0.3695 |
| a2 | 0.1958 |
注意,这里的a1、a2在代码里使用时要取负号,因为差分方程标准的写作方式是(y[n] = b_0 x[n] + b_1 x[n-1] + b_2 x[n-2] - a_1 y[n-1] - a_2 y[n-2])。如果系数和其他资料对不上,多半是符号约定不同,这个细节很容易让初学者困惑。
实际运行时,因为FOC的电流环中断里要处理的东西很多,我会把滤波函数内联,并把滤波器结构体放在RAM中持续访问,避免中断里做动态内存分配。另外,STM32F103是单精度浮点MCU,滤波器系数使用float类型即可,但如果换到定点DSP,就必须考虑Q格式和溢出保护。
4. 高频注入中的IIR:低速与零速无感控制的关键依赖
4.1 高频注入的基本逻辑:为什么非要滤波器不可
电机在零速和极低速时,反电动势几乎为零,靠反电动势法无法获得转子位置信息。这时高频注入法走上台面:它在估计的d轴上叠加一个高频电压,通过检测高频电流响应间接获得转子磁极位置信息。这种方法的物理基础是凸极效应——电机d轴和q轴的电感不相等,导致高频电流响应的幅值随转子位置变化。
问题在于,高频响应信号非常微弱,而且混在基波电流、PWM开关噪声和逆变器非线性产生的谐波中。没有滤波器,这些干扰会把几毫安到几十毫安级别的高频响应信号彻底淹没。IIR带通滤波器在这里的价值,就是像收音机的选频电路一样,只放行中心频率附近的高频信号,把其他频段全部去掉。
4.2 方波注入与旋转电压注入下的滤波器组合设计
高频注入常见的实现方式有两种:方波注入和旋转电压注入。方波注入会在每个PWM周期切换注入电压的极性,其频率可以做到和开关频率一致甚至更高,但解调时需要特殊处理。旋转电压注入则是在估计坐标系中叠加一个旋转的高频电压矢量,其频率通常为500Hz到1kHz。
我用旋转电压注入方案时,滤波器的配置是:电流采样后先做带通,中心频率等于注入频率,带宽约±150Hz;解调乘法器输出后接低通,截止频率约50Hz到100Hz。这组滤波器在整个链路中起到了“信号净化的第一道关”和“解调后处理”的双重作用。调试时最典型的故障是:带通滤波器的中心频率与注入频率不一致,导致提取出来的信号幅值大幅衰减,位置估算偏差变大。排查方法是给电机注入固定高频电压,然后在不同转速下测量带通输出幅值,看幅值是否稳定。
4.3 转子初始位置检测:IIR滤波器直接决定对轴成败
转子初始位置检测是高频注入法的“第一公里”。电机上电时,转子位置未知,如果直接拉入FOC闭环,力矩方向错了,电机可能反转甚至抖动。高频注入法的思路是:在静止状态下注入高频电压,根据电流响应的幅值和相位反推转子位置,然后进行一次磁极极性判断,区分N极和S极。
在这个环节里,带通滤波器的选择至关重要。因为初始位置检测时电机不转动,基波电流为零,理论上信号更“干净”,但实际上逆变器死区效应、采样电阻噪声、电流传感器偏置都会污染信号。滤波器带宽太宽,噪声混入多,位置重复性差;带宽太窄,响应速度慢,影响上电时间。我常用的做法是先用截止频率较高的带通快速粗测,再用窄带滤波器复测精修。粗测加精修两步走,既保证了上电速度,又保证了位置精度。
有一次我在现场调试一台70kW的永磁同步电机,初始位置检测死活对不准,每次上电检测出来的位置偏差在20度电角度以上。后来把带通滤波器的中心频率从原定的1kHz改到800Hz,并加了一级50Hz低通,位置重复性立刻从±20度改善到±3度。原因是这台电机的凸极率较小,1kHz处的信号响应太弱,而800Hz处的信噪比更好。
5. 实操阶段我踩过的坑:参数、稳定性与调试清单
5.1 定点化与系数量化:DSP上的隐藏陷阱
很多DSP芯片用定点运算,IIR滤波器实现时就要把浮点系数转换为Q格式的定点数。假设用Q15格式,系数转换实质是乘以32768再取整。问题在于:原本系数a1=-0.3695,转换后变成-12113,精度损失不大;但极点接近单位圆时,比如a1=-1.9500这种接近-2的值,转换后的量化误差可能导致极点跑到单位圆外,滤波器从稳定变成不稳定。
我的经验是:定点实现IIR滤波器,尤其是高阶级联时,一定要用“二阶节级联”形式,而不是一阶直接型或直接型II。二阶节能把极点成对处理,量化误差影响更小。同时,在定点化之后用随机噪声或阶跃信号测试滤波器输出,观察是否存在持续振荡。这个测试虽然基础,但能有效避免“仿真稳定、实机爆炸”的尴尬局面。
5.2 判断滤波效果的指标:幅频响应与阶跃响应的权衡
滤波器设计得好不好,不能只看幅频响应曲线是否漂亮。幅频响应决定了它对哪些频率敏感,但阶跃响应决定了信号变化时滤波器的“反应速度”。电机控制中经常遇到阶跃变化,比如突加负载、转速指令突变。此时IIR滤波器如果品质因子过高,会产生明显的过冲和振铃,让速度环和电流环都跟着振荡。
我遇到过最典型的情况是:用了一个Q值很高的二阶带通做速度反馈平滑,零速起步时速度环给定从0阶跃到300rpm,滤波后的反馈值在达到最终值之前上下冲了三次,每次超调达到5%左右,最终导致速度环PI饱和,电机出现了明显的“喘振”声。后来把这个带通的Q值从5降到1,阶跃响应就干净了,速度环响应也更快了。所以在电机控制里,做滤波器参数整定一定要同时看幅频和阶跃响应,不能只盯着Bode图看“选择性”有多好。
5.3 一套实用的滤波器调试检查清单
做过的项目多了之后,我总结了一套滤波器调试检查清单,分享出来供参考:
| 检查项目 | 检查方法 | 判定标准 |
|---|---|---|
| 极点位置 | 计算滤波器极点 | 全部在单位圆内,且余量>2% |
| 幅频响应 | 扫频测试/信号发生器 | 截止频率与设计值偏差<10% |
| 相位延迟 | 对比滤波前后正弦波相位 | 最大相位滞后在可控范围 |
| 阶跃响应 | 输入阶跃信号观察输出 | 无剧烈振荡,超调<20% |
| 定点化稳定性 | 长时间运行并监控输出 | 无异常偏向最大值或最小值 |
| 级联稳定性 | 高低速全范围运行 | 无高频啸叫或低速爬行 |
这套清单看起来简单,但每次都能帮我快速定位问题。有一次现场反馈电机在某一特定转速下噪声很大,我首先用频谱分析仪看相电流,发现该转速下有一个与电频率无关的固定频率分量,最终定位到是滤波器极点与机械共振频率耦合,调整滤波器截止频率后问题消失。
另外还要特别提醒一点:滤波器系数在温度变化后可能漂移,尤其用了高精度浮点MCU时,系数本身不会漂移,但电机参数会随温度变化。高频注入系统的带通中心频率如果固定不变,随着电机电感因饱和而变化,解调效果会下降。进阶方案是让中心频率跟随估计转速动态调整,或者用在线阻抗辨识更新滤波参数。这个方法我目前还在完善中,但其方向值得每一位做无感FOC的工程师关注。
我在实际调试中最大的体会是:IIR数字滤波器在电机控制领域从来不是一个独立的模块,它和电流环带宽、观测器设计、PWM调制策略、电机本体参数全都耦合在一起。调滤波器永远不能“只看滤波器本身”,而是要站在整个控制环路的全局视角上,搞清楚每一个极点影响了哪条信号路径、滞后又消耗了多少相位裕度。养成这个习惯之后,你会发现很多看似玄学的现场问题,最后都能回到Z平面上一两个极点的位置变化上。