AVR定时器的要点介绍.doc

上传人:hw****26 文档编号:3842468 上传时间:2019-08-07 格式:DOC 页数:5 大小:32.50KB
下载 相关 举报
AVR定时器的要点介绍.doc_第1页
第1页 / 共5页
AVR定时器的要点介绍.doc_第2页
第2页 / 共5页
AVR定时器的要点介绍.doc_第3页
第3页 / 共5页
AVR定时器的要点介绍.doc_第4页
第4页 / 共5页
AVR定时器的要点介绍.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、AVR定时器的要点介绍AVR定时器的要点介绍 (大部分摘自 M16 中文手册,未能一一测试) M16的 T1 16位定时器一共有 15种工作模式,其他 2个 8位定时器(T0/T2)相对简单,除了 T2有异步工作模式用于 RTC应用外 (可以利用溢出中断和比较匹配中断作定时功能) 分 5种工作类型 1 普通模式 WGM1=0 跟 51的普通模式差不多,有 TOV1溢出中断,发生于 TOP时 1 采用内部计数时钟 用于 ICP 捕捉输入场合-测量脉宽/红外解码 (捕捉输入功能可以工作在多种模式下,而不单单只是普通模式) 2 采用外部计数脉冲输入 用于 计数,测频 其他的应用,采用其他模式更为方便

2、,不需要像 51般费神 2 CTC模式 比较匹配时清零定时器模式 WGM1=4,12 跟 51的自动重载模式差不多 1 用于输出 50%占空比的方波信号 2 用于产生准确的连续定时信号 WGM1=4时, 最大值由 OCR1A设定,TOP 时产生 OCF1A比较匹配中断 WGM1=12时,最大值由 ICF1设定, TOP 时产生 ICF1输入捕捉中断 注:WGM=15 时,也能实现从 OC1A输出方波,而且具备双缓冲功能 计算公式: fOCn=fclk_IO/(2*N*(1+TOP) 变量 N 代表预分频因子(1、8、32,64、256,1024)。 3 快速 PWM模式 WGM1=5,6,7,

3、14,15 单斜波计数,用于输出高频率的 PWM信号(比双斜波的高一倍频率) 都有 TOV1溢出中断,发生于 TOP时 比较匹配后可以产生 OCF1x比较匹配中断. WGM1=5时, 最大值为 0x00FF, 8 位分辨率 WGM1=6时, 最大值为 0x01FF, 9 位分辨率 WGM1=7时, 最大值为 0x03FF,10 位分辨率 WGM1=14时,最大值由 ICF1设定, TOP 时产生 ICF1输入捕捉中断 (单缓冲) WGM1=15时,最大值由 OCR1A设定,TOP 时产生 OCF1A比较匹配中断(双缓冲,但 OC1A将没有 PWM能力,最多只能输出方波) 改变 TOP值时必须保

4、证新的 TOP值不小于所有比较寄存器的数值 注意,即使 OCR1A/B设为 0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平 计算公式:fPWM=fclk_IO/(N*(1+TOP) 4 相位修正 PWM模式 WGM1=1,2,3,10,11 双斜波计数,用于输出高精度的,相位准确的,对称的 PWM信号 都有 TOV1溢出中断,但发生在 BOOTOM时 比较匹配后可以产生 OCF1x比较匹配中断. WGM1=1时, 最大值为 0x00FF, 8 位分辨率 WGM1=2时, 最大值为 0x01FF, 9 位分辨率 WGM1=3时, 最大值为 0x03FF,10 位分辨率 WG

5、M1=10时,最大值由 ICF1设定, TOP 时产生 ICF1输入捕捉中断 (单缓冲) WGM1=11时,最大值由 OCR1A设定,TOP 时产生 OCF1A比较匹配中断(双缓冲,但 OC1A将没有 PWM能力,最多只能输出方波) 改变 TOP值时必须保证新的 TOP值不小于所有比较寄存器的数值 可以输出 0%100%占空比的 PWM信号 若要在 T/C 运行时改变 TOP 值,最好用相位与频率修正模式代替相位修正模式。若TOP保持不变,那么这两种工作模式实际没有区别 计算公式:fPWM=fclk_IO/(2*N*TOP) 5 相位与频率修正 PWM模式 WGM1=8,9 双斜波计数,用于输

6、出高精度的、相位与频率都准确的 PWM波形 都有 TOV1溢出中断,但发生在 BOOTOM时 比较匹配后可以产生 OCF1x比较匹配中断. WGM1=8时,最大值由 ICF1设定, TOP 时产生 ICF1输入捕捉中断 (单缓冲) WGM1=9时,最大值由 OCR1A设定,TOP 时产生 OCF1A比较匹配中断(双缓冲,但 OC1A将没有 PWM能力,最多只能输出方波) 相频修正修正 PWM 模式与相位修正 PWM 模式的主要区别在于 OCR1x 寄存器的更新时间 改变 TOP值时必须保证新的 TOP值不小于所有比较寄存器的数值 可以输出 0%100%占空比的 PWM信号 使用固定 TOP 值

7、时最好使用 ICR1 寄存器定义 TOP。这样 OCR1A 就可以用于在 OC1A输出 PWM 波。 但是,如果 PWM 基频不断变化(通过改变 TOP值), OCR1A的双缓冲特性使其更适合于这个应用。 计算公式:fPWM=fclk_IO/(2*N*TOP) T/C 的时钟源 T/C 的时钟源可以有多种选择,由 CS12:0控制,分别用于高速(低分频)/长时间(高分频)/外部计数场合 一个 16位定时器,在 8MHz系统时钟驱动下,可以实现 uS级的高速定时和长达 8秒的超长定时,这可是标准 51的弱点 CS12 CS11 CS10 说明 0 0 0 无时钟源 (T/C 停止) 0 0 1

8、clkIO/1 ( 无预分频) 0 1 0 clkIO/8 ( 来自预分频器) 0 1 1 clkIO/64 ( 来自预分频器) 1 0 0 clkIO/256 ( 来自预分频器) 1 0 1 clkIO/1024 ( 来自预分频器) 1 1 0 外部 T1 引脚,下降沿驱动 1 1 1 外部 T1 引脚,上升沿驱动 分频器复位 在高预分频应用时,通过复位预分频器来同步 T/C 与程序运行,可以减少误差。 但是必须注意另一个 T/C是否也在使用这一预分频器,因为预分频器复位将会影响所有与其连接的 T/C。 外部时钟源 由于使用了引脚同步逻辑,建议外部时钟的最高频率不要大于 fclk_IO/2.

9、5。 外部时钟源不送入预分频器 选择使用外部时钟源后,即使 T1引脚被定义为输出,其 T1引脚上的逻辑信号电平变化仍然会驱动 T/C1 计数,这个特性允许用户通过软件来控制计数。 输入捕捉单元 T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。 外部事件发生的触发信号由引脚 ICP1 输入,也可通过模拟比较器单元来实现。 时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。 输入捕捉单元可以工作在多种工作模式下 (使用 ICR1定义 TOP的(WGM1=12,14,10,8)波形产生模式时,ICP1 与输入捕捉功能脱开,从而输入捕捉功能被禁用。

10、) 在任何输入捕捉工作模式下都不推荐在操作过程中改变 TOP值 当引脚 ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出 ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发: 16位的 TCNT1 数据被拷贝到输入捕捉寄存器 ICR1,同时输入捕捉标志位 ICF1 置位。 如果此时 ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。 中断执行时 ICF1 自动清零,或者也可通过软件在其对应的 I/O 位置写入逻辑 1” 清零。注意,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果 除去使用 IC

11、R1定义 TOP的波形产生模式外, T/C中的噪声抑制器与边沿检测器总是使能的。 (其实就是永远使能?) 使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入 4个系统时钟周期的延迟. 噪声抑制器使用的是系统时钟,因而不受预分频器的影响 使用输入捕捉中断时,中断程序应尽可能早的读取 ICR1 寄存器 如果处理器在下一次事件出现之前没有读取 ICR1 的数据, ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。 测量外部信号的占空比时要求每次捕捉后都要改变触发沿。 因此读取 ICR1 后必须尽快改变敏感的信号边沿。改变边沿后,ICF1 必须由软件清零( 在对应的 I/O 位置写 1”)

12、。 若仅需测量频率,且使用了中断发生,则不需对 ICF1 进行软件清零。 输出比较单元 16位比较器持续比较 TCNT1与 OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。 然后 OCF1x 在下一个定时器时钟置位。 如果此时 OCIE1x = 1, OCF1x 置位将引发输出比较中断。 (就是说输出比较可以工作在所有工作模式下,但 PWM模式下更好用,功能更强) 输出比较单元 A(OCR1A) 的一个特质是定义 T/C 的 TOP 值( 即计数器的分辨率)。 TOP 值还用来定义通过波形发生器产生的波形的周期。 由于在任意模式下写 TCNT1 都将在下一个定时器时钟周期里阻止

13、比较匹配,在使用输出比较时改变 TCNT1就会有风险,不管 T/C是否在运行 这个特性可以用来将 OCR1x初始化为与 TCNT1 相同的数值而不触发中断。 强制输出比较(FOC) 工作于非 PWM 模式时,可以通过对强制输出比较位 FOC1x 写”1” 的方式来产生比较匹配。 强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器, 但是 OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定 OC1x 是置位、清零,还是交替变化)。 比较匹配输出单元 比较匹配模式控制位 COM1x1:0 具有双重功能。 1 波形发生器利用 COM1x1:0 来确定下一次比较匹配

14、发生时的输出比较 OC1x 状态; 2 COM1x1:0 还控制 OC1x 引脚输出的来源。 只要 COM1x1:0 不全为零,波形发生器的输出比较功能就会重载 OC1x 的通用 I/O 口功能。 但是 OC1x 引脚的方向仍旧受控于数据方向寄存器 (DDR)。 从 OC1x 引脚输出有效信号之前必须通过数据方向寄存器的 DDR_OC1x 将此引脚设置为输出。 波形发生器利用 COM1x1:0 的方法在普通模式、CTC 模式和 PWM 模式下有所区别。 对于所有的模式,设置 COM1x1:0=0 表明比较匹配发生时波形发生器不会操作 OC1x寄存器 访问 16位寄存器 写 16 位寄存器时,应先写入该寄存器的高位字节. usigned int k; k=0x1234; TCNT1H=(unsigned char)(k8); TCNT1L=(unsigned char) k; 而读 16 位寄存器时应先读取该寄存器的低位字节. usigned int k; k=TCNT1L; k+=(unsigned int)(TCNT1H8); 使用“C” 语言时,编译器会自动处理 16位操作. usigned int k; k=0x1234; TCNT=k; k=TCNT1; 因为这段时间要写 关于 AVR定时器和 PWM的范例,故简单总结了一下。 补充了计算公式。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。