由于其缺点,MCU 中的内部振荡器配备了微调其频率的机制,与乐器不同。这通常是通过微型电容替换盒调整振荡器 RC 电路中的电容来完成的。
电容替换盒包含一系列
开关和
电容器,可产生一定精度范围内的任何电容。例如,考虑以下电容器网络,它可以并联组合以产生 0nF 到 255nF 的任何整数电容。
这些开关有条件地包含 2 次幂的电容器。例如,仅闭合右侧的三个开关会产生 7nF。是的,它是二进制的!
现在,由于 RC 振荡器通过对电容器充电和放电来工作,因此这些开关需要是模拟的。因此,这些微型电容替代盒使用一种特殊类型的开关,称为传输门 或模拟开关。这些很像
继电器的半导体替代品;它们控制数字信号并切换模拟信号。有许多商用传输门 IC,例如 CD4016、CD4066 和 CD4053。
从程序员的角度来看,内部振荡器的频率调整归结为修改内存映射寄存器的值。该寄存器中的位控制电容替换模块中的开关。
内部时钟源调整寄存器,在 s08 系列中广泛使用。图片来自恩智浦。
对于 S08 系列的某些成员,该寄存器称为 ICSTRM(内部时钟源调整)。这是一个8位寄存器,二进制复位值为10000000。这8位控制一个电容替换模块,进而影响振荡器的周期 :该寄存器的值越大,电容和周期越高。当然,这对频率有相反的影响。
简单的校准程序
以下是您可以在 MCU 上执行的一个不错的调整过程:
运行生成 1kHz 方波的应用程序。
迭代直到无法改进:
测量生成信号的周期。
将 Trim 寄存器修改为 1ms。
重新编译并运行。
迭代的原因是,由于微调模块中电容器值的不确定性(例如一组高度略有不同的楼梯),您对微调寄存器估计的更改将因某些未知因素而偏离。迭代可以解决这种不规则性。
自动化此过程
您可能希望为您的应用程序自动执行此过程,以便您的程序在加电时校准振荡器,作为启动序列的一部分。
为此,您需要一个可靠的时钟参考来与 MCU 生成的固定频率信号进行比较。尽管这看起来毫无意义,因为外部时钟信号是您首先要避免的,但该外部信号不必满足您的时钟要求;它必须准确且稳定。
自动微调过程的另一个重要细节是算法:上述过程适用于拥有示波器和出色计算器的工程师。然而,许多校准函数使用逐次逼近方法。这与逐次逼近型ADC使用的算法相同,其本质是二分搜索算法。毫不奇怪,对于 N 位调整寄存器来说,这需要 N 次迭代。
要了解 ADC 中的逐次逼近,您可能需要阅读Elliott Smith 撰写的文章《了解逐次逼近寄存器 ADC》 。
设备程序员
除了对 ROM
存储器和微控制器进行编程之外,还有一些设备
编程器还提供有用的附加功能。有些甚至在您的微控制器上执行此微调程序,以便您方便地对一批设备进行编程,微调每个单元上的内部振荡器。
一些设备编程器能够校准其目标微控制器的内部振荡器。