×
单片机 > 单片机程序设计 > 详情

浅谈利用单片机设计PWM脉冲信号发生器

发布时间:2020-09-03 发布时间:
|
        PWM是脉冲宽度调制(Pulse Width Modulation)的英文缩写,它是开关型稳压电源中按稳压的控制方式分类中的一种,而脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
        简单的说,PWM是一种对模拟信号电平进行数字编码的方法。理论上讲就是电压或电流源以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的,通的时候就是电源被加到负载上,断的时候就是供电被断开的时候,所以PWM信号仍然是数字的。要想达到这样一种脉宽调制效果,模拟电压和电流时可以直接控制。例如音响的音量控制,在简单的模拟电路中,它的控制是由连接了一个可变电阻的旋钮来实现的,其过程是拧动旋钮,电阻值变小或变大,流过该电阻的电流也随之增加来减小,从而改变驱动扬声器的电流值,那么声音也就相应变大或变小。从这个例子来看,模拟控制是直观而简单的,但是并不是所有的模拟电路都是可行并且经济的,其中很重要的一点就是模拟电路容易随时间漂移,它的调节过程就很困难,为了解决问题就要增加很多的电路,使得电路变得复杂并且昂贵。除此之外,模拟电路中许多的元器件会发热,也就相对提高了电路的功耗,并且对噪声也敏感,任何干扰或噪声都会改变电流值的大小。
        综上所述,通过数字方式来控制模拟电路可以大幅度降低系统的成本和功耗,而单片机I/O口的数字输出可以很简单地发出一个脉冲波,在配以外部元器件就可以调节脉冲波的占空比,完成PWM的功能。本文主要介绍利用89S52系列的单片机,控制某个I/O口中一个管脚的数字输出,生成相应周期的脉冲波,并利用按键控制其占空比的调节,包括了占空比自小到大和自大到校的顺序及倒序可调,其调节范围广,操作简便,各元器件间的干扰较小,对模拟电路的控制十分有效。
        1.PWM波的生成
        PWM波既为数字输出,就是其幅值只有高电平(ON)和低电平(OFF)之分,所以只要使单片机中作为PWM波输出端的那个管脚输出“1”和“0”,并且搭配不同的时间段,就可以形成不同周期的PWM波。举例说明:若要生成周期为10ms的脉冲,就可以利用单片机编程指令控制其输出端输出“1”,并且保持一段时间tp,然后再输出“0”,同样使其保持一段时间tr,两种数字输出保持的时间必须要满足,现就已生成10ms周期的脉冲波,而PWM波与该脉冲波的区别就是还要能够调节占空比。占空比是指正半周脉宽占整个周期的比例,即高电平保持时间于周期的比值,该比值为百分数(),因此在周期一定的情况下,调节占空比就是调节高电平保持的时间。
        2.应用编程
        本文介绍的PWM波是利用单片机定时中断去确定脉冲波的周期,并且通过两个按键自增和自减某个变量送至中断中,通过此变量去分配高低电平各自占用的时间,形成不同的占空比,即假设一个周期满额比例值为10,则高电平保持时间的比例为该变量值,那么低电平保持时间的比例就是10减去该变量值。
        如图1所示为单片机的外部接线图,其中省略了单片机最小系统,此图即可利用89SC52单片机设计出满足周期为10ms、初始占空比为50%、占空比调节范围为0~100%的PWM脉冲信号发生器。占空比调节范围是指高电平保持时间为0~10ms,那么低电平保持时间就是10ms~0。P0.7脚为PWM波输出口,作为PWM脉冲信号发生器可连接其它电路,本文仅连接示波器去观察波形的占空比变化情况,P2.0脚为自增按钮控制端,每按一次高电平保持时间增加1ms,P2.1脚为自减按钮控制端,每按一次高电平保持时间减少1ms。图2所示为初始50%占空比的波形图以及20%、40%、60%和80%占空比的波形图,以此看出PWM的变化。
        89C52单片机生成PWM波C语言程序:
        #define uint unsigned int
        sbit pwm=P0^7;
        sbit k1=P2^0;
        sbit k2=P2^1;
        bit bz;//定义一个按键是否松开的标志位
        uchar b;
        uchar m=5;//m为控制占空比的变量,初始占空比50%
        void delay(uint i)
        {while(i--);}
        void dingshi() interrupt 1//定时中断
        {TL0=(65536-1000)%256; //1ms初始化
        TH0=(65536-1000)/256;
        b++;
        if(b==10) b=0;   //10ms周期定时
        if(b         void main()
        {EA=1;ET0=1;
        TMOD=0x01;//定时0工作在方式1,1ms中断1次
        TL0=(65536-1000)%256;
        TH0=(65536-1000)/256;
        TR0=1;//开中断
        while (1)
        {if((k1==0)&&(bz==0)) {delay(1110);if(k1==0){bz=1;m++;if(m==11) m=10;}}//每按一次占空比自增10%
        if((k2==0)&&(bz==0)) {delay(1110);if(k2==0){bz=1;m--;if(m==255) m=0;}}//每按一次占空比自减10%
        if((k1==1)&&(k2==1)) bz=0;//判断按键是否松开}}
        综合硬件设计和软件设计可以看出,利用单片机数字输出方式可以很简单的完成脉冲宽度的调制,无须通过对模拟电路各元器件参数的计算进行调节,并且可以随时调整输出不同周期的脉冲波,利用该方法设计的PWM脉冲信号发生器可以很广泛。但是此设计也有一些缺点,其占空比只能按10%的比例调节,调节精度还有待提高。
        参考文献 
【1】何立民,张俊谟.单片机中级教程:第2版[M].北京:北京航空航天大学出版社,2002.
【2】吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:人民邮电出版社,2003.
【3】贺小光,蓝讽,陈敬艳.PWM可调直流稳压控制电源电路的设计研究[J].东北师大学报
关键字:单片机  PWM  脉冲信号  发生器

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
qemu+chroot构建arm aarch64虚拟机