永磁同步電機具有體積小、轉動慣量低、結構簡單等優點,被廣泛應用于控制系統中。然而在實際應用過程中,控制系統會受到高溫、負載等外界因素的影響,永磁同步電機的電感、轉子磁鏈等參數會發生變化,導致系統振蕩,影響實際控制效果。
因此精確的參數辨識是為了達到更好地控制效果的必要條件。目前常用的電機參數辨識方法有:卡爾曼濾波算法、最小二乘法、遺傳算法、粒子群算法等。考慮到最小二乘法結構簡單、易于實現的優點,本期采用基于最小二乘法的永磁同步電機參數辨識方法。基于對永磁同步電機的推導,采用定子電壓等可測變量作為輸入輸出,辨識出電機的定子電阻及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);