本文介绍了低端微控制器单元中可用的内部RC振荡器校准机制。介绍了自动校准的基本校准程序和注意事项。
MCU中的内部振荡器微调
由于它们的缺点,MCU中的内部振荡器具有微调其频率的机制,与乐器不同。这通常是通过一个微型电容替代盒调整振荡器的RC电路中的电容来完成的。
电容替换盒包含一系列开关和电容器,可在一定精度范围内产生任何电容。例如,考虑以下电容器网络,这些电容器可以并联组合以产生从0nF到255nF的任何整数电容。
开关有条件地包括2次方的电容器。例如,仅闭合右侧的三个开关会产生7nF。是的,它是二进制的!
现在,由于RC振荡器通过对电容器进行充电和放电来工作,因此这些开关需要是模拟的。出于这个原因,这些微型电容替代盒使用一种特殊类型的开关,称为传输门或模拟开关。这些很像继电器的半导体替代品。它们控制数字信号并切换模拟信号。有很多商用传输门IC,如CD4016、CD4066和CD4053。
有关传输门的更多信息,请阅读RobertKeim的文章TheCMOSTransmissionGate。
从程序员的角度来看,内部振荡器的频率调整归结为修改内存映射寄存器的值。该寄存器中的位控制电容替换模块中的开关。
内部时钟源微调寄存器,广泛用于s08系列。
对于S08系列的某些成员,该寄存器称为ICSTRM(内部时钟源微调)。这是一个8位寄存器,二进制复位值为10000000。这8位控制电容替换模块,进而影响振荡器的周期:此寄存器的值越高,电容和周期越高。当然,这对频率有相互影响。
简单的校准程序
这是您可以在MCU上执行的一个很好的修整程序:
运行一个生成1kHz方波的应用程序。
迭代直到无法改进:
测量生成信号的周期。
将Trim寄存器修改为1ms。
重新编译并运行。
迭代的原因是,由于微调模块中电容器值的不确定性(例如一组高度略有不同的楼梯),您将为微调寄存器估计的更改将因某些未知因素而关闭。迭代处理了这种不规则性。
自动化这个过程
您可能希望为您的应用程序自动执行此过程,以便您的程序在上电时校准振荡器,作为引导序列的一部分。
为此,您将需要一个可靠的时钟参考来与您的MCU生成的固定频率信号进行比较。尽管这似乎毫无意义,因为您首先要避免使用外部时钟信号,但该外部信号不必满足您的时钟要求;它必须是准确和稳定的。
自动微调过程的另一个重要细节是算法:上述过程适用于拥有示波器和漂亮计算器的工程师。然而,许多校准函数使用逐次逼近法。这与逐次逼近型ADC使用的算法相同,其本质是二分搜索算法。毫不奇怪,对于一个N位修整寄存器,这需要N次迭代。
要了解ADC中的逐次逼近,您可能需要阅读ElliottSmith撰写的文章了解逐次逼近寄存器ADC。
设备程序员
除了对ROM存储器和微控制器进行编程之外,还有一些设备编程器提供有用的附加功能。有些甚至在您的微控制器上执行此微调程序,以便您方便地对一批设备进行编程,微调每个单元上的内部振荡器。
如果您想知道在您即将切断设备电源时将正确的修整值写入RAM寄存器有什么好处,那么您就大功告成了!
MCU制造商通常在非易失性存储器中提供一个特殊位置来存储设备的微调值。这不会自动工作:您的代码仍然必须在启动时从该位置获取值并将值写入修整寄存器。
全部0条评论
快来发表一下你的评论吧 !