凸极效应与信号解耦:电机凸极效应原理

好,咱们接着聊高频注入。上一章我们把高频信号怎么注入到电机里讲清楚了。但有个问题——你注入的信号,怎么从反馈里把位置信息“捞”出来?

这就绕不开一个核心概念:凸极效应

说白了,就是电机转子在转的时候,它的电感不是均匀的。d轴和q轴的电感不一样。我刚开始做无感FOC时,总觉得这玩意儿是理论上的东西,直到有一次在实验室调一个内置式永磁同步电机(IPMSM),发现高频响应信号里藏着明显的周期性波动。嗯,那就是凸极效应在“说话”。

1.1 凸极效应的物理本质

为什么会有凸极效应?你想想看,永磁体嵌在转子铁芯里,磁路结构不对称。d轴(永磁体方向)磁阻大,电感小;q轴(交轴方向)磁阻小,电感大。

用公式表达就是:

Ld ≠ Lq

对于IPMSM,通常Lq > Ld。这个差值ΔL = Lq - Ld,就是我们做高频注入的“信号源”。

我在项目中遇到过一台表贴式电机(SPMSM),Ld和Lq几乎相等,凸极效应弱到可以忽略。那时候高频注入基本失效,最后只能换用其他方法。所以,凸极效应是高频注入的前提

核心要点:凸极效应越强,高频注入的信噪比越高,位置估计越准。

1.2 凸极率的工程意义

我们定义一个参数叫凸极率:

ρ = Lq / Ld

ρ越大,凸极效应越明显。一般IPMSM的ρ在1.5~3之间。我见过一些特殊设计的电机,ρ能做到4以上,那种电机做高频注入简直不要太爽。

电机类型 Ld (mH) Lq (mH) 凸极率 ρ 高频注入适用性
SPMSM 0.5 0.52 1.04
IPMSM (普通) 0.4 0.8 2.0
IPMSM (高凸极) 0.3 1.2 4.0 优秀

我的经验:如果凸极率低于1.2,建议别用高频注入,信噪比太低,容易误判。我曾经在一个项目里硬着头皮用,结果位置估计抖得像筛子。

高频信号在dq轴下的响应

好,现在我们把高频信号注入到电机里。信号进了电机,会怎么响应?

我们注入的是高频电压信号,通常加在d轴或q轴上。我个人习惯在d轴注入,因为这样对转矩的影响最小。

2.1 高频电压方程

在dq旋转坐标系下,电机的电压方程是:

vd = Rs·id + Ld·(did/dt) - ωe·Lq·iq
vq = Rs·iq + Lq·(diq/dt) + ωe·Ld·id + ωe·ψf

注意,这里ωe是电角速度。但在高频注入时,我们注入的频率远高于基波频率。所以,ωe项可以忽略。为什么呢?因为高频信号变化太快,反电动势跟不上。

简化后的高频模型:

vdh ≈ Ld·(didh/dt)
vqh ≈ Lq·(diqh/dt)

你看,高频下电机就变成了一个纯电感负载。电阻和反电动势的影响可以忽略。

关键洞察:高频响应只与电感有关,而电感又和转子位置相关。这就是我们能从高频响应中提取位置信息的根本原因。

2.2 高频电流响应

我们注入一个高频正弦电压:

vdh = Vh·sin(ωh·t)

那么d轴的高频电流响应是:

idh = -(Vh/(ωh·Ld))·cos(ωh·t)

q轴类似。但注意,如果转子位置有偏差,d轴和q轴之间会有耦合。这个耦合信号里就藏着位置信息。

我刚开始做时,总搞不清为什么高频电流里会有位置信息。后来想明白了:你注入的是d轴信号,但转子没对准,信号就会耦合到q轴。这个耦合量正比于位置误差。

2.3 位置误差的提取

假设我们估计的转子位置是θ̂,实际位置是θ。误差Δθ = θ - θ̂。

在估计的dq坐标系下,高频电流响应为:

îdh = I0·cos(ωh·t)
îqh = I0·sin(2Δθ)·cos(ωh·t)

注意看,q轴的高频电流幅值正比于sin(2Δθ)。当Δθ很小时,sin(2Δθ) ≈ 2Δθ。所以,q轴高频电流的幅值直接反映了位置误差

避坑指南:我曾经犯过一个错误——直接用îqh的瞬时值做误差信号。结果发现噪声大得离谱。后来才意识到,应该先解调,提取幅值,再做处理。千万别偷懒。

带通/低通滤波器设计

信号提取出来了,但里面混着各种噪声。基波分量、开关噪声、测量噪声……我们需要滤波器来“提纯”。

我个人习惯用两级滤波:带通滤波器(BPF) 提取高频分量,低通滤波器(LPF) 提取误差信号。

3.1 带通滤波器设计

BPF的作用是从电流采样信号里把高频分量捞出来。中心频率就是注入频率ωh。

我用的是二阶带通滤波器,传递函数:

H(s) = (2·ζ·ωc·s) / (s² + 2·ζ·ωc·s + ωc²)

其中ωc是中心频率,ζ是阻尼系数。我一般取ζ=0.707,这样带宽适中,响应快。

带宽怎么选?太宽了噪声多,太窄了信号衰减大。我建议带宽取注入频率的10%~20%。

// 数字BPF实现(二阶IIR)
// 采样频率 fs = 10kHz, 中心频率 fh = 500Hz, 带宽 BW = 100Hz
float b0 = 0.0201;
float b1 = 0.0;
float b2 = -0.0201;
float a1 = -1.5610;
float a2 = 0.6414;

float bpf_filter(float input) {
    static float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
    float output = b0*input + b1*x1 + b2*x2 - a1*y1 - a2*y2;
    x2 = x1; x1 = input;
    y2 = y1; y1 = output;
    return output;
}

注意:IIR滤波器有相位延迟。如果你对实时性要求高,可以考虑用FIR。但FIR阶数高,计算量大。我在一个低成本MCU上用过IIR,效果还行,就是要注意系数精度。

3.2 低通滤波器设计

经过BPF后,我们得到了高频电流信号。然后需要解调——乘以一个同频的参考信号,再低通滤波,提取幅值。

解调后的信号包含直流分量(就是我们要的误差信号)和2倍频分量。LPF的任务就是滤掉2倍频分量。

我用的是一阶低通滤波器,简单可靠:

H(s) = 1 / (1 + τ·s)

截止频率fc = 1/(2πτ)。我一般取fc为注入频率的1/10左右。

// 一阶数字LPF
// 截止频率 fc = 50Hz, 采样频率 fs = 10kHz
float alpha = 0.0314;  // alpha = 2π·fc/fs

float lpf_filter(float input) {
    static float y_prev = 0;
    float output = alpha * input + (1 - alpha) * y_prev;
    y_prev = output;
    return output;
}

我的经验:alpha值别选太大,否则滤波效果差。也别太小,否则响应太慢。我一般先仿真调好参数,再移植到MCU上。有一次在仿真里跑得好好的,上机就炸了——原来是定点数精度不够。嗯,这个坑我踩过。

3.3 滤波器设计总结

滤波器类型 作用 推荐参数 注意事项
带通滤波器 (BPF) 提取高频分量 中心频率 = 注入频率
带宽 = 10%~20% 中心频率
IIR注意系数精度
FIR注意计算量
低通滤波器 (LPF) 提取误差信号 截止频率 = 1/10 注入频率 alpha值适中
注意响应速度

说白了,滤波器设计就是在噪声抑制和响应速度之间找平衡。没有完美的参数,只有适合你项目的参数。

核心思路回顾:

  • 凸极效应 → 电感随位置变化
  • 高频注入 → 电感影响电流响应
  • BPF提取高频 → 解调 → LPF提取误差
  • 误差信号 → 位置估计

好,这一章的内容就到这儿。滤波器设计这块,我建议你多动手仿真,调调参数,感受一下不同参数对系统的影响。纸上得来终觉浅,绝知此事要躬行。

专注资料整理