[CW32L083系列]

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

[复制链接]
132|3
手机看帖
扫描二维码
随时随地手机跟帖
1308365377|  楼主 | 2022-9-23 09:59 | 显示全部楼层 |阅读模式
本帖最后由 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%

1663896535008.png

测试的样品为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%精度,还不满意

使用特权

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

本版积分规则