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的核心思想是:每次来一个新数据,就更新一次估计值,同时让旧数据的权重逐渐衰减。这个衰减靠的是遗忘因子λ。

算法步骤如下:

  1. 初始化:设置初始电阻估计值θ̂(0)和协方差矩阵P(0)
  2. 计算增益:K(k) = P(k-1)*φ(k) / [λ + φ(k)²*P(k-1)]
  3. 更新估计值:θ̂(k) = θ̂(k-1) + K(k)*[y(k) - φ(k)*θ̂(k-1)]
  4. 更新协方差: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 知识体系结构图

下面这张图展示了定子电阻在线辨识的整体逻辑:

基于RLS的定子电阻辨识知识体系 输入信号 uq, iq, ωe, id 数学模型 y = φ · θ RLS算法 递推最小二乘 Rs估计值 关键参数设置 • 遗忘因子 λ:0.95~0.99 • 初始协方差 P(0):100~1000 • 初始电阻 θ̂(0):额定值 工程注意事项 1. 微分项 diq/dt 需加低通滤波,避免噪声放大 2. 低速时反电动势小,信噪比差,建议加激励信号 3. 电阻变化是缓慢过程,遗忘因子不宜太小

4.6 避坑指南与实用建议

最后,我总结几个实际项目中容易遇到的问题:

  • 低速工况:转速低于100rpm时,反电动势很小,信噪比急剧下降。我建议这时候暂停辨识,或者注入一个高频小信号来激励。
  • 电感参数误差:RLS算法依赖电感值Ld和Lq。如果电感参数不准,电阻辨识也会偏。我曾经遇到过电感标称值和实际值差了15%,结果电阻辨识误差直接翻倍。
  • 采样频率:RLS的采样频率建议和电流环频率一致,通常是10kHz左右。太低的话跟不上动态,太高了计算量吃不消。

一个小技巧:如果你发现辨识出来的电阻值一直在缓慢漂移,可以先检查一下电流传感器的偏置。有时候零点几安的偏置,就能让电阻估计值偏掉5%以上。

好了,关于基于RLS的定子电阻辨识,核心内容就是这些。从数学模型到算法设计,再到仿真验证,每一步都有不少细节需要注意。做工程嘛,就是在这些细节里慢慢积累经验的。

专注资料整理