所有关于电路
技术文章

如何校准MCU内部振荡器

2019年12月12日经过Eduardocorpeño.

本文描述了在低端微控制器单元中可用的内部RC振荡器校准机制。介绍了自动校准的基本校准程序和注意事项。

在上一篇文章中单片机内部振荡器的好与坏,我们暴露了MicroController单元中内部RC振荡器的益处和缺点。

现在我们将探索一种减beplay体育下载不了轻这些缺点的技术,包括补偿振荡器中的不准确的被动分量值。这种技术通常被称为修剪微调, 或者校准内部振荡器。

微处理器内振荡器微调

由于它们的缺点,MCU中的内部振荡器具有用于微调其频率的机制,而不是与乐器不同。这通常通过通过微型调节振荡器的RC电路中的电容来完成这一点电容替代盒

电容替换盒包含一组开关和电容器,可以在一定精度范围内产生任何电容。例如,考虑下面的电容器网络,这些电容器可以并联产生从0nF到255nF的任何整数电容。

电容替代网络。

该开关可条件地包括电源的电容器为2。例如,仅关闭右侧的三个开关产生7nf。是的,这是二进制!

现在,由于RC振荡器通过充放电电容工作,所以这些开关需要是模拟的。因此,这些微型电容替代盒使用一种特殊类型的开关称为传输盖茨模拟开关。这些几乎就像继电器的半导体替代品;它们控制数字信号和切换模拟信号。有许多商业传输门IC,如CD4016,CD4066和CD4053。

有关更多关于传输门,请阅读文章CMOS传输门由Robert Keim。

从程序员的角度来看,内部振荡器的频率调整可以归结为修改内存映射寄存器的值。该寄存器中的位控制电容替换模块中的开关。

内部时钟源微调寄存器,广泛用于s08系列。从NXP形象。

对于S08家族的一些成员,这个寄存器称为ICSTRM (内部时钟源微调)。这是一个8位寄存器,二进制重置值为10000000。这8位控制电容替换模块,这反过来影响振荡器:该寄存器的值越高,电容越高,电容越高。当然,这具有对频率的互易效应。

简单的校准程序

这是一个很好的修剪过程,您可以在MCU上执行:

  1. 运行一个产生1kHz方波的应用程序。
  2. 迭代直到没有任何改进可能:
    • 测量生成的信号的时期。
    • 将修剪寄存器修改为1ms。
    • 重新编译和运行。

迭代的原因是,由于修剪模块中的电容器的值(如具有略微不同的楼梯的电容器的值(如一组略有不同的楼梯),您将估计修剪寄存器的更改将被一些未知因素估算。迭代负责这种不规则性。

自动化这个过程

您可能想要为您的应用程序自动化这个过程,以便您的程序在开机时校准振荡器,作为启动序列的一部分。

为此,您需要一个可靠的时钟参考,可以与MCU生成的固定频率信号进行比较。虽然这可能看起来毫无意义,因为外部时钟信号是您尝试避免的,但这种外部信号不必满足您的时钟要求;它必须简单准确稳定。

自动修剪程序的另一个重要细节是算法:上述过程适用于具有示波器和漂亮计算器的工程师。但是,许多校准功能使用连续的近似方法。这是由连续近似ADC使用的相同算法,其本质是二进制搜索算法。毫不奇怪,这需要n个迭代N位修剪寄存器。

要了解ADC中的连续近似,您可能需要阅读文章了解连续近似寄存器ADC艾略特·史密斯。

设备的程序员

有一些设备程序员,提供有用的附加功能,除了编程ROM存储器和微控制器。有些甚至在微控制器上执行此修剪程序,让您方便地编程一批设备,微调每个单元上的内部振荡器。

一些设备程序员能够校准其目标微控制器的内部振荡器。

如果您想知道在要切断设备电源时,将正确的微调值写入RAM寄存器有什么好处,那就有办法了!

MCU制造商通常在非易失性存储器中提供特殊位置,以存储设备的修剪值。这不起作用:您的代码仍然必须在启动时从此位置获取值,并将值写入修剪寄存器。


后记

我希望能够让您了解内部振荡器的校准机制,以及您在校准MCU时的选项。

如果你想自己尝试一下,你应该阅读下面的文章一种单片机内部振荡器微调程序,在那里你将看到一步一步的解释,然后是一个示例实验,我们将利用一个DIY修剪过程算法