电机参数识别算法个人心得 —— 递归最小二乘法(RLS)
1. 为什么要做参数辨识
最近在项目里需要搞电机的参数估计,说白了就是要实时获取电机的关键参数,比如定子电阻
2. 电机的 d-q 轴模型
先从基础说起。电机的 d-q 轴模型其实不复杂,就是把三相电机的电压和电流转换成一个固定的参考系。可以这么理解:通过数学变换,把三相电流、电压搞成两个直轴上的量,这样计算起来方便很多,尤其是在控制上。
方程如下:
我们可以把电压
然后再做个假设:磁链
3. 离散化是个啥?
在电机控制里,信号是离散的(因为都是采样来的数据)。所以,我们得把连续的公式转换成离散形式。最简单的办法就是用有限差分公式,比如:
这意思就是我们用电流的差值除以采样周期
公式虽然有点长,但不用慌,核心就是把电压、电流、速度这些量联系起来,然后推导出
4. 递归最小二乘法(RLS)
现在,重点来了——RLS。说简单点,RLS 是个在线学习算法,它通过历史数据和新数据结合起来,不断优化你要估计的参数。RLS 的公式看起来也没那么复杂,就是矩阵乘法+求逆:
更新数据矩阵:
其中
是遗忘因子(你可以理解成新数据和旧数据的权重比例,值越接近 1,旧数据占的比重越大)。 求逆:
如果增广矩阵的条件数过低(就是说矩阵的逆不好求),就加个小扰动(防止算不出逆)。 更新参数:
这个公式就是通过反馈误差,不断优化参数的过程。
5. 代码解析
写了半天理论,终于到代码部分了!下面是这个算法的代码实现:
1 | function [Rs,Ls,Flux] = param_identify(ud, uq, id, iq, we) |
核心部分:
- 初始化:用
persistent
来保存历史数据,保持每次调用函数时的上下文。 - 矩阵更新:用当前时刻的输入输出数据构造矩阵
和 。 - 参数更新:判断
的逆是否存在,若存在则更新参数向量 。 - 输出结果:返回当前估计的
、 和 。
6. 最后总结
递归最小二乘法真的是个强大工具,尤其是做这种在线参数估计的时候,它能在数据变化的情况下自适应调整参数。这段代码的实现核心思想很简单:通过历史数据和新数据的结合,不断优化你想要的参数。当然了,实际用的时候,调参也很重要,尤其是遗忘因子
好了,学完 RLS,电机参数识别这部分算是搞定了,接下来就可以尝试在实际系统中跑一跑,看效果了。