打印

RTC自动校验的方法

[复制链接]
4641|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
freny|  楼主 | 2009-10-16 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了下官方的文档,对RTC校验是否如下:
1.先不管预分频,直接得出64分频后的频率f64,然后算出实际的晶振频率f,取其整数部分为F;
2.在F为预分频系数为前提下,计算出ppm,就是(f64-(float)F/64.0)/((float)F/64.0)*1000000,
3.对ppm四舍五入后得到整数,找对应的校正值,并写入校正寄存器,并将预分频系数设置为F。
这样不管晶振频率多少,都能在一定范围内对RTC进行校正。
例如:
测试得到64分频后为511.814,计算预分频应该为32756,理论64分频频率为511.8125,ppm=(511.814-511.8125)/511.8125*1000000=2.93,取3,得到对于的校正值为7,则设置RTC预分频系数为32755,校正值为7。
请各位大大们告知是否是这种做法?另文档中的例子中得到的ppm为27.35,为何要取整为28?另说27误差为69秒,27.35大约为71秒,0.65ppm的话误差1.7秒,请问,这个1.7秒时怎么算出来的?
沙发
barboon| | 2009-10-16 11:18 | 只看该作者
楼主的步骤基本上是对的
误差1.7秒是指对每个月,以30天计算的情况,误差0.65ppm则
30×24×3600×0.65/1000000 = 1.68秒
要注意,校准寄存器的作用,是指在没2^20即1048576个RTC时钟脉冲当中扣掉相应个时钟脉冲
RTC的时钟信号先通过校准寄存器,再进入预分频寄存器
明白这个原理的话,就很清楚应该怎么样校准了。

使用特权

评论回复
板凳
freny|  楼主 | 2009-10-16 15:37 | 只看该作者
非常感谢

使用特权

评论回复
地板
freny|  楼主 | 2009-10-19 14:55 | 只看该作者
我已按照以上方法做了校验,却发现误差比没校验前还大。
72MHZ, TIM 4分频,捕获RTC的64分频脉冲为35170个计数值,通过计算得晶振实际为32755.19HZ,取RTC为32755分频(寄存器内写32754),(32755.19-32755)/32755*10E6=5.8,取为6,对应校准值为6.
看了下8MHZ晶振的频率,为27ppm(实测),现在的问题是,设定时间后,几乎达到了每个小时差1秒的程度了。
各位看官,有何经验不妨介绍下吧,谢谢。

使用特权

评论回复
5
香水城| | 2009-10-19 15:02 | 只看该作者
请通过实验找出最佳参数。

使用特权

评论回复
6
freny|  楼主 | 2009-10-19 15:06 | 只看该作者
如果需要试验找出最佳参数的话就失去了自动校验的意义了。谢谢

使用特权

评论回复
7
香水城| | 2009-10-19 15:10 | 只看该作者
自动校验应该是一个闭环的控制,而不是开环的单向控制。

另一方面,可以通过实验找出最佳参数,再反过来检查哪里计算错了。

使用特权

评论回复
8
freny|  楼主 | 2009-10-19 15:21 | 只看该作者
呵呵,谢谢

使用特权

评论回复
9
barboon| | 2009-10-19 15:45 | 只看该作者
本帖最后由 barboon 于 2009-10-19 15:55 编辑

我觉得楼主用STM32的内部定时器来自动校准RTC思路很不错,但我很怀疑实际的可行性。
因为RTC的校准功能目的对晶振进行ppm级范围的微调。这就需要你实际测得的RTC频率非常精确可靠。
先不说用来测的8MHz晶振本身就有28ppm的误差,楼主用的定时器时钟72MHz,输入捕获本身至少引入一个脉冲长度的误差就不可忽视了。
楼主确定测量得到RTC时钟晶振32755.19Hz这个结果确实可靠吗?

事实上,在STM32的固件库里附带了一个类似的例子,用定时器校验RTC,不过使用的时钟源是STM32内部的低速振荡器,它的频率设计振荡频率是40KHz,实际可能的震荡频率在30-60KHz,经过校验以后带来的精度提升相当可观。但是用同样的方法校准本身精度比较高的外部晶振,我觉得有点悬。

使用特权

评论回复
10
freny|  楼主 | 2009-10-22 09:08 | 只看该作者
现在我对外部晶振做了自动校验,但是结果是1天快了1秒钟,确实感觉效果不理想。可能用存在误差的72M来测是有点问题,但库里的例子只不过是将晶振由外部的改成了内部的,还是使用72M来测的,这个我估计也是不那么准,只不过跟他原来的精度比是提高不少而已,应该还是达不到高精度的要求的。
想要提高RTC的精度,只有先将测量的基准误差尽量的小,这样测出来的结果才准确点。
难不成还真的要我外加个独立的RTC不成?
谢谢回复。

使用特权

评论回复
11
IJK| | 2009-10-22 09:54 | 只看该作者
应该这么进行校准:首先需要一个准确的外部信号,比如GPS来的秒信号,或者其它很准确的信号;然后通过定时器来测量RTC的晶振误差,然后再对该误差进行校准。

有一点用注意STM32的HSE晶振来校准RTC的32768Hz晶振是不行的,因为通常HSE晶振误差比32768Hz晶振的误差大。

使用特权

评论回复
12
香水城| | 2009-10-22 14:53 | 只看该作者
现在我对外部晶振做了自动校验,但是结果是1天快了1秒钟,确实感觉效果不理想。可能用存在误差的72M来测是有点问题,但库里的例子只不过是将晶振由外部的改成了内部的,还是使用72M来测的,这个我估计也是不那么准, ...
freny 发表于 2009-10-22 09:08


没有一个准确地基准,如何能得到精确的校验?

这就好比,你要想把桌子擦干净,就必须使用干净的抹布,如果擦一遍后还不干净,就要把抹布洗洗干净再擦,脏的抹布是无论如何不能擦干净桌子的。

使用特权

评论回复
13
freny|  楼主 | 2009-10-22 15:23 | 只看该作者
呵呵,老大你的比喻还蛮贴切的哈,呵呵,谢谢各位,已决定用外部RTC来,初步选用DS1302,就用13,14,15管脚。

使用特权

评论回复
14
crystal1987| | 2015-1-6 14:06 | 只看该作者
想问下楼主,你在做RTC自动校验时,BKP_SetRTCCalibrationValue函数是怎么调用的,是实时调用?还是每30天调用一次?

使用特权

评论回复
15
yinhaix| | 2015-5-14 16:42 | 只看该作者
误差有那么大?

使用特权

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

本版积分规则

12

主题

37

帖子

0

粉丝