51单片机产生pwm波

51单片机产生pwm波

ID:1218606

大小:588.18 KB

页数:7页

时间:2017-11-08

51单片机产生pwm波_第1页
51单片机产生pwm波_第2页
51单片机产生pwm波_第3页
51单片机产生pwm波_第4页
51单片机产生pwm波_第5页
资源描述:

《51单片机产生pwm波》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、51单片机产生PWM方法作者:苇之舟89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。1软件延时法利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。程序如下:#includesbitpwm=P1^0;main(){while(1){pwm=1;delayus(60);//置高电平后延时60us,占空比60%pwm=0;delayus(40);}}voiddelayus(uintx){while(x--);}proteus软件仿真结果

2、如下:可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是这种方法的缺点也相当明显。当程序除了要输出pwm波还要执行其他操作比如键盘扫描、显示等操作时,需要占用CPU一定的机器周期,这样就会影响pwm的准确度。现在很少会用到这种方法,接下来要介绍的是比较常用的方法。2定时器产生pwm这种方法利用了定时器溢出中断,在中断服务程序改变电平的高低,在程序较复杂、多操作时仍能输出较准确的pwm波形。2.1注意事项2.2.1中断服务程序的内容。一般来说中断服务程序只完成改变标志位、转换高低电平的功能,如果中断服务程序中有太多的操作会影响pwm波的输出,尤其是除法、取余

3、、浮点数运算会占用大量的机器周期,应在中断外完成运算。2.2.2定时器装入初值的问题。装入初值不能太接近于定时器的溢出值。如我们使用定时器方式1,最多能计65536个数,假设我们转入的初值为65534,那么定时器计两个数就会进入中断,这样会使程序紊乱而其他功能无法正常地执行,所以一般要留50-100个数的裕量。2.1定时器工作方式在定时器工作方式的选择上,可以选择定时器的工作方式0、1、2都可以,本文采用的是工作方式1,即16位定时器,这样可以获得较宽的调频范围。2.2定时器初值的计算设占空比为α,频率为f产生高电平时装入定时器高8位的值应为TH0=(65535-

4、106*αf)/256产生高电平时装入定时器低8位的值应为TL0=65535-106*αf%256显然,产生低电平时的公式只要把α换成(1-α)就行了。然而在51单片机中,浮点数运算需要消耗cpu很长的时间,为了提高程序效率,通常用100倍的占空比来计算。同时,要注意数据类型,避免超出范围,影响计算结果。关于C51的乘除法问题,可以看以下这篇文章:http://blog.163.com/ssou_1985/blog/static/295320362010311102232210/修改后的公式如下:a为100倍占空比,fr为0.01倍频率TH0=(65535-a*1

5、00/fr)/256;//高位初值TL0=(65535-a*100/fr)%256;同样,低电平的公式只需把a换成(100-a)即可。2.1例程本例程采用定时器T0在工作方式1下产生一路PWM,用独立键盘控制频率、占空比的加减,频率可调范围100Hz-10kHz,占空比0-100%(均为理论值,实际值略低)部分代码如下:注:T0_H,T0_L,T1_H,T1_L均用于暂时存储初值,进入中断服务程序后直接给寄存器TH0、TL0赋值,避免了在中断中计算。注:flag为pwm输出标志,flag=1输出高电平,flag=0输出低电平完整的代码请到我的网盘下载http://

6、yunpan.cn/QzKaWM8VesFyc2.1软件仿真结果2.5.1频率为100Hza.占空比约15%b.占空比95%2.5.2频率为10KHza.占空比15%b.占空比90%

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。