<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        SVPWM算法的Dev C++仿真

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年04月27日   【字體:

          今天看了@技術宅 的SVPWM文章 于是一時興起

        看著這個東西:
        http://wenku.baidu.com/link?url=0q05AB-vk1S_442Gb8ooY02doxwctGeEuKfFTAZGPhB5ioekgwfM-CpwyTALO9ueOjlcE_Rz2u3X11hcAvOu-SXhxuZHlmlbVlrfvXBrQnu
        寫了一段SVPWM仿真程序 文章講的很清楚 大體院里窩都理解 如果能跟著進行推導一邊應該更能加深理解



        下面素窩的程序 還沒有優化過 很多浮點數運算 單片機可能跑不起來的說:
        /*
        *    SVPWM program
        *    By Rikka0_0
        *    2014.4.47
        */
        #include <stdio.h>
        #include <stdlib.h>
        #include <math.h>
        #define PWM_MAX_COUNT 100
        void svpwm(double Umax,double Vdc,double angle,double* u,double* v,double* w){
                double Ua,Ub;
             double Usalfa,Usbeta;
             char sector;
             double X,Y,Z;
             double t1,t2;
              double ta,tb,tc;
                double p1,p2,p3;      
                
                Ua=sin(angle);
                Ub=sin(angle-M_PI*2/3);
               
                //Clarke
                Usalfa=Ua;
                Usbeta=(2*Ub+Ua)*0.57735026918963; //3^(-1/3)=0.57735026918963
               
                sector=0;  
                if(Usbeta>0)
                    sector+=1;
               
                if(-Usbeta+1.732*Usalfa>0)
                    sector+=2;
               
                if(Usbeta+1.732*Usalfa<0)
                    sector+=4;
         
                X=1.732*Usbeta*PWM_MAX_COUNT;
                Y=(1.732*Usbeta+3*Usalfa)*PWM_MAX_COUNT/2;
                Z=(1.732*Usbeta-3*Usalfa)*PWM_MAX_COUNT/2;
                switch(sector){
                    case 1:t1=Z;t2=Y;break;
                    case 2:t1=Y;t2=-X;break;
                    case 3:t1=-Z;t2=X;break;
                    case 4:t1=-X;t2=Z;break;
                    case 5:t1=X;t2=-Y;break;
                    case 6:t1=-Y;t2=-Z;break;
                }
               
                t1=t1*Umax/Vdc;
                t2=t2*Umax/Vdc;
               
                if(t1+t2>PWM_MAX_COUNT){
                    t1=PWM_MAX_COUNT*t1/(t1+t2);
                    t2=PWM_MAX_COUNT*t2/(t1+t2);
                }
               
                ta=(PWM_MAX_COUNT-t1-t2)/2;
                tb=ta+t1;
                tc=tb+t2;
               
                switch(sector){
                    case 1:*u=tb;*v=ta;*w=tc;break;
                    case 2:*u=ta;*v=tc;*w=tb;break;
                    case 3:*u=ta;*v=tb;*w=tc;break;
                    case 4:*u=tc;*v=tb;*w=ta;break;
                    case 5:*u=tc;*v=ta;*w=tb;break;
                    case 6:*u=tb;*v=tc;*w=ta;break;
                }
        }

        int main (){
            double angle=0;
            double u,v,w;
            while(angle<4*M_PI){
                svpwm(310,550,angle,&u,&v,&w);
                printf("%d,%d,%d\n",(int)u,(int)v,(int)w);   
                angle+=2*M_PI*0.01;
            }
            system("Pause");
        }
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮