做永磁同步电机驱动的人,迟早会碰上一个很现实的场景:控制器这边三相电流都有,直流母线电压也正常,但转子位置就是拿不到——编码器坏了、线束断了,或者干脆为了减成本压根就没装。更头疼的是,电机在零速和极低速段,反电动势几乎为零,平时惯用的基于反电动势的观测器瞬间失效,位置信息一片空白。脉振高频注入无速度传感器方法,就是专门用来填这个坑的:它主动往电机里注入一个特定频率的高频电压信号,然后从电流响应里把转子位置反推出来,连零速都能稳住。配合Simulink搭仿真模型,可以在真正上电之前把整个估计链路、滤波器参数、观测器带宽都调明白,风险全留在仿真阶段。
这篇不是背景介绍,而是把脉振高频注入无速度传感器Simulink仿真模型从原理到搭建再到调试坑,一步步拆开讲清楚。内容包括高频注入的数学本质、模型分层结构、关键参数的计算依据、滤波器与观测器的实现方式,以及仿真里最容易出错又最容易忽略的四个细节。适合已经会基础FOC、正准备做零低速无传感器控制方案验证的工程师,也适合想搞懂这些概念但还没动手搭模型的研究生。
1. 反电动势与凸极效应:为什么低速段必须换一种"观测语言"
1.1 反电动势法在零低速的信息断层
先看常用方案的问题出在哪。永磁同步电机在同步旋转坐标系下的电压方程可以写成:
u_d = R_s·i_d + L_d·(di_d/dt) - ω_e·L_q·i_q u_q = R_s·i_q + L_q·(di_q/dt) + ω_e·(L_d·i_d + ψ_f)
其中 ψ_f 是永磁磁链,ω_e 是电角速度。诸如磁链观测器、滑模观测器这些无位置传感器方案,本质上都要利用反电动势项 ω_e·ψ_f。转速高的时候,反电动势幅度大、信噪比高,观测器很容易把转子磁极位置从电压方程里解出来。可一旦转速掉到额定转速的5%甚至更低,反电动势的幅值随着转速线性下降,信号被电流采样噪声、逆变器死区谐波淹没,位置估计就彻底垮了。到了零速,反电动势直接为零,方程里连可用的位置信息都没有。
很多工程师第一次做无位置传感器高速段方案时跑得很顺,一降速就失步,原因就在这里:不是观测器写得不好,而是在这个转速区间,信息源本身就不存在。想继续用被动观测的办法,物理上就走不通。
1.2 主动探测:把转子凸极变成位置信标
被动探测不行,那就主动探测。永磁同步电机的转子上有永磁体,d轴和q轴的磁路磁阻天然不同,反映在电感上就是 L_d ≠ L_q。内置式永磁电机尤其明显,典型的 L_d 在几毫亨量级,L_q 能比 L_d 大出一倍多。这个特性叫凸极效应,它意味着:从定子侧看进去的高频阻抗,会随着转子位置变化而变化。
于是思路就变成了:向电机注入一个频率远高于基波的高频电压信号,然后观察高频电流响应。因为高频电流路径基本由高频电感和电阻决定,转子转到哪个角度,高频阻抗就变到哪个角度,电流响应里自然就带上了位置信息。这个过程和主动雷达的逻辑很像——环境里听不到回波,那就自己发一束波出去,再从反射里提取信息。
脉振高频注入选的注入位置很有讲究:它不是在静止坐标系下随便注一个旋转矢量,而是在估算出的同步旋转坐标系的 d 轴上,注入一个高频余弦电压。这样做的直接好处是,在理想对准的情况下,高频电流不会在 q 轴产生分量,也就不会产生额外的转矩脉动。位置误差则体现在 q 轴高频电流的幅值上,误差越大,信号越强,方向信息也明确。
1.3 无速度传感器方案的整体版图
把整个速度范围捋一遍,会更清楚脉振注入适合放在哪一段:
| 速度区间 | 信息源 | 代表性方案 | 适用性 |
|---|---|---|---|
| 中高速 | 反电动势 | 磁链观测器、滑模观测器 | 成熟、结构简单 |
| 过渡区 | 反电动势+注入信号 | 加权切换 | 需要两套方案协调 |
| 零速/极低速 | 凸极效应 | 脉振高频注入、旋转高频注入 | 主动探测、依赖凸极率 |
脉振高频注入最大的价值就是填补左下角这段空白,它不依赖转速,只要电机有凸极性,零速也能稳定输出位置和速度估计。Simulink仿真的目的,就是把这段空白的完整链路先验证一遍。
2. 脉振注入的数学链路:一个位置误差信号是如何被"炼"出来的
2.1 高频电压注入与电流响应
假设实际转子位置是 θ,观测器给出的估计位置是 θ̂,定义误差 Δθ = θ - θ̂。在估计坐标系 d̂/q̂ 下,向 d̂ 轴注入高频电压:
u_d̂_inj = V_inj·cos(ω_h·t)
其中 V_inj 是注入幅值,ω_h 是注入角频率。这个电压会映射到真实 dq 轴上,在真实电机的 d/q 轴电感上分别产生高频电流。忽略电阻和反电动势的影响(高频下电抗远大于电阻,反电动势频率远低于注入频率),再把真实 dq 轴高频电流反变换回估计 d̂/q̂ 坐标系,整理后 q̂ 轴的高频电流分量可以写成:
i_q̂_h ≈ -(V_inj / (2·ω_h)) · ((L_d + L_q) / (L_d·L_q)) · sin(2·Δθ) · cos(ω_h·t)
这个式子的信息量很大。i_q̂_h 的幅值里,除了 V_inj、ω_h、电感这些常数之外,剩下的就是 sin(2·Δθ)。当估计位置和真实位置完全一致时,Δθ=0,sin(2·Δθ)=0,q̂ 轴高频电流为零;一旦有偏差,q̂ 轴就会出现与偏差成比例的高频电流。这就把"位置误差"这个看不见的物理量,转换成了"q̂ 轴高频电流幅值"这个可以直接测量的电信号。
顺便说一个容易搞混的细节:之所以选择在估计 d 轴注入,而不是在真实 d 轴注入,是因为我们本来就不知道真实 d 轴在哪。注入位置跟随估计坐标系的旋转,而估计坐标系本身由观测器控制,这就构成了一个自动收敛的闭环。
2.2 解调:带通滤波、相乘、低通滤波三步
q̂ 轴电流里其实混着基波分量、开关频率分量、高频注入分量。要把高频分量单独拎出来,第一步是带通滤波,中心频率设为注入频率 f_h,带宽不用太宽,能通过注入频率分量就行。
第二步是相干解调。将滤波后的 i_q̂_h 乘以与注入信号同频同相位的参考信号 sin(ω_h·t),用积化和差展开后会得到两项:一项是中心频率在 2·ω_h 的高频项,另一项是只和 Δθ 有关的直流项。表达式变成:
ε = -(V_inj / (4·ω_h)) · ((L_d + L_q) / (L_d·L_q)) · sin(2·Δθ)
第三步是低通滤波,把 2·ω_h 的高频项滤掉,剩下的就是位置误差信号 ε。在 Δθ 较小的范围内,sin(2·Δθ) ≈ 2·Δθ,误差信号就近似正比于位置误差。这个 ε 就是整个无位置传感器系统的"眼睛输出了"。
需要提醒的是,解调参考信号选 sin 还是 cos、极性是正还是负,取决于坐标变换方向定义和滤波器相位。模型里应保持注入、解调、坐标变换三者方向一致。
2.3 从误差信号到位置观测器
得到 ε 之后,剩下的事情就和普通闭环控制一样了:让误差归零。通常的做法是构建一个 PI 调节器作为位置观测器:
ω̂ = K_p·ε + K_i·∫ε dt θ̂ = ∫ω̂ dt
观测器输出 ω̂ 作为速度估计值提供给速度环,θ̂ 作为坐标变换角度提供给电流环。当 ε=0 时,θ̂ 收敛到真实位置,ω̂ 收敛到真实速度。这个闭环的带宽由 K_p、K_i 决定,一般整定在 20~50 Hz 就够用,带宽太高会把谐波噪声放大,太低又跟不上转速动态。
有一个非线性细节必须心里有数:误差信号是 sin(2·Δθ),当 |Δθ| 接近 90° 时,误差信号达到最大后开始回落,超过 90° 还会出现过零反号。这意味着观测器并不能保证从任意初始误差都收敛,实际工程中通常需要配合初始位置辨识。Simulink里直接设初始 θ̂ 和真实 θ 接近,可以先把收敛特性看清楚,再研究大误差启动的鲁棒性。
2.4 用一组具体参数估算信号幅值
理论公式容易让人觉得虚,拿一组典型内置式电机的参数算一下,心里就有底了:
| 参数 | 数值 |
|---|---|
| 定子电阻 R_s | 0.958 Ω |
| d轴电感 L_d | 5.25 mH |
| q轴电感 L_q | 12.1 mH |
| 永磁磁链 ψ_f | 0.1827 Wb |
| 极对数 | 4 |
| 母线电压 | 311 V |
注入幅值 V_inj 取 20 V,注入频率 f_h 取 1 kHz,则 ω_h=6283 rad/s。代入公式系数:
(L_d + L_q)/(L_d·L_q) = 17.35×10⁻³ /(5.25×10⁻³ × 12.1×10⁻³) ≈ 273
V_inj/(4·ω_h) ≈ 20/(4×6283) ≈ 0.000796
ε 的直流幅值系数大约为 0.217 A,再乘以 sin(2·Δθ)。如果位置误差是 10° 电角度,sin(20°)≈0.342,误差信号幅值约 0.074 A,也就是 74 mA。
这个数量级说明:只要电流采样分辨率做到几十毫安量级,完全可以把位置误差信号分辨出来。反过来也提醒一件事,如果注入幅值太小,误差信号被量化噪声淹没,观测器就会出现一个"死区",实际的收敛精度会变差。
3. Simulink模型分层搭建与参数配置:从电机本体到解调观测器
3.1 顶层架构划分
Simulink里搭脉振高频注入模型,忌讳所有东西堆在一个大子系统里,拆成清晰的功能块,后续调参和排查问题都方便得多。我的习惯是分成六块:
- 电机本体与逆变器:用Simulink自带的永磁同步电机模型,接一个理想电压源逆变器,母线电压给到 311 V。
- 坐标变换与电流采样:三相电流经过 Clarke/Park 变换到 dq 坐标系,变换角度用观测器输出的 θ̂。
- 电流环与速度环:dq 轴电流 PI 控制器加速度环 PI 控制器,输出 dq 轴电压指令。
- 高频注入模块:在 d 轴电压指令上叠加 V_inj·cos(ω_h·t),然后进入逆变器。
- 信号解调模块:对 q̂ 轴电流先带通滤波、再乘解调参考、最后低通滤波,输出误差信号 ε。
- 位置观测器模块:PI 加积分器,输出 ω̂ 和 θ̂。
需要注意,整个控制环路都使用估计角度 θ̂,不能用真实角度给控制器做坐标变换,否则仿真就失去了"无传感器"的意义。真实角度只用于电机模型内部计算和最后的波形对比观察。
3.2 注入频率与幅值的三个约束
注入频率不是随便拍的,至少要满足三个条件:
第一个约束,注入频率要明显高于电流环带宽。电流环带宽通常在数百赫兹,如果注入频率只有一两百赫兹,电流环会对注入信号产生主动响应,高频电流的幅值相位就乱套了。工程上一般选 500 Hz 到 2 kHz。
第二个约束,注入频率要远低于逆变器开关频率和采样频率。开关频率如果是 10 kHz,采样频率最好 20 kHz 以上,注入频率取 1 kHz 时,一个高频周期内有 20 个采样点,波形重构和滤波都有保障。再往上取到 2 kHz,每个周期就只有 10 个采样点,滤波器的数字实现会明显变困难。
第三个约束,注入幅值不能太大也不能太小。太大了会在额定电流之外叠加可观的高频电流,造成额外损耗和转矩脉动;太小了误差信号又淹没在噪声里。经验上 V_inj 取母线电压的 5%~10% 是一个合理起点。母线 311 V 时,取 20 V 左右,算出来的高频电流幅值在 0.5 A 上下,相对额定电流 10 A 来说已经比较温和了。
仿真步长也要跟着注入频率走。建议把电气模型的采样步长设为注入周期的 1/50 左右,1 kHz 注入时步长 20 μs,也就是 50 kHz 的等效采样率。步长太粗,高频纹波被严重混叠,后面的滤波和解调效果全都会失真。
3.3 滤波器与解调模块的具体实现
滤波器在Simulink里可以直接用 Continuous 库里的 Transfer Fcn 模块。带通滤波器选择二阶带通,中心频率 1 kHz,带宽设为 200 Hz 左右,表达式用典型二阶带通形式即可。低通滤波器选择二阶低通,截止频率设在 100 Hz 左右,大约是注入频率的十分之一,既能滤掉 2·ω_h 分量,又不会对观测器带宽内(几十赫兹)的信号造成明显相位延迟。
解调部分用 Product 模块把带通后的 q̂ 轴电流与 sin(ω_h·t) 相乘,再接低通滤波器。这里有一个前置条件:注入电压用的是 cos(ω_h·t),解调参考用的是 sin(ω_h·t),两者相位差 90°,这个组合是对的我之前推导的对应关系。如果你在实现时发现误差信号方向和预期相反,大概率是坐标变换的符号定义和解调参考的相位匹配问题,交换一下参考信号的正负号就能解决。
3.4 位置观测器的离散化实现
Simulink里可以用连续 PI 直接搭,但实际工程都是离散实现,建议干脆在模型里就写成离散形式。离散化的差分方程可以写成:
ω̂[k] = ω̂[k-1] + K_p·(ε[k] - ε[k-1]) + K_i·T_s·ε[k] θ̂[k] = θ̂[k-1] + ω̂[k]·T_s
其中 T_s 是观测器的计算周期,可以和电流环周期一致。PI 参数初值可以依据观测器带宽粗略选取,比如期望带宽 30 Hz,观测器增益大约取:
K_p = 2·π·30 / K_ε,K_i = (2·π·30)² / K_ε
这里的 K_ε 是误差信号到角度误差的比例系数,也就是前面算出来的那个系数乘以 2(小角度线性化后用 2·Δθ)。实际仿真里以 30 Hz 为初值,然后根据收敛速度和稳态误差微调即可。
4. 仿真调试最容易翻车的四个细节(我确实都踩过)
4.1 滤波器相位滞后把位置误差"带偏"
这是最先遇到的坑。带通滤波器和低通滤波器都会引入相位滞后,带通滤波器在中心频率附近如果设计不当,相位滞后能达到几十度。解调参考信号 sin(ω_h·t) 是从注入信号那里直接生成的,没有经过滤波器,结果就是参考信号的相位和实际高频电流分量的相位对不齐。
对不齐的后果不是误差信号变小那么简单,而是解调出来的直流分量里,cos(2·Δθ) 的串扰项也会残留下来。位置误差信号本应该和 sin(2·Δθ) 成正比,现在混入了 cos(2·Δθ) 分量,会导致估计位置出现一个固定的角度偏置。负载越重、Δθ 越大,这个偏置越明显。
解决思路有两种:一种是在解调参考信号里人为加一个相位补偿角,补偿滤波器的相位滞后;另一种是让解调参考信号也从滤波链路里走一遍,使两路信号的相移对齐。实际调模型时,用一个已知的固定 Δθ 偏置注入,观察解调输出幅值是否最大、是否仍纯正弦,就能快速验证相位是否对准。
4.2 死区与逆变器非线性让误差信号"长毛"
仿真模型如果用理想逆变器,输出的高频电流会非常干净,误差信号也是一条平滑曲线。但工程上逆变器必然有死区,开关管的开通关断时间会在电流过零点附近造成电压畸变,产生一系列低次谐波和开关频率附近的边带分量。
这些畸变成分会通过带通滤波器泄漏到解调链路里,表现为误差信号上的高频毛刺,严重时会把观测器带宽内的抖动放大,导致位置估计在真实值附近来回震荡。在仿真里验证这个影响的方法是:给逆变器模型加上死区时间,比如 2~4 μs,对比有无死区时误差信号的波形差异。
如果发现死区影响明显,先不要急着加各种补偿算法,先在仿真层面确认母线电压与实际反电动势的裕量是否足够。高频注入电压幅值本来就只占母线电压的一小部分,如果再叠加死区补偿不足,有效注入电压会被侵蚀,位置观测效果自然变差。
4.3 表贴电机的凸极信号太弱怎么办
脉振高频注入的根基是凸极效应,也就是 L_d 和 L_q 的差异。表贴式永磁电机的 L_d 和 L_q 通常非常接近,有时候仿真里用理想表贴参数,L_d 等于 L_q,注入信号解调出来的误差增益几乎为零,观测器根本收敛不了。
这种情况在仿真里最容易让人怀疑是模型搭错了,其实只是电机本身凸极率不够。解决办法有几个方向:一是提高注入幅值,但这有上限,受电流约束;二是利用磁饱和效应,在 d 轴注入一定偏置电流,把凸极"压"出来,这是很多表贴电机低速无位置传感器方案的实际做法;三是在仿真里用一个更接近实际表贴电机磁路特性的模型,包含饱和电感曲线,而不是固定值电感。
如果你只是想先验证算法链路,可以把电感参数临时调整成有一定凸极率的值,比如 L_d=5.25mH、L_q=6.5mH,让模型先跑通,之后再换真实参数调试。调模型和调算法要分开,不要混在一起处理。
4.4 带载后交叉饱和导致的位置零偏
模型空载时位置误差非常小,一切看起来都很完美。一旦带上额定负载,位置误差突然出现一个固定偏置,而且这个偏置随负载电流增大而增大。这种现象在仿真里也完全可以复现,根因是交叉饱和效应:d 轴和 q 轴磁路互相影响,实际运行点下 L_d、L_q 不再是空载时的值,凸极的方向和幅度都变了。
高频注入位置估计基于电感的空间分布,电感变了,误差信号的零位也跟着偏移。仿真里验证的办法很直接:从空载到额定负载做一次阶跃,观察位置误差平台值的变化。工程上应对交叉饱和通常做离线标定,在高频注入误差信号里加上负载相关的补偿量,或者把观测目标从"磁极位置"改为"凸极轨迹中心"。
对仿真来说,最重要的是意识到"误差为零"并不等价于"位置准确",因为解调链路本身的零位可能已经漂移了。只有把估计位置和真实位置直接放在同一个波形窗口里对比,才能区分收敛偏差和静态偏置。
5. 波形看什么才能判断"观测器真的收敛了"
5.1 三大观测窗口
模型跑起来之后,不要只看速度波形。我一般固定三个示波器窗口:
第一个窗口放估计位置 θ̂ 和真实位置 θ,两条曲线应该基本重合。真实位置可以直接从电机信号输出口引出,专门用来和估计值对比。
第二个窗口放位置误差 Δθ 和解调后的误差信号 ε。误差信号是"过程量",位置误差是"结果量",两个一起看才知道收敛过程是振荡收敛还是平滑收敛,也方便判断是否进入了线性区。
第三个窗口放估计速度 ω̂ 和真实速度,以及 q 轴电流的原始波形。速度估计的动态响应决定了带载起动、反转这些工况下的控制品质;q 轴电流波形则暴露滤波和解调是否还有残余高频分量。
5.2 启动、稳态、反转三个典型工况
零速启动时,电机给定速度 0,位置观测器应该在几十毫秒内把初始位置误差收敛到零左右。由于初始误差是人为设置的,观测器会先产生一个速度跳动,然后位置误差逐渐回落,转速估计短暂偏离后又回到零。这个工况主要考验观测器的收敛起步能力。
低速带载稳态时,比如 5% 额定转速,给一个额定负载阶跃。位置误差在瞬态过程中会突增,然后被观测器拉回来;拉回来之后稳定误差应该远小于 0.1 rad 电角度。同时 q 轴电流里高频分量应该保持恒定幅值,没有出现明显的拍频。
反转工况最考验过渡过程的鲁棒性。速度指令从 +5% 额定转速跳变到 -5%,位置估计需要在过零速的瞬间不丢步。如果观测器带宽和 PI 参数调得不好,很容易在这个点上出现 180° 级的跳变,位置误差瞬间爆表。
5.3 判断收敛的量化指标
仿真模型调得好不好,最终要看三个量化指标:
位置估计稳态误差,一般以电角度计,小负载下控制在 0.05 rad 以内,带载后 0.1 rad 以内是基本要求。
收敛时间,从启动或突加负载开始到位置误差进入 ±0.02 rad 稳态带,通常应该在 0.2~0.5 s 之间。太快容易振荡,太慢说明观测器带宽偏低。
速度估计的纹波,高频注入产生的转矩脉动很小,但如果滤波不干净,速度估计会出现和注入频率相关的纹波。这个纹波在示波器上表现为速度波形的"毛边",需要回到滤波器去看。
这些指标在仿真的理想条件下都能做到,工程实现时因为电流采样噪声和逆变器非线性会打折扣,所以仿真的目标值应该比实际指标更严格一倍。
6. 脉振注入、旋转注入怎么选:工程落地的几条粗经验
6.1 脉振注入和旋转高频注入的全面对比
高频注入家族里还有另一个重要分支:旋转高频注入。它是在静止坐标系下注入一个旋转的高频电压矢量,然后从电流响应里提取与位置相关的负序分量。和脉振法相比,两者的差异很直观:
| 对比维度 | 脉振高频注入 | 旋转高频注入 |
|---|---|---|
| 注入位置 | 估计同步坐标系的 d 轴 | 静止坐标系的旋转矢量 |
| 解调思路 | q 轴高频电流乘参考信号后低通 | 带通后变换到负序同步系再提取 |
| 实现复杂度 | 偏低,依赖坐标系变换少 | 偏高,需要同步滤波器做信号分离 |
| 转矩扰动 | 高频电流主要在 d 轴,扰动小 | 两轴都有高频电流,扰动略大 |
| 对磁极极性的敏感度 | 可利用饱和效应辅助辨识 | 负序分量存在极性混叠问题 |
| 对凸极率的依赖 | 依赖 L_d 与 L_q 差值 | 同样依赖凸极率 |
从仿真实现角度看,脉振法结构上更接近"一个解调支路加一个观测器",上手快;旋转注入需要多一组同步坐标变换,信号分离也更绕。但旋转注入在电机旋转时,注入信号与转子位置没有直接耦合,某些运行点下抗负载扰动能力更有优势。
6.2 我实际项目里的取舍建议
如果电机是内置式,凸极率比较高,脉振注入通常够用,优先选脉振法,结构和调试成本都低。如果电机是表贴式,凸极率很小,第一步先看能否通过磁路饱和获得可用的信号差异,不行再考虑旋转注入配合更精细的信号处理。
另一个关键点是运行区间。脉振注入和旋转注入都只适合零低速段,一旦转速起来,还是要切换到反电动势类观测器。两个方案的过渡衔接需要在仿真里提前设计好,否则低速段跑得再好,切换瞬间也会因为位置估计带宽突变产生电流冲击。
选型时还要看硬件采样能力。高频注入需要比较高的电流采样率和占空比更新率,如果控制器的运算资源有限,注入频率只能压缩到几百赫兹,脉振法在实现上更容易塞进资源紧张的工程里。
6.3 值得扩展的方向
脉振注入的模型做完,自然延伸的方向有很多:一是初始位置辨识,利用 d 轴电感的磁饱和特性,在启动前注入短时脉冲,判断磁极的 N/S 方向,解决 sin(2Δθ) 收敛到对极的问题;二是高频信号幅值的自适应调节,根据电流裕量动态调整注入强度,在全速范围内兼顾观测精度和损耗;三是与反电动势观测器做加权切换,实现全速域无位置传感器运行。
这些方向在Simulink里都有比较顺的路子可以走,我也一直觉得,仿真模型最重要的价值不是复现一个"看上去不错"的结果,而是把各个环节的物理关系理清楚。如果你能在这个模型上把误差信号的每个分量都解释清楚,工程实现的坑就已经踩完一大半了。
最后分享一个调试中的小技巧:在观测器输出里临时加一个已知的角度偏置,比如人为偏移 10° 电角度,看解调出来的误差信号是否朝预计方向变。如果方向变了,说明解调极性接反了;如果幅度和预期一致,说明整条链路的极性、相位、增益都对。这个验证方法花一分钟就能做完,但能省下半天排查坐标变换方向的功夫。