4、基于RLS的定子电阻辨识:数学模型推导、辨识算法设计、仿真验证
4.1 为什么要在线辨识定子电阻?
做电机控制这么多年,我遇到过最头疼的问题之一,就是定子电阻随温度变化。你想想看,电机跑起来之后,温度从常温升到七八十度,电阻能变化20%以上。这时候如果你还用固定的电阻值去做无速度传感器控制,那估计误差会越来越大。
说白了,定子电阻在线辨识就是为了解决这个问题。我们得让控制器自己学会跟踪电阻的变化,而不是靠查表或者经验公式去猜。
核心难点:定子电阻的变化是缓慢的,但电流和转速的变化是快速的。如何从快速变化的信号中提取出缓慢变化的电阻值?这就是RLS算法的用武之地。
4.2 数学模型推导
我们先从永磁同步电机的电压方程入手。在d-q坐标系下,定子电压方程可以写成:
ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)
嗯,这里要注意,我们做电阻辨识时,通常只用一个方程就够了。我个人习惯用q轴方程,因为q轴电流通常比较大,信噪比更好。
把q轴方程改写成适合RLS的形式:
uq - Lq * (diq/dt) - ωe * (Ld * id + ψf) = Rs * iq
令:
y(t) = uq - Lq * (diq/dt) - ωe * (Ld * id + ψf)
φ(t) = iq
θ = Rs
这样就得到了标准的最小二乘形式:
y(t) = φ(t) * θ
我的经验:实际项目中,微分项diq/dt很容易引入噪声。我建议先用低通滤波器处理一下电流信号,再做差分。否则辨识出来的电阻值会抖得厉害。
4.3 RLS算法设计
RLS的核心思想是:每次来一个新数据,就更新一次估计值,同时让旧数据的权重逐渐衰减。这个衰减靠的是遗忘因子λ。
算法步骤如下:
- 初始化:设置初始电阻估计值θ̂(0)和协方差矩阵P(0)
- 计算增益:K(k) = P(k-1)*φ(k) / [λ + φ(k)²*P(k-1)]
- 更新估计值:θ̂(k) = θ̂(k-1) + K(k)*[y(k) - φ(k)*θ̂(k-1)]
- 更新协方差:P(k) = [1 - K(k)*φ(k)] * P(k-1) / λ
这里λ的取值范围是0到1之间。λ越接近1,算法对历史数据的记忆越长,估计越平滑但响应慢。λ越小,跟踪越快但容易受噪声影响。
我曾经踩过的坑:有一次我把λ设成了0.95,结果电阻辨识值一直在震荡。后来发现是因为电流采样有周期性噪声,λ太小导致算法对每个噪声点都过度响应。最后我把λ调到0.99,同时加了个滑动平均,问题就解决了。
4.4 仿真验证
为了验证算法效果,我在Simulink里搭了个模型。电机参数如下:
| 参数 | 数值 | 单位 |
|---|---|---|
| 额定定子电阻 | 0.5 | Ω |
| d轴电感 | 8.5 | mH |
| q轴电感 | 8.5 | mH |
| 永磁磁链 | 0.175 | Wb |
| 额定转速 | 1500 | rpm |
仿真条件:电机运行在1000rpm,带50%负载。在t=2s时,让定子电阻从0.5Ω阶跃到0.6Ω(模拟温度升高)。
下面是RLS算法的核心代码(C语言风格):
// RLS参数初始化
float lambda = 0.98; // 遗忘因子
float P = 100.0; // 初始协方差
float theta_hat = 0.5; // 初始电阻估计值
// 每次采样执行
void RLS_Update(float uq, float iq, float diq_dt, float omega_e, float Lq, float Ld, float psi_f) {
// 计算y和phi
float y = uq - Lq * diq_dt - omega_e * (Ld * id + psi_f);
float phi = iq;
// 计算增益
float K = P * phi / (lambda + phi * phi * P);
// 更新估计值
float error = y - phi * theta_hat;
theta_hat = theta_hat + K * error;
// 更新协方差
P = (1.0 - K * phi) * P / lambda;
// 限幅保护
if(theta_hat < 0.1) theta_hat = 0.1;
if(theta_hat > 2.0) theta_hat = 2.0;
}
仿真结果:电阻从0.5Ω阶跃到0.6Ω后,RLS算法大约在0.3秒内跟踪到了新值。稳态误差小于1%。如果把遗忘因子调到0.95,跟踪时间可以缩短到0.15秒,但稳态波动会增大到3%左右。
4.5 知识体系结构图
下面这张图展示了定子电阻在线辨识的整体逻辑:
4.6 避坑指南与实用建议
最后,我总结几个实际项目中容易遇到的问题:
- 低速工况:转速低于100rpm时,反电动势很小,信噪比急剧下降。我建议这时候暂停辨识,或者注入一个高频小信号来激励。
- 电感参数误差:RLS算法依赖电感值Ld和Lq。如果电感参数不准,电阻辨识也会偏。我曾经遇到过电感标称值和实际值差了15%,结果电阻辨识误差直接翻倍。
- 采样频率:RLS的采样频率建议和电流环频率一致,通常是10kHz左右。太低的话跟不上动态,太高了计算量吃不消。
一个小技巧:如果你发现辨识出来的电阻值一直在缓慢漂移,可以先检查一下电流传感器的偏置。有时候零点几安的偏置,就能让电阻估计值偏掉5%以上。
好了,关于基于RLS的定子电阻辨识,核心内容就是这些。从数学模型到算法设计,再到仿真验证,每一步都有不少细节需要注意。做工程嘛,就是在这些细节里慢慢积累经验的。