延时继电器定时算法研究

2011-06-02 01:33贵州师范大学李国龙
电子世界 2011年12期
关键词:初值中断延时

贵州师范大学 李国龙

一、国内目前采用的定时方法

目前国内用来定时的方法主要有以下几种方法:

(1)RC电路的充、放电。这种电路定时精度较低、成品体积较大、调试比较麻烦。

(2)定时芯片。这种电路精度较高,灵活性差,通用性差。

(3)单片机做定时。这种电路实用性强、灵活性好、调试方便、定时范围宽。但是算法设计是否科学将直接影响定时精度的高低,本文以产品成本和定时精度为考虑要素,折中选择价格低廉具有制动重载功能和内部振荡器的ATTINY 13为例,通过改进定时算法来提高定时精度。旨在实现低成本高精度的需求。

二、定时误差来源

(1)振荡器本身误差

由图2-1和图2-2得知影响内部RC振荡器精度主要由ATTINY 13的工作电压和工作温度,而ATTNY13出厂时是在5v、25oC条件下校正的。为了能提高产品在任意温度下的定时精度,就要知道产品工作电压,和工作温度然后对RC振荡器校正,但是即便进行校正后精度也不能太高,太高会导致校正失败一般可以将精度校正到±1%.如果要使用更高精度定时,则推荐用无源晶振加非门做振荡器,或者用有源晶振,这样一来产品成本会有所提高。

(2)定时算法带来误差

传统的定时算法大致会经过如图2-3所示。定时器溢出后,主程序可能正在执行某条指令,执行完这条指令需要的时间为T1,经T1时间后可以响应中断,但在这个过程中可能会有比定时中断更高级的中断申请,如果有则执行高级中断,经过T2后高级中断结束进入定时中断,经T3后定时器/计数器加载初值成功,开始启动下一次定时。经过以上分析得知T1和T2是随机误差,其值是不可预知,而T3是进入定时中断后装载定时初值耗费的时间,它的值是固定的。定时误差为T1+T2+T3,如果能有效减小T1、T2就能达到减小误差提高精度的目的。

三、减小误差方法

(1)RC振荡器校正

对于RC振荡器的校正可以利用STK5OO,AVRISP,JTAGICE和JTAGICE mkIIAVR校正工具,校正程序可以到ATMEL官方网站下载,校正流程可以参考下面说明(该说明译自ATMEL):

1)下载AVRO53的源代码。

2)安装AVR Studio 4.11 SP1。

3)创建工程名为rc_calib,添加源文件RC_Calibration.asm到工程中。

4)在RC_Calibration.asm中选择目标单片机所需的文件,不需要的文件用“;”屏蔽掉。

5)选择接口,和选择目标单片机所需文件方法一样。

作为综述类的研究,本文仅对国内旅游者行为研究的发展脉络及研究成果进行了述评,未来应对国内外旅游者行为研究的走向和侧重点进行对比分析,发现国内外旅游者行为研究的共性与个性,以探求旅游者行为研究的新动向与新领域。

6)校正时钟频率使用频率计或者晶体振荡器作为校正源。校正源的时钟信号出现在STK5OO/AVRISP的MOSI引脚,或者JTAG ICE的TDI引脚。在接口文件的“.EQU CALIB_CLOCK_FREQ=XXXX”语句中来修改XXXX作为所需标称频率值。

7)指定用户系统期望的频率和精度。精度太高会可能校正失败,需要参考数据手册查看能达到的精度。

8)编译工程生成hex二进制文件。

目前国内生产的晶体振荡器精度已经具有较高精度,受温度影响也非常小,一般都不需校正都能实现高精度的定时,但是相应的成本会有所提高,在精度要求非常高的产品中可以考虑使用外接晶振方式。

(2)延时算法设计

1)自动重载补偿

利用定时器O自动重载功能补偿T1和T2其算法流程如图3-1所示。定时/记数寄存器(TCNRO)初始化设定为256-t×fosc/n(t为特定定时时间,n为分频数,fosc为RC振荡频率)。当进入第一次中断后就需要补偿T1,T2,T3将TCNRO的初值设定为256-t×fosc/n+定时器重载值(该值等于(T1+T2)×fosc/n用于补偿T1和T2的消耗)+设定初值所耗费的时钟个数(用于补偿T3的消耗)。重载记数值为定时器重载到设定初值这段时间内的记数值。

以下是ATTINY 13定时器部分参考程序代码,内部RC振荡频率为4.8M,定时时间为O.O5S。值得一提的是:在此模式下的定时算法的定时精度跟TCNTO设定的值有关系,在振荡频率一定时TCNTO的值越小能定时时间越长精度越高。由于定时器记数器O为8位定时器,在振荡频率为4.8M采用1O24分频的时候最大定时时间为54.4mS考虑定时计算方便和定时精度,参考程序折中选择5OmS作为定时时间。还需注意的是:在有高级中断产生时一定要保证运行完成高级中断的时间小于单次规定的定时时间,否则会出现较大误差。

就参考代码而言如需要定时的时间大于5OmS,比如说1S定时,可以在进入中断函数2O次后响应一次任务代码。

2)采用ATTINY 13的CTC模式重载立即定时

此模式下是将定时记数的最大值存放在定时比较寄存器(OCROA)当TCNTO的值与比较寄存器(OCROA)值相等时,如果相应的中断允许下就会产生中断,TCNTO会立即清零、立即开始记数。在这种模式下产生的中断不会产生T1、T2、T3误差,定时精度基本上只取决与振荡器。OCROA设置的值=t×fosc/n.

以下是ATTINY 13定时器部分参考程序,内部RC振荡器振荡频率为4.8M,定时时间为O.O5S。在此模式下定时值得注意的是:在有高级中断产生是一定要保证运行完成高级中断的时间小于OCROA规定的定时时间,否则会出现较大误差。

就参考代码而言如需要定时的时间大于5OmS,比如说1S定时,可以在进入中断函数2O次后响应一次任务代码。

TCNTO=OXOO; //计数器从O开始记数,自动重载值也为O

3)进一步调节

在以上算法的基础上,为了进一步提高精确度,可以在进行这一步调节。在某一段时间tx内如果定时误差为±ter则没当定时器定时为tx±ter时进行一次校正,在自动重载算法下TCNTO设置规则TCNTO=256-t×fosc/n±(tr×fosc),在CTC模式下将OCROA 的设定规则OCROA= t×fosc/n ±(tr×fosc)。

四、结论

笔者通过上述算法采用avr芯片自带的RC振荡器做1S定时,9O分钟时间内定时器定时54O4S误差4S精度达到O.O74%.当然还可对此定时精度做进一步调节提高定时精度。这种算法可用在动作延时、释放延时、限时定时、重复循环定时延时继电器中可以提高延时继电器动作精度,减少继电器成品体积,降低产品投入成本。当然也可以将此算法应用到其他需要较高定时精度的用途。定时时间的调节只需要修改烧录的程序,调节方便、灵活性好、实用性高。

[1]于正林,苏成志.AVR单片机原理及应用[M].国防工业出版社.

[2]沈文,Eagle Lee詹卫前.AVR单片机C语言入门指导[M].清华大学出版社.

[3]Attiny 13用户手册[S].

猜你喜欢
初值中断延时
具非定常数初值的全变差方程解的渐近性
一种适用于平动点周期轨道初值计算的简化路径搜索修正法
基于级联步进延时的顺序等效采样方法及实现
日光灯断电关闭及自动延时开关设计
三维拟线性波方程的小初值光滑解
跟踪导练(二)(5)
千里移防,卫勤保障不中断
Two-dimensional Eulerian-Lagrangian Modeling of Shocks on an Electronic Package Embedded in a Projectile with Ultra-high Acceleration
桑塔纳车发动机延时熄火
具有无穷大初值的二维奇异摄动问题的渐近解