以前写过一篇关于PWM的博文,已经有一年了,链接如下:
http://www.eeskill.com/article/id/50651。
文中使用了示波器来显示不同占空比的波形。
其实,利用LED也能通过亮度来表现出PWM参数的变化,用实物进行测试,效果很好,但是用PROTEUS进行仿真试验,却只是看到闪烁的厉害,基本上看不出亮度的变化。
近来发现,加上一个大电容,就可以减弱LED的闪烁,亮度就能够稳定一些,这样一来,就可以用PROTEUS软件直接观察亮度的变化了。
电路见下图。图中的大电容(C6)的容量是4700uF,这个是可以随便调整的,实际的电路就不需要它了。
图中的占空比参数是10,LED(D1)的显示为“半亮”状态。
C语言的程序,在去年就发表出来了,可见上面的链接,现在略加改动如下:
#include<reg52.h>
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,低电平发光
}
//------------------------------------------
这个程序,PWM的周期比去年的短了一些;去年是应网友的要求,设计成1s,有些偏长,不太实用。
这次也不用外部中断来输入按键了,改用查询按键的方法。
当使用按键进行占空比调整的时候,LED可以显示出来不同的亮度。几幅截屏的画面如下:
当PWM参数稍小时,亮度有些不足,这可以适当减小一些限流电阻的阻值进行弥补。
用来显示PWM的LED,其中的电流是间断的,所以,它的限流电阻可以比平常时小一些,100欧左右,是经验数据。
制作实物电路的时候,大电容就不需要了,不用花钱去买了,呵呵。