跳转到主内容
Knowledgebase
Home
Renesas Electronics China - Knowledgebase

定时器计数器基本知识 [通用]

最新更新:2011年10月 06日

Question:

定时器计数器基本知识 [通用]

Answer:

下面介绍了定时器计数器的基本知识。

(1) 引言

近几年,几乎所有的微控制器都有定时器计数器。
有些是具有特殊应用的,如变频器控制,不过下面描述的是一般类型的定时器计数器。
"定时器计数器"这个名字表示了以下两个功能的结合: 定时器和(事件)计数器。
定时器和计数器功能基本上都是使用相同的逻辑实现的,而且这两个功能都包含输入的计数信号。
下面简单概括了定时器与计数器的差别。

计数器: 计数并指示在任意间隔内输入信号(事件)的个数。



定时器: 对规定间隔内输入的信号个数进行计数,用来指示经历的时间。



换句话说,定时器和计数器功能在使用对象和输入的信号方面不相同。
几乎在所有情况下,可以从内部系统时钟划分出来的时钟信号或是外部输入时钟信号中选择输入的时钟信号,这些时钟信号可以用于定时器或计数器。

(2) 根据计数器操作不同进行分类

根据计数功能不同,定时器计数器大致可以分为以下几类。
- 执行简单计数操作的自由运行的计数器
一旦启动计数操作,它就一直保持运行。
有时候,不能停止计数操作。

- 计数期间可以停止的计数器,并且可以设置为任意计数周期
当计数器达到某个确定值时,可以输出信号、将计数值清零,或者停止计数器操作。
自由运行的计数器逻辑更简单,所以有时它们会用在比较便宜的微控制器中。
尽管可以停止钟表定时器,但在正常操作期间一般不需要停止(因为会产生时序问题),所以大多数操作都和自由运行的计数器一样。
不过,可以为微控制器设计各种方便使用的方法,包括可以在任何时候对定时器停止操作或清零。

(3)定时器计数器的附加功能

当定时器计数器仅用于计数时,应用有一定局限性。
增强定时器计数器功能的一种方法是增加一个或两个寄存器。
一般,添加的寄存器是:

- 比较寄存器
- 捕捉寄存器

有时候,也使用单独的寄存器,但一般是一个比较寄存器和一个捕捉寄存器交替使用。

比较寄存器用于设置与定时器计数器的计数值相比较的值。
当比较寄存器中设置的值与计数值匹配时,会产生以下操作:

- 发出中断
- 修改输出电平
- 对定时器清零

在使用这类操作时,在任何时间间隔(基于定时器计数器时钟的精确度)都可能会产生中断或者修改信号电平。



从外部输入源输入信号时,捕捉寄存器用于捕捉定时器计数器的计数值。
该操作由硬件实现,因此捕捉的定时器计数器的值比用软件读取的更准确。



(当用软件执行类似操作时,从外部输入信号时会产生中断,由中断服务程序调用捕捉定时器计数器值的功能。
通常,在中断产生后,由于响应中断,时序会发生一些变化。
有时候也需要中断服务程序读取定时器计数器的值。
因此,捕捉的值与影响外部输入信号的实际时序值有所不同。)

(4)定时器计数器的用途(操作)

(a)定时器计数器主要用于测量和输出,包括以下用途(操作)。

[1] 测量功能
- 外部事件计数器
- 脉冲宽度测量,时间间隔测量

[2] 输出功能
- 间隔定时器
- 方波输出
- 脉冲输出
- PWM输出
- 单脉冲输出
- 载波生成


(b)具体功能描述

- 外部事件计数器
对外部输入的信号(事件)进行计数是定时器计数器最简单的一种操作。
定时器计数器可以对已经输入的信号进行计数,并且通过程序可以定期读取计数值。
下面图示的例子是对每10分钟内到达的人数进行计数。



另一种用法是将定时器计数器与比较寄存器结合使用,当外部信号(事件)的个数达到规定值(这时会产生中断)时汇报情况。
例如,当最大容量为24个苹果的盒子里装满24个苹果时定时器计数器可以汇报这一情况。
在下面图示的例子中,设置比较寄存器(数值为1~24),并当计数器的值(0~23)达到苹果个数时产生中断。
产生该中断时,就用一只空盒子替换这只已经装满的盒子。



- 脉冲宽度测量,时间间隔测量
该功能用于测量外部输入信号(事件)之间的间隔,这是捕捉寄存器的基本用途。
下面图示的例子用于检测电机的rpm(每分钟转数)。
光遮断器用于检测装在电机转轴上的圆盘中的空槽。
光遮断器的输出信号是外部输入信号(事件),用于捕捉操作的触发输入。
每次输入触发信号时,捕捉计数值,并装入捕捉寄存器,然后将计数器清零。
可以从捕捉寄存器中读取该值以确定旋转次数,这样可以计算出rpm。



- 间隔定时器
间隔定时器
该功能在规定的间隔会产生中断,是定时器最简单的一种操作。
该操作使用比较寄存器。
只要定时器计数器的值与比较寄存器的值匹配就会产生中断,并对定时器计数器清零,再次从零开始计数。
反复执行该操作,可以在规定的时间间隔设置中断的发生。



- 方波输出
方波输出的基本操作与间隔定时器相同。
唯一的区别是输出了方波。
在下面的例子中,每当定时器计数器的值与比较寄存器设置的值匹配时就产生中断,在将定时器输出取反后,重复操作。



- 脉冲输出
与方波输出功能不同,脉冲输出功能不仅可以改变周期还可以修改占空比。
实现该功能要使用两个比较寄存器: 一个用于指定周期,另一个用于指定占空比。
这两个比较寄存器的用法不同。
当定时器计数器的值与设置周期的比较寄存器的值匹配时,可以将该定时器计数器清零,但当它与设置占空比的比较寄存器的值匹配时,修改输出但定时器计数器不清零。
一旦定时器计数器的值与某个比较寄存器的值匹配,就会发出中断请求。
下图是一个脉冲输出操作的例子。
可以使用该功能输出方波,与下面描述的PWM输出功能相似。
使用脉冲输出,为了改变占空比而修改比较寄存器的值时,可能会出现时序问题。
时序不正确时,与设置占空比的比较寄存器的两次匹配(或者根本就不匹配)可能出现在同一个周期内,从而产生不期望出现的定时器输出的取反操作。



- PWM输出
虽然这种操作产生与脉冲输出操作相同的方波,但它的主要目的是修改占空比。
通常,PWM输出周期是固定的,由定时器计数器的位计数决定周期。
在这种情况下,使用一个比较寄存器来指定占空比。
与脉冲输出不同,PWM输出有明确的目的,这样在修改占空比时对比较寄存器写入时序没有约束。
下图显示了操作时序。
这里显示的是初始启动操作时序。
刚启动时在第一个周期输出是不活跃的(图中的低电平)。
当定时器计数器溢出时,输出是活跃的,而当定时器计数器与比较寄存器匹配时输出又变为不活跃的。
通过重复该操作输出PWM信号。



下图示例说明了为了修改占空比重写比较寄存器值的情况。
尽管在周期内用"n"覆盖"m",但操作结果并没有受影响,直到产生下一个溢出。



尽管有些定时器计数器可以修改周期,但在这种情况中周期结束是指与设置周期的比较寄存器匹配的时候,而不是定时器计数器溢出的时候。

- 单脉冲输出
与上面例子中描述的连续重复的输出功能相反,该功能仅输出单脉冲。
该功能使用两个比较寄存器。
一个用于指定产生触发与输出脉冲之间的时间,另一个用于指定脉冲宽度。
下面的时序图描述了该操作过程。
当外部输入触发信号时,将定时器计数器清零,并从零开始重新计数。
当定时器计数器的值与指定输出时序的比较寄存器的值(m)匹配时,通过定时器输出脉冲。
当定时器计数器的值与指定脉冲宽度比较寄存器的值(n)匹配时,停止脉冲输出。



- 载波生成
该功能用于产生红外遥控操作信号,需要两个定时器计数器结合使用。
由于该功能是定时器计数器的应用而不是定时器计数器本身的操作,所以它和其它功能有本质区别。
红外遥控以载波频率通过发出ON/OFF序列的红外线进行操作。
因此,使用一个定时器计数器来产生与载波频率匹配的信号(通过脉冲输出操作)。
另一个定时器计数器对红外遥控信号(间隔定时器操作)的长度(时间)进行计数。
指示已经经历了规定时间的间隔定时器的输出信号用于采样遥控输出信号。
当采样结果为"1"时输出载波,为"0"时不输出。
下面的时序图描述了该操作过程。
在这个例子中,已经由一个定时器计数器生成了载波信号。
当产生匹配中断时,用于间隔定时器操作的比较寄存器的值被重写,而且以k (OFF时间)、m (ON时间)然后n (OFF时间)的顺序被设置。
[1]  当k匹配时,采样输出数据值(1)。
[2]  由定时器输出启动载波信号输出。
[3]  在匹配发生后产生的中断服务中将"m" 写入到比较寄存器,将"0"写入到输出数据。
[4]  当m匹配时,采样输出数据值(0)。
[5]  停止载波信号输出。
[6]  在匹配发生后产生的中断服务中更新比较寄存器,并输出数据值。
重复上述操作执行该操作。

Suitable Products