以前寫過一篇關于PWM的博文,已經有一年了,鏈接如下:
http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74
文中使用了示波器來顯示不同占空比的波形。
其實,利用LED也能通過亮度來表現出PWM參數的變化,用實物進行測試,效果很好,但是用PROTEUS進行仿真試驗,卻只是看到閃爍的厲害,基本上看不出亮度的變化。
近來發(fā)現,加上一個大電容,就可以減弱LED的閃爍,亮度就能夠穩(wěn)定一些,這樣一來,就可以用PROTEUS軟件直接觀察亮度的變化了。
電路見下圖。圖中的大電容(C6)的容量是4700uF,這個是可以隨便調整的,實際的電路就不需要它了。
圖中的占空比參數是10,LED(D1)的顯示為“半亮”狀態(tài)。
C語言的程序,在去年就發(fā)表出來了,可見上面的鏈接,現在略加改動如下:
#include
unsignedchara,b;
sbitK1=P3^2;//定義兩個調整占空比的按鍵
sbitK2=P3^3;
//------------------------------------------
voiddelay(unsignedinti)
{
unsignedcharj;
while(i--)for(j=0;j<60;j++);
}
//------------------------------------------
voidmain()
{
TMOD=0x01;//T0定時方式1
TH0=(65536-500)/256;//500us@12MHz
TL0=(65536-500)%256;
TR0=1;
ET0=1;
EA=1;
a=0;
b=10;
while(1){
if(!K1){delay(20);if(!K1){b++;if(b>19)b=19;while(!K1);}}
if(!K2){delay(20);if(!K2){b--;if(b<1)b=1;while(!K2);}}
//以上兩行是檢查按鍵、延時消抖、修改占空比、等待按鍵釋放,b=1~19
P0=((b/10)<<4)+b%10;//顯示占空比等級
}
}
//------------------------------------------
voidtime0()interrupt1
{
TL0=(65536-493)%256;//補償中斷進入時間
TH0=(65536-493)/256;//500us@12MHz
a--;//a=1~20
if(a==0){a=20;P2=0;}//周期=20*500us
if(a<=b)P2=255;//輸出到示波器
P1=~P2;//輸出到LED,低電平發(fā)光
}
//------------------------------------------
這個程序,PWM的周期比去年的短了一些;去年是應網友的要求,設計成1s,有些偏長,不太實用。
這次也不用外部中斷來輸入按鍵了,改用查詢按鍵的方法。
當使用按鍵進行占空比調整的時候,LED可以顯示出來不同的亮度。幾幅截屏的畫面如下:
當PWM參數稍小時,亮度有些不足,這可以適當減小一些限流電阻的阻值進行彌補。
用來顯示PWM的LED,其中的電流是間斷的,所以,它的限流電阻可以比平常時小一些,100歐左右,是經驗數據。
制作實物電路的時候,大電容就不需要了,不用花錢去買了,呵呵