定时器

  定时器是装有时段或时刻控制机构的开关装置。它有一个频率稳定的振荡源,通过齿轮传动或集成电路分频计数,当将时间累加到预置数值时,或指示到预置的时刻处,定时器即发送信号控制执行机构。

 

分类

  定时器根据工作原理可以为以下:

  1、 接通延时型定时器:接通延时型定时器是各种PLC中最常见最基本的定时器,这种定时器在 SIEMENS的PLC中,称为SD型定时器

  2、 断开延时型定时器:这种定时器是当输入条件00000为ON时无延时作用,只有在输入条件00000为OFF时产生延时作用。在SIEMENS的PLC中,称为SF型定时器

  3、保持型接通延时定时器:这种定时器是当输入条件00000为ON后,即产生锁存功能,即使输入条件00000又变为OFF,仍视输入条件为ON,当定时器的当前值等于设定值时,定时器动作,这种定时器在SIEMENS的PLC中,称为SS型定时器

  4、脉冲型定时器:这种定时器是当输入条件00000为ON后,定时器即时动作,但经过定时器所设定的时间后,即使输入条件00000仍为ON,定时器却变为OFF状态。即这种定时器ON状态的维持时间是由设定值决定的。如果00000为ON的时续时间小于定时器的设定值,定时器的ON状态维持时间为输入条件00000为ON的持续时间。这种定时器在SIEMENS的PLC中,称为SP型定时器。

  5、扩张型脉冲定时器:这种定时器与脉冲型定时器的区别是,只要输入条件00000出现了ON状态,不管其持续时间多长,均可使定时器为ON的维持的时间与定时器的设定值一致。这种定时器在SIEMENS的PLC中,称为SE型定时器。

  定时器按结构可分为机械式、电动式和电子式:

  1、机械式定时器  以发条为原动力,用擒纵调速器控制走时精度,通过齿轮传动和凸轮,按时间控制机构预置的时段操纵执行机构动作。计时精度要求不高的定时器(如风扇定时器、洗衣机定时器、厨房用定时器、照相暗房用定时器、电视机控制用定时器、电灯开关定时器),一般采用无固有振动周期的调速器。这些定时器都是在手动上发条的同时预置时限,定时精度不高,但结构简单,使用方便。计时精度要求高、定时范围在3~12小时的定时器,一般采用摆轮游丝调速器。

  2、电动式定时器  用交流同步电动机或石英步进电机驱动,通过齿轮传动和凸轮簧片触点机构,按预置的时段或时刻控制执行机构。其中短时段控制的电动式定时器可用于程序控制式洗衣机、洗碗机、微波炉、烘箱及时间继电器等;长时段电动式定时器是一种24小时或7天程序控制的开关装置,可预置开关动作多次,最短时间控制间隔一般为15分钟,可用于用户用电情况监控、照明控制、实验室装置控制、空调器控制和自动生产线上某些设备的定时控制等。

  3、电子式定时器  利用石英振荡器或民用交流电的标准频率,经过分频计数组成时间累加器或数字钟,按照预置的时间编码输出控制信号。这种定时器走时精确,时间设定没有误差,定时精度高,控制程序多。其中长时段定时器最小控制时段一般为1分钟,配上微处理器后能精确地编制一年的时间程序,组成多路可编程序的定时器。电子式定时器在工业自动化控制系统中应用广泛,它也是节约能源管理中一种有效的技术措施。电子定时器类的电子定时开关钟,可用于按高、平、低峰用电收取不同电费制度的场合,它将一天内的用电高峰、平峰、低谷时间在定时开关中设定,并分别接通3种电表进行计费。电子式定时器在科学实验中和在微波炉、电饭锅、洗衣机等电器中也有使用

基本操作

  F2810/F2812器件上有3个Q9位CPU定时器(TIMERO/1/2)。只有定时器1和2预留给实时操作系统DSP/BIOS使用,只有定时器0可以在就用程序中使用,定时器的功能如图1所示。

定时器功能框图

  图1 定时器功能框图

  若处理器采用30 MHz的外部时钟,经过锁相环10/2倍频后,系统的时钟工作在150 MHz。图中的定时器选择SYSCLKOUT作为定时器时钟,工作频率也是150 MHz。一旦定时器被使能(TCR-Bit 4=0),定时器时钟经过预定标计数器(PSCH:PSC)递减计数,预定标计数器产生下溢后向定时器的32位计数器(TIMH:TIM)借位p定时器计数器产生溢出使定时器向CPU发送中断。定时器中断结构如图2所示。

  每次预定标计数器产生溢出后使用分频寄存器(TDDRH:TDDR)中的值重新装载。同样,32位周期寄存器(PRDH[_]PRD)为32位计数器提供重新装载值。

定时器中断结构

  图2 定时器中断结构

比较操作

  每个通用定时器都有一个比较寄存器TxCMPR和一个PWM输出引脚TxPWM。通用定时器计数器的值一直与相关的比较寄存器的值比较,当定时器计数器的值与比较寄存器的值相等时,就产生比较匹配。可通过TxCON[l]位使能比较操作,产生比较匹配后将会有下列操作(如图所示)。

  ●匹配1个时钟周期后,定时器的比较中断标志位置位。

  ●匹配1个CPU时钟周期后,根据寄存器GPTCONA/B相应位的配置情况,PWM的输出将产生跳变。

  ●如果比较中断标志位已通过设置寄存器GPTCONA/B中的相应位启动A/D转换器,则比较中断位置位的同时产生A/D转换启动信号。

  ●如果比较中断未被屏蔽,将产生一个外设申断申请。

通用定时器比较操作功能框图

  图 通用定时器比较操作功能框图

误差补偿方法

  1 前言单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。

  2 误差原因、大小及特点产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。

  2.1. CPU正在执行某指令时的误差及大小由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的值为执行该指令所需的时间。由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。如定时器溢出中断时,CPU正在执行指令MOV A, Rn,其误差为1个机器周期。而执行指令MOV Rn, direct时,其误差为2个机器周期。当CPU正在执行乘法 或除法指令 时,时间误差可达4个机器周期。在8051单片机指令系统中,多数指令的指令周期为1~2个机器周期,因此时间误差一般为1~2个机器周期。若振荡器振荡频率为fosc,CPU正在执行指令的机器周期数为Ci,则时间误差为Δtmax1=12/fosc×Ci(us)。例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的时间误差为: Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs)

  2.2 CPU正在执行某中断服务的程序时的误差及大小定时器溢出中断信号时,若CPU正在执行同级或高优先级中断服务程序,则它仍需继续执行这些程序,不能及时响应定时器的溢出中断请求,其延迟时间由中断转移指令周期T1、中断服务程序执行时间T2、中断返回指令的指令周期T3及中断返回原断点后执行下一条指令周期T4(如乘法指令)组成。中断转移指令和中断返回指令的指令周期都分别为2个机器周期。中断服务程序的执行时间为该程序所含指令的指令周期的总和。因此,时间误差Δtmax2为: Δtmax2=(T1+T2+T3+T4)12/fosc=(2+T2+2+4)12/ fosc=12(T2+8)/ fosc若设fosc=12MHZ,则时间误差为: Δtmax2=12(T2+8)/ fosc =12(T2+8)/12×106=(T2+8)×10-6(s)=T2+8(μs)。由于上式中T2一般大于8,因此,这种时间误差一般取决于正在执行的中断服务程序。当CPU正在执行中断返回指令RETI、或正在读写IE或IP指令时,这种误差在5个机器周期内。

  2.3 误差非固定性特点定时器溢出中断与CPU响应中断的时间误差具有非固定性特点。即这种误差因CPU正在执行指令的不同而有相当大的差异。如CPU正在执行某中断服务程序,这种误差将远远大于执行一条指令时的误差。后者误差可能是前者误差的几倍、几十倍、甚至更大。如同样只执行一条指令,这种误差也有较大的差别。如执行乘法指令MUL AB 比执行MOV A, Rn指令的时间误差增加了3个机器周期。这种误差的非固定不仅给误差分析带来不便,同时也给误差补偿带来困难。

  3 误差补偿方法由于定时器产生溢出中断与CPU响应中断请求的时间误差具有非固定性,因此,这种误差很难用常规方法补偿。为此,本文介绍一种新方法。现介绍该方法的基本思路、定时器新初值及应用情况。

  3.1 基本思路为使定时器溢出中断与CPU响应中断实现同步,该方法针对中断响应与中断请求的时间误差,对定时器原有的计数初值进行修改,以延长定时器计数时间,从而补偿误差。在该方法中,当定时器溢出中断得到响应后,即停止定时器的计数,并读出计数值。该计数值是定时器溢出后,重新从OOH开始每个机器周期继续加1所计的值。然后,将这个值与定时器的停止计数时间求和。若在定时器原计数初值中减去这个和形成新计数初值,则定时器能在新计数初值下使溢出中断与CPU响应中断实现同步,从而达到误差的补偿要求。

  3.2 定时器新计数初值若定时器为计数方式,操作方式为1,则计数器初值X0=216-t0×fosc/12。式中fosc为振荡器的振荡频率。t0为需要定时的时间,也为中断的间隔时间。X0为定时器原计数初值。在对定时器溢出中断与CPU响应中断时间误差进行补偿时,定时器的新计数初值X1为:X1=216-t3× fosc/12t3=t0+t1+t2式中t0为中断间隔时间。t1为定时器停止计数时间,该时间为定时器停止计数到重新启动计数之间所有程序指令周期数的总和。t2为定时器溢出中断后,重新从OOH开始直至计数器停止时计的值。在误差补偿中,若将定时器计数初值X1取代X0,则可使定时器下次的溢出中断与CPU响应中断实现同步。

  3.3 实例要求补偿定时器每1ms产生一次溢出中断时的中断响应延迟的误差。若振荡器振荡频率fosc=12MHZ,定时器工作在计数方式,工作模式为1,则补偿中断响应时间误差时的定时器新初值X1为:X1=216-t3× fosc/12=216-(t0+ t1)- t2=216-(1000+ 13)- t2误差补偿程序为: …… 0 CLR EA ;关CPU中断1 CLR TRi ;停止定时器计数2 MOV R0, #OOH ;R0清零3 MOV R0, #LOW(216) ;定时器计数值的低8位送R04 MOV A, R05 SUBB A, #LOW(1000+13) ;216的低8位减去( t0+ t1)的低8位送累加器A6 SUBB A, TLi ;216的低8位减去( t0+ t1+ t2)的低8位送TLi7 MOV TLi, A 8 MOV R0, #OOH ;R0清零9 MOV R0, #HIGH(216) ;216 的高8位送R010 MOV A, R0 11 SUBB A, #HIGH(1000+13) ;216的高8位减去( t0+ t1)的高8位送A12 SUBB A, THi ;216的高8位减去( t0+ t1 +t2)的高8位送A13 MOV THi, A14 SETB TRi ;重新启动定时器 …… 在上式和上段程序中,由于fosc=12MHZ,中断间隔时间为1ms,因此t0的机器周期数为1000。由于第1条指令到第14条指令的指令周期的机器周期数之和为13,因此,t1为13个机器周期。CPU虽在执行条指令CLR TRi 后停止定时器计数,但在TLi、THi中分别保存了t2的低位数据和高位数据。 4 结束语由于本文介绍的误差补偿方法能对定时器溢出中断与CPU响应中断的非固定性时间误差进行有效补偿,因此,该方法对于提高高频控制系统实时控制精度和扩大单片机应用范围都有较高的实用价值。

相关百科