微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于51单片机双极型PWM 的软件实现

基于51单片机双极型PWM 的软件实现

时间:11-27 来源:互联网 点击:

Keil C是基于标准C内核的第三方语言,利用它可以很方便高效地实现对C51系列单片机的高级编程。C51是目前使用最普遍的8位单片机,价格低廉。它与软件编程结合,可以比较方便地满足众多功能要求,甚至取代一些复杂的硬件电路,简化硬件设计,并提高系统的可靠性和降低成本。基于这个思想,本文提出了一种在C51单片机上软件实现相对复杂的双极型PWM 的新方法。

1 PWM 控制原理
PWM(Pulse Width Modulation)即脉冲宽度调制,它通过控制信号去调制方波脉冲的宽度,从而获得控制的实现。
产生PWM 信号可以由硬件方法和软件方法实现。传统的硬件模拟方法是把调制信号和载波(一般是三角波)同时接入运算放大器的两个输入端作比较而得到。而软件的实现,特别是基于单片机的软件实现方法,主要是利用其内部提供的定时器,通过改变定时器的定时初值获得不同的脉冲持续时间,如果把系统的控制信号和定时器的定时初值线性对应起来,就可获得控制信号对脉宽调制的PWM 信号。所以这样线性的对应过程就成为这个实现过程的关键。控制信号的种类不同,采用不同的计算方法,又可以获得不同的PWM,见文献[3]。

2 在AT89C51中实现双极型PWM的方法
51系列单片机提供了非常丰富的资源,它除了拥有4个通用并口和1个串口外,还有外部中断和内部定时器等。而且,不同的型号还集成有不同的功能,比如AT89C51就在片内集成了4 K 的ROM,这样存储空间可以满足一般的编程需要,而不必去构建程序存储器,既提高了工作效率和系统的稳定性,又降低了生产成本。
基于AT89C51单片机的PWM 软件实现的重要硬件支撑是该单片机内部的定时器。在AT89C51内实现PWM 的基本过程:首先选定脉冲的频率T,然后根据控制信号的变化范围,这里假设是(0~V),则可以求出t时刻通过控制信号V(t)的对应脉冲的正、负脉冲持续时间。这两个时间长度在单片机里是通过给定时器赋相应的初值而得,即定时器获得这样的定时初值后就在机器周期的同步下,从这个初值加1计数,定时器满时则产生相应时间长度的溢出中断,再利用这个中断所响应的服务程序去控制单片机某一引脚相应的正、负电平极性的持续时间。如果上述过程连续进行,就可在这个引脚获得宽度随控制信号V(t)大小变化的PWM方波信号。
AT89C51单片机每个机器周期由6个状态组成,每个状态又有两个时钟周期,这样一个机器周期就等于12个时钟周期,即机器频率为时钟频率的12分频。通过对工作模式寄存器TMOD的赋值操作,把定时器设为内部定时状态并选择不同的定时方式。然后假设PWM 的周期T小于定时器一次溢出时间,即T2Nus,这里的N为定时器的位数。这样就可以得到脉宽(脉冲持续时间)twx定时初值Twx的关系:
twx=(2N-Twx)×12/f us (1)
如果所用晶振为12 MHz,定时器为方式1,即为16位定时(这时定时有比较大的计数范围,用途更为广泛),这样上式变为:
twx=(216 - Twx )us (2)
之后再根据功率器件的时间特性和工作的平均功率值,确定一个合适的PWM 信号周期T,很显然这个周期T就是由高电平脉宽twh和低电平脉宽twl组成,即:
T=twh+ twl (3)
当调制PWM 脉宽的误差信号V(f)(这个信号一般是由传感器采集后经过相关处理后得到的误差信号)的变化范围是(0~V)或(-V~V)时,PWM脉宽与误差信号为线性关系(实际可能不是线性的,但一般可以忽略或者可以通过前级进行软件补偿),可以从单片机的1个引脚得到PWM 信号,具体的过程在相关文献已有叙述,见文献[4]。
然而,单片机一般是单极型的,它的逻辑0对应的实际电平是0 V,逻辑1对应的实际电平是+5 V。严格地说,在这种单片机上只能够输出单极型的PWM 信号。采用AT89C51结合软件编程实现双极型PWM 控制的设计思想是这样的:从AT89C51的一个引脚得到正的单极型PWM 信号输出,对另一个引脚做相应的设计和定义,让它承担对应的“负”极型PWM 信号的输出。即当调制PWM 脉宽的误差信号为正时,对应的PWM 就从AT89C51单片机的一个引脚输出;当误差信号为负时,对应的PWM 就从另外一个引脚输出,尽管这个输出信号的模拟电平也是正的,但它对应的是负值的误差信号所产生的PWM 输出,又是驱动负极型功率器件,和负极型PWM 功能一样,于是可以把它等效为负极型PWM;当误差信号为零时,相应的两个引脚都没有输出,然后再把这两个引脚接入PWM 功率驱动电路的输入端。通过对误差信号正负的判别,再利用AT89C51的两个引脚就实现了双极型的PWM。具体电路如图1所示。

下面计算产生双极型PWM 所需的定时初值。实际上稳定工作时,只有一个引脚有输出,即一般两个引脚不会同时输出,所以可看作是两个相对独立的过程,可假设脉宽和误差信号的线性对应关系:

据此可求出定时初值与误差信号的关系:

由(1)式有

把式(5)代入式(6)得:

当晶振频率取12 MHz时,f=12。采用定时方式1,则可以得到即时的控制信号V(t)和定时初值在PWM 信号的一个周期内的关系:

因为V和V(t)通过对误差计算都可以得到,所以根据式(8)可以求出t时刻对应的PWM 一个周期高低脉宽的定时初值(注意这里的T的单位是us,频率f的单位为MHz)。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top