永磁同步電機的直接轉矩控制(二)一一一傳統DTC仿真結果及分析
目錄
- 永磁同步電機的直接轉矩控制(二)一一一傳統DTC仿真結果及分析
-
- 0研究背景
- 1直接轉矩控制的仿真模型
- 2控制系統仿真模型的搭建
-
- 2.1 磁鍊的估算模型及仿真圖
- 2.2 扇區判斷及開關表
- 3仿真結果及分析
-
- 3.1 轉矩滞環環寬對轉矩脈動的影響
- 3.2 不同工況下對控制系統性能影響
- 3.3 不同PI參數對系統性能的影響
- 4總結
0研究背景
寫在前面:
1.本代碼基于MATLAB2019a版本,低版本或者不同版本可能會報錯,mdl檔案或slx檔案打開可能會失敗;
2.本部落格附上仿真模型并詳細介紹各個部分的搭建,如果轉載請注明出處;
3.如果本部落格恰巧與您的研究有所關聯,歡迎您的咨詢qq1366196286。
1直接轉矩控制的仿真模型
本部落格是基于上一篇部落格繼續進行的研究,并針對轉矩滞環環寬、PI控制器參數等對直接轉矩控制系統的影響進行探究。
其中,上一篇部落格直接轉矩控制的仿真模型,如圖2所示。

圖2 永磁同步電機的直接轉矩控制Simulink仿真圖
永磁同步電機的直接轉矩控制(一)一一一DTC仿真模型的搭建
此外,與上一篇部落格不同的是,DTC仿真模型的搭建中磁鍊估算采取不同的方式進行搭建、扇區判斷及開關表可采取s函數進行編寫,進而得到另外一種Simulink仿真模型,如圖3所示。
圖3 永磁同步電機的直接轉矩控制Simulink仿真圖(另外一種傳統的DTC)
2控制系統仿真模型的搭建
圖3與上一篇部落格所搭建的仿真模型圖2所不同的有:
1.轉矩直接通過對電機輸出端進行采樣,而圖2是采取轉矩進行估算的;
2.圖3中磁鍊估算是通過a-β軸的分量,而圖2中磁鍊估算是通過d-q軸的分量并經過坐标變換所得;
3.圖3中扇區判斷是通過自定義s函數來實作的,而圖2中扇區判斷是通過Simulink來實作;
4.圖3中開關表是通過自定義s函數來實作的,而圖2中扇區判斷是通過Simulink來實作;
5.轉速環所設定的參考轉速值是依據電機的額定轉速來給定,一般測試情況是額定轉速下測電機的輸出轉矩,或是電機在額定轉矩下的轉速突變情況以及額定工況下的電機性能測試等。圖3中參考轉速是600 r/min;圖2中參考轉速是1000 r/min。(一般是在額定轉速運作或以下運作)。此外,所施加的負載轉矩大小是依據電機的額定轉矩和過載能力來給定的,而這些是基于電機的結構和本體參數設計來确定的。
本部落格的仿真結果及分析是基于圖2,即在上一篇部落格永磁同步電機的直接轉矩控制(一)一一一DTC仿真模型的搭建的基礎上進行仿真研究的。
2.1 磁鍊的估算模型及仿真圖
圖4 磁鍊估算模型的仿真Simulink圖
圖5 a-β軸上的合成圓形磁鍊
2.2 扇區判斷及開關表
扇區判斷及開關表的機理同上一篇部落格,圖3在這裡采取的s函數進行編寫。
扇區判斷sector.m
function [sys,x0,str,ts] = sector(t,x,u,flag)
% The following outlines the general structure of an S-function.
%
switch flag, %判斷flag,看目前處于哪個狀态
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys=mdlOutputs(t,x,u);
case {2,4,9},
sys=[];
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
% end sfuntmpl
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes
%
% call simsizes for a sizes structure, fill it in and convert it to a
% sizes array.
%
% Note that in this example, the values are hard coded. This is not a
% recommended practice as the characteristics of the block are typically
% defined by the S-function parameters.
%
sizes = simsizes; %用于設定參數的結構體用simsizes來生成
sizes.NumContStates = 0; %連續狀态變量的個數
sizes.NumDiscStates = 0; %離散狀态變量的個數
sizes.NumOutputs = 1; %輸出變量的個數
sizes.NumInputs = 2; %輸入變量的個數
sizes.DirFeedthrough = 1; %是否存在回報
sizes.NumSampleTimes = 1; %采樣時間個數,至少是一個
sys = simsizes(sizes); %設定完後賦給sys輸出
x0 = []; %狀态變量設定為空,表示沒有狀态變量
str = [];
ts = [-1 0]; %采樣周期設為0表示是連續系統,-1表示采用目前的采樣時間
% end mdlInitializeSizes
%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u)
if(u(1)==0)
N=1; %如果輸入值為0,電壓參考量在第一扇區
else
a1=u(1);
b1=u(1)*(-0.5)+(sqrt(3)/2)*u(2); %%根據文章的計算公式得到
c1=u(1)*(-0.5)-(sqrt(3)/2)*u(2);
if a1>0
a=0;
else
a=1;
end
if b1>0
b=0;
else
b=1;
end
if c1>0
c=0;
else
c=1;
end
N=4*a+2*b+c; %扇區計算
end
sys=N;
% end mdlOutputs
圖6 PWM生成的仿真圖
開關表PMSM_switch.m
function [sys,x0,str,ts] = PMSM_switch(t,x,u,flag)
% The following outlines the general structure of an S-function.
%
switch flag, %判斷flag,看目前處于哪個狀态
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys=mdlOutputs(t,x,u);
case {2,4,9},
sys=[];
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes
%
% call simsizes for a sizes structure, fill it in and convert it to a
% sizes array.
%
% Note that in this example, the values are hard coded. This is not a
% recommended practice as the characteristics of the block are typically
% defined by the S-function parameters.
%
sizes = simsizes;%用于設定參數的結構體用simsizes來生成
sizes.NumContStates = 0;%連續狀态變量的個數
sizes.NumDiscStates = 0; %離散狀态變量的個數
sizes.NumOutputs = 1; %輸出變量的個數
sizes.NumInputs = 3; %輸入變量的個數
sizes.DirFeedthrough = 1; %是否存在回報
sizes.NumSampleTimes = 1; %采樣時間個數,至少是一個
sys = simsizes(sizes);%設定完後賦給sys輸出
x0 = [];%狀态變量設定為空,表示沒有狀态變量
str = [];
ts = [-1 0]; %采樣周期設為0表示是連續系統,-1表示采用目前的采樣時間
% end mdlInitializeSizes
%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(~,x,u)
%%根據文章的表格計算得到
V_Table=[2 4 6 1 3 5;4 1 5 2 6 3;3 6 2 5 1 4 ;5 3 1 6 4 2];
x=2*u(1)+u(2)+1;
sys=V_Table(x,u(3));
% end mdlOutputs
3仿真結果及分析
3.1 轉矩滞環環寬對轉矩脈動的影響
當轉矩環的滞環環寬給定[-0.1 0.1]N·m,轉矩脈動如圖7(a)所示;當轉矩環的滞環環寬給定[-0.01 0.01]N·m,轉矩脈動如圖7(b)所示。
圖7(a) 轉矩滞環環寬對轉矩脈動的影響[-0.1 0.1]
圖7(b) 轉矩滞環環寬對轉矩脈動的影響[-0.01 0.01]
圖7反映了轉矩滞環寬度對轉矩脈動的影響,減小滞環寬度,有利于降低轉矩脈動幅度。
3.2 不同工況下對控制系統性能影響
圖8和圖9分别是負載和給定轉速突變時的轉矩和轉速波形,其結果表明系統在階躍變化時能夠自動保持穩定運作狀态。
圖8 系統的轉速響應
圖9 系統的轉矩響應
3.3 不同PI參數對系統性能的影響
表3是通過仿真研究得到的不同PI參數對系統性能的影響。
4總結
利用MATLAB/Simulink 建立永磁同步電機直接轉矩控制系統,可以從理論上研究控制系統的性能及其相關因素的影響,仿真結果和分析所得到的結論是可信的。在建立實際系統之前,通過仿真研究對控制系統進行充分論證,可以提高研究效率。後續部落格将滑模控制、模糊控制以及自适應控制等先進控制方法改進到傳統的DTC中,以提升系統的控制性能。