电机仿真系列-基于最小二乘法的永磁同步电机参数辨识

基于最小二乘法的永磁同步电机参数辨识

  永磁同步电机具有体积小、转动惯量低、结构简单等优点,被广泛应用于控制系统中。然而在实际应用过程中,控制系统会受到高温、负载等外界因素的影响,永磁同步电机的电感、转子磁链等参数会发生变化,导致系统振荡,影响实际控制效果。因此精确的参数辨识是为了达到更好地控制效果的必要条件。目前常用的电机参数辨识方法有:卡尔曼滤波算法、最小二乘法、遗传算法、粒子群算法等。考虑到最小二乘法结构简单、易于实现的优点,本期采用基于最小二乘法的永磁同步电机参数辨识方法。基于对永磁同步电机的推导,采用定子电压等可测变量作为输入输出,辨识出电机的定子电阻及d、q轴电枢电感。

1、最小二乘法

  最小二乘参数辨识方法可以解决线性时变系统、线性定常系统、含有噪声的线性系统等问题。常见的最小二乘法有:递推最小二乘法、遗忘因子递推最小二乘法、修正补偿最小二乘法等,这些方法均可以用于系统参数辨识中。递推最小二乘法的计算公式可以参考往期的文章。

2、辨识模型的建立

  永磁同步电机是一个非线性的多变量系统。在d、q旋转坐标下的电压方程为:
在这里插入图片描述
  式中,iq和id分别为q、d的电流;uq和ud分别为q、d的电压;Rs、Lq、Ld分别为定子绕组的电阻和q、d轴的电感;Ψq、Ψd分别为q、d磁链的分量;ω为转子的电角速度。
  将上述公式修改为最小二乘法的表达形式:
在这里插入图片描述

3、仿真实验

  将S函数编写的参数辨识模块加入到永磁同步电动机控制系统模型中进行仿真实验。

function [sys,x0,str,ts] = Synchronous_demarcate2(t,x,u,flag)
%此程序为辨识电机参数的转动惯量
switch flag
  case 0  %初始化
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 2 %离散状态计算,下一步仿真时刻,终止仿真设定
    sys=[];%mdlUpdates(t,x,u);
  case 3  %输出信号计算
    sys=mdlOutputs(t,x,u);
  case {1,4,9}  %输出信号计算
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end

function [sys,x0,str,ts]=mdlInitializeSizes   %系统的初始化
sizes = simsizes;
sizes.NumContStates  = 0;   %设置系统连续状态的变量
sizes.NumDiscStates  = 0;   %设置系统离散状态的变量
sizes.NumOutputs     = 1;   %设置系统输出的变量
sizes.NumInputs      = 3;   %设置系统输入的变量
sizes.DirFeedthrough = 1;   %如果在输出方程中显含输入变量u,则应该将本参数设置为1,输入不直接传到输出口
sizes.NumSampleTimes = 1;   % 模块采样周期的个数
                            % 需要的样本时间,一般为1.
                            % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态
sys = simsizes(sizes);
x0  = [];            % 系统初始状态变量
str = [];                   % 保留变量,保持为空
ts  = [-1 0];                   % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0

global  P_past2 theta_past2 
P_past2 = 1e4 * eye(2,2);  %一般取1e4 - 1e10
theta_past2 = [0.0001; 0.0001];       %一般取一个极小的正实向量

function sys=mdlOutputs(t,x,u)   %产生(传递)系统输出
%初值的确定
lambda = 0.99;  %遗忘因子0-1
global   P_past2 theta_past2
xt = [u(1) u(2)];  %1*2 fait
y = u(3);
I = [1 0;0 1];

K = P_past2*xt'/(lambda + xt * P_past2*xt');   %2*1
P_new = 1/lambda*(I - K*xt) * P_past2;  %2*2
theta_new = theta_past2 + K*(y-xt*theta_past2);   %2*1

P_past2 = P_new ;
theta_past2 = theta_new;

sys(1) = theta_new(1);
function [sys,x0,str,ts] = Synchronous_demarcate(t,x,u,flag)
%此程序为辨识电机参数的定子电阻Rs, 永磁体磁通faif, dq轴电感L
switch flag
  case 0  %初始化
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 2 %离散状态计算,下一步仿真时刻,终止仿真设定
    sys=[];%mdlUpdates(t,x,u);
  case 3  %输出信号计算
    sys=mdlOutputs(t,x,u);
  case {1,4,9}  %输出信号计算
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end

function [sys,x0,str,ts]=mdlInitializeSizes   %系统的初始化
sizes = simsizes;
sizes.NumContStates  = 0;   %设置系统连续状态的变量
sizes.NumDiscStates  = 0;   %设置系统离散状态的变量
sizes.NumOutputs     = 3;   %设置系统输出的变量
sizes.NumInputs      = 5;   %设置系统输入的变量
sizes.DirFeedthrough = 1;   %如果在输出方程中显含输入变量u,则应该将本参数设置为1,输入不直接传到输出口
sizes.NumSampleTimes = 1;   % 模块采样周期的个数
                            % 需要的样本时间,一般为1.
                            % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态
sys = simsizes(sizes);
x0  = [];            % 系统初始状态变量
str = [];                   % 保留变量,保持为空
ts  = [0 0];                   % 采样时间[t1 t2] t1为采样周期,如果取t1=-1则将继承输入信号的采样周期;参数t2为偏移量,一般取为0

global  P_past theta_past
P_past = 1e4 * eye(3,3);
theta_past = [0;0;10000];

function sys=mdlOutputs(t,x,u)   %产生(传递)系统输出
%初值的确定
lambda = 1;  %遗忘因子, 选择不遗忘 0.8~1
global   P_past theta_past
id = u(1);
iq = u(2);
w = u(3);    %电角速度 = 转子速度 * 极对数
diq = u(4);
uq = u(5);
xt = [-iq -w uq];
y = diq+w*id;
P_new = 1/lambda*(P_past-(P_past*(xt'*xt)*P_past)/(lambda+xt*P_past*xt'));
L = P_past*xt'/(lambda+xt*P_past*xt');
theta_new = theta_past + L*(y-xt*theta_past);
a = theta_new(1);
b = theta_new(2);
c = theta_new(3);
R = a/c;
Ke = b/c;
Ld = 1/c;
P_past = P_new ;
theta_past = theta_new;
sys(1) = R;
sys(2) = Ke;
sys(3) = Ld;

  转动惯量参数辨识结果:
在这里插入图片描述
  电磁电感参数辨识结果:
在这里插入图片描述
  电角速度观测值:
在这里插入图片描述
  负载观测结果:
在这里插入图片描述
  三相电流观测结果:
在这里插入图片描述
  仿真结果表明,采用递推最小二乘法的参数辨识算法能够准确辨识出电机的电磁参数,能够很好地跟随电机参数的变化,具有快速的收敛性和良好的辨识结果。如需了解更多仿真专题,可以关注我的微信公众号:xinnengyuanqiche666。

重要参考文献 电机参数辨识电机控制领域中具有重要的意义,其精度和可靠性直接影响到电机系统的控制效果和稳定性。电机参数辨识的基本原理是通过测量电机的输入电流、输出转速和负载转矩等数据,从中推断出电机参数值,例如电阻、电感、磁阻等。 电机参数辨识的方法可以分为离线参数辨识和在线参数辨识两种。离线参数辨识是在电机运行之前,通过实验手段采集电机的相关数据,然后对采集到的数据进行处理,从而得到电机参数值。这种方法虽然能够为控制系统提供电机初始参数值,但是无法跟踪电机在线运行中的参数变化。相对而言,在线参数辨识能够实时跟踪电机参数变化,一旦电机参数发生变化,系统会自动根据相关算法调整控制器的参数,从而提高调速系统的控制性能。 在电机参数辨识过程中,需要建立电机的数学模型,对电机的电路运动学方程进行数学描述。然后,通过实验手段采集电机的相关数据,包括电机的输入电流、输出转速和负载转矩等参数。最后,利用相关算法对采集到的数据进行处理,从而得到电机参数值。 常见的电机参数辨识方法包括最小二乘法、扩展卡尔曼滤波法、模型参数自适应法以及其他一些智能辨识算法,如神经网络、遗传优化算法等。这些算法各有特点,可以根据具体的应用场景和需求选择合适的算法进行电机参数辨识。 总之,电机参数辨识电机控制系统中的关键环节,通过准确的参数辨识可以提高电机系统的控制性能和稳定性。随着控制算法和处理器技术的不断发展,电机参数辨识技术将会在更广泛的应用领域中发挥重要作用。
### 使用最小二乘法进行永磁同步电机参数辨识仿真 #### 永磁同步电机参数辨识概述 为了提升永磁同步电机(PMSM)的控制性能,采用最小二乘法(Least Squares Method, LSM)可以在转子同步旋转坐标系下对电机参数进行在线辨识。该方法能够在MATLAB/Simulink环境中构建PMSM参数辨识系统的仿真模型,并验证其有效性和准确性[^1]。 #### 最小二乘法原理简介 最小二乘法是一种用于估计线性回归模型系数的方法,通过最小化实际测量值与预测值之间的平方差来求解最优参数向量。对于PMSM而言,这种方法可以用来估算定子电阻\(R_s\)、直轴电感\(L_d\)、交轴电感\(L_q\)等重要电气特性参数[^2]。 #### 递推最小二乘法的应用 考虑到实时性的需求,通常会使用递推形式的最小二乘法(Recursive Least Square, RLS),它允许随着新样本的到来不断更新参数估值而无需重新处理整个历史数据集。这使得RLS非常适合应用于动态变化环境下的在线参数识别场景中[^3]。 #### MATLAB/Simulink中的具体实现步骤 在MATLAB/Simulink平台内建立如下结构: - **信号发生器**:生成激励信号作为输入给被测系统; - **待估参数初始化**:设定初始猜测值并定义遗忘因子以调整过去信息的重要性程度; - **状态空间建模**:根据已知物理规律描述目标对象的行为模式; - **残差计算单元**:对比理论输出与实测反馈间的差异; - **增益矩阵更新机制**:利用当前时刻的信息修正之前的估计结果; - **最终输出显示区**:呈现最新获得的最佳拟合曲线及其对应的参数集合。 以下是部分核心代码片段展示如何设置Simulink中的RLS算法模块: ```matlab % 初始化变量 theta_hat = zeros(n, 1); % 待估计参数初值设为零向量 P = eye(n)*large_number; % 协方差阵取较大数值表示不确定性很高 lambda = forgetting_factor; % 遗忘因子介于0到1之间,默认接近但小于1 while t <= T_final y(t) = ... ; % 获取t时刻的真实响应 phi(t,:) = [...]; % 构造t时刻的状态特征列向量 K = P*phi'/(lambda + phi'*P*phi'); % 计算Kalman Gain theta_hat = theta_hat + K*(y(t)-phi*theta_hat); I = eye(size(phi)); P = (I-K*phi')/lambda * P; end ``` 上述过程展示了完整的基于递推最小二乘法永磁同步电机参数辨识流程,在理想条件下可以获得较高的辨识精度和较快的收敛速度[^4]。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

新能源汽车仿真团队

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

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

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

打赏作者

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

抵扣说明:

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

余额充值