汽车电子产品的开发,一方面要以最好的技术可靠地提高汽车电子化程度,另一方面又要具有最低的价格优势,以面对市场激烈竞争,这对于设计和应用都具有挑战性。随着汽车电子化程度的日益提高,汽车电子技术及其应用成为热点。但是,由于汽车的特殊工况,比如苛刻的工作环境温度、较强的电磁干扰和频繁的震动等恶劣工作条件,对汽车电子产品的性能提出了严格要求。
本文结合生产实际,综合考虑功能需求与成本因素,提供了一款汽车电子钟的优化设计、方法,研究了利用低成本器件实现高精度电子钟的误差控制技术。
一、电子钟硬件设计
设计一个电子钟,既可以采用一般的单片机,也可以采用高度集成的专用时钟模块,一般都不难实现。然而,由于该电子钟工作在汽车的特殊环境下,必须从原理设计到元器件选择以及生产工艺等方面进行仔细考虑。
本文设计的电子、钟电路原理如图1所示,该电子钟只使用一片PIC16C54C单片机和一些必要的外围元件。PIC的I/0口能够吸入或者输出20mA的大电流,可以直接连接LED而省去驱动器件。此外,电子钟工作时由汽车上的蓄电池供电,断电的几率极小,因而未使用具有掉电保存功能的RTC芯片。一个实用的电子产品在确保系统能够正确、可靠地实现设计要求的前提下,使用尽量少的元器件不仅可以减少生产工序,降低产品成本,而且还可以减少故障源,提高系统的可靠性。
nload="javascript:if(>740)=740" align=center border=0>
电子钟计时原理是通过单片机内部定时器TMRO,利用软件的方法对晶振产生的脉冲进行计数,获得秒基准,继而、经过换算获得分钟和小时的值。时间的显示采用专用的12h制时钟LED显示屏,从右向左依次为分钟个位bit-1,分钟十位bit-2,小时个位bit-3,小时十位bit-4以及上/下午指示点(D1,D2)与秒点(D3)位bit-5.由于PIC16C54C的I/O口只有12个,必须合理分配进行分时复用,采用动态显示,其中RAO-RA3用于位选bit-1bit-4,RBO-RB6用于段码a一g,D1、D2,D3则分别与段码d、e、f复用,分钟和小时调整键(Ki,Ka)分别与段码a,c复用。
二、软件设计
由于该电子钟是依靠软件计算来获得时间值的,因此软件设计十分关键。这里主要讨论主程序结构和秒基准的获取模块的优化设计,它们直接关几系到系统的可靠性以及走时精度问题。
1.主程序结构
主程序在对有关寄存器进行初始化后,进人一个LED逐位扫描显示的循环模块,其中每位LED显示指令后面紧接着调用一个检测TMRO是否溢出的子程序,等待TMRO溢出后调用一次计时处理模块,刷新各个计时单元值。这样安排的目的一方面可以确保TMRO不会丢失计旧寸脉冲,另一方面可以利用等待TMRO溢出的这段时卜间(约1.14428ms)作为每位LED点亮的延迟时间,程序循环运行时就可以实现LED的动态显示效果。主程序流程如图2所示。
nload="javascript:if(>740)=740" align=center border=0>
2.秒基准获取
电子钟要进行正确计时和显示时间,首先要获取一个is的基准,然后才能以此来获得分钟和小时值。根据PIC16C54C的内部定时器TMRO的工作原理,向8位寄存器TMRO写人初值,经过2个指令周期后,TMRO便在每个指令周期(4个时钟周期)后自动加l,到达255s时自动溢出,并置状态寄存器(STATUS)标志位Z=1。若晶振频率取其标称催汀七3:579545MHz,TMRO预分频数设定为1:4,TMRO从0开始计数,则定时器的溢出周期
nload="javascript:if(>740)=740" align=center border=0>
三、走时误差分析与修正方法
1.误差分析
时间是一个基本物理量,具有连续、自动流逝、不重复等特性。我国时间基准来自国家授时中心(陕西天文台),其艳原子钟稳定度达10-14量级,人们日常使用的时钟就是以一定的精度与该基准保持同步的。结合时间概念和误差理论,可以定义电子钟的走时误差△S如下
AS=S1-SO (3)
式中:S1—程序实际运行计算所得的秒;S0一客观时间的标准秒。
因此,△S>0时表明电子钟秒单元数值的刷新滞后,即走时误差为“慢”;反之,△S<0时则是秒单元数值的刷新超前,即走时误差为“快”。
在本设计的单片机电子钟系统中,其误差主要来源包括:晶振频率误差、定时器TMRO溢出次数舍人误差和看门狗复位延迟误差。其中,晶振频率误差包括晶振本身的制造误差、晶振老化频漂误差以及工作过程中温度变化造成的温度频差。它们作为晶振产品的技术参数给出,一般为几PPM到几十ppm;对于TMRO溢出次数舍入误差,由前面的秒基准获取原理可见,为了得到标准的秒基准,一定的晶振频率值对应着惟一的TMRO溢出次数,但是该溢出次数往往不会恰好是整数,由于编程需要进行取整时就会造成舍人误差。如上面公式(2)计、算所得n=873.91198取整为8740反之,当程序把TMRO溢出次数取定为一某个值时,频率就只对应着一个特定的值。如由no-874次,可据公式(1)逆推得此时频率应该是f0=3579904Hz。晶振在实际工作时的频率无论由于何种原因偏离了该特定值,都会造成走时误差。这样就把溢出次数的舍入误差转化为晶振的频率误差,便于走时误差的计算并进行软件修正。为了定量地计算晶振频率误差导致的电子钟走时误差,根据上述秒基准获取原理,将秒s表示成频率厂的函数
nload="javascript:if(>740)=740" align=center border=0>
其中m是程序中进入秒计、数模块的次数,当程序不间断地正常运行时它不会引人误差,程序发生异常导致软件复位时则会引入看门狗复位延迟误差,这将在后面再单独讨论。这里,溢出次数n经过上述的取整处理后已经把舍入误差转移到晶振的频率误差上,因此,公式(4)中可能产生误差的变量就只有f了,取微分得
nload="javascript:if(>740)=740" align=center border=0>
f1为晶振在电路上的实际振荡频率,选取获得标准秒的匹配值no=874,fo=3579904Hz,此时的误差
nload="javascript:if(>740)=740" align=center border=0>
公式(6)给出了该电子钟系统在程序取定理论值九和no进行正常运行而晶振有△f的偏差时造成的走时误差。根据时间连续性原理,该误差会不断积累,当m=3600时的累积误差为时差,当m=24x3600时的累积误差为日差。
此外,单片机在运行过程中还可能会遭遇电磁干扰,导致单片机系统的看门狗复位,程序不能在正确时刻更新各计数单元值而引人延迟误差。PIC单片机内部具有独立的硬件看门狗(WDT)ms)模块,当程序发生异常时没有在其溢出时间内(典型值为18清除WDT计卜数器,就会导致WDT复位,同时触发内部复位模块的芯片复位定时器(DRT),经过一定的时间后(典型值为18才转入正常运行状态。可见,PIC单片机的WDT复位虽未改变通用RAM单元的数值,但它每次带人了约36ms的延迟误差。在干扰严重的场合,WDT的频繁复位将会造成相当可观的走时误差,因此必须设法补偿该项误差。
2.误差修正
根据上面的分析,电子钟的走时误差由两大部分组成,即晶振频率误差和看门狗复位延迟误差。二者性质不同,需要分别处理,以达到对综合误差控制的目的。
1个晶振安装到电路板上与一定的电容进行匹配之后,它的频率就是固定的,误差也是固定的。单个这样的电路系统配以特定的程序,可以很方便地进行修正,如利用国家授时中心的报时信号定期进行自动校准[l],或者利用吞吐脉冲技术来补偿晶体振荡器的固有偏差而实现高精度时钟[31]。而实际上每个晶振在电路板上实际振荡频率可能都不相同,因而好就不尽相同,由此造成的走时误差也是不确定的。在进行大批量生产时,不可能根据每种晶振实际频率来修改程序代码中的参数进行误差修正。目前一种硬件修正的做法是,根据设计误差指标确定△f,然后利用电容与晶振进行匹配可以调整振荡频率的原理来筛选晶振和匹配电容,使得此时的实际频率在△f的范围内。然而此方法可调整的频率范围十分有限(一般只有几十ppm的调整频差),并且生产过程还需增加工序以测量每个晶振的实际频率,并分拣其匹配电容。
为此,笔者采用软件修正的方案。由于具有相同标称值的任一晶振与某个标称值的电容进行匹配之后其实际振荡频璋针;必然落在某个区间内,根据实验经验估计该频率区间为儿Hz,然后按匀三100Hz将式离散化成31个值,分别计算每个关对应的误差,并给出相应修正参数。程序中预设31种修正方案,并通过一个连接于单片机RB口的拨码开关(5位)进行选择。电子钟产品在生产线上、进行测试时,根据高精度频率计测得晶振在电路上卜的实际工作频率,然后决定拨码开关状态选择合适的修正方案。经过这样一次性标定以后,电子钟每次加电时都会自动选择相应的修正参数,从而实现同一程序对不同误差的控制。使用该方案修正后,由于仍存在频率离散误差△fmax50Hz,但折合日误差不大于
nload="javascript:if(>740)=740" align=center border=0>
以上讨论的是对晶振频率误差的修正。对于看门狗复位延迟误差,由于WDT溢出时间和DRT定时时伺都不是精确值,并与电源电压、工作环境温湿度等因素有关,因此无法进行精确的补偿,只能根据其典型值来进行粗略修正。程序中利用一个存放在RAM的变量记录看门狗复位次数,按每次引入复位延迟误差36ms的典型值估算,28次看门狗复位启就追加1s。这样处理之后就可以大大地减少走时误差,提高电子钟在恶劣环境下的走时精度。
3.计算和实验
在实验中,晶振使用标称值为3579545Hz的石英晶体振荡器,系统工作在电源电压为6V、温度为室温25℃的环境下,测得实际频率平均值为f1=3579810Hz.根据公式(6)的误差模型,取fo=3579904Hz,no=874,则计算得
nload="javascript:if(>740)=740" align=center border=0>
(6)
即修正前旧误差为2.26866s(慢)按照上述的软件修正原理,对于该系统重新标定后,程序自动选取修正方案使秒单元数值每12h追加1s,这样可使其精度达到每日误差小于1s。实验时分别让修正前和修正后的电子钟连续工作3天,记录它们的平均日误差,结果与上面的计算值基本相符。远远优于日差小于3s的设计要求。
四、结论
该电子钟设计方案理论联系实际,紧密结合生产过程工艺进行优化,获得了较高的性价比。本文推导出的走时误差模型以及以此为依据进行误差的软件修正,经过了实验的验证。产品已在某微型车上获得应用。该误差模型对于其它单片机应用定时器时的误差定量分析与控制也具有参考意义。