有人表示:H7-TOOL的RTC时钟一直都是通过上位机手动校准的,这次做了实验,测试期间不做任何校准,看看半年后效果。测试是从去年的9月29号开始,截止到今年的4月5号,快了13分钟。
误差原因:因为晶振对温度敏感。下面是典型的温度对晶振影响:STM32支持LSI内部低速时钟或者LSE外置低速时钟,使用外部就要接32768Hz的晶体。一个月的典型误差50秒左右。
校准方法:
以外置RTC DS3231为例,精度是:
Accuracy ±2ppm from 0°C to +40°C;每个月30天算的最大误差是2*10^-6 * 24 * 60 *60 * 30=5.184秒。
Accuracy ±3.5ppm from -40°C to +85°C;每个月30天算的最大误差是3.5*10^-6 * 24 * 60 *60 * 30=9.072秒
使用STM32内部RTC不行,白天温度不稳定的话,当天的误差差不多就有1~2秒。主要是晶振不是温补的。方法1:Smooth digital calibration这种方法使用比较麻烦,当前提供的案例需要用户使用超高精度的信号时钟,精确到几个ppm,发送这个信号给板子做校准。然后示波器测量实际的输出效果来确定是否采用这个校准值。
方法2:RTC时钟同步
官方提供的例子没什么参考价值,倒腾了高精度的HSE来实现。
方法3:使用50Hz/60Hz高精度参考时钟辅助三、当前的推荐方案:
1)使用外置温补晶振,但价格略高,10块钱左右:
2)使用自带温补的RTC芯片。
RTC校准软件包:https://www.st.com/en/embedded-software/x-cube-rtc.html
四、为什么硬件平台本身支持RTC,还要外加RTC电路?1.英伟达的NX平台,官方说明,系统平台掉电后,RTC的电流消耗在2uA左右,通常CR1220备份电池容量在40mA左右,理想关机保持时间在 40000/2/24 = 833天。2.Orin nano 平台官方说明RTC电流消耗在12-50uA,保险起见,只能选用最大值50uA,同样的CR1220备份电池,理想的关机保持时间在 40000/50/24=33天。833天还算能接收,33天即使使用可充电的备份电池也不合适了,并且Orin nano平台的PMIC_BBAT已经不支持备份电池充电功能。3.经典的DS1302 RTC芯片规格说明,保持电流低于300nA=0.3uA。使用CR1220备份电池,理论关机保持时间到了40000/0.3/24=15.22年。本案例是一个带RTC功能的工业产品,RTC部分的供电电路如下下图,产品发往市场半年以后,就提示更换RTC电池,远远低于设计寿命5年。原因分析:产品返回公司以后,更换上新的RTC电池,串联高精度万用表进去测量电流,发现RTC的工作电流高达100uA,和设计的5uA有很大的差距。怀疑的点有:1.二极管D3漏电流太大,设备断电时,通过D3倒流到系统的电源上。2.RTC芯片影响,原来的RTC芯片为NXP的PCF8563P,手册描述备用电源时功耗为0.25uA;中途有更换国产RTC;
通过排除法,先排除D3,因为去除D3,电流只减小1uA左右;接着排除RTC电源上电容等漏电流,因为去除电容电流依然有100uA左右。将RTC芯片更换为NXP-PCF8563P。电流正常,大约只有4uA。接着我们换回国产RTC,同时将电阻更换为100R,则电流也正常,只有4uA左右。RTC电源上串联的电阻阻值在网络上的争论一直在,有人说0R,有人说1K、10K等各种阻值,但是能够理论讲清楚的基本没有。要明白这个电阻的目的:限流。参考各个厂商的一次性纽扣电池,以阳光动力的CR2025为例,其他品牌类似,厂家要求电池在任何情况下都不允许短路,否则有可能炸裂或者爆炸。因此,一旦发生后级短路时,限流电阻必须将电流限定在最大持续放电电流以内,运行产品工作不正常,但是不允许产品起火甚至爆炸。因此该型号的限流电阻最小值为 R=V/I=3V/3mA=1KΩ;对于电池来说,电阻可以比该阻值大,但是不能比该阻值小。1)RTC芯片有两种工作模式,一种是正常工作模式,一种是备用电源工作模式,如下图,两者的供电电流可以相差200倍;2)每一种模式下,RTC芯片都可以理解为一个恒流源,比如电池模式需要1uA左右,正常模式需要200uA左右;3)RTC的芯片的电压范围非常广,可以在1.5V~5.5V之间都可以正常工作。
RTC芯片可以理解为一个电流源,串联一个10K的电阻,当流过电流为100uA时,在电阻上的压降将会达到1V,如果此时电池电压只有2.6V,则RTC芯片的工作电压只有1.6V,如果电池电压更小,RTC芯片获得的电压更低,由于RTC芯片工作电压范围很广,但是需要的电流是基本不变的,为了获得足够的电流,RTC芯片可以理解为进一步降低阻抗,导致电流进一步加大。还有,可能在正常工作模式和备用电源模式之间的切换的逻辑不够清晰,导致使用电池的时候也进入正常工作模式(此为猜测,没有从厂商的资料中找到根据)。经过上述分析可知,为了延长电池的寿命,主要降低RTC回路上的电流。回路上的损耗主要有:电阻、二极管、RTC芯片、电容。1.RTC电池模式电流。目前大部分的厂家的RTC芯片在电池模式下可以做到几百nA到1uA左右,因此RTC电流可以按照1uA进行估算。2.二极管的漏电流。二极管的主要损耗在于漏电流,因此需要选择漏电流尽可能小的二极管,下图是BAS70系列二极管的漏电流的曲线图,为例保守起见,也可以按照1uA进行估算。3.电容损耗。电容的损耗主要也是体现在漏电流,RTC电池对电源要求不高,因此使用100nF的电容滤波即可,漏电流可以评估约0.5uA。经过上述分析,总的电流=二极管漏电流+RTC芯片电流+电容漏电流=1uA+1uA+0.5uA=2.5uA。电阻一般可以选择1K。RTC芯片和电阻为串联关系。p1=U*U/R=0.0025V*0.0025V/1000=0.00625uWP2=UI=(3V-0.2V-0.0025V)*1uA=2.7975uW电阻的损耗占比=P1/P2=0.089%,因此电阻的损耗基本可以忽略不计。以阳光动力电池CR2025为例,电池自放电损失约每年1%,标称容量为150mAH,上述案例的寿命评估:T=150mAh*95%/(二极管漏电流1uA+RTC电流1uA+电容漏电流0.5uA)=57000H≈6.5年。以阳光动力电池CR2025为例,二极管更换为更低漏电流1uA左右的BAS70系列,电阻只串联在电池上,只防电池短路,限制电流在3mA。