ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

电机控制必知:IIR数字滤波器在FOC与高频注入中的应用

电机控制必知:IIR数字滤波器在FOC与高频注入中的应用 做电机控制这些年接触过的工程师几乎都会遇到同一个场景电流波形上毛刺扎手转速反馈抖得像筛子反电动势波形上高频噪声盖过了有效信号。这时大家不约而同想到“加个滤波器”而工程上用得最多的就是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而不是FIRFIR滤波器也有自己的优势线性相位、无条件稳定、可以用窗函数法直接设计。但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的二阶巴特沃斯低通先做频率预畸变再代入双线性变换可以得到一组典型系数系数数值b00.2066b10.4131b20.2066a1-0.3695a20.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平面上一两个极点的位置变化上。
返回列表