历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2020年02月07日 | 简述AVR单片机定时器

2020-02-07 来源:eefocus

AVR定时器的要点介绍


M16的T1 16位定时器一共有15种工作模式,其他2个8位定时器(T0/T2)相对简单,除了T2有异步工作模式用于RTC应用外


(可以利用溢出中断和比较匹配中断作定时功能)


分5种工作类型


1 普通模式 WGM1=0


跟51的普通模式差不多,有TOV1溢出中断,发生于TOP时


1 采用内部计数时钟 用于 ICP捕捉输入场合---测量脉宽/红外解码


(捕捉输入功能可以工作在多种模式下,而不单单只是普通模式)


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,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值时必须保证新的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位分辨率


WGM1=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


双斜波计数,用于输出高精度的、相位与频率都准确的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 值时最好使用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 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.5。


外部时钟源不送入预分频器


选择使用外部时钟源后,即使T1引脚被定义为输出,其T1引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数。


输入捕捉单元


T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。


外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。


时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。


输入捕捉单元可以工作在多种工作模式下


(使用ICR1定义TOP的(WGM1=12,14,10,8)波形产生模式时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。)


在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP值


当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:


16位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1 置位。


如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。


中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑1” 清零。


注意,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果


除去使用ICR1定义TOP的波形产生模式外, T/C中的噪声抑制器与边沿检测器总是使能的。


(其实就是永远使能??)


使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入4个系统时钟周期的延迟.


噪声抑制器使用的是系统时钟,因而不受预分频器的影响


使用输入捕捉中断时,中断程序应尽可能早的读取ICR1 寄存器


如果处理器在下一次事件出现之前没有读取ICR1 的数据, ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。


测量外部信号的占空比时要求每次捕捉后都要改变触发沿。


因此读取ICR1 后必须尽快改变敏感的信号边沿。改变边沿后,ICF1 必须由软件清零( 在对应的I/O 位置写1”)。


若仅需测量频率,且使用了中断发生,则不需对ICF1 进行软件清零。


输出比较单元


16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。


然后OCF1x 在下一个定时器时钟置位。


如果此时OCIE1x = 1, OCF1x 置位将引发输出比较中断。


(就是说输出比较可以工作在所有工作模式下,但PWM模式下更好用,功能更强)


输出比较单元A(OCR1A) 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。


TOP 值还用来定义通过波形发生器产生的波形的周期。


由于在任意模式下写TCNT1 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出比较时改变TCNT1就会有风险,不管T/C是否在运行


这个特性可以用来将OCR1x初始化为与TCNT1 相同的数值而不触发中断。


强制输出比较(FOC)


工作于非PWM 模式时,可以通过对强制输出比较位FOC1x 写”1” 的方式来产生比较匹配。


强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器,


但是OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零,还是交替变化)。


比较匹配输出单元


比较匹配模式控制位COM1x1:0 具有双重功能。


1 波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较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)(k>>8);


TCNT1L=(unsigned char) k;


而读16 位寄存器时应先读取该寄存器的低位字节.


usigned int k;


k=TCNT1L;


k+=(unsigned int)(TCNT1H<<8);


使用“C” 语言时,编译器会自动处理16位操作.


usigned int k;


k=0x1234;


TCNT=k;


k=TCNT1;


因为这段时间要写 关于AVR定时器和PWM的范例,故简单总结了一下。


补充了计算公式。

推荐阅读

史海拾趣

Ememory Technology Inc公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,eMemory始终保持着对新技术和新市场的敏锐洞察力。公司不断推出新的硅智财产品和解决方案,以满足客户不断变化的需求。同时,eMemory还积极拓展国际市场,与全球多家知名芯片设计厂商建立了长期稳定的合作关系。这些努力使得eMemory在电子行业中保持着领先地位,并为其未来的发展奠定了坚实的基础。

展恒电子(Broadic)公司的发展小趣事

自2010年起,展恒电子专注于智能仪表行业,凭借其核心技术和横向联合多家关键器件供应商的策略,为水、电、气、热四表市场提供整套解决方案。随着业务的不断拓展,公司逐渐积累了大量的行业知名客户,进一步巩固了其在智能仪表领域的领先地位。同时,公司还积极向新能源、物联网、安防家居等多个领域拓展,以实现业务的多元化发展。

福建国光公司的发展小趣事

展恒电子始终坚持以品质为核心,严格把控产品质量。在与上海芯北电子科技有限公司的合作中,双方共同保证产品品质的一致性、兼容性和安全性。在合作期间,展恒电子成功向客户供应了数百万片芯片,并得到了客户的高度认可和信任。这种对品质的坚持和追求,使得展恒电子在电子行业中赢得了良好的声誉,也为公司的长期发展奠定了坚实的基础。

这五个故事从不同角度展示了展恒电子(Broadic)在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、品质保证等方面的实力和努力。通过不断努力和创新,展恒电子已经在电子行业中取得了显著的成果,并将继续为行业的发展贡献自己的力量。

Datalinear公司的发展小趣事

Datalinear公司成立于20世纪初,由一群热衷于数据处理的工程师创立。初创时期,公司面临着资金短缺、技术瓶颈和市场竞争激烈的挑战。然而,创始人凭借着对技术的执着和对市场的敏锐洞察力,成功开发出一款高效的数据处理设备,满足了当时市场对数据处理速度的需求。这款产品迅速在市场上打开销路,为Datalinear公司赢得了第一桶金。

Eutech公司的发展小趣事

在电源适配器和服务器电源市场,EUtech公司凭借技术创新迅速崛起。他们不断优化产品设计,提高产品性能,同时注重节能环保。随着下游AI行业的快速发展,公司及时抓住机遇,推出了一系列高性能、高可靠性的电源产品,赢得了市场的广泛认可。

DB Unlimited公司的发展小趣事

DB Unlimited公司最初只是一个生产基础音频组件的小型企业。随着技术的不断发展和市场的变化,公司意识到单纯的组件生产已经无法满足客户的需求。于是,DB Unlimited开始转型,致力于提供完整的音频解决方案。通过不断研发和创新,公司成功开发出了一系列高性能的音频产品,并凭借其卓越的品质和性能,赢得了客户的广泛认可。

问答坊 | AI 解惑

控制阀的选型

1. 概述 控制阀安装在工艺过程自动控制系统中,直接控制控制工艺介质。多年以来,控制阀被认为是低技术含量产品,事实上控制阀往往要控制高温、高压、高压差、高粘度或含有固体颗粒、强腐蚀性和闪蒸的流体,工作条件非常恶劣,从而导致调节阀使用 ...…

查看全部问答>

WINCE4.2安装出错,请高手帮忙!

WINCE4.2安装时出错,错误提示如下: Error 21337.Setup encountered problems installing some critical emulation components.You may continue the install,but the emulator may not work .Would you like to continue setup? 哪位高手知道是什 ...…

查看全部问答>

Wince下CAN驱动开发,每次发送数据时,CAN设备总是接收到多个数据帧

    我在WinCE下开发MCP2515的CAN驱动程序,硬件是TQ2440的开发板,CPU是S3C2440,现在的问题是,每次发通过MCP2515发送数据的时候,我总是可以接收到多个CAN数据帧,而且每次接收到的CAN数据帧的数量也不同,我也把MCP2515设置成了单次触 ...…

查看全部问答>

wince下宽字符的中英文字符怎么辨别呢?

如果不是宽字符可以用长度辨别 但是在宽字符下不管是中文还是英文都是 长度都是1 这个怎么辨别是中文呢? 还有 如果我要出字符串中搜索到是否含有某个汉字 这个是通过怎么搜呢? 我在 edit控件中输入 方   然后把这个方放入wchar_t *st ...…

查看全部问答>

请问关于在wince下 gis开发需要什么工具

我现在一个问题就是做gis,能显示地图,导航什么的 我用的是xsbase270,处理器是intel pxa270。 evc 4.0。 开始的时候我想用esupmap5.0,但是esupmap5.0试用版的没有我硬件平台的函数库.也不支持vs2005 有pocketpc2003的函数库. 所以我现在的方 ...…

查看全部问答>

求LM3S EPI模块的外设驱动库使用指南

如题,EPIAddressMapSetEPIConfigSDRAMSetEPIAddressMapSet这些函数的使用说明找不到啊。请有的兄弟给分享下。先谢过了。…

查看全部问答>

小弟我虚心请教,跪求各位高手解答!在线等!!!!!!! 在线等!!!!!!!

小弟我虚心请教,跪求各位高手解答。我想用单片机实现电压的转换。大致要求如下: 输出端有2个:x和y.  输入端为p1到p9.   p1,p2,p3为一组,p4,p5,p6为一组,p7,p8,p9为一组。p1端输入5v电压时,x端输出5v,y端输出0v;p3端输入5v时,x端输 ...…

查看全部问答>

TI的集成PHY的M4,TM4C129可出来了在TI的网站上面

http://www.ti.com.cn/lsds/ti_zh/microcontroller/tiva_arm_cortex/c_series/tm4c129x_series/overview.page?paramCriteria=no TI的集成PHY的M4,TM4C129可出来了在TI的网站上面…

查看全部问答>

【Atmel SAM R21】向左拐,向右拐(汇总帖)

本帖最后由 ddllxxrr 于 2015-3-31 10:12 编辑 好像有个网络小说叫《向左走,向右走》。说是男女主人公隔着一道墙,每天上班都看不到对方,后来好像还没看到就拉倒了。其实,这个东西是一种缘份,有的人有缘没有份,有的有份无缘。实现中,小说里 ...…

查看全部问答>

电动牙刷拆解和分析

用了两年的国产电动牙刷坏了。周末抽空把它拆开,简单分析了一下。 拆开后的样子,可以看到布局还是比算紧凑,但是没有什么特殊的地方。(因为这个牙刷黏合比较紧,拆开的时候外壳就破损了,同时为了避免其他问题,就不放出来了) 这个电动牙刷有 ...…

查看全部问答>