欢迎来到天天文库
浏览记录
ID:21415182
大小:76.00 KB
页数:4页
时间:2018-10-21
《浅谈利用单片机设计pwm脉冲信号发生器》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、浅谈利用单片机设计PWM脉冲信号发生器王雪娇胡恒铮无锡技师学院214153摘要脉冲宽度调制(PWM)在电子技术领域中应用十分广泛,但是利用模拟电路实现脉宽调制功能十分复杂、不经济。随着微处理器的发展,运用数字输出方式去控制实现PWM的功能就变得简单快捷,木文就如何利用89S52单片机软件编程设计出周期一定而占空比可调的脉冲波,也就是实现PWM功能进行设计,它可以代替模拟电路的PWM脉冲信号发生器。关键词单片机PWM数字控制PWM是脉冲宽度调制(PulseWidthModulation)的英文缩写,它是开关型稳压电源中按稳压的控制方式分类中的一种,而脉宽宽度调制式(PWM)开关型稳压
2、电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。简单的说,PWM是一种对模拟信号电平进行数字编码的方法。理论上讲就是电压或电流源以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的,通的时候就是电源被加到负载上,断的时候就是供电被断开的时候,所以PWM信号仍然是数字的。要想达到这样一种脉宽调制效果,模拟电压和电流时可以直接控制。例如音响的音量控制,在简单的模拟电路中,它的控制是由连接了一个可变电阻的旋钮来实现的,其过程是拧动旋钮,电阻值变小或变大,流过该电阻的电流也随之增加来减小,从而改变驱动扬声器的电流值,那么声音也就相应变
3、大或变小。从这个例子来看,模拟控制是直观而简单的,但是并不是所有的模拟电路都是可行并且经济的,其中很重要的一点就是模拟电路容易随时间漂移,它的调节过程就很网难,为了解决问题就要增加很多的电路,使得电路变得复杂并且昂贵。除此之外,模拟电路中许多的元器件会发热,也就相对提高了电路的功耗,并且对噪声也敏感,任何干扰或噪声都会改变电流值的大小。综上所述,通过数字方式来控制模拟电路可以大幅度降低系统的成木和功耗,而单片机I/O口的数字输出可以很简单地发出一个脉冲波,在配以外部元器件就可以调节脉冲波的占空比,完成PWM的功能。本文主要介绍利用89S52系列的单片机,控制某个I/O口中一个管脚的
4、数字输出,生成相应周期的脉冲波,并利用按键控制其占空比的调节,包括了占空比自小到大和自大到校的顺序及倒序可调,其调节范围广,操作简便,各元器件间的干扰较小,对模拟电路的控制十分有效。1.PWM波的生成PWM波既为数字输出,就是其幅值只奋高电平(ON)和低电平(OFF)之分,所以只要使单片机中作为PWM波输出端的那个管脚输出“1”和“0”,并iL搭配不同的吋间段,就可以形成不同周期的PWM波。举例说明:若要生成周期为10ms的脉冲,就可以利用单片机编程指令控制其输出端输出“1”,并且保持一段时间tp,然后再输出“0”,同样使其保持一段吋间tr,两种数字输出保持的吋间必须要满足,现就己
5、生成10ms周期的脉冲波,而PWM波与该脉冲波的区别就是还要能够调节占空比。占空比是指正半周脉宽占整个周期的比例,即高电平保持时间于周期的比值,该比值为百分数(),因此在周期一定的情况下,调节占空比就是调节高电平保持的吋间。2.松用编程本文介绍的PWM波是利用单片机定时中断去确定脉冲波的周期,并i通过两个按键自增和自减某个变量送至中断中,通过此变量去分配高低电平各自占用的吋间,形成不同的占空比,即假设一个周期满额比例值为10,则高电平保持时间的比例为该变量值,那么低电平保持时间的比例就是10减去该变量值。如图1所示为单片机的外部接线图,其中省略了单片机最小系统,此图即可利用89SC
6、52单片机设计出满足周期为10ms、初始占空比为50%、占空比调节范围为0〜100%的PWM脉冲信号发生器。A空比调节范围是指高电平保持吋间为0〜10ms,那么低电平保持吋间就是10ms〜0。P0.7脚为PWM波输出UI,作为PWM脉冲信号发生器可连接其它电路,本文仅连接示波器去观察波形的占空比变化情况,P2.0脚为自增按钮控制端,每按一次高电平保持吋间增加lms,P2.1脚为自减按钮控制端,每按一次高电平保持吋间减少lms。图2所示为初始50%占空比的波形图以及20%、40%、60%和80%占空比的波形图,以此看出PWM的变化。89C52单片机生成PWM波C语言程序:#defin
7、euintunsignedintsbitpwm=P0A7;sbitkl=P2A0;sbitk2=P2Al;bitbz;//定义一个按键是否松开的标志位ucharb;ucharm=5;//m为控制占空比的变量,初始占空比50%voiddelay(uinti){while(i--);}voiddingshi()interrupt1//定吋中断{TL0=(65536-1000)%256;//lms初始化TH0=(65536-1000)/256;b++;if(b==10)b=
此文档下载收益归作者所有