记:芯片硬件定时器的精度校准方法

22 篇文章 1 订阅
16 篇文章 0 订阅

0x00 概述

定时器是嵌入式软件开发最长接触的事物,本篇文章主要介绍了在某些极端情况下对于硬件定时器精度的校准方式。阅读本文之前,您需要了解的一些前置技能有:

技能名称技能熟练度技能教程链接
单片机外设熟悉暂无

0x01 误差来源

定时器的概念我也无需过多介绍,现在一般有软件定时器与硬件定时器。硬件定时器素来有时间精度较高、配置方案灵活、不消耗CPU资源等特点。一般的定时器计数模块都可以按照其进入时钟进行相关的运算,而现在大部分的CPU时钟都是经PLL倍频锁相得来,所以大致与其输入频率有关。一般来说,如果有一个较为准确的时钟来源,就会较为完整的生成需要的波形。但是输入晶振的精度如果出现问题,有可能产出的内部时钟就是有一定的误差,且可能定时器本身的计算电路存有固定的误差。经实际测试,这个值一般在±1%~0.1%左右徘徊。但在某些对于精度要求较高的场合下,这个1%是无法接受的极大误差,这时就需要某种校准方案将其纠回。

0x02 校准方式

这里只提供这种校准的方式构思,没有办法提供代码。故讲述可以较为抽象,有什么问题,可以与我聊天,我看到后会一一解答。

0x12 误差定位

这种误差平时操作基本不会受到影响,一般仅会在使用某些定时器的计数器功能时,在记录低频信号时会受到干扰,因为当前波形的计算方式基本上都是假设当前定时器的计数模块输入信号为完美信号(占空比50%、频率为固定频率、信号相位角为0°),但是实际上不会有这样的信号存在。现在的PLL电路可以做到很高的输出波形精度,但也是需要极高的输入精度。而有很多情况下,没办法做到那么高的输入信号,所以就会引入部分误差。解决办法主要有两种:硬件(更换有源晶振)、软件(详见下文)。

0x22 误差捕获信号

上文讲述可以抽象出如下公式:
当 前 真 实 计 数 值 = 定 时 器 计 数 值 ∗ 时 钟 源 误 差 比 例 当前真实计数值=定时器计数值*时钟源误差比例 =
也可以转化为:
时 钟 源 误 差 比 例 = 定 时 器 计 数 值 / 当 前 真 实 值 时钟源误差比例 = 定时器计数值 / 当前真实值 =/
也就获取到了误差校准的方法,就是指定一个较为稳定的波形,将其校准到与校准波形精度一致的情况。
而校准信号推荐为50%占空比、1Hz 方波信号,这种信号较好生成,低频传输效果良好,波形精度一般可以保证在0.1%左右。这样就可以很精准的定位误差比例。也就可以确认真实的计数值。

0x03 后记

这是一种较为取巧的方式,这种情况下,仅能得到一个暂时稳定的数字(误差比例),但是可能根据后期相关的使用,硬件相关的老化与损耗。性能会相应的下降。因此这个数据可能需要一定的时间就要更新一次,并且在更换了外部输入时钟源后就需要再次修改一次。较为麻烦,仅在某些特殊情况下使用,正宗的方式其实还是通过更换一个高精度、高可靠性的输入时钟源来保证采样的稳定性。

更多

本文首发自 记:从零开始讲解UDS(三)——网络层-我的博客,更多文章可进入我的博客详查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenDreamer

如果帮到了你,还望请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值