1. 为什么要用高频注入法——没有速度传感器时的低速难题
1.1 反电动势观测器为什么在零低速失效
做永磁同步电机(PMSM)无传感器控制,大家最先接触的基本都是反电动势法:通过观测反电动势在静止坐标系下的分量,反推出转子位置。中高速段这样干非常成熟,滑模观测器、龙伯格观测器都跑得很稳。但问题在于反电动势和转速成正比,转速一降下来,反电动势的幅值也一起降。零速的时候反电动势直接为零,极低速的时候它小到和电流采样噪声、逆变器死区畸变混在一起,基本上无法区分。
我见过很多初学者直接把中高速的观测器参数往低速工况搬,然后发现位置估计越来越抖,最后干脆发散。这不是参数调得不好,而是方案边界决定了它在低速下信噪比太低。叠加高增益观测器只会把噪声一起放大,系统依然不可用。
那零速和极低速场景是不是只能加编码器?当然不是。行业里常用的解决思路就是高频注入法,在电机的电压指令上主动叠加一个固定频率的高频激励,让电机在不转或者慢速转的时候,也产生一个含有转子位置信息的电流响应。这个响应和反电动势无关,所以转速越低反而越适合它。
1.2 高频注入的核心逻辑:把“凸极”变成位置传感器
要让电流响应里包含转子位置,电机本身必须对被高频激励“看”起来不是对称的。内置式永磁同步电机(IPMSM)天然有这个特性:d轴磁路经过永磁体,磁阻大,电感小;q轴磁路主要经过铁心和气隙,磁阻小,电感大。所以 Ld < Lq,这种 d/q 轴电感不等就是所谓的“凸极性”。表贴式永磁同步电机(SPMSM)的磁路相对均匀,本身凸极性很弱,但进入深度饱和以后d轴磁路更容易饱和,也会出现一定程度的凸极效应。高频注入法正是利用这个差异,把凸极性等效成一把“位置尺子”。
高频信号与转速没有直接关系,转子不转,注入高频电压之后电流响应照样存在。只要凸极性稳定可见,位置信息就是连续的。这一点让高频注入成了零速和低速无传感器控制里面绕不开的基础方案。
反电动势法、滑模观测器和高频注入不是替代关系,而是互补关系。下面是工程上比较常见的分工:
| 方法 | 有效速度区间 | 主要依据 | 典型问题 |
|---|---|---|---|
| 反电动势/滑模观测器 | 中高速 | 反电动势与磁链观测 | 低速信噪比差,无法覆盖零速 |
| 高频电压信号注入 | 零速到低速 | 凸极效应下的高频电流响应 | 注入损耗、噪声、滤波器相位滞后 |
| 混合切换方案 | 全速域 | 低速高频注入,高速反电动势 | 切换点需要做过渡处理 |
我个人的观点是,不管最终项目是跑纯低速的伺服对位,还是打算做全速域无传感器控制,第一步都应该把高频注入法和反电动势法的各自边界反过来问清楚:哪些工况非高频注入不可,哪些工况注入只会添乱。把这一步想明白,后面搭 Matlab 仿真模型的时候才不会迷失方向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高频电压信号注入法的原理拆解
2.1 在哪个轴注入,为什么选估计d轴
高频注入按信号形式划分,常见的有两类:旋转高频电压注入和脉振高频电压注入。标题里说的高频电压信号注入法,一般指的就是脉振高频电压注入,它实现相对简单,也是我这次仿真里采用的方法。
先定义坐标系。真实转子位置角是 θr,对应的旋转坐标系是 d-q。控制器不知道 θr,只能用当前估算出的角度 θ̂r 建立估算坐标系 d̂-q̂。两个坐标系之间差的角就是位置误差 Δθ = θr − θ̂r。控制器的目标,就是通过某种手段把这个 Δθ 压到零。
脉振高频注入的做法是:在估算d轴上叠加一个高频余弦电压信号 vdh = V_inj·cos(ωh·t),q̂轴不叠加高频。由于估算d轴和真实d轴不重合,高频电压会在真实电机里面激励出d、q两个方向的高频电流。再经过坐标变换折算回估算坐标系,会在 q̂ 轴电流里出现一个幅值正比于 sin(2Δθ) 的高频分量。当 Δθ 很小时,sin(2Δθ) ≈ 2Δθ,于是这个分量就相当于一个位置误差信号。
为什么必须在估算d轴上注入,而不是在真实d轴或者静止α轴?因为真实d轴根本拿不到,静止α轴注入则会让解调变得复杂,并且无法直接利用凸极效应的差模特性。脉振注入把一个简单的余弦电压放到估算d轴,q̂轴的响应天然就成了误差信号,结构上非常清晰。估算坐标系在一步步闭环修正之后,最终会收敛到真实坐标系,这时候高频电流中的误差分量就消失,位置估计也就完成了。
2.2 从高频电流里“捞出”位置误差的那条链路
位置误差不会直接出现在电流采样值里面,它是混在高频电流里的一个调幅分量。要把它提取出来,标准的信号处理链路可以分成四步。
第一步,用估算角度做坐标变换,把三相采样电流变换到估算坐标系,得到 i_d̂ 和 i_q̂。此时高频分量在 i_q̂ 中最明显。第二步,用带通滤波器把 i_q̂ 中以注入频率 ωh 为中心的窄带信号取出来,滤掉低频基波电流、开关噪声和其他高频噪声。第三步,让这个窄带高频电流和同频率的参考信号 sin(ωh·t) 相乘,这一步叫同步解调。两个同频信号相乘之后,会出现一个直流分量和一个二倍频分量。第四步,用低通滤波器把二倍频分量滤掉,剩下的直流分量就是我们要的位置误差 Δθ。
这里面的物理含义值得多说一句。如果估算角和真实角完全重合,高频电压纯粹加在真实d轴,q̂轴高频电流为零,解调结果也是零。如果估算角偏了,比如偏了正角度,q̂轴高频电流的相位会随之翻转,解调后误差信号就出现正负变化。这个正负就是控制器下一步修正方向的依据。
得到误差信号之后,还需要一个收敛环把它驱动到零。我这次用的是 PI + 积分器的结构:误差信号经过 PI 调节器输出估算电角速度 ω̂,再积分得到估算角度 θ̂,反馈回坐标变换和注入轴系。这实际上就是一个跟踪转子位置的锁相环,带宽决定了位置估计的动态响应速度。
2.3 注入频率、幅值和滤波器带宽怎么选
高频注入参数选得好不好,直接决定仿真模型能不能收敛。这里有三个关键量:注入频率、注入幅值和滤波器带宽,它们之间互相制约。
注入频率一般取 PWM 载波频率的 1/10 到 1/5。如果开关频率是 10 kHz,注入频率选 0.5 kHz 到 2 kHz 比较合适。选太高,PWM 调制出来的电压波形精度下降,同时电流采样频率可能不够;选太低,会跟电流环带宽和基波频率靠得太近,解调分离困难。还要保证注入频率远低于采样频率的一半,否则离散采样之后信号会混叠。
注入幅值通常取直流母线电压的 5% 到 20%,具体还得看电机电感和额定电流。幅值太小,高频电流响应淹没在采样噪声里,解调出来的误差信号信噪比很差;幅值太大,会带来额外的高频转矩脉动和铁损铜损,电机还可能发出明显的啸叫。仿真里可以先把幅值设大一点方便观察,再逐步往下压。
滤波器方面,带通滤波器中心频率必须落在注入频率上,Q值一般取 1 到 5。Q 值太高会让信号相位滞后严重,给位置环带来延迟;Q 值太低则带外衰减不足,基波分量容易漏进来。低通滤波器的截止频率要留出解调后直流分量的带宽,同时避开二倍注入频率,我一般取几十到两百赫兹之间。
这里想强调一个容易忽略的点:注入频率、电流环带宽和滤波器带宽三者之间要有明显的数量级差。电流环带宽通常低于注入频率,这样高频分量主要作用在电机电感上,不容易被电流环PI放大或改变相位;位置观测器带宽又要显著低于滤波器带宽,否则位置环会接收到经过解调残留的纹波。三者一旦挤在一起,整个环路就会不稳定,调 PI 参数也救不回来。
3. Matlab仿真架构搭建实录
3.1 模型顶层结构与信号流
我在 Matlab/Simulink 里搭建这套高频注入仿真时,顶层结构分成两大块:主功率与电机本体回路,以及无传感器控制算法回路。
主功率回路包括直流母线、三相全桥逆变器、IPMSM 本体和电流测量模块。控制算法回路从电流采样开始:三相电流经过 Clarke 变换到两相静止坐标,再用估算角度 θ̂ 做 Park 变换得到估算 d̂-q̂ 轴电流,送进电流环 PI 调节器。电流环的输出是 d̂-q̂ 轴电压指令,高频注入电压在这个位置直接叠加到 v̂d 上。叠加后的电压指令再经过反 Park 变换、SVPWM 调制,输出逆变器开关信号。
位置估算链路是另一条回路:估算坐标系下的电流 îq 先经过带通滤波器,提取高频分量,然后和同步解调参考信号相乘,再经低通滤波,得到误差信号,送入位置观测器。观测器的输出 θ̂、ω̂ 不仅用来做坐标变换,还负责让高频注入轴始终跟随真实d轴。
整个闭环的逻辑关系可以这样理解:电流环控制电机产生转矩和电流;“高频注入—解调—位置观测器”这条链则不停修正角度,让电流环看到的坐标系和真实转子坐标尽量重合。两条回路一个管“力的分配”,一个管“角度对齐”,缺了哪一个,系统都动不起来。
我把信号流整理如下,方便建模时照顺序连:
- 三相电流采样并转换成估算 d̂-q̂ 轴电流。
- 估算 d̂ 轴电流和 q̂ 轴电流分别进入电流 PI。
- 电流 PI 输出的电压指令在估算 d̂ 轴叠加高频余弦电压。
- 反 Park 变换得到 αβ 轴电压,送出 SVPWM。
- 逆变器输出三相电压驱动 IPMSM。
- 将采样电流中的 q̂ 轴分量经带通→解调→低通,得到位置误差。
- 位置误差输入观测器,输出估算角速度并积分得到估算角度。
- 估算角度回馈给所有 Park / 反 Park 变换,完成闭环。
3.2 电机参数与逆变器配置
为了让仿真结果有参考价值,我选用了一组内置式永磁同步电机参数,特征是凸极率比较明显,适合高频注入发挥效果。
| 参数 | 数值 |
|---|---|
| 极对数 Pn | 4 |
| 额定转速 | 3000 rpm |
| 定子电阻 Rs | 0.15 Ω |
| d轴电感 Ld | 0.5 mH |
| q轴电感 Lq | 1.0 mH |
| 永磁磁链 ψf | 0.05 Wb |
| 直流母线电压 | 311 V |
| PWM 开关频率 | 10 kHz |
| 电流采样频率 | 10 kHz |
SVPWM 模块我用自己搭的“调制波比较 + 三角载波”方式完成的,方便后面设置死区时间。逆变器部分如果没有特别需求,可以直接用 Simulink 里的三相桥模块,但要注意设置开关器件内阻和管压降,否则高频注入小电压信号时仿真会过于理想。死区时间我一开始设的 2 μs,后来在验证死区补偿时又加大到 4 μs 对比观察,效果差异非常明显。
仿真求解器我选择固定步长,步长取 2 μs。这一步很关键,因为高频注入频率 1 kHz,对应的周期是 1 ms,如果步长超过 20 μs,高频电压波形上会出现阶梯状畸变,解调出来的误差信号也会莫名其妙地抖动。固定步长取小之后,虽然模型跑起来慢一点,但换回来的是可信的信号链路。
3.3 高频注入信号生成与叠加实现
高频注入信号本身不复杂,就是一段余弦电压,但我见过不少人在 Simulink 里把它加错了位置。正确的做法是叠加在估算旋转坐标系下的 d 轴电压指令上,而不是叠加在静止坐标系下的 αβ 轴电压上。原因前面说过,只有加在估算d轴,q̂ 轴的高频响应才正好对应位置误差。
我习惯用一个独立的模块生成注入电压,里面其实就是一个时钟信号连接到一个增益模块。伪代码如下:
matlab复制% 高频注入参数
f_inj = 1000; % 注入频率 1 kHz
w_inj = 2*pi*f_inj; % 注入角频率
V_inj = 30; % 注入幅值 30 V,约为母线电压的10%
delta_theta = 0; % 可选的相位补偿角度
v_dh = V_inj * cos(w_inj * time + delta_theta);
在 Simulink 里我直接用 Clock 模块取时间,经过三角函数模块后乘上幅值,输出接到一个求和点,叠加到电流环 d 轴输出电压指令上。注意高频注入电压一定要在电流环输出之后、反 Park 变换之前叠加,顺序反了会导致解调坐标系和注入坐标系不一致。
这里要提醒一下:如果你用的是普通变量步长求解器,Clock 产生的时间信号在高频下可能会因为步长自适应而出现采样不均,导致注入频率漂移。所以高频注入仿真我还是推荐固定步长,至少要比注入周期小两个数量级。
3.4 解调链路与位置观测器实现
解调链路里,带通滤波器我建议用二阶带通,中心频率设为 f_inj,Q 值先取 2。Simulink 里选 Analog Filter Design 模块,配置成 Bandpass、Butterworth、阶数2,上限和下限频率设成中心频率附近的一小段窄带,或者直接用带通参数配置方式。
同步解调就是乘法器,把带通滤波后的 q̂ 轴高频电流和 sin(ωh·t) 相乘。注意参考信号要和注入信号严格同频,最好都取同一个 Clock,不要分别生成时间信号,否则很容易引入相位偏移。仿真里要追踪相位,我通常直接把 sin 函数接到注入模块的时间输入上进行复用。
低通滤波器我用一阶低通,截止频率 150 Hz,用来滤除乘法器输出的二倍频分量。低通滤波之后的误差信号再经过一个比例环节,就进入位置观测器。观测器的实现很直接:
matlab复制% 位置观测器结构:PI + 积分器
err_theta = lowpass_output; % 解调得到的位置误差
w_hat = Kp*err_theta + Ki*integr_err; % 估算角速度
theta_hat = integrate(w_hat); % 估算角度
Kp 和 Ki 是观测器参数,我放在后面调参部分详细说。如果直接用 Simulink 的 PI 模块加 Integrator 也可以,关键是反馈回路别接错:θ̂ 要回到 Park 变换、反 Park 变换以及高频注入坐标生成模块。
整个模型跑起来之后,我最先看的波形不是位置误差,而是 q̂ 轴电流的高频响应。如果波形里能明显看到一个 1 kHz 的包络,同时幅值随角度误差变化,说明信号链路基本通了。此时再把观测器输出和真实转子角度放到同一个 Scope 里,看它们是否重合。
4. 仿真参数设置与调参经验
4.1 一套可直接复现的参考参数
这套仿真能做到稳态位置误差在 ±2° 以内,启动后约 0.3 秒进入收敛状态。下面是完整参数表,你可以直接按这个组合在 Simulink 里复现,然后再根据自己的电机参数去改。
| 类别 | 参数 | 数值 |
|---|---|---|
| 电流环 | d轴 Kp / Ki | 2.0 / 500 |
| 电流环 | q轴 Kp / Ki | 3.0 / 750 |
| 高频注入 | 注入频率 | 1 kHz |
| 高频注入 | 注入幅值 | 30 V |
| 带通滤波 | 中心频率 | 1 kHz |
| 带通滤波 | Q 值 | 2 |
| 低通滤波 | 截止频率 | 150 Hz |
| 位置观测器 | Kp | 50 |
| 位置观测器 | Ki | 1000 |
| 初始估算角 | 启动默认角 | 0 rad |
电流环参数根据 Lq、Rs 和想要的电流环带宽大致估算,在这个例子里目标带宽约 500 Hz。公式可以粗略用:Kp ≈ Lq × 电流环带宽,Ki ≈ Rs × 电流环带宽,算出来之后再微调。位置观测器的带宽要远低于电流环,我这里实际上约 80 Hz,比低通滤波器的 150 Hz 低,符合前面说的“错开带宽”原则。
4.2 从仿真曲线看:哪些波形值得盯着看
模型能跑起来不等于模型是正确的。我建议你把下面几个波形放进同一个窗口里对比着看。
第一组是真实转子角度 θr 和估算角度 θ̂。启动瞬间两者可能相差很多,但波形上应该看到 θ̂ 逐步追赶并最终重合。如果 θ̂ 完全不动,说明误差信号没解调出来,或者观测器反馈回路断了。第二组是位置误差 Δθ 的波形,稳态应该在 ±2° 以内波动,波动幅度太大说明滤波器带宽或者观测器带宽没拉开。第三组是 q̂ 轴电流的高频分量,它反映位置误差信号的原始质量。如果这个波形又乱又小,后面的解调结果一定好不了。
还有一条容易被忽略的曲线:d 轴电流指令上叠加高频之后,实际电机 d 轴电流里能不能看到对应的高频纹波。如果电流环 PI 把高频电压完全“抵消”了,说明电流环带宽设置有问题,高频信号没有真正作用到电机电感上。
4.3 我调参时踩过的几个深坑
第一个坑是低通滤波器截止频率设太高。我一开始图省事,低通截止设到 500 Hz,想着反正解调后二倍频是 2 kHz,离得远。结果位置环收到了不少残余交流分量,位置误差波形像锯齿一样抖,转速越高抖得越厉害。后来把截止频率降到 150 Hz,问题立刻消失。
第二个坑是注入频率和电流环带宽靠得太近。我把电流环带宽调到 800 Hz,然后注入频率选了 1 kHz,发现高频解调后的误差信号里混入了明显的电流环响应分量,位置估计的带宽和稳定性全乱套。重新把电流环带宽降到 500 Hz 附近才恢复正常。
第三个坑是固定步长不够小。第一次跑模型时我图快,用 50 μs 步长。1 kHz 注入周期是 1 ms,50 μs 步长意味着一个注入周期只有 20 个采样点,高频信号波形已经明显变形。改成 2 μs 步长之后,解调信号干净了非常多。如果你的模型速度太慢,可以考虑把注入频率降到 500 Hz,同时适当放大步长到 5 μs,但不要再往下压了。
5. 常见问题与排查技巧实录
5.1 位置估计有固定偏差怎么办
我调试过程中遇到最典型的问题,是稳态位置误差不收敛到零,而是固定偏几度。这个现象几乎都指向信号链路里的相位延迟。
从电压指令产生到电流采样,中间经过 PWM 调制、逆变器开关延迟、电流采样保持、数字滤波、坐标变换,每一步都可能带来相位滞后。高频注入信号是余弦形式,延迟时间 τ 反映到相位上就是 2π·f_inj·τ,频率越高延迟导致的相位偏差越大。在 1 kHz 注入频率下,100 μs 的延迟就会产生 0.63 rad 的角度偏差,完全不可忽略。
解决办法是在注入信号参考和同步解调参考上做相位补偿。补偿量的计算思路是:先大致算出从电压输出到电流采样之间的总延时,包括 PWM 更新周期、采样保持周期、滤波器相位滞后,然后用下面的式子折算:
Δθ_comp = 2π × f_inj × T_delay_total
然后把补偿角叠加到 sin(ωh·t) 参考信号上。实际操作时,我更推荐在仿真里先做一个“注入已知角度偏置”的测试:把观测器的输出强行加上一个固定的 0.1 rad 偏置,看解调误差是不是也跟着偏 0.1 rad。如果不是,说明链路中还有额外滞后,按差值反复补偿即可。
5.2 初始位置检测与磁极极性判断
高频注入在零速时能检测到转子磁极的轴线方向,但有一条天然限制:只能判断磁极所在轴,分辨不了 N 极还是 S 极。换句话说,θ̂ 收敛到 θr 或收敛到 θr + π 都有可能。如果拿不准极性就启动,轻则启动瞬间反方向扭一下,重则电流确实建立起来了,转矩方向却反了。
工程上解决极性判断的办法是利用饱和效应。给 d 轴方向施加正电压脉冲和负电压脉冲,对比产生的电流幅值;因为永磁体的磁场会加剧或抵消注入磁场,正负方向对应的磁路饱和程度不同,电流幅值也就不同。幅值更大的那个方向,通常就是真实磁极方向。仿真里这一步我一般单独编排一个初始化序列:先做一次正负脉冲测试,确定极性后把观测器初始角设为正确值,再切到高频注入闭环。
如果你做的是纯仿真验证,启动前直接把初始估算角设成和真实角度一致或接近,可以暂时跳过极性判断。但一旦你打算做实验,极性判断绝对不能被省略。
5.3 逆变器死区与电流采样畸变
高频注入法在零速低速下表现好,但也特别脆弱,因为注入信号本身幅值不大,而死区时间、功率管压降造成的电压畸变在零速附近相对占比很高。
死区时间带来的电压误差近似是一个方波,叠加在输出电压上,会在电流中产生明显的低次谐波。这些谐波经过带通滤波器后,一部分会漏进解调链路,让位置观测器产生额外的稳态纹波。我在仿真里设 2 μs 死区时位置误差还能接受,把死区加到 4 μs 之后,误差波动明显变大。
要贴近实际,可以加死区补偿模块,根据电流方向对电压指令做修正。但更重要的一个实操细节是电流采样时刻:一定要把采样点放在 PWM 载波周期的中间或者三角波顶点,避开上下桥臂切换瞬间和死区翻转时刻。这样采样到的电流最接近理想值,高频注入法对这一点尤其敏感。
5.4 仿真与实验的差异:为什么不能直接照搬参数
仿真模型里电机参数恒定,电流采样干净,滤波器理想,但实际电机温度变化会改变永磁磁链和电感,电流传感器的零漂和比例误差也会混进反馈信号。高频注入幅值、滤波器 Q 值这些参数的余量,必须在仿真阶段就留足,否则上了实验台再调会非常痛苦。
我调试实验板时走过一次弯路:仿真里注入幅值 30 V 效果很好,实验板上我把注入幅值压到 12 V,结果位置环在低速下时不时丢同步。后来发现是采样噪声把小幅高频电流脉冲吃掉了。回到仿真里把带通滤波器加上一个高斯白噪声源,再调滤波器和注入幅值,重新找到了一组鲁棒性更好的参数。仿真能做的,就是尽量把这类噪声场景提前暴露出来,减少在硬件上反复试错的时间。
如果你刚开始做无传感器控制,又没有实验条件,我的建议是无论如何都要先把仿真模型里的信号链路彻底搞明白。最后分享一个小技巧:调试初期把位置观测器的反馈断开,用一个固定角度和一个恒定转速发生器代替估算角,然后注入高频信号,观察 q̂ 轴电流解调后的波形。给角度偏置加上一个已知的正数,看误差信号是否同号变化;如果连这层关系都对不上,后面的闭环一定也是乱的。等这个开环链路完全正常,再接上观测器闭环,整套系统也就水到渠成了。
