直流電機驅動PWM頻率


1、沒有統一的標准,其實PWM的頻率和你的電機感抗和你需要的速度響應時間有很大的關系。一般的電機用14K就足夠了。當然自需要簡單的調速可以隨便選。 如果電機轉速比較高,感抗比較小,可以使用比較高的頻率。一般最好不要超過20K  因為一般IGBT最高20K的開關頻率。 而MOS 的開關頻率比較高,, 但是過高的F 需要專用的驅動電路,不然MOS工作在放大區的時間比較長。 如果電機轉速比較低,感抗比較大, 而且又是在做伺服, 那開關頻率就需要低一點。 
2、對於電機應用,功率越大,PWM頻率越低,最低有500Hz或者1KHz的,在兆瓦級的應用中。普通中小功率的,5K到20K常見,功率越低,電壓等級越低,你所能使用的PWM頻率越高。因為低壓的MOSFET開關頻率可以做到很高,而高壓的IGBT卻很難快速開關。普通的馬達,10K到20K,都沒問題。我們做KW級主變頻器,開關頻率10K。
 
•  
/* =======直流電機的PWM速度控制程序======== */   
•  /* 緯東工作室  robots51.51.net    2006年6月 */   
•  /* 晶振采用11.0592M,產生的PWM的頻率約為91Hz */   
•     
•  #include<reg51.h>   
•  #include<math.h>   
•  #define uchar unsigned char   
•  #define uint unsigned int   
•  sbit en1=P1^0;      /* L298的Enable A */   
•  sbit en2=P1^1;      /* L298的Enable B */   
•  sbit s1=P1^2;       /* L298的Input 1  */   
•  sbit s2=P1^3;       /* L298的Input 2  */   
•  sbit s3=P1^4;       /* L298的Input 3  */   
•  sbit s4=P1^5;       /* L298的Input 4  */   
•  uchar t=0;          /* 中斷計數器     */   
•  uchar m1=0;         /* 電機1速度值    */   
•  uchar m2=0;         /* 電機2速度值    */   
•  uchar tmp1,tmp2;    /* 電機當前速度值 */   
•     
•   /* 電機控制函數 index-電機號(1,2); speed-電機速度(-100—100) */   
•  void motor(uchar index, char speed)   
•  {   
•   if(speed>=-100 && speed=100)   
•     {   
•       if(index==1)       /* 電機1的處理    */   
•         {   
•          m1=abs(speed);  /* 取速度的絕對值 */   
•          if(speed<0)     /* 速度值為負則反轉 */   
•             {   
•              s1=0;   
•              s2=1;   
•             }   
•            else          /* 不為負數則正轉 */   
•             {   
•              s1=1;   
•              s2=0;   
•             }   
•         }   
•       if(index==2)       /* 電機2的處理    */   
•         {   
•          m2=abs(speed);  /* 電機2的速度控制 */   
•          if(speed<0)     /* 電機2的方向控制 */   
•             {   
•              s3=0;   
•              s4=1;   
•             }   
•            else   
•             {   
•              s3=1;   
•              s4=0;   
•             }   
•         }   
•     }   
•  }   
•     
•  void delay(uint j)      /* 簡易延時函數 */   
•  {   
•   for(j;j>0;j--);   
•  }   
•     
•  void main()   
•  {   
•   uchar i;   
•   TMOD=0x02;         /* 設定T0的工作模式為2 */   
•   TH0=0x9B;      /* 裝入定時器的初值    */   
•   TL0=0x9B;   
•   EA=1;              /* 開中斷              */   
•   ET0=1;         /* 定時器0允許中斷     */   
•   TR0=1;         /* 啟動定時器0         */   
•   while(1)               /* 電機實際控制演示    */   
•   {   
•     for(i=0;i=100;i++)   /* 正轉加速 */   
•       {   
•        motor(1,i);   
•        motor(2,i);   
•        delay(5000);   
•       }   
•     for(i=100;i>0;i--)    /* 正轉減速 */   
•       {   
•        motor(1,i);   
•        motor(2,i);   
•        delay(5000);   
•       }   
•     for(i=0;i=100;i++)   /* 反轉加速 */   
•       {   
•        motor(1,-i);   
•        motor(2,-i);   
•        delay(5000);   
•       }   
•    for(i=100;i>0;i--)    /* 反轉減速 */   
•       {   
•        motor(1,-i);   
•        motor(2,-i);   
•        delay(5000);   
•       }   
•   }   
•  }   
•     
•  void timer0() interrupt 1          /* T0中斷服務程序 */   
•  {   
•   if(t==0)           /* 1個PWM周期完成后(100次中斷)才會接受新數值 */   
•     {   
•       tmp1=m1;   
•       tmp2=m2;   
•     }   
•   if(t<tmp1) en1=1; else en1=0;   /* 產生電機1的PWM信號,[0,tmp1=m1]均是高電平 */   
•   if(t<tmp2) en2=1; else en2=0;   /* 產生電機2的PWM信號 ,同理*/   
•   t++;   
•   if(t>=100) t=0;          /* 1個PWM信號由100次中斷產生 */   
•  }   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM