找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1886|回复: 19
打印 上一主题 下一主题
收起左侧

单片机定时器时间不准

  [复制链接]
楼主
ID:123289 发表于 2023-5-30 08:34 | 显示全部楼层
好办,再改中断时间常数。
回复

使用道具 举报

沙发
ID:123289 发表于 2023-5-30 10:19 | 显示全部楼层
1、理论上只要是晶振,做到日差1秒之类,没有问题。因为日差1秒,要求的稳定优于1秒/1天=1/86400,约为百万分子11.57。晶振振荡稳定度优于它。
如何做到呢:
2、确保单片机的时基是晶振,而不是内部RC。
3、确保定时器的时钟源,是由晶振分频或不分频的时钟脉冲。
4、建议使用自动重装方式(这一点并不是很重要的),但新手会发生中断时常数重置不准确(如中断后走了一个脉冲再装新的时常数)。
5、中断时常数建议取长1000ms的公约数,例如5、10、20、50、100ms,以便秒计算。对于新手来说,取大一点,间隔时间长一点,发生意外的概率会少一点。
6、由于晶振不会轻易地恰好是12.000000MHz,或是11.0592MHz,所以第5、是做不到精准的。这时你就无法实现日差一秒。
以12M,时钟分频为12,则10ms中断需要,10000个脉冲,通常晶振不是精准的12MHz,如12.000240MHZ,这样10ms就可能是10000.2个时钟,由于时常数只能取最接近的整数10000(实际=65536-10000),所以每次中断最会误:0.2个时钟,拆成时间是0.2us。每秒中断100次,即每秒误差20us,一天就误差1.728秒。这是你所能做到的极限精准度。
7、日差<1秒的技巧:如果每间隔一个时间,对误差进行补偿,至于间隔时间取多少,由你决定,补多少,则需要你知道当前日差是多少秒。这个估计难不倒你。
8、中断服务程序中一定要短,不能超过10ms(前例参考),否则,会丢失一个中断,这样计时就无法精准控制了,这是重重之重!
记住:中断服务只做计时,与之无关的计算,以及其它事件,只做个标记,放到主程序中,依标记再做。这样中断服务程序就短了,不会超时了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表