這是無死區判斷產生SVPWM波的Psim仿真實現
0.png (49.19 KB, 下載次數: 35)
下載附件
2018-4-3 18:41 上傳
新型無扇區空間矢量脈寬調制算法:
0.jpg (118.1 KB, 下載次數: 30)
下載附件
2018-4-3 18:42 上傳
單片機源程序如下:
- #include<stdio.h>
- #include<math.h>
- __declspec(dllexport) void simuser (t, delt, in, out)
- // t,delt,in,out 這幾個變量的類型必須為double型
- // 其中,t為系統仿真時間;delt為時間步長;in為輸入口;out為輸出口;
- // in、out都以指針的形式給出,其個數由psim中dll文件決定,分別有1、3、6、12、20、25個
- // 不用的輸入口必須接地,否則會出現錯誤
- double t, delt;
- double *in, *out;
- {
- double w,M,theta,U_alpha,U_beta;
- double Ts,X,Y,Z,Tx,Ty;
- double Ta,Tb,Tc,Tcm1,Tcm2,Tcm3;
- int A,B,C,Sector;
-
- M = in[0];
- w = in[1];
- Ts = in[2]; // PWM開關周期
-
- theta = w*t;
-
- U_alpha = M*cos(theta);
- U_beta = M*sin(theta);
-
- // 扇區判斷
- if (U_beta > 0)
- A = 1;
- else
- A = 0;
- if((sqrt(3)*U_alpha-U_beta) > 0)
- B = 1;
- else
- B = 0;
- if((sqrt(3)*U_alpha+U_beta) < 0)
- C = 1;
- else
- C = 0;
- Sector = A + 2*B + 4*C;
- X = sqrt(3)*U_beta*Ts;
- Y = ((3*U_alpha+sqrt(3)*U_beta)*Ts)/2;
- Z = ((-3*U_alpha+sqrt(3)*U_beta)*Ts)/2;
-
- // 各個扇區的具體作用時間選擇;
- switch(Sector)
- {
- case 1: // 第二扇區;
- Tx = Z;
- Ty = Y;
- break;
- case 2: // 第六扇區;
- Tx = Y;
- Ty= -X;
- break;
- case 3: // 第一扇區;
- Tx = -Z;
- Ty = X;
- break;
- case 4: // 第四扇區;
- Tx = -X;
- Ty = Z;
- break;
- case 5: // 第三扇區;
- Tx = X;
- Ty = -Y;
- break;
- case 6: // 第五扇區;
- Tx = -Y;
- Ty = -Z;
- break;
- default:
- break;
- }
- // 作用時間的飽和判斷;
- if((Tx+Ty) > Ts)
- {
- Tx = (Tx*Ts)/(Tx+Ty);
- Ty = (Ty*Ts)/(Tx+Ty);
- }
- // 橋臂開通時刻;
- Ta = (Ts-Tx-Ty)/4;
- Tb = Ta + Tx/2;
- Tc = Tb + Ty/2;
- // Tcm1是A相上橋臂管子的開通時刻
- // Tcm2是B相上橋臂管子的開通時刻
- // Tcm3是C相上橋臂管子的開通時刻
- switch(Sector)
- {
- case 1:
- Tcm1 = Tb;
- Tcm2 = Ta;
- Tcm3 = Tc;
- break;
- case 2:
- Tcm1 = Ta;
- Tcm2 = Tc;
- Tcm3 = Tb;
- break;
- case 3:
- Tcm1 = Ta;
- Tcm2 = Tb;
- Tcm3 = Tc;
- break;
- case 4:
- Tcm1 = Tc;
- Tcm2 = Tb;
- Tcm3 = Ta;
- break;
- case 5:
- Tcm1 = Tc;
- Tcm2 = Ta;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
無扇區判斷SVPWM_第一組.rar
(796.52 KB, 下載次數: 39)
2018-4-3 15:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|