打印
[APM32F4]

利用定时器TMR对LSI进行校准

[复制链接]
2637|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1455555|  楼主 | 2023-10-27 00:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1455555 于 2023-11-3 09:26 编辑

对LSI了解比较少,今儿个来学习一下。LSICLK作为低速时钟可以不需要外部硬件,从而降低硬件成本;同时,比起使用外部振荡器,LSICLK具有更短的启动时间和更低的功耗。但由于LSICLK由RC振荡电路产生,易受温度等外界环境影响,因此会产生较大的偏频,易产生精度相对较低问题。考虑到这一问题,原本想找出一种利用TIMER捕获LSICLK进行校准的方法,但查阅相关资料后,未发现校准相关寄存器的位定义,于是只测出了实际时钟值。在实际应用过程中,可以根据测得的实际值再实现定时等功能。
这次使用手边的APM32F411开发板编写例程~

查阅用户手册得到相关信息:LSICLK 由 RC 振荡器产生,范围是 32kHz(17kHz和47kHz)之间,如表1所示。不同芯片的 RC 振荡器频率不同,且同一颗芯片随着温度、电压的变化也会存在差异。可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟,如图所示(截取了时钟树的一部分)。LSICLK 可以通过 RCM_CSTS寄存器的 LSIEN 位来启动或关闭。RCM_CSTS 里的 LSIRDY** 位指示低速内部振荡器是否稳定。在启动阶段,直到这个位被硬件设置为“1”后,时钟才被释放。

表1 LSICLK 振荡器特性

   
Symbol
   
Parameter
Minimum
   
value
Typical
   
value
Maximum
   
value
Unit
fLSICLK
Frequency  (VDD=2-3.6V,
  
TA  =-40~105℃)
17
32
47
KHz
IDD(LSICLK)
Power  consumption of LSICLK oscillator
-
0.4
0.6
μA
tSU(LSICLK)
Startup time of LSICLK oscillator, (VDD=3.3V,
  
TA=- 40~105℃)
-
15
40
μS


TMR测量LSI频率原理
LSICLK是内部低速时钟,受温度和主频影响大。通常会使用LSICLK作为独立看门狗和自动唤醒单元时钟来源,以32KHz的固定数值设置预分频系数,进行计算,但这样会产生较大的误差。
算了一下,若以32KHz为固定数值,要获得1s的时间基准,设置预分频系数为31999。但当LSICLK实际数值比32KHz大,假设为34KHz时,实际的时间基准为1.065s(1.065s = 34KHz / ( 31999 +1) )。也就是说以固定数值32KHz每计时1s,会使得计时效果偏慢0.065s。
TIMER使用HSE外部高速时钟,精确度高。可以使用TMR的输入捕获模式,捕捉相邻两次的上升沿或者下降沿,记录时间差值,通过计算得出LSICLK实际频率。
(下段文字及公式角标发出后会失去角标格式,给一张截图方便查看)
下图中,Time_Capture1TIMER第一次捕获到LSICLK上升沿的时间,记作t1Time_Capture2TIMER第二次捕获到LSICLK上升沿的时间,记作t2;二者相减的时间差记作tperiodLSICLK频率记作fLSI,周期记作TLSITIMER周期计数值记作CNT,频率记作fTMR(已知),周期记作TTMR
利用TIMER捕获相邻两次的上升沿,其时间差tperiod即为LSICLK周期TLSITIMER时钟来自于高精度外部高速时钟HSE,利用其周期数CNT 除上已知的TMR时钟频率fTMR得到LSICLK周期TLSI;取LSICLK周期倒数即为LSICLK实际频率fTMR
TLSI =tperiod = t2 - t1 = CNT * TTMR = CNT/ fTMR

fLSI  = 1 / TLSI = fTMR /CNT

软件编写
原理理解得差不多了,就可以着手写出实现代码了。
利用TMR5定时器,捕获LSICLK相邻两次上升沿,通过计算获得LSICLK实际频率。将测得的频率打印至串口助手。主要为两个部分:设置TMR5 CH4为输入捕获模式和打开LSICLK使能,将其映射到TMR5 CH4。通过中断来测量计算LSICLK频率。画了一个流程图进行大概的说明。
部分代码如下:1、串口配置

2、TMR5配置及LSI REMAP

3、中断服务函数

4、while(1)

实验现象测量出来为37K左右,属于17kHz和47kHz正常范围内。




tmr5.png (169.75 KB )

tmr5.png

串口配置.png (84.46 KB )

串口配置.png

主函数.png (147.43 KB )

主函数.png

使用特权

评论回复
沙发
kai迪皮| | 2023-10-27 10:41 | 只看该作者
要是可以贴出测量后的结果就更好了

使用特权

评论回复
板凳
luobeihai| | 2023-10-27 18:26 | 只看该作者
计算得到了LSI的实际频率之后,如何根据该频率产生RTC的基准频率?从而使用LSI也可以得到更精准计时功能。如果补充这部分的介绍就更好了!要是能够给出使用外部LSE、或者使用手册推荐的默认LSI的值,这时使用RTC计时功能,和校准之后的LSI使用RTC计时功能,给出他们的计时准确性的对比就更nice啦

使用特权

评论回复
地板
liu96jp| | 2023-11-16 12:40 | 只看该作者
原来,LSI也是个时钟的啊

使用特权

评论回复
5
t1ngus4| | 2023-11-16 14:04 | 只看该作者
一般来说,定时器是为了计数之类的吧

使用特权

评论回复
6
w2nme1ai7| | 2023-11-16 15:08 | 只看该作者
你这定时器HIA校准啥啊?

使用特权

评论回复
7
tax2r6c| | 2023-11-16 16:45 | 只看该作者
看楼主这个软件编写的流程图,挺好用的

使用特权

评论回复
8
lamanius| | 2023-11-16 18:12 | 只看该作者
REMAP是啥?

使用特权

评论回复
9
l1uyn9b| | 2023-11-16 19:56 | 只看该作者
感觉定时器好像配置也不需要这么复杂的吧

使用特权

评论回复
10
zhizia4f| | 2023-11-17 07:13 | 只看该作者
你这是校准低速的晶振呐,这是原理为了让RTC好用?

使用特权

评论回复
11
d1ng2x| | 2023-11-17 10:32 | 只看该作者
感觉低速时钟就是给闹钟或者RTC用吧

使用特权

评论回复
12
lix1yr| | 2023-11-17 12:03 | 只看该作者
可以外置的RTC,这个比较好

使用特权

评论回复
13
y1n9an| | 2023-11-17 14:17 | 只看该作者
这种校准好像还比较好,比较快呢

使用特权

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

本版积分规则

8

主题

17

帖子

1

粉丝