资源描述
任务 一 数字钟,功能要求 整体方案调研 整体方案论证 硬件电路设计 程序设计,功能要求,功能要求: (1)正常显示系统时间。 (2)可调整系统时间。 (3)计时误差:1天误差10s。 (4)由用电设备提供+6V电源。 (5)低价位。,二、 整体方案调研,不论是设计练习或是一个实际的工程项目,在明确其性能要求的基础上,首先要做的应该是调研相关情况,了解与该项目相关的成果,以便吸收前人的成功经验,开阔自己的思路。在网络高度发达的今天,利用网络查询无疑是最便捷、最全面的方法。,三、 整体方案论证,根据设计题目的功能要求,采用自顶向下的拼凑法可以构成如图1所示的方框图。 自顶向下法(Top to Down) 首先从系统级设计开始,根据系统级所描述的该系统应具备的各项功能,将系统划分为单一功能的子系统,再根据子系统任务划分各部件,完成部件设计后,最后才是元件级设计。 优点:避开具体细节,有利于抓住主要矛盾。 适用于大型的、复杂的系统设计,整体方案论证,方案一 直接利用专用时钟芯片计时。,整体方案论证,该方案的优点是各器件的功能清晰。缺点是所用芯片数多、PCB面积大、接线多、焊点多。因此可靠性略差,而且成本也较高,不符合低价位的要求。 低价位是所有电子系统设计在保证性能的前提下都必须认真考虑的因素,有时它直接关于产品能否推广应用。,整体方案论证,方案二 图9.1.2电路中的虚线内部分完全可以由CPLD或FPGA来实现。这也是参考文献中采用的一个方法。 这个方案的优点是电路大为简化,系统可靠性高。最大的问题是CPLD或FPGA的成本高,做为这种低端产品,其价格难以接受。,整体方案论证,方案三 以MCU为核心来构架整个电路。时钟产生,秒信号、分信号形成均可利用MCU片内资源解决。分减法计时利用程序完成。LED的译码也可以由软件完成。至于按键的设置,则可以更加灵活,并将键数减至最少。 这一方案的最大优点是充分发挥了MCU软件的功能,并使电路简化到可以和CPLD或FPGA相媲美。,整体方案论证,电子系统设计的一个重要原则是:“安软勿硬”。即能用软件解决的同一问题,则不用硬件。这主要是因为软件的寿命不受限制,而且软件的编制如果完美无暇的话,其可靠性也是硬件无法比拟的。何况又能降低硬件开消。这一方案符合这一原则。 MCU的品种繁多,适合这种低端应用的芯片也不少,其价位已低到MSI的水平,所以应该是最低价位的方案。 很明显,方案三是合适的。,四、 硬件电路设计,1MCU的选择 2资源分配 3程序流程图 4 容错设计 5软件的简单抗干扰措施 6计时精度 7程序清单,硬件电路设计,9.1.4 硬件电路设计 1MCU的选择 为降低价位和节省使用MCU的端口数,LED宜采用共阴极动态驱动方式,它共需八根段位口线,两根阴极驱动口线,即LED需要十根MCU I/O口线。 按键可以减少到只要两个:功能切换和预置时间加一键。功能键完成二个任务:移动预置时间的个位和分位;启动计时。它需要二根I/O口线,而且最好接在外接中断输入端,以便按键可以用中断或查询两种办法处理。 驱动执行器件通断负载需要一根口根。 即共需MCU13根口线。,硬件电路设计,系统所需的时钟信号可以由MCU的定时器/计数器完成。一般低端MCU均有二个定时器/计数器,可以满足要求。 整个课题对指令执行的速度没有什么要求,不要求执行速度快的MCU,一般低端MCU至少可以工作在12MHz的时钟下,速度不成问题。,硬件电路设计,LED数码管采用应用最广的0.5英寸,高亮度红色的共阴极器件。动态驱动时每个笔段平均IF0.5mA已可明亮显示。 若VF=1.5V,每笔段的限流电阻为2k,则LED点亮时每笔段IF1.75mA,动态扫描时每个笔段的平均电流约为0.875mA,满足亮度要求。考虑到MCU口线的IOH较小,限流电阻应接为上拉形式。 八段笔划直接由P1口驱动。被点亮LED数码管的最大电流为81.75=14mA,利用P3.0、P3.1的IOL是可以承受的。,硬件电路设计,按键共设两个:功能切换键“S”,和加键“+”。分别接至INT0(P3.2)和INT1(P3.3)。 设计的功能为:上电后,定时器处于等待时间设置状态,隐含时间10分。按下“S”键,分个位LED闪烁。按“+”键,可设置分个位值。设好后,再按“S”键,分个位LED停止闪烁,分十位LED开始闪烁,再按一次“S”键,分十位LED停止闪烁,定时器启动,设置的时间值存储,并开始倒计数。两只10k的上拉电阻,保证键按下低电平有效,相应的硬件电路如图9.1.3所示。,硬件电路设计,数字定时器硬件电路,硬件电路设计,考虑到上电过程中不允许用电设备瞬间动作,强电执行部件应为低电平驱动,它由P3.4完成。 强电执行部件选用价格低的小型电磁继电器,而不用性能虽好,但价格较高的SSR。根据负载以及+12V供电的情况可选用JQX-14F12V的电磁继电器(特性见表2.6.1)。其电气寿命达105次,应能满足用电设备的要求。相应的驱动电路如图9.1.3所示。 AT89C2051采用简单的RC复位电路。,硬件电路设计,MCU时钟频率直接影响指令执行速度与芯片的功耗。本课题对执行速度并不要求快,而且希频率低一点可降低功耗,故选为6MHz,由于机器周期为时钟频率的1/12,即2s,为整数值,定时器中断时间亦为2s的整数倍,对计时精度有利,何况6MHz的石英晶振为长线器件,价格较低。,硬件电路设计,+12V供电由7805降至+5V供系统使用。按LED所有笔段全亮,所需电流约12.5mA。 JQX14F通电时线圈耗电约45mA,AT89C2051 5V供电时工作电流约12.5mA,电路总电流约70mA。 7805压降为7V,管耗为0.49W。其热阻/W,即使不加散热片,其相对环境温度的温升约22。即使在+50环境温度下,结温才72。,五、 程序设计,1确定整体的程序结构 硬件电路采用的动态扫描方式,编程序时要不停地扫描它。由于只有两位LED数码管,若扫描频率选为50Hz,则每个数码管点亮的时间为10ms。,程序设计,(1)最常用的程序结构 图9.1.4为设计人员最喜欢采用的主程序流程图。主程序执行它初值化以后,即进入循环的显示扫描程序。其它所有的功能模块,如设置命令、设置时间的输入、计时等统统以中断的方式切入。如果初值化以后只是一个简单的循环等待,这种方式从可靠性和程序编写上都是很可取的。,程序设计,但是本设计中的两个按键,由于本身固有的抖动特性(如欧姆龙公司B3F-4055按键开关的抖动时间10ms),一般均采用软件去抖,即查觉按键动作后,先软件延时20ms,躲过抖动时间再接着处理按键相应的功能。 在软件延迟的时间里,显示扫描被打断,会导致显示闪动的不良现象。,程序设计,(2)RTOS 多任务实时操作系统(RTOS,如C/OS-)可以很好的解决这一并行请求的矛盾。然而这似乎“杀鸡用牛刀”。况且89C2051的程序存储器容量也有限。,程序设计,(3)以系统时钟为核心的程序结构 我们统计一下本设计要使用的几个时间量:10ms每个数码管显示时间;20ms按键去抖时间;0.5s分个位LED小数点亮/灭时间;1s计时的单位时间。,程序设计,选择其最短的时间10ms做系统时钟基准。即利用MCU的定时器每10ms中断一次。然后确定每个时钟需完成的任务: 轮流点亮LED一次; 判有无键按下,若有键按下激活一个标志,并记录键按下的时间; 检查键标志,并检查是否已到去抖时间(20ms,二个系统时钟时间),若已到则判定哪个键按下并做相应处理。因为每个时钟均访问LED一次,动态驱动得以保证。而进行键功能处理,有10ms的时间足矣!,程序设计,至于0.5s和1s时钟事件处理可以由计另一时时钟来完成,它承担每0.5s设置位LED闪烁和1s计时信号产生的任务,分为二个计时器可以使程序编写起来更容易一些。,程序设计,2资源分配 (1)硬件资源分配 功能键KS,边沿触发; 加键KAD,边沿触发 P1.0P1.7 LED段码输出,高电平有效 P3.0 LED数码管分十位阴极,低电平有效,K1 P3.1 LED数码管分十位阴极,低电平有效,K2 P3.4 继电器驱动输出,低电平输出有效,J T0 16位计时器,系统时钟,10ms中断一次 T1 16位计时器,计时时钟,0.1ms中断一次,程序设计,(2)寄存器资源分配 (3)标志位资源分配与功能 以上两项请直接参阅程序清单,程序设计,3程序流程图 图9.1.5为主程序流程图。,程序设计,图9.1.6为系统时钟程序流程图。其中在进行分个位或分十位值加一时,有可能分个位或分十位正处于消隐期,即此值为20,这样会导致错误的时间。故必须在加之前调时间值,加完以后再存入时间值。,程序设计,图9.1.7为显示子程序流程图。显示分个位还是分十位由DSS标志值决定,由于每显示一次DSS取反,所以分个位和分十位得以轮流显示。因为在设置时间时,设置的那一位LED 0.5s闪烁一次,故程序首先判定是否消隐或正常显示,这要由闪烁标志位FMF决定。,程序设计,图9.1.8为计时时钟程序流程图。在设置时间时,用闪烁控制标志FMF决定是否闪烁,通过SFF来决定在显示时是消隐还是正常显示。在计时时,停止时间闪烁,用DP取反的办法,使分个位小数点每秒闪动一次。,程序设计,图9.1.9(a)和(b)分别是功能键和加键的中断子程序X0和X1。这两个中断程序只执行将有键按下的标志位KEY置1的同一语句。程序短到无可再短,当然不会因中断影响显示,更不会影响其它程序的参数。,程序设计,4容错设计 允许错误存在,并能防止它对系统正常工作的破坏,称为“容错”。 人为操作失误是造成系统工作失败的最重要的因素。世界上许多次严重的事故,如切尔诺贝利核洩漏,就是错误操作造成的。,程序设计,4容错设计 一个没有考虑容错的设计,包括一个程序,不能算一个完美的设计。 上述数字定时器程序就至少没有考虑二种人-机交互易产生的错误: (1)上电后,显示10分隐含时间。正常操作应当是:不设新时间;或者先按功能键,设分个位。再按功能键,设分十位。再按一次功能键正常倒计时。但是如果上电后直接按加键,则分个位将动作,这将导致功能键动作次数紊乱。 (2)倒计时开始后,如果按任何一键,也将出现非正常情况。,程序设计,4容错设计 对于第一种情况,可以在系统时钟程序检测到“+”键时,先判别一下功能键次数是否为零,若是则不做加法而直接退出,见下面所列程序。 对于第二种情况,可以在开始计时后关闭外部中断,而在计时结束后再重新允许外部中断。,程序设计,5软件的简单抗干扰措施 (1)指令冗余 现以CK0程序中的含有冗余指令的几个语句为例简单说明一下它的抗干扰原理。语句如下:(具体程序见程序清单),程序设计,(1)指令冗余 程序正常运行时,程序计数器(PC)指针在执行JMP MPRO语句时指向095H,这条指令对应的机器码为80H,25H。前者是指令码,后者为相对跳转地址,即执行此指令后程序指针应跳转到25H加下条指令的PC值,即跳至OBCH。后面的三条空操作冗余指令对程序运行毫无影响。,程序设计,(1)指令冗余 倘若程序计数器的值受到了外界干扰,指向25H(如虚线所示),如果不加冗余指令,则25H被当做指令码,将执行ADD A, data addr,即执行累加器ACC加一个数据地址为紧跟其后的20H。下一条指令,由于PC指向B2H,将执行CPL bit addr,即对18H这个位地址了反。可见程序被完全破坏。,程序设计,(1)指令冗余 如果干扰后指针仍是指向25H,但下面有三条NOP指令,程序执行的是ADD A,00H,累加器的值会改变。但PC下一个指向的二个NOP,再下一个指向的将是正常的JB KS, RCKO语言。至少减少了程序被破坏的程度,能接着恢复正常运行。 冗余指令NOP通常加在2字节或3字节指令的后面。,程序设计,5软件的简单抗干扰措施 (2)软件陷阱 程序的长度总是小于程序存储器的容量,本课题中程序长度为170H(368 Byte),而89C2051内部Flash memory的容量为2kB(800H),有大片的内存的FFH剩余区。FFH为MCS-51内核的指令代码MOV A,R7。在剩余区里可以安排若干跳转到初值化地址的指令,以便程序跳飞时能被这些陷阱所捕获,还原到初值化或其它程序,请参看程序清单。,程序设计,5软件的简单抗干扰措施 (3)监视定时器 监视定时器(Watch Dog Timer-WDT)俗称“看门狗”,是一种最常用的很有效的抗干扰方法。它的工作原理可以用图9.1.10来说明。,程序设计,监视定时器是一个时间计数器,复位以后,每隔一个固定的时间tWDT由Q端发生一个进位脉冲,迫使MCU复位。MCU在程序正常运行时,启动WDT,并每隔tWDT的时间通过I/O口向WDT发送复位信号,所以WDT永远没有强迫MCU复位的可能。当程序受到干扰,“跑飞”以后,程序不能正常的向WDT发送,于是在跑飞tWDT时间以后,MCU复位,程序又纳入正常运行。 WDT可以用外部器件自行设计,也可以使用具有WDT功能的IC,如X5045。现在已经有不少MCU内部已带有WDT,只需程序控制其运行即可。 对低端产品的本设计而言还没有必要使用WDT。,程序设计,6计时精度 既然课题提出了对时间精度的要求,设计时就必须予以考虑。 本设计是利用MCU的定时器软件计时。计时误差首先取决于MCU的时钟。 (1)MCU时钟引起的计时误差 MCU的fosc=6MHz,是由石英晶体振荡器产生的,其频率稳定度优于106,有时可达1011。按106计算,每秒变化6s,100分的变化仅0.036s,故此变化可以忽略。,程序设计,6计时精度 (2)中断响应时间造成的误差 计时定时器的初填值,是按下式计算出来的 式中为计时器的容量,这里是65536,TINT为中断(计数溢出)的时间,TC为机器周期,这里TC=2s。0.1s中断的初填值为15536(3CB0H)。由TC为整数,此初填值是无误差的。,程序设计,6计时精度 但是由于中断请求到执行中断服务程序的第一条指令是需要几个TC的时间,即中间响应时间。何况执行第一条执令填入TL1还需要三个TC。若中断响应时间为3TC,0.1s内的计时误差为6T=12s,100分计时误差为0.72s,完全满足计时精度要求。 如果将初填值补偿(加大)6个字,则可使精度大大提高。,程序设计,7程序清单 (略),
展开阅读全文