Simulink 中 PMSM 的 EKF 与 AEKF 无传感器控制方案探索
Simulink三相永磁同步电机EKF与AEKF无传感器控制控制方案 电机基于EKF扩展卡尔曼滤波算法和AEKF的永磁同步电机PMSM无传感器矢量控制Simulink仿真模型。 1.依据PMSM的数学模型搭建电机模型 2.基于 PI 调节器进行双闭环dq解耦控制,转速外环,转矩内环 3. EKF和AEKF算法对电机的转子电角度和机械转速进行估算 观测器采用静态变量定义编写,易于学习修改。 文档详实,代码规范
在电机控制领域,永磁同步电机(PMSM)以其高效、节能等优点被广泛应用。而无传感器控制技术则进一步提升了 PMSM 的应用灵活性与可靠性。今天咱们就来聊聊基于扩展卡尔曼滤波(EKF)和自适应扩展卡尔曼滤波(AEKF)算法的 PMSM 无传感器矢量控制,并且看看如何在 Simulink 中搭建仿真模型。
1. 搭建 PMSM 电机模型
咱们要搭建基于 PMSM 数学模型的电机模型。PMSM 的数学模型是我们后续一切控制的基础。在 Simulink 里,我们可以通过各种模块来构建它。比如,依据电机的电压方程、磁链方程等,用 Simulink 的基本模块像加法器、乘法器、积分器等搭建出电机的各个部分。
假设这里我们有一个简单的 PMSM 电压方程在 d - q 坐标系下的表达式:
\[

\begin{cases}
ud = Rsid + Ld\frac{did}{dt} - \omegaeLqiq \\
uq = Rsiq + Lq\frac{diq}{dt} + \omegae(Ldid + \psi_f)
\end{cases}

\]
这里 \(ud\)、\(uq\) 是 d - q 轴电压,\(id\)、\(iq\) 是 d - q 轴电流,\(Rs\) 是定子电阻,\(Ld\)、\(Lq\) 是 d - q 轴电感,\(\omegae\) 是电角速度,\(\psif\) 是永磁体磁链。在 Simulink 中,我们可以用积分模块来实现 \(\frac{did}{dt}\) 和 \(\frac{di_q}{dt}\) 的积分运算,进而构建出电压与电流的关系。
2. 双闭环 dq 解耦控制(基于 PI 调节器)
采用双闭环控制,转速外环和转矩内环,并且使用 PI 调节器来实现。转速外环负责调节电机的转速,使其能跟随给定的转速值。转矩内环则保证电机能快速准确地输出期望的转矩。
在代码实现上,PI 调节器可以简单写成如下形式(以转速外环 PI 调节器为例,用 MATLAB 语言):
classdef PI_Controller
properties
Kp; % 比例系数
Ki; % 积分系数
integral; % 积分项
last_error; % 上一次的误差
end
methods
function obj = PI_Controller(Kp, Ki)
obj.Kp = Kp;
obj.Ki = Ki;
obj.integral = 0;
obj.last_error = 0;
end
function output = update(obj, setpoint, process_variable)
error = setpoint - process_variable;
obj.integral = obj.integral + error;
P_term = obj.Kp * error;
I_term = obj.Ki * obj.integral;
output = P_term + I_term;
obj.last_error = error;
end
end
end
在这个代码里,PIController 类定义了一个 PI 调节器。Kp 和 Ki 是比例和积分系数,在构造函数里初始化。update 函数则根据当前的设定值 setpoint 和实际的过程变量 processvariable 来计算输出值。这里通过累加误差来实现积分项,再加上比例项得到最终输出。
在 Simulink 中,我们可以直接使用现成的 PI 控制模块,也可以按照这个原理搭建自己的模块,通过调整 Kp 和 Ki 的值来优化控制性能。
3. EKF 和 AEKF 算法估算转子电角度和机械转速
这部分是无传感器控制的核心,用 EKF 和 AEKF 算法来估算电机的转子电角度和机械转速。观测器采用静态变量定义编写,这让代码很容易学习和修改。

Simulink三相永磁同步电机EKF与AEKF无传感器控制控制方案 电机基于EKF扩展卡尔曼滤波算法和AEKF的永磁同步电机PMSM无传感器矢量控制Simulink仿真模型。 1.依据PMSM的数学模型搭建电机模型 2.基于 PI 调节器进行双闭环dq解耦控制,转速外环,转矩内环 3. EKF和AEKF算法对电机的转子电角度和机械转速进行估算 观测器采用静态变量定义编写,易于学习修改。 文档详实,代码规范
先看看 EKF 的基本原理,它是基于非线性系统的状态空间模型,通过不断地预测和更新来逼近真实状态。假设我们有 PMSM 的状态空间模型(这里简化表示):
\[
\begin{cases}

\dot{\mathbf{x}} = f(\mathbf{x}, \mathbf{u}) + \mathbf{w} \\
\mathbf{y} = h(\mathbf{x}) + \mathbf{v}
\end{cases}
\]

这里 \(\mathbf{x}\) 是状态变量(包含转子电角度、转速等),\(\mathbf{u}\) 是输入变量(电压、电流等),\(\mathbf{w}\) 和 \(\mathbf{v}\) 分别是过程噪声和测量噪声,\(f\) 和 \(h\) 是非线性函数。
在代码实现 EKF 时,大致步骤如下(以 MATLAB 伪代码为例):
% 初始化
x_hat = zeros(state_dim, 1); % 估计状态
P = eye(state_dim); % 估计误差协方差矩阵
Q = Q_matrix; % 过程噪声协方差矩阵
R = R_matrix; % 测量噪声协方差矩阵
% 预测步骤
x_hat_minus = f(x_hat, u); % 预测状态
F = jacobian(f, x_hat); % 状态转移矩阵的雅克比矩阵
P_minus = F * P * F' + Q; % 预测误差协方差矩阵
% 更新步骤
y = h(x_hat_minus); % 预测测量值
H = jacobian(h, x_hat_minus); % 测量矩阵的雅克比矩阵
K = P_minus * H' / (H * P_minus * H' + R); % 卡尔曼增益
x_hat = x_hat_minus + K * (y_measured - y); % 更新估计状态
P = (eye(state_dim) - K * H) * P_minus; % 更新估计误差协方差矩阵
这里先初始化估计状态、误差协方差矩阵等参数。然后在预测步骤,根据状态转移函数 \(f\) 预测状态,计算状态转移矩阵的雅克比矩阵来更新预测误差协方差矩阵。在更新步骤,根据测量函数 \(h\) 计算预测测量值,通过测量矩阵的雅克比矩阵计算卡尔曼增益,进而更新估计状态和误差协方差矩阵。
AEKF 则是在 EKF 的基础上,自适应地调整噪声协方差矩阵,以更好地适应系统的变化。这部分实现相对复杂一些,但基本思路是通过对系统输出的观测来动态调整 \(Q\) 和 \(R\)。
通过以上步骤,我们就在 Simulink 里搭建好了基于 EKF 与 AEKF 的 PMSM 无传感器控制的仿真模型。整个文档详实,代码规范,无论是对于深入研究电机控制算法的同学,还是想应用这些技术到实际项目中的工程师,都有一定的参考价值。希望大家能在自己的项目里尝试运用这些方法,优化电机的控制性能。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)