查看: 7735|回复: 2

【RTC】RTC的LTBC矫正方向问题

[复制链接]

7

主题

10

帖子

116

积分

中级工程师

Rank: 2

积分
116
发表于 2021-3-5 09:58:21 | 显示全部楼层 |阅读模式
对RTC进行矫正,使用1PPS信号做时间基准, 测试 32.768K时钟的频率误差,  根据误差值对RTC进行调整。
基本代码如下 :
void RtcTempAdjust(int16_t temp)
{
    第一步 根据温度计算RTC查表调整值
    // according to the temperature to adjust the offset , inorder to get precise time .
    // Get the abs differ between current temp and CRYSTAL_NOMINAL_TEMP.
    QuotRemain  qr;
    if(temp >250)
         qr.quotient = temp - CRYSTAL_CENTER_TEMP*10;
    else
         qr.quotient = CRYSTAL_CENTER_TEMP*10 -temp;
    qr.remainder = 10 ;
    HardDiv(&qr);     
    temp = (int16_t)qr.quotient ;   
    if (qr.remainder >5)
       temp++ ;
    // Checking value . should not bigger than 50
    if (temp > CRYSTAL_COMPENSATION_TABLE_LENGTH - 1)
    {
        temp = CRYSTAL_COMPENSATION_TABLE_LENGTH - 1;
    }

    // Get additional accumulator value from lookup table using temperature value
    // It is assumed that the temperature was the same from now to the next time of doing adjust .

   temp = (crystalCompensationTable[temp] );
   获取查表校准值结束, 校准值经过确认 没有问题。

   第二步 根据校准值 设置 调整方向以及 设计校准值
    if(temp  >= CRYSTAL_CENTER_OFFSET)
    {
        RTC->ADJUST = temp - CRYSTAL_CENTER_OFFSET ;
        RTC->ADSIGN = 0;
    }
    else
    { // sub the current count .
        RTC->ADJUST =  CRYSTAL_CENTER_OFFSET - temp ;
        RTC->ADSIGN = 1;
    }
}



在调用这个函数之前RTC已经处于运行中状态, 上述代码将每3小时 在RTC产生小时中断后3ms之后调用 ,
上述代码中   第一步测试确认正常 , 第二步确认也正常 , 以 25度 时 为例  :最终设置结果为   RTC->ADJUST = 0x22 , RTC ->ADSIGN  = 1 ;
但实际测试发现  经过上述设置后 RTC的时间反而比没有调整 (RTC->ADJUST = 0x0 , RTC ->ADSIGN  = 0 ) 更快了 , 似乎调整方向反了  ?
但查规格书  RTC ->ADSIGN  为0 为增加RTC计数值,  为1 为减少RTC计数值, 是否规格书中写错了 ?



回复

使用道具 举报

7

主题

10

帖子

116

积分

中级工程师

Rank: 2

积分
116
 楼主| 发表于 2021-3-6 09:44:37 | 显示全部楼层
已经实验确定, 是规格书中寄存器描述以及校准部分的说明有误 ,  RTC -》 ADSIGN 为1 表示 增加计数,为0 表示 减少计数 , 贵公司的文档需要认真一点。这样很浪费时间
回复

使用道具 举报

3

主题

20

帖子

2366

积分

资深专家

Rank: 7Rank: 7Rank: 7

积分
2366
发表于 2021-3-8 11:14:11 | 显示全部楼层
手册没有错,是你理解反了;当前RTC快,说明晶体当前实际频率大于32768HZ;单个计数周期时间比1/32768 s少;所以要增加计数才能调整到标准1s;RTC ->ADSIGN  应该配置为 0;如果配置1,减少计数,就会更加快
回复

使用道具 举报

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

本版积分规则

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