当前位置:首页 > 单片机 > 单片机
[导读] 以前写过一篇关于PWM的博文,已经有一年了,链接如下:http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74文中使用了示波器来显示不同占空比的波形。其实,利用LED也能通过亮度来表现出PWM参

以前写过一篇关于PWM的博文,已经有一年了,链接如下:


http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74


文中使用了示波器来显示不同占空比的波形。


其实,利用LED也能通过亮度来表现出PWM参数的变化,用实物进行测试,效果很好,但是用PROTEUS进行仿真试验,却只是看到闪烁的厉害,基本上看不出亮度的变化。


近来发现,加上一个大电容,就可以减弱LED的闪烁,亮度就能够稳定一些,这样一来,就可以用PROTEUS软件直接观察亮度的变化了。


电路见下图。图中的大电容(C6)的容量是4700uF,这个是可以随便调整的,实际的电路就不需要它了。

图中的占空比参数是10,LED(D1)的显示为“半亮”状态。




C语言的程序,在去年就发表出来了,可见上面的链接,现在略加改动如下:


#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,低电平发光

}

//------------------------------------------


这个程序,PWM的周期比去年的短了一些;去年是应网友的要求,设计成1s,有些偏长,不太实用。

这次也不用外部中断来输入按键了,改用查询按键的方法。


当使用按键进行占空比调整的时候,LED可以显示出来不同的亮度。几幅截屏的画面如下:




当PWM参数稍小时,亮度有些不足,这可以适当减小一些限流电阻的阻值进行弥补。


用来显示PWM的LED,其中的电流是间断的,所以,它的限流电阻可以比平常时小一些,100欧左右,是经验数据。


制作实物电路的时候,大电容就不需要了,不用花钱去买了,呵呵


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭