历史上的今天
今天是:2025年01月26日(星期日)
2021年01月26日 | 89C51单片机和8254-2实际步进式PWM输出
2021-01-26 来源:eefocus
简介:介绍一种新型PWM输出的方式。它是用89C51作为主控部分,用8254-2可编程定时器/计数器来实现1Hz~3kHz步进式PWM的输出;具有分辨率高、反应速度快及占用CPU时间少的优点。
引言
脉宽调制(PWM)技术最初是在无线电技术中用于信号的调制,后来在电机调速中得到了很好的应用。本设计中要求输出PWM从1Hz~3kHz步进式递增,单步为1Hz。由于89C51的时钟最大能取24MHz,单指令周期为0.5μs,计数频率为×10 6Hz。当输出2999Hz和3000Hz时,若采用89C51内部计数器来计数,根本无法区别。因为计数频率为2MHz,单指令周期0.5μs,而要输出2999Hz时,计数应为666.889;输出3000Hz时,计数诮为666.887。因此在本设计中,采用外部定时器/计数器8254-2。因为8254-2最高计数频率可达10MHz,能满足以上设计的要求,另外采用8254-2的工作方式3可输出方波。当定时器/计数器8254-2以方式3工作时,在计数的过程中输出有一半时间为高,另一半时间为低。所以,若计数值为N,则其输出在前N/2时可输出高电平,后N/2时可输出低电平,不需要用软件来控制高低电平的转换,但8254-2计数范围有一定的限制,在采用二进制计数时,范围为0000~9999,最大计数为10 000。此外,为了使分辨率达到要求,还需要考虑程序指令所占用的时间,尤其是在输出高频时,分辨率尤为重要。1 硬件设计

1.1 8254可编程定时器/计数器[1]简介
Intel公司的8254是8253的改进型,操作方式及引脚与8253完全相同。它的改进主要反映在2方面:①8254的计数频率更高,可由直流至6MHz;8254-2可高达10MHz。②8254多个1个读回命令(写至控制器的寄存器),其格式如图1所示。
这个命令可以令3个通道的计数器都锁存(8253要3个通道的计数值都锁存,需写入3个命令)。另外,8254中的每个计数器都有1个状态字可由读回命令令其锁存,然后由CPU读取。状态字的格式如图2所示。其中D5~D0即为写入此通道的控制字的相应部分。D7反映了该计数器的输出引脚。输出(OUT)为高电平,D7=1;输出为低电平,D7=0。D6反映时间常数寄存器中的计数值是否已经写入了计数单元中。当向通道写入控制字以及计数值后,状态字节中的D6=1;只有当计数值写入计数单元后,D6=0。
本设计选择8254-2的方式3工作。方式3是一种方波速率发生器。在这种方式中,当CPU设置控制字后,输出将为高,在写完计数值后就自动开始计数,输出保持为高;当计数到一半计数值时,输出变为低,直至计数到0,输出又变高,重新开始计数。若在计数期间写入个新的计数值,并不影响现行的计数过程。但是若在方波半周期结束前和新计数值写入后收到GATE脉冲,计数器将在下一个CLK脉冲时装入新的计数值并以这个计数值开始计数。否则,新的计数值将在现行半周期结束时装入计数器。 1.2 PWM输出的硬件设计

本设计选用可编程定时器/计数器8254-2,其最高计数频率可达10MHz;充分利用8254-2的3个定时器/计数器,采取频率的分频输出,并且不需要外部的信号源输入,硬件电路简化;通过软件的处理可以实现连续(1Hz~3kHz)PWM波的输出。本设计中将要输出的PWM波分为3段,分别由8254-2中的3个定时/计数器输出,门控由P2.2、P2.3、P2.4分别加以控制。在1~20Hz的输出时,采用定时器0,计数频率为10 4Hz,最大计数为10 4,最小计数为500符合要求,21~200Hz的输出中,采用定时器1,计数频率为10 5Hz,最大计数为4762,最小计数为500;在201Hz~3kHz 的输出中,采有定时器2,计数频率为10 7Hz,最大计数为49 751,满足二进制计数的范围,最小计数为3333。这些计数值可由单片机89C51[2]送给8254-2的数据输入端,通过除法运算来得到这些计数值,由除法运算得到商。所得到的商去程序指令占用的时间即为所需要的计数值。采用8254-2的3个定时器的输出经过1个或门作为CD4046锁相环的输入,同时经过1个非门进入89C51的INT1口,申请下降沿中断;CD4046锁相环输出所需的PWM。
为了防止程序进入死循环,增加了外部的硬件看门狗定时器IMP813L[3],其内部的看门狗定时器监控UP/UC的工作。如果在1.6s内未检测到其工作,内部的定时器将使看门狗输出WDO处于低电平状态,WDO将保持低电平直到在WDI检测到UP/UC的工作。将WR和WDO连接可使看门狗超时产生复位。
具体硬件电路如图3所示。
2 软件设计
软件主要由3部分组成:主程序、键盘扫描程序、中断处理程序。主程序流程如图4所示。
主要地址分配如表1所列。表1 地址分配

(1)中断处理过程

当89C51检测到有INT1中断时,进入中断处理程序中,首先检测30H和31H中的内容是否大于20;若不大于20,则门控为P2.2,选中8254-2,选择计数器0、方式3、16位二进计数, 送上次计算出来的这次所需要的计数值给8254-2,将10 4送入32H、33H中作为除法运算中的被除数,而30H、31H的内容作为除法运算中的除数,调用除法运算子程序将所得的商送入32H、33H,余数放在35H、36H中。比较余数是否大于除数的一半,若大于除数的一半则所得的商加1,否则商不变放在32H、33H中。假设程序指令所占用的时间为X/200(其中X为中断程序中单指令周期的个数),将32H、33H中的内容减去X/200,即为下次所要送入8254-2的计数值,放在35H、36H中,返回中断;若大于20,则门控为P2.3,选中8254-2,选择计数器1、方式3,送上次计算出来的这次所需的计数值给8254-2,将10 5送入32H、33H、34H中作为除法运算中的被除数,而30H、31H中的内容作为除法运算中的除数,调用除法运算子程序,将所得的商送入32H、33H中,余数放在35H、36H中。比较余数是否大于除数的一半,若大于除的一半则所得的商加1,否则商不变。假设程序指令所占用的时间为X/20,将32H、33H中的内容减去X/20即为下次所要送入8254-2的计数值,放在35H、36H中,返回中断,若大于200,则门控为P2.4,选中8254-2,选择计数器2、方式3、二进制计数,送上次计算出来的这次所需的计数值给8254-2,将10 7送入32H、33H、34H中作为除法运算中的被除数,而30H、31H中的内容作为除法运算中的除数,调用除法运算子程序,将所得的商送入32H、33H中,余数放在35H、36H.比较余数是否大于除数的一半,若大于除数的一半则所得的商加1,否则商不变入在32H、33H中。假设程序指令令所占用的时间为X*5,将32H、33H中的内容减去5X,即为下次所要送入8254-2的计数值,放在35H、36H中,返回中断。
(2)设置软件陷阱
当程序进入到非程序区,只要在非程序区设置拦截措施,使程序进入陷阱,然后强迫程序回到初始状态。如对CPU的RST指令对应的字节码为0FFH,如果不用的程序存储区预先写入0FFH,则当程序因干扰而“飞”到该区域执行代码时,就相当于执行1条RST指令,从而达到系统复位的目的。
结束语
采用89C51控制PWM分段,8254-2步进式输出1Hz~3kHz的PWM,可以通过软件编程的方法提高分辨率。在有些特殊场合只靠单片机内部的定时器或模拟电路无法精确输出1Hz~3kHz,单步为1Hz的PWM波形时,此设计就显出其明显的优越性,而且它占用的CPU时间短。此设计的结构简单、成本低、可靠性好、抗干扰能力强,可在控制和测量中得到应用。
史海拾趣
|
如今,随着GPS(Globle Position System全球定位系统)技术在国民生产和日常生活各领域的广泛应用,曾几何时作为高端创新技术的“神秘性”与“陌生化”正逐渐被“方便快捷”与“不可或缺”两个词所取代。近日,国内领先的电视购物公司、中国 ...… 查看全部问答> |
|
编译WINCE出现的错误 我用的工程文件是FL开发板自带的工程文件 BUILD: [01:0000001461:ERRORE] SC2440_SDHCBase.lib(sdhcmain.obj) : error LNK2019: unresolved external symbol \"public: struct SDCARD_HC_CONTEXT * __cdecl CSDIO ...… 查看全部问答> |
|
An application targeting a Standard SDK for windows CE.NET and built for the ARMV4T CPU cannot be run on the Emulator device.In order to run this application on any cpu other than the emulator,you\'ll have to install an SDK tha ...… 查看全部问答> |
|
在Win7下,以前很正常,最近在进入调试的时候会突然退出,不知道大家有没有遇到过这种情况?用的是LM3S8962评估板。 [ 本帖最后由 academic 于 2011-1-6 19:09 编辑 ]… 查看全部问答> |
|
我现在手头上有一个老款白盒子的那种合众达的仿真器,下载速度比较慢,想换一个。合众达有了510plus版本,但是要1800,太贵了。想买这个 http://www.csmingwei.com/web/cp/dsp_xds.htm,是长沙一家公司的,他们网站上声称 “5、速度较其他仿真 ...… 查看全部问答> |
|
温湿度传感器节点设计,cc2520和mspf5438a控制sht11 有没有人有cc2520和mspf5438a控制sht11的应用层的程序,不胜感激,以后有什么需要的尽管说。谢谢了。… 查看全部问答> |




