- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最简单PWM技术应用--渐明渐暗的LED灯.
浅谈最简单PWM技术应用--渐明渐暗的LED灯:
控制简单的LED灯貌似没什么难度,但是你会不会感觉到太单调,总是同一个频率在闪烁,总是同一个亮度在闪烁。大家有否想过能让LED灯由暗逐渐变亮,然后再由亮变暗该从什么地方入手呢?这里就不得不提到PWM技术。
这里着重注意最后面对所给完整程序的分析。
在开始我们的工程之前,首先来了解一个概念:PWM。
PWM是脉冲宽度调制的英文单词的缩写。脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉宽调制是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽调制式开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
读起来有点晦涩难懂。其实简单的说来,PWM技术就是通过调整一个周期固定的方波的占空比,来调节输出电压的平均当电压,电流或者功率等被控量。我们可以用个一水龙头来类比,把1s时间分成50等份,即每一个等份20ms。在这20ms时间里如果我们把水龙头水阀一直打开,那么在这20ms里流过的水肯定是最多的,如果我们把水阀打开15ms,剩下的5ms关闭水阀,那么流出的水相比刚才20ms全开肯定要小的多。同样的道理,我们可以通过控制20ms时间里水阀开启的时间的长短来控制流过的水的多少。那么在1s内平均流出的水流量也就可以被控制了。
当我们调整PWM的占空比时,就会引起电压或者电流的改变,LED的明暗状态就会随之发生相应的变化,听起来好像可以通过这种方法来实现我们想要的渐明渐暗的效果。让我们来试一下吧。
大家都知道人眼有一个临界频率,当LED的闪烁频率达到一定的时候,人眼就分辨不出LED是否在闪烁了。为了让我们的LED在变化的过程中,我们感觉不到其在闪烁,可以将其闪烁的频率定在50Hz以上。同时为了看起来明暗过渡的效果更加明显,我们在这里定义其变化范围为0~99(100等分).即最亮的时候其灰度等级为99,为0的时候最暗,也就是熄灭了。
于是乎我们定义PWM的占空比上限为99, 下限定义为0。
#define LED_PWM_LIMIT_MAX 99
#define LED_PWM_LIMIT_MIN 0
假定我们LED的闪烁频率为50Hz,而亮度变化的范围为0~99共100等分。则每一等分所占用的时间为 1/(50*100)=200us 即我们在改变LED的亮灭状态时,应该是在200us整数倍时刻时。在这里我们用单片机的定时器产生200us的中断,同时每20ms调整一次LED的占空比。这样在20ms *100=2s的时间内LED可以从暗逐渐变亮,在下一个2s内可以从亮逐渐变暗,然后不断循环。
由于大部分的内容都可以在中断中完成,主函数中除了初始化之外,就是一个空的死循环。
下面附完整程序代码,然后具体分析:
#includereg52.h
#define LED P1 //定义LED接口
#define uchar unsigned char
#define uint unsigned int
#define LED_ON() LED = 0x00 ; //所有LED亮
#define LED_OFF() LED = 0xff ; //所有LED熄灭
Uchar TimeCounter = 0 ; //中断计数
bit LedDirection = 0 ; //LED方向控制 0:渐亮 1:渐灭
char LedPWMCounter = 0 ; //LED占空比
char PWMCounter = 0 ; //占空比
void Timer0Init(void) //定时器初始化
{
TMOD=0x01; //定时器0工作方式1
TH0=0xff ; //定时器初始值(200us中断一次)
TL0=0x47 ;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
Timer0Init();
while(1);
}
void Time0Isr(void) interrupt 1
{
static uint PWMCounter = 0 ; //声明静态变量的只能被初始化一次
TH0=0xff ; //定时器重新赋初值
TL0=0x47 ;
TimeCounter++;
if(TimeCounter 100) //每20MS调整一下LED的占空比
{
TimeCounter = 0 ;
//如果
您可能关注的文档
最近下载
- 班高中班主任培训 课件.ppt VIP
- 小学美术教学中趣味教学模式的运用.pptx VIP
- 宝安区地图深圳市宝安区乡镇街道地图高清矢量可填充编辑地图PPT模板.pptx
- 儿童文学教程(第4版)课件 方卫平 第5--14章 童话 寓言---- 儿童文学与小学习作教学 .ppt
- 一例儿科患者液体外渗不良事件的案例分析课件.pptx VIP
- 临近既有线施工安全方案.doc VIP
- 2023年广东省深圳市蛇口育才教育集团育才二中中考二模语文试题(含解析).pdf VIP
- 2025乌兰察布辅警考试真题.docx VIP
- 南山区地图深圳市南山区乡镇街道地图高清矢量可填充编辑地图PPT模板.pptx
- 2024-2030年中国精品咖啡行业市场深度分析及投资潜力预测报告.docx VIP
文档评论(0)