打印

RE: 【原创求精】**单片机伪命题之(1)——精确定时

[复制链接]
8677|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
NE5532|  楼主 | 2010-6-6 19:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 NE5532 于 2010-6-6 19:52 编辑

*注:此文专为21IC而著,可以转载,但需保留本说明,否则将可能导致版权追究

常见的错误观点:

1.我需要用单片机实现精确定时
2.通过各种技巧来修正或避免定时器中断误差的产生
3.用定时器可以获得比软件定时更高的定时精度

破题:

1.指标不明

    世界上没有绝对的精确,只有具体的需求。80年代,一块每天误差30秒的机械手表叫“精确”,90年代,一块每年误差10分钟的石英手表叫“精确”,现在的CDMA系统离开了GPS系统授时就会崩溃——没有定义的精确是没有意义的。要求精确的人自己都说不清楚需要精确到什么程度,所以这个讨论本身就是没有意义的。

解决方案:分析自己的具体系统需要多高的定时精度,给出指标。典型的现代RTC系统误差是10分钟/年。其实很少有应用需要高精度的时钟。

2.方向错误

[a]单片机的所有时间基准来源于主时钟,典型地,主时钟有片内RC振荡器和片外石英晶体。

RC振荡器的典型精度为5%,不可能精确。

石英晶体的输出频率与温度和负载电容(晶体旁边接到地的那两个电容)有很大关系,石英晶体的误差包括初始误差、温度漂移和年老化3种,初始误差是在规定的激励功率下,石英晶体配合厂家规定的负载电容(常见值为16pF)和室温下测定,市面普通晶体的初始误差约为20ppm;负载电容包括晶体的封装寄生电容、电路板上焊接的两个电容,电路板的寄生电容、单片机输入引脚的寄生电容组成,当这些电容的和与厂家的测定条件不同时,晶体的输出频率还将发生偏移(pull),漂移值约为十几到二十几ppm每pF;当温度偏移时,晶体的输出频率也将发生类似sin曲线的漂移,该漂移可达数十ppm;晶体每年另存在约5ppm的老化漂移,漂移方向不定。

【图片为晶体的温漂曲线】



综上:很多人在使用晶体时根本没有注意这些影响频率的因数,综合一般人的使用习惯,晶体的实际误差约在100-200ppm左右。

解决方案:不了解晶体精度的人,没有权利谈“精确定时”,对于确实需要足够精度晶体频率的应用,应与晶体供应厂家仔细核对设计指标,使用温补晶体,对负载电容使用NPO的第一类电介质电容完成,对晶体部分加屏蔽,严格电路板设计等方式保证足够的时钟源精度。

单片机基于程序运行,当其为多个中断源服务时,特别是当存在这非周期中断时(例如按键),中断服务时间就有可能延迟定时器中断的相应。然而这几乎是一个权衡,如果一个单片机只为定时服务,其会退化为一个ASIC而失去灵活性,这种情况下最佳的解决方案是使用功耗更低、功能更单一和更便宜的RTC芯片。

另一方面,任何振荡频率不能被2整除的晶体,用于秒定时时都会存在误差,若非其他应用条件的限制,应优先考虑使用32768的RTC晶体,软件修正属万不得已的方法,会导致软件复杂度增加。

解决方案:尽量使用32768的晶体作为“秒”相关应用的时钟源,使用该晶体直接驱动定时器,并且使用定时器的溢出自装载功能以减轻软件负担,减少其他中断影响所带来的定时偏差。

3.思路问题

上已述及,单片机的所有行为都是基于主时钟的,除非是带有预取指流水线的系统(例如NXP ARM中的MAM),程序的运行时间都是确定的,并且与定时器处于同一精度级别。由于中断需要现场保护和恢复,其时间对初学者较为复杂;当禁止中断时,软件演示反而更容易得到“高确定度”的延时。

解决方案:尽量减少中断源,让定时器处于高中断优先级,对于简单的局部短延时,使用软件延时完成,对有流水线加速的单片机,尽量使用定时器。

4.结论

综上所述,所有的争论来源于没有给出具体的指标和应用要求,需要多精确的时钟?有哪些资源可用?有哪些设计的限制条件需要考虑?在这些问题没有指明的情况下,讨论任何方案都是没有意义的,“精确定时”本身就是一个伪命题。

解决方案:没有通吃天下的方案,只有最适合当前系统的方案,任何方案都是在权衡利弊后作出的选择。
评分
参与人数 2威望 +2 收起 理由
z_no1 + 1
風神 + 1

相关帖子

沙发
strang| | 2010-6-6 21:05 | 只看该作者
抢个沙发!顶,学习了。

使用特权

评论回复
板凳
aceice| | 2010-6-6 23:22 | 只看该作者
:lol

使用特权

评论回复
地板
wxw2000| | 2010-6-7 09:34 | 只看该作者

RE: 【原创求精】**单片机伪命题之(1)——精确定时

任何方案都是在权衡利弊后做出的选择
============
学习了,赞一个!

使用特权

评论回复
5
NE5532|  楼主 | 2010-6-7 15:21 | 只看该作者
呵呵,只要有人看,就准备写下一个了。

使用特权

评论回复
6
yewuyi| | 2010-6-7 16:53 | 只看该作者
呵呵,电波表还是蛮好的。

使用特权

评论回复
7
Mindor| | 2010-6-7 18:16 | 只看该作者
有技术含量的帖子,顶起~

使用特权

评论回复
8
mcu_lover| | 2010-6-7 18:17 | 只看该作者
非常感谢。

使用特权

评论回复
9
efen| | 2010-6-7 18:51 | 只看该作者
学习学习

使用特权

评论回复
10
Quentin| | 2010-6-7 20:06 | 只看该作者
太好了!
谢谢分享!!

使用特权

评论回复
11
yun_xiao| | 2010-6-10 15:26 | 只看该作者
令我茅塞顿开

使用特权

评论回复
12
程序匠人| | 2010-6-15 19:22 | 只看该作者
顶一下

使用特权

评论回复
13
EmbDesign| | 2010-6-19 21:28 | 只看该作者
2# strang

好东西呀,虽然我看不懂!

使用特权

评论回复
14
huangqi412| | 2010-6-20 13:33 | 只看该作者
:o

使用特权

评论回复
15
mcuisp| | 2010-6-20 14:33 | 只看该作者
满足定时要求,就叫精确定时,呵呵。
一年误差一个月,未必就不可以叫精确定时。

使用特权

评论回复
16
chlzlin| | 2010-6-23 11:25 | 只看该作者
受教了

使用特权

评论回复
17
xzy568| | 2010-6-25 08:38 | 只看该作者
用铯原子钟吧,三十万年误差不超过一秒,这个精度可以吧,不过价钱好象非常贵,呵呵
楼主什么时候发汇编和C的贴子啊,不是说要发的吗?

使用特权

评论回复
18
NE5532|  楼主 | 2010-8-7 17:45 | 只看该作者
皮之不存,毛之焉附啊,研究如何让软件补偿那几个中断误差的,无非是掩耳盗铃罢了。

使用特权

评论回复
19
粉丝| | 2010-8-8 14:57 | 只看该作者
//*注:此文专为21IC而著,可以转载,但需保留本说明,否则将可能导致版权追究

既然是AVR的粉丝,干嘛不申请做AVR的版主?如果是俺楼主,当仁不让去AVR板块走马上任,舍我其谁。
对于AVR的粉丝们,GCC与ICC并不冲突!

使用特权

评论回复
20
sinc_mark| | 2013-2-5 11:32 | 只看该作者
说的的确是很有见地的,赞一个!这些东西,对于还没弄明白的人来说,就是一个认识的问题!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:††††看NE5532教学视频,炼就工程技术研发功力†††††††††† 《跟我学DC-DC电源管理技术》【从只会写软件成长为软硬兼施】 《印刷电路板设计进阶》【12年一线设计经验大放送】 《印刷电路板设计基础》【新手别怕,老工程师带你入门!】

159

主题

13769

帖子

586

粉丝