小猫爪:PMSM之FOC控制13-搭建EKF观测器


  

1 前言

前面说到只要搭建出系统的状态方程,就可以进行完整的卡尔曼滤波的流程,这节就介绍怎么搭建出能给卡尔曼滤波的状态方程。

2 模型搭建

  首先列出在《小猫爪:PMSM之FOC控制10-搭建SMO状态观测器》中推导出来的电机在 α − β \alpha-\beta αβ坐标下的方程如下:
在这里插入图片描述
  其中 A = [ − R L s 0 0 − R L s ] A=[\begin{matrix} -\frac{R}{L_s} & 0 \\ 0 & -\frac{R}{L_s} \\ \end{matrix}] A=[LsR00LsR],扩展反电动势E的表达式为:
在这里插入图片描述

  再加上转速 ω \omega ω跟转子位置 θ \theta θ的关系如下:
在这里插入图片描述
  将这几个式子结合一下得:
在这里插入图片描述

2.1 矩阵化

  把上一篇文章的线性系统的状态观测器模型拿过来:
在这里插入图片描述
  怎样把上面的式子变化成状态观测器矩阵的形式呢?首先确认状态变量依次是 i α ˙ , i β ˙ , ω ˙ , θ ˙ \dot{i_{\alpha}},\dot{i_{\beta}},\dot\omega,\dot\theta iα˙,iβ˙,ω˙,θ˙,则有:
在这里插入图片描述
  另外输入是 u u u,对于电机来说输入是电压,则有:
在这里插入图片描述
  那输出矩阵 y y y是什么呢?观察卡尔曼观测器的结构如下:
在这里插入图片描述
  卡尔曼观测器的反馈是真实系统输出的测量值和卡尔曼观测器的输出的差,所以这两者的输出应该是等价等维的,所以卡尔曼观测器的输出取决于能测量到什么,很显然在无传感器控制系统中,只能测量出电流,所以卡尔曼观测器的输出矩阵 y y y为:
在这里插入图片描述
  既然 y y y x x x都知道了, H H H则就是:
在这里插入图片描述
  结合 u u u x ˙ \dot{x} x˙,不难看出 B B B为:
在这里插入图片描述
  接下来还差一个 A A A,突然发现这个 A A A始终没办法确定,因为这不是一个线性系统,没关系,先直接带下来,所有将状态方程写成矩阵的形式为:
在这里插入图片描述
  暂时令:
在这里插入图片描述
  即目前的状态方程是这样的:
在这里插入图片描述

2.2 线性化

  在矩阵化的过程中,遇到了非线性的因素导致没有求出A,接下来,只需要把矩阵 A A A求出来,那么就可以将电机系统在 α − β \alpha-\beta αβ坐标下的状态方程和观测方程搭建起来。那么怎么求出这个A呢?

  那就需要著名的泰勒公式了,如下:
在这里插入图片描述
  取前两项,后面全部看成泰勒余项则有:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + o ( x − x 0 ) f(x)=f(x_0)+f^{'}(x_0)(x-x_0)+o(x-x_0) f(x)=f(x0)+f(x0)(xx0)+o(xx0)  令 f ( x ) = G ( x ) f(x)=G(x) f(x)=G(x),并且省略泰勒余项则有:
G ( x ) = G ( x 0 ) + G ′ ( x 0 ) ( x − x 0 ) G(x)=G(x_0)+G^{'}(x_0)(x-x_0) G(x)=G(x0)+G(x0)(xx0)  这个时候再将这个 G ( x ) G(x) G(x)代入到之前总结的状态方程中去得:
x ˙ = G ( x 0 ) + G ′ ( x 0 ) ( x − x 0 ) + B u \dot x=G(x_0)+G^{'}(x_0)(x-x_0)+Bu x˙=G(x0)+G(x0)(xx0)+Bu  化简得:
x ˙ = G ′ ( x 0 ) x + B u + ( G ( x 0 ) − G ′ ( x 0 ) x 0 ) \dot x=G^{'}(x_0)x+Bu+(G(x_0)-G^{'}(x_0)x_0) x˙=G(x0)x+Bu+(G(x0)G(x0)x0)  从这个式子中就可以很清楚得看出电机系统在时刻 x 0 x_0 x0,矩阵 A = G ′ ( x 0 ) A=G^{'}(x_0) A=G(x0),到此为止A矩阵终于确定好了,即 A x 0 = ∂ ( G ( x ) ) ∂ x A_{x_0}= \frac {\partial(G(x))}{\partial x} Ax0=x(G(x)),即:
在这里插入图片描述

  到目前为止,整个电机系统的状态方程的矩阵化已经全部完成。

2.3 离散化

  接下来还有一个最最重要的问题,那就是离散化,因为状态方程是建立在连续系统的基础上,需要将其转化成离散化系统后,才能在微控制器中实现卡尔曼滤波状态观测器,下面就开始进行离散化。

  其实之前再求卡尔曼滤波中矩阵 F F F的时候已经介绍过了。首先列出上面总结的状态方程为: x ˙ = G ( x ) + B u \dot x=G(x)+Bu x˙=G(x)+Bu,在离散化系统下,令 x = x k − 1 x=x_{k-1} x=xk1,而微分 x ˙ \dot x x˙在离散化系统中的表达方式为 x ˙ = x k − x k − 1 Δ t \dot{x}=\frac{x_{k}-x_{k-1}}{\Delta t} x˙=Δtxkxk1,则上式变成:
x k − x k − 1 Δ t = G ( x k − 1 ) + B u k − 1 \frac{x_{k}-x_{k-1}}{\Delta t}=G(x_{k-1})+Bu_{k-1} Δtxkxk1=G(xk1)+Buk1  移动一下项该式就变成:
x k = x k − 1 + ( G ( x k − 1 ) + B u k − 1 ) Δ t {x_{k}}=x_{k-1}+(G(x_{k-1})+Bu_{k-1})\Delta t xk=xk1+(G(xk1)+Buk1)Δt  其中 Δ t \Delta t Δt也就是微控制器的算法执行周期,该式自然而然也就替换了卡尔曼滤波过程中的第一个公式,即计算预估值,相比较于使用泰勒展开得到的式子,这个式子算出的结果更加准确。

3 扩展卡尔曼滤波的流程

  经过上面的一顿操作,终于是把电机系统的扩展卡尔曼滤波观测器搭建完毕了,最后总结一下,扩展卡尔曼在电机FOC无感控制中的具体流程如下:
在这里插入图片描述
  该流程中涉及到的所有矩阵以及变量名称都可以在文章中找到。现在就可以总结出扩展卡尔曼观测器的系统框图:
在这里插入图片描述

  至此扩展卡尔曼滤波状态观测器的搭建就介绍完了。

END

### 关于永磁同步电机EKF观测器的设计与应用 #### 工作原理概述 扩展卡尔曼滤波(EKF)作为一种广泛应用的非线性系统跟踪和估计方法,因其简单、最优、易于控制以及稳定可靠的特性,在众多领域得到了成功应用。对于凸极内部永久磁铁同步电机(IPMSM),EKF能够有效实现无传感器控制,通过估计速度和转子位置来替代传统的机械传感器[^1]。 #### 设计要点 为了构建适用于IPMSM的速度和位置估算模型,EKF算法需考虑如下因素: - **状态向量定义**:由电机电流、速度及转子位置组成的状态向量是EKF的核心部分; - **输入变量选取**:线路电压和负载扭矩作为外部激励源被纳入到系统的输入端口之中; - **输出测量配置**:仅依赖电机电流这一物理量来进行实时监测并反馈给控制器; 上述要素共同构成了基于EKF理论框架下的IPMSM控制系统架构。 #### 计算挑战 值得注意的是,尽管EKF提供了强大的功能支持,但在具体实施过程中也面临一些技术难题。例如,较高的计算复杂度意味着更大的硬件资源消耗,同时对雅可比矩阵求解过程中的数值稳定性提出了严格的要求[^2]。 #### 应用案例分析 考虑到实际应用场景的需求多样性,EKF不仅限于电动机驱动场合的应用。事实上,在诸如全球定位系统(GPS)信号处理、机器人导航定位乃至无人驾驶车辆路径规划等多个高科技前沿方向上均有出色表现。这表明EKF具备良好的通用性和适应能力,可以灵活应对不同类型的动态变化环境。 ```python import numpy as np def ekf_predict(x, P, F, Q): """ 预测阶段更新方程 参数: x (numpy.ndarray): 当前时刻的状态预测值 P (numpy.ndarray): 协方差矩阵 F (numpy.ndarray): 状态转移矩阵 Q (numpy.ndarray): 过程噪声协方差 返回: tuple: 更新后的状态预测值及其对应的误差协方差矩阵 """ # 预测新的状态均值 x_pred = F @ x # 预测新的协方差矩阵 P_pred = F @ P @ F.T + Q return x_pred, P_pred def ekf_update(z, H, R, x_pred, P_pred): """ 测量更新方程 参数: z (numpy.ndarray): 观测数据 H (numpy.ndarray): 观测函数Jacobian矩阵 R (numpy.ndarray): 观测噪声协方差 x_pred (numpy.ndarray): 上一步骤得到的状态预测值 P_pred (numpy.ndarray): 对应的预测误差协方差矩阵 返回: tuple: 经过修正后的最终状态估值及其相应的误差协方差矩阵 """ y = z - H @ x_pred # 创新序列 S = H @ P_pred @ H.T + R # 创新协方差 K = P_pred @ H.T @ np.linalg.inv(S) # Kalman增益 # 更新状态估计 x_est = x_pred + K @ y I_KH = np.eye(len(K)) - K @ H P_est = I_KH @ P_pred @ I_KH.T + K @ R @ K.T return x_est, P_est ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值