2018年1月3日 星期三

SVPWM - 釐清觀念用

SVPWM

這個調變技術通常是馬達控制中的第一個難關,但是這個技術通常會先幫你寫好了,所以只要大概了解它的原理,然後就可以用MTALAB模擬他的工作狀態,以下分兩部分(第一)了解調變的命令如何製造(第二)如何製造調變訊號。


()了解調變的命令如何製造

1.  決定要開那些開關:
SVPWM打開書看其實都會有類似index的東西,而這個index就是決定目前三相inverter要開那些開關,其中決定的因素是.....線電壓是線電壓,不要搞混了唷!呵呵。
2.  決定開關時間:
既然已經知道要開哪幾個開關,當然就是要決定要開多久關多久拉,那如何決定呢?這就是那個書中常常看到的數學式子,並且這邊開關時間的比例是上面的線電壓的線性組合,通常會改名X、Y、Z的樣子(但是會改正負號唷注意一下),然後就會看到Ta Tb Tc也就是ABC各軸所需要開的時間,然而我們偉大的前輩已經建好表了,所以只要直接帶進去確認就行啦。
以下是MATLAB Function的寫法



function [Ta,Tb,Tc,sector] = SVPWM(U_alpha,U_beta)


%#codegen


Ta=0;


Tb=0;


Tc=0;


sector=0;
pulse_cnt=450;
%======Inverse Clarke transformation to line voltage /sqrt(3)=======
U_bc = U_beta;
U_ab = (U_alpha*sqrt(3) - U_beta)/2;
U_ca = (-U_alpha*sqrt(3) - U_beta)/2;   
%======60 degree Sector determination  ======
if (U_bc>0) sector=1;
end
if (U_ab>0) sector=sector+2;
end
if (U_ca>0) sector=sector+4;
end                                  
%==============================================
X=U_beta;                                      %==(X=Vbc)===
Y=(U_alpha*sqrt(3)+U_beta)/2;     %==(Y=-Vca)===
Z=(-U_alpha*sqrt(3)+U_beta)/2;    %==(Z=-Vab)===
%==============================================
switch sector
    case 0
        Ta=0;
        Tb=0;
        Tc=0;
    case 1 %=== sector contained by U60 and U120 =====
        t1=Z; t2=Y;
        Tb=(pulse_cnt-t1-t2)/2;
        Ta=Tb+t1;
        Tc=Ta+t2;
    case 2 %=== sector contained by U300 and U0 =====
        t1=Y; t2=-X;
        Ta=(pulse_cnt-t1-t2)/2;
        Tc=Ta+t1;
        Tb=Tc+t2;
    case 3 %=== sector contained by U0 and U60 =====
        t1=-Z; t2=X;
        Ta=(pulse_cnt-t1-t2)/2;
        Tb=Ta+t1;
        Tc=Tb+t2;
    case 4 %=== sector contained by U180 and U240 =====
        t1=-X; t2=Z;
        Tc=(pulse_cnt-t1-t2)/2;
        Tb=Tc+t1;
        Ta=Tb+t2;
    case 5 %=== sector contained by U120 and U180 =====
        t1=X; t2=-Y;
        Tb=(pulse_cnt-t1-t2)/2;
        Tc=Tb+t1;
        Ta=Tc+t2;
    case 6 %=== sector contained by U240 and U300 =====
        t1=-Y; t2=-Z;
        Tc=(pulse_cnt-t1-t2)/2;
        Ta=Tc+t1;
        Tb=Ta+t2;
end
Ta=(Ta)*2;
Tb=(Tb)*2;
Tc=(Tc)*2; %%這邊要說明一下*2是因為算出來只有開上半部
end

====================================
然後問題又來了


1.  MATLAB function 怎用:

在這邊點進去,把他複製到自己的模擬裡面,聰明的你應該就會了巴O_<




2.  這個function怎麼用?以及怎樣算正確


上面有一個 pulse_cnt=450 這個東西要先設定,那450是怎麼決定的,


那就要看目前三角波的對大值是多少;如果是900那這邊就要設定450

然後要是Ta Tb Tc輸出的波形是三個相差120度的麥當勞波形的話就對

啦。你說為什麼麥當勞就對了,為什麼不是正常的弦波?...通常應該

會上一些PWM切換方法的課去上應該就懂了@_@Ta Tb Tc大概長這樣



(二)如何製造調變訊號

    三角波比較及dead_time內部架構如下 這邊只顯示其中一臂,Ta輸入和U、U'輸出





1.  決定三角波:

這裡的三角波是依照MCU內部想要的數值所決定的(0~900~0)


還要決定時間(40k:選定[0 1/40000/2 1/40000])



2.  決定dead_time:

這裡的dead time 是上面的Delay並且都選用ON Delay上臂跟下臂,

在三角波上數階段會先關下臂在開上臂,而三角波下數階段會先關


上臂在開下臂。如下圖,紅色是上臂、綠色是下臂、藍色是三角波。





3.  比較器:

這邊的比較器是Relay,其中裡面有個遲滯我是設定0.025,意思是誤


差超過此數值才會有high low 的變化。




Example.
假如三角波是數到900所以輸入給我自己寫的SVPWM就要是0~900/2的數

字,那這禮為什麼要是900/2?這裡的寫法(大多數的寫法)會把輸入的

量轉化成MOS所要開關的時間,通常SVPWM是用等腰三角形的計數方式,所

以會先分配上數開關的時間(三角波從0900),再來才是下數開關的時間

(三角波從9000)


============================================================
最後只要接成下面這張圖就行啦




連接方法是 inverse Park→SVPWM_REF製造程式→調變器(比較器)

小弟第一次寫,不太會用此排版,有任何問題歡迎留言