请教~!关于定时器时间无法精准定时



硬件环境:

LM3S9B90 评估板

软件环境:

        1 裸机运行不带任何多任务环境

        2 系统使用16Mhz外接晶振,没有使用PLL倍频

        3 使用32BIT定时器,为获得1S钟,定时器的初值送如为16000000

        4 注册了相应定时器的中断服务程序(TIMEOUT),服务程序中 代码较短,仅只对秒钟变量计数,进行秒钟到分钟的进位处理,进行分钟到时钟的进位处理,使用串口输出时分秒(串口未使用缓冲区)

故障现象:

        我在PC机端 选用操作系统的时间做了基准,反复进行测试,测试时间定为20分钟。 每到20分钟,目标板时钟总会比操作系统时钟慢0~3秒不等

分析:

        我考虑过是晶振频率误差的问题,不过查阅相关晶振频率误差较多的也仅为正负100ppm(百万分之一),按照16Mhz来计算,如果每次都按误差范围最大值计算,约合也需要10000S 才会慢1s,和我碰到的现象是截然不同的。

  • 这个问题,我也试了一下:)

    我用TI的EK-LM3S9B90开发板+例程包中的Timer例程,让开发版通过UART输出计时,大致试了一下,测了2个小时慢了0.5~2秒钟。

    TIME1每秒+1,TIME2每0.5S加1。11:46:00开始测的。

    我估计是晶振本身输出频率不够准确,晶振的准确性会受到晶振的匹配电容影响。您用振荡器或者用高精度的信号发生器给9B90时钟信号再试试。

  • Timer设置的是Period模式吗?

  • 结贴~

    你好,非常感谢你的协助,问题已经成功解决。

    问题的原因 可能说出来大多数人都不会相信,但经过2,3天的反复验证确实如此:

    我PC机的时钟 走快了,而且是随机走快的

    我多加入一台PC和两部手机的秒表做对比测试2小时,最终测试结果是

    目标板和两部手机还有另外加入的PC的时间走的大致相同(相差不会超过0.5秒)

    但我自己的PC时间却快了将近10秒钟

    这个事件再次告诉了我,当遇到无法解决的瓶颈问题时,需要静下心来抽丝剥茧,从整个设计的源头开始排查,并且往往做测试的基准也会出现问题。

  • 对于你做的实验我的看法是--测试的误差范围是可以接受的,因为晶振本身都会受到温度,电压毛刺还有材质等各个方面的影响,但总的误差范围 石英晶振 一般不会超过正负100ppm(百万分之一),由于频差是一个范围,自然测得的最后误差时间也是一个范围值 不是一个固定值

  • 当然 还有匹配电容的影响