欢迎来到天天文库
浏览记录
ID:50893499
大小:46.02 KB
页数:5页
时间:2020-03-15
《最简单PWM技术应用-渐明渐暗的LED灯.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、浅谈最简单PWM技术应用--渐明渐暗的LED灯:控制简单的LED灯貌似没什么难度,但是你会不会感觉到太单调,总是同一个频率在闪烁,总是同一个亮度在闪烁。大家有否想过能让LED灯由暗逐渐变亮,然后再由亮变暗该从什么地方入手呢?这里就不得不提到PWM技术。这里着重注意最后面对所给完整程序的分析。在开始我们的工程之前,首先来了解一个概念:PWM。PWM是脉冲宽度调制的英文单词的缩写。脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉宽调制是开关型
2、稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽调制式开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。读起来有点晦涩难懂。其实简单的说来,PWM技术就是通过调整一个周期固定的方波的占空比,来调节输出电压的平均当电压,电流或者功率等被控量。我们可以用个一水龙头来类比,把1s时间分成50等份,即每一个等份20ms。在这20ms时间里如果我们把水龙头水阀一直打开,那么在这20ms里流过的水肯定是最多的,如果我们把水阀打开15ms,剩
3、下的5ms关闭水阀,那么流出的水相比刚才20ms全开肯定要小的多。同样的道理,我们可以通过控制20ms时间里水阀开启的时间的长短来控制流过的水的多少。那么在1s内平均流出的水流量也就可以被控制了。当我们调整PWM的占空比时,就会引起电压或者电流的改变,LED的明暗状态就会随之发生相应的变化,听起来好像可以通过这种方法来实现我们想要的渐明渐暗的效果。让我们来试一下吧。大家都知道人眼有一个临界频率,当LED的闪烁频率达到一定的时候,人眼就分辨不出LED是否在闪烁了。为了让我们的LED在变化的过程中,我们感觉不到其在闪烁,可以将其闪烁的
4、频率定在50Hz以上。同时为了看起来明暗过渡的效果更加明显,我们在这里定义其变化范围为0~99(100等分).即最亮的时候其灰度等级为99,为0的时候最暗,也就是熄灭了。于是乎我们定义PWM的占空比上限为99,下限定义为0。#defineLED_PWM_LIMIT_MAX99#defineLED_PWM_LIMIT_MIN0假定我们LED的闪烁频率为50Hz,而亮度变化的范围为0~99共100等分。则每一等分所占用的时间为1/(50*100)=200us即我们在改变LED的亮灭状态时,应该是在200us整数倍时刻时。在这里我们用单
5、片机的定时器产生200us的中断,同时每20ms调整一次LED的占空比。这样在20ms*100=2s的时间内LED可以从暗逐渐变亮,在下一个2s内可以从亮逐渐变暗,然后不断循环。由于大部分的内容都可以在中断中完成,主函数中除了初始化之外,就是一个空的死循环。下面附完整程序代码,然后具体分析:#include#defineLEDP1//定义LED接口#defineucharunsignedchar#defineuintunsignedint#defineLED_ON()LED=0x00;//所有LED亮#defin
6、eLED_OFF()LED=0xff;//所有LED熄灭UcharTimeCounter=0;//中断计数bitLedDirection=0;//LED方向控制0:渐亮1:渐灭charLedPWMCounter=0;//LED占空比charPWMCounter=0;//占空比voidTimer0Init(void)//定时器初始化{TMOD=0x01;//定时器0工作方式1TH0=0xff;//定时器初始值(200us中断一次)TL0=0x47;EA=1;ET0=1;TR0=1;}voidmain(){Timer0Init();w
7、hile(1);}voidTime0Isr(void)interrupt1{staticuintPWMCounter=0;//声明静态变量的只能被初始化一次TH0=0xff;//定时器重新赋初值TL0=0x47;TimeCounter++;if(TimeCounter>100)//每20MS调整一下LED的占空比{TimeCounter=0;//如果是渐亮方向变化,则占空比递增if((LedPWMCounter<=99)&&(0==LedDirection)){LedPWMCounter++;if(LedPWMCounter>99
8、){LedDirection=1;LedPWMCounter=99;}}//如果是渐暗方向变化,则占空比递减if((LedPWMCounter>=0)&&(1==LedDirection)){LedPWMCounter--;if(LedPWMCou
此文档下载收益归作者所有