實際工程應用的逆變器常采用SPWM技術來實現,以前常用硬件來產生三角波和正弦波進行比較來產生SPWM信號,但常常不穩定,而用嵌入式ARM來產生SPWM信號就非常容易,幾乎不用增加任何附加硬件產生調制正弦信號,而由LPC2132的內置PWM功能就能實現。下面是實驗程序,已在SP1010-LPC213X-ARM實驗開發板調試通過,供參考。 /* 利用LPC2132器件的PWM功能模擬產生正弦信號由P0.21引腳的PWM5功能引腳輸出 實驗平臺:(1).SP1010-LPC213X-ARM實驗開發板,其詳細介紹地址:[url=http://www.supermcu.com/p_info.asp?id=288]http://www.supermcu.com/p_info.asp?id=288[/url]) (2).示波器,探頭接到P0.21引腳上 FOSC=12MHz,FCCLK=60MHz,FPCLK=FCCLK/4 更多內容:[url=http://www.supermcu.com/]http://www.supermcu.com[/url] (西譜電子) */ #include #define FCCLK 60000000void ARM_PWM_Init(void) { PINSEL0 = 0; PINSEL1 = (PINSEL1 & (~(3 << 10))) | (1 << 10); //--- 配置為PWM5引腳輸出功能 --- PWMPR = 0; PWMPC = 0; PWMTC = 0; PWMMCR = 3; PWMPCR = (1 << 13); //--- 使能PWM5引腳功能 --- PWMMR0 = FCCLK / (4 * 100000) - 1; //--- 配置PWM5的周期值,產生Fpwm = 1KHz --- PWMMR5 = (PWMMR0 + 1) * 50 / 100 - 1; //--- 配置PWM5的占空比,占空比= 30 % --- PWMLER = (1 << 5) | (1 << 0); //--- 鎖存PWM5的周期和占空比數值 --- PWMTCR = 9; //--- 使能PWM5和PWM0 --- }void time_dly(unsigned long dly) { unsigned long i; do { i = 600; do { } while(-- i); } while(-- dly); } int main(void) { long i,j; ARM_PWM_Init(); while(1) { for(i=0;i<200;i++) { j = i; if (j > 100) j = 200 - i; PWMMR0 = FCCLK / (4 * 100000) - 1; PWMMR5 = j; PWMLER = (1 << 5) | (1 << 0); time_dly(20); } } } /* 更多內容:[url=http://www.supermcu.com/]http://www.supermcu.com[/url] (西譜電子) SP1010-LPC213X-ARM實驗開發板詳細介紹地址:[url=http://www.supermcu.com/p_info.asp?id=288]http://www.supermcu.com/p_info.asp?id=288[/url]) */ |