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 无传感器控制的仿真模型。整个文档详实代码规范无论是对于深入研究电机控制算法的同学还是想应用这些技术到实际项目中的工程师都有一定的参考价值。希望大家能在自己的项目里尝试运用这些方法优化电机的控制性能。