如何在AVR MCU上选择定时器 (Timer)
阅读本文可以详细了解 AVR® 微控制器 (MCU) 上不同的定时器周边,以及如何为您的应用选择最佳的选项。
探索微控制器定时器的多样性
定时器是微控制器中常见的周边,每个定时器都有自己的优点和缺点。有些定时器被设计用作波形产生的一部分,有些则非常适合脉冲计数,而选择何种定时器取决于在各种情况下的需求和可用的资源。
定时器/计数器A 型 (TCA)
TCA 是一款针对产生脉宽调变 (PWM) 优化的定时器。它可以在 16 位模式下运行,以获得高分辨率输出,也可以在 2x 8 位模式下运行,其中定时器的任何一半皆可独立运行。 计数器则持续运作直到计数至 TOP 值。在这种情况下,计数器将重置为BOTTOM值 (零),而双斜率模式除外。在双斜率模式下,计数器不会重置为零,而是向下计数至零来重置周期。 如下图 1 所示。
为了产生 PWM,有比较通道检查计数器是否符合或超过设定值。如果条件符合,相关的输出就会变高。该定时器还支持双缓冲,其中写入计数器的值将被保留,直到定时器触发更新,但会因操作模式而异。借助事件系统 (EVSYS),可以实现更进阶的控制。例如,事件系统可用于闸控输入、对事件边缘进行计数、控制计数方向 (向上或向下) 以及在各种条件下重新启动定时器。
定时器/计数器B型 (TCB)
TCB 是一款针对计时 (Timing) 和撷取 (Capture) 进行优化的 16 位定时器。 TCB 可以在周期中断模式下运行,中断在固定间隔发生。逾时检查模式类似,只是定时器可以透过 EVSYS 输入重置。 TCB 也可以作为单次定时器运作。对于较长时间段,RTC/PIT 可能是比 TCB 更好的选择。
撷取模式是指定时器“撷取”定时器内计数的能力。可以做很简单的运用,例如自由运行的定时器上发生输入时,撷取两个上升沿之间的时间长度 (频率测量) 或脉冲长度 (脉冲宽度测量)。此外,两个 TCB 可以一起使用来创建真正的 32 位计数器,以实现高精度测量。
TCB 也可用作 8 位 PWM 产生器,如 TCA 中的单斜率模式。
定时器/计数器D型 (TCD)
TCD 是一款 12 位定时器,经过优化,可产生复杂的 PWM 波形,例如半桥和全桥输出。 TCD内部有两个比较器:CMPA和CMPB。每个比较器都有一个 SET 值和一个 CLR 值。当计数达到 SET 时,输出处于作用中状态。然后,当达到 CLR 时,输出将被停止。
TCD 支持四种操作模式:一斜坡、二斜坡、四斜坡和双斜坡。这些名称代表计数器经历的周期数。四斜坡模式经历四个周期,依序重置 CMPASET、CMPACLR、CMPBSET 和 CMPBCLR。两个斜坡模式经历两个周期,依序在 CMPACLR 和 CMPBCLR 上重置。一斜坡模式仅在 CMPBCLR 上重置。最后,双斜率模式向上计数到 CMPBCLR,然后向下计数到零。为了便于观察目的,下图的每个斜坡末端都位于相同的位置;但是,当值不相等时,它们会有所不同。此外,未显示的值(例如:单一斜坡模式下的 CMPASET)仍然有效,但在此期间不发挥作用。
透过事件系统,TCD 还支持输入遮蔽、数字滤波和多种故障模式用于清除输出和/或暂停计数。 TCD 也可用于输入撷取。此外,TCD 可与 PLL (锁相环) 一起使用,使 TCD 能够以高于主频率的频率运作。
定时器/计数器E型 (TCE)及波形扩充 (WEX)
TCE 是一款针对计时和 PWM 生成进行优化的 16 位上下定时器。 TCE 是一个可逆定时器,这意味着它可以根据方向在每个输入上递增或递减。当 TCE 到达顶部时,载入的下一个值取决于该点的方向。如果它上升,那么它会滚动到零。相同地,如果此时方向为向下,计数器将卷动到 TOP,而方向变更为向上会使定时器开始递增。
为了防止定时器周期中间出现时序干扰,TCE 支持双缓冲,在比较操作发生时加载已变更的缓存器值。这允许使用者在定时器运行时进行更改。
TCE 具有多种用于产生波形的操作模式。这些模式与其他定时器的操作模式类似。例如,TCE 支持一般定时器操作,以及单斜率 PWM、双斜率 PWM 和频率产生。为了提高 PWM 的输出分辨率,TCE 具有高分辨率模式,可透过使用高速频率讯号来提高 PWM 的分辨率。为了充分利用此功能,此讯号的速度应至少比 CPU 速度快 4 倍。 TCE可以利用PLL来产生频率讯号。
此外,TCE 还与 WEX 整合。 WEX 让定时器产生互补输出、插入死区时间、建立输出样式并处理硬件中的故障讯号。
定时器/计数器F型 (TCF)
TCF 是一款经过优化的 24 位定时器,其作用类似于数控振荡器 (NCO)。 NCO 是一个数字模块,主要由累加器、加法器和增量组成。每个频率周期,都会将设定的增量加到累计总数中。当累加器溢位时,余数将转入累加器,并产生输出。PLL 可以与 TCF 一起使用 (如果配备的话)。注意:TCF与系统周边时钟是异步运行,提高了其灵活性;然而,这会导致读取定时器计数时出现延迟。因此,TCF 更适合用于频率生成,而不是精确计时。
在脉冲频率模式下,累加器输出用于设定输出,然后在固定数量 (由使用者设定) 的频率周期后,输出被清除。在固定占空比模式下,累加器输出讯号切换输出正反器,产生 50% 的占空比。
实时计数器 (RTC) 和周期性中断定时器 (PIT)
RTC 提供两种计时功能:实时计数器 (RTC) 和周期性中断定时器 (PIT)。两个接口设备共享相同的频率源:32.768 kHz 外部晶振,或内部超低功耗 32.768 kHz 振荡器,彼此独立运作。使用晶体振荡器时,RTC 可以修正高达 ±127 PPM 的误差。频率源可以透过 15 位预分频器按比例缩小。
RTC 可以在比较匹配和溢位时产生中断,而PIT 可以在2 的幂次频率周期 (例如,2/4/8/…/32768) 上产生中断。需要注意的是,RTC 和 PIT 中断不一定是同步的 (即同时发生)。 PIT 应该用于超低功耗应用,因为它是唯一在掉电模式下继续发挥作用的定时器之一,而 RTC 的功耗稍高一些,但支持更长的时间周期。对于 1 Hz 刻度时钟,RTC Timeout时间可以超过 18 小时。
看门狗定时器 (WDT)
WDT 是一个特殊的定时器,如果不定期清除,它将重置微控制器。它具有多个可选择的Timeout周期,并透过内部 1.024 kHz 振荡器运行,该振荡器源自于内部超低功耗 32.768 kHz 振荡器。 WDT 有两种模式:正常模式和窗口模式。在正常模式下,必须在计数匹配之前清除 WDT。然而,如果某种错误不断地清除 WDT,则定时器将不会侦测到故障。为了防止这种可能性,可以使用窗口模式。
在窗口模式下,WDT 清除必须在设定的延迟之后、定时器触发之前发生。如果清除得太早或太晚,将被视为 WDT 违规,并会触发微控制器的重置。 WDT 缓存器受到设定变更保护 (CCP) 功能和控制缓存器锁定的保护。这使得软件错误很难无意中更改 WDT 设定。 WDT 可以在所有电源模式下运作。
选择合适的定时器及了解更多信息
了解定时器周边后,可以轻松掌握选择最符合应用所需功能的定时器。在许多情况下,可能有多个的定时器可以执行该工作。你直接选择最简单的定时器——?让具有更多功能的定时器可供将来使用。要更详细地了解所有这些定时器的运作方式以及与其相关的缓存器可参考AVR MCU网站内数据手册、应用笔记和技术简介。使用特定定时器的程序代码范例可以透过搜寻 MPLAB® Discover网页找到 ( https://mplab-discover.microchip.com)。
本文作者为:Microchip应用工程师经理 蔡文杰
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码