1308365377 发表于 2022-9-23 09:59

L083的AUTOTRIM实时时钟校准功能测试

本帖最后由 1308365377 于 2022-9-23 09:57 编辑

查阅最新版CW32L083的手册,发现更新了AUTOTRIM的实时时钟校准模式,等这个功能很久了,因为有些特定情况对时钟的频率精度要求严格,所以说这个功能在需要精确时钟的情况下还是很有用的。
测试了LSI的时钟校准结果,手册上提到AUTOTRIM还可以校准HSIOSC,如果以后有机会的话在测试分析。
好了,以上就是一些背景介绍,接下里就是本次测试的原理和结果数据分析,如果有懂原理的朋友可以直接跳过原理部分,后面会有代码和数据结果。

根据手册上描述的LSI时钟模式进行了配置,具体的代码我等下会贴在后面,这里主要是原理描述,首先我们需要设置AUTOTRIM_CR.MD为0x01,这个是为了让AUTOTRIM工作与LSI校准模式,而LSI时钟校准,需要向定时器提供一个精准的高频技术时钟,在这里本次测试是采用的HSE来提供的。

在配置AUTOTRIM校准模式之后,需要设置AUTOTRIM_CR.AUTO为1使能自动校准,设置AUTOTRIM_CR.EN为1使能定时器,在配置完这些之后AUTOTRIM就会开始自动校准流程,接下来就是配置AUTOTRIM让LSI输出的频率在我们需要的范围。

自动校准开始工作后,计数值寄存器 AUTOTRIM_CNT 在每个 GCLK 时钟周期内对计数时钟 TCLK 从重载值 ARR 开始递减计数,计数到0后开始递增计数。当计数器已运行1.5倍ARR 周期,计数器停止运行,同时 AUTOTRIM_ISR.MISS 标志位被硬件置1,表示计数失败。每当 GCLK 时钟上升沿到达时,计数器重新开始从 ARR 递减计数。如果在GCLK时钟周期内,计数器的计数值大于误差允许值AUTOTRIM_FLIM,芯片的寄存器Trimcode会自动调整,直到计数器的计数值小于误差允许值AUTOTRIM_FLIM,与此同时 AUTOTRIM_ISR.OK 标志位会被硬件置 1,表示校准精度已达标,此时可读取TrimCode寄存器并写入 SYSCTRL_LSI.TRIM,以校准 LSI 时钟频率。

TrimCode寄存器最大可调整为0x1FF,故TrimCode值写入 SYSCTRL_LSI.TRIM 时,需根据 TRIM 位域的初始校准值写入最高 1bit。可以像下面这样配置代码:
          CW_SYSCTRL->LSI = (CW_SYSCTRL->LSI & 0xFE00) | CW_AUTOTRIM->TVAL;
误差允许值 FLIM 在设置重载值 ARR 时自动配置,校准精度为 0.4%,这个允许值我们是不能写入的。重载寄存器 AUTOTRIM_ARR 设置公式是:
            ARR= TCLK×(2^PRS)/RCLK-1
在这里RCLK是LSI时钟,PRS为预分频系数,TCLK是计数时钟源,这里我们选用的是HSE.
这里举个例子:当计数时钟源TCLK为HSE(设置为16MHz)时,预分频系数为PRS为0x1时,校准LSI时钟频率为32.8kHz,计算
         ARR=16000000×(2^1)/32800-1=974.60975
在这里本次实验就取了ARR为974来进行校准
接下来就是代码部分了

#include "main.h"

AUTOTRIM_TimeCntInitTypeDefAUTOTRIM_TimeCntInitStruct;

int32_t main(void)

{

RCC_APBPeriphClk_Enable2(RCC_APB2_PERIPH_AUTOTRIM, ENABLE);

RCC_LSI_Enable();

RCC_LSI_OUT();

InitTick(8000000);

SysTickDelay(3000);

AUTOTRIM_TimeCntStructInit( &AUTOTRIM_TimeCntInitStruct );

AUTOTRIM_TimeCntInitStruct.AUTOTRIM_ClkSource = AUTOTRIM_CLKSOURCE_HSE;

AUTOTRIM_TimeCntInitStruct.AUTOTRIM_Prescaler = AUTOTRIM_PRS_DIV2;

AUTOTRIM_TimeCntInitStruct.AUTOTRIM_Mode = AUTOTRIM_MODE_TIMECNT;

AUTOTRIM_TimeCntInitStruct.AUTOTRIM_Period = 974;

AUTOTRIM_TimeCntInit(&AUTOTRIM_TimeCntInitStruct);

RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE);

CW_AUTOTRIM->CR_f.MD = 1;

CW_AUTOTRIM->CR_f.OST = 0;

CW_AUTOTRIM->IER_f.OK = 1;//中断

CW_AUTOTRIM->CR_f.AUTO = 1;

AUTOTRIM_Cmd(ENABLE);

while(1)

{

}

}

voidAUTOTRIM_IRQHandlerCallBack(void)

{

if((CW_AUTOTRIM->ISR & 0x3) == 0x3)

{

CW_AUTOTRIM->ICR &= (~0x3);

// TrimCode = CW_AUTOTRIM->TVAL;

// _TrimCode = CW_SYSCTRL->HSI_f.TRIM;

CW_SYSCTRL->LSI = (CW_SYSCTRL->LSI & 0xFE00) | CW_AUTOTRIM->TVAL;

}

}
本次设置就LSI未使用和使用之后的LSI偏移量做出了分析
表1.为进行校准的偏移量值


温度℃
结果1
结果2
结果3
结果4
结果5
平均值
平均误差
平均误差率

-40
33.120
33.110
33.090
33.014
33.080
33.083
0.283
0.862%

-35
33.120
33.110
33.090
33.080
33.080
33.096
0.296
0.902%

-30
33.100
33.090
33.100
33.080
33.090
33.092
0.292
0.890%

-25
33.070
33.040
33.040
33.040
33.060
33.050
0.250
0.762%

-20
33.070
33.060
33.040
33.040
33.030
33.048
0.248
0.756%

-15
33.060
33.200
33.040
33.040
33.030
33.074
0.274
0.835%

-10
33.050
33.040
33.030
33.027
33.052
33.040
0.240
0.731%

-5
33.006
32.998
33.027
33.024
33.010
33.013
0.213
0.649%

0
33.010
32.989
32.997
32.998
33.002
32.999
0.199
0.607%

5
32.994
33.001
32.980
32.970
32.990
32.987
0.187
0.570%

10
32.960
32.972
32.960
32.960
32.983
32.967
0.167
0.509%

15
32.950
32.932
32.940
32.960
32.940
32.944
0.144
0.440%

20
32.920
32.900
32.920
32.901
32.930
32.914
0.114
0.348%

25
32.916
32.890
32.924
32.912
32.900
32.908
0.108
0.330%

30
32.880
32.860
32.890
32.867
32.880
32.875
0.075
0.230%

35
32.860
32.889
32.867
32.890
32.872
32.876
0.076
0.230%

40
32.880
32.880
32.870
32.892
32.856
32.876
0.076
0.230%

45
32.842
32.870
32.836
32.839
32.850
32.847
0.047
0.145%

50
32.812
32.820
32.826
32.830
32.824
32.822
0.022
0.068%

55
32.810
32.807
32.810
32.800
32.790
32.803
0.003
0.010%

60
32.760
32.770
32.770
32.760
32.778
32.768
-0.032
-0.099%

65
32.758
32.749
32.750
32.730
32.740
32.745
-0.055
-0.166%

70
32.679
32.701
32.717
32.707
32.710
32.703
-0.097
-0.296%

75
32.684
32.687
32.692
32.688
32.679
32.686
-0.114
-0.348%

80
32.667
32.669
32.655
32.652
32.664
32.661
-0.139
-0.423%

85
32.641
32.649
32.652
32.642
32.640
32.645
-0.155
-0.473%

表2.经过AUTOTRIM校准之后的LSI时钟频率在进行了AUTOTRIM校准之后LSI时钟的输出频率


温度℃
结果1
结果2
结果3
结果4
结果5
平均结果
平均误差
平均误差率

-40
32.840
32.830
32.820
32.820
32.840
32.830
0.030
0.091%

-35
32.823
32.830
32.825
32.840
32.823
32.828
0.028
0.086%

-30
32.845
32.835
32.856
32.843
32.830
32.842
0.042
0.127%

-25
32.850
32.847
32.842
32.847
32.850
32.847
0.047
0.144%

-20
32.843
32.840
32.851
32.851
32.846
32.846
0.046
0.141%

-15
32.833
32.841
32.838
32.846
32.840
32.840
0.040
0.121%

-10
32.820
32.820
32.820
32.836
32.838
32.827
0.027
0.082%

-5
32.830
32.820
32.825
32.810
32.830
32.823
0.023
0.070%

0
32.820
32.818
32.810
32.820
32.818
32.817
0.017
0.052%

5
32.835
32.833
32.823
32.831
32.812
32.827
0.027
0.082%

10
32.842
32.847
32.830
32.845
32.839
32.841
0.041
0.124%

15
32.840
32.840
32.830
32.837
32.840
32.837
0.037
0.114%

20
32.835
32.840
32.822
32.828
32.839
32.833
0.033
0.100%

25
32.824
32.829
32.830
32.828
32.836
32.829
0.029
0.090%

30
32.830
32.824
32.824
32.813
32.824
32.823
0.023
0.070%

35
32.833
32.830
32.814
32.829
32.829
32.827
0.027
0.082%

40
32.831
32.814
32.846
32.850
32.841
32.836
0.036
0.111%

45
32.856
32.850
32.847
32.851
32.850
32.851
0.051
0.155%

50
32.856
32.852
32.821
32.823
32.843
32.839
0.039
0.119%

55
32.817
32.826
32.822
32.818
32.827
32.822
0.022
0.067%

60
32.811
32.826
32.816
32.809
32.819
32.816
0.016
0.049%

65
32.851
32.837
32.840
32.827
32.827
32.836
0.036
0.111%

70
32.855
32.856
32.854
32.848
32.859
32.854
0.054
0.166%

75
32.836
32.844
32.840
32.846
32.851
32.843
0.043
0.132%

80
32.829
32.809
32.822
32.824
32.827
32.822
0.022
0.068%

85
32.836
32.817
32.822
32.827
32.831
32.827
0.027
0.081%




测试的样品为CW32L083VCT6,工作区间为-40℃-85℃,通过图表可以很明显的看出,未经过校准的LSI输出的最大误差值为0.296kHz,误差率大概为0.9%,而经过AUTOTRIM校准之后的LSI输出的频率最大误差为0.054kHz,误差率为0.166%,或许看值不是很明显,但是未校准之前的最大误差率是校准之后的最大误差率的5.4倍。
通过对比上面两个表格的数据可以看到在各个温度下,经过AUTOTRIM校准之后的LSI的时钟频率会比没有校准的LSI更稳定,一直保持在32.8kHz-32.850kHz附件,经过AUTOTRIM校准之后的LSI频率受外界因素的影响被大大的降低,使得开发板和芯片工作的更加稳定。而没有校准的LSI在某些情况下比如说高温和低温,输出的频率会产生较大的出入,可能会对芯片在实际使用的场景下性能有些微影响。




Bowclad 发表于 2022-10-4 19:05

这些数据头都看麻了

pl202 发表于 2022-10-11 22:04

如何实现AUTOTRIM时钟校准?

E=MC2U 发表于 2022-10-19 19:23

现在的用户,内部32K RCOSC -40~85℃,全电压全温域做到1%精度,还不满意
页: [1]
查看完整版本: L083的AUTOTRIM实时时钟校准功能测试