ARM MCU 如何比外部晶振运行得更快?

电器工程 手臂 水晶 皮质-m
2022-01-16 06:50:42

所以在此之前,我只使用简单的 8 位 Atmel MCU,我在我的开发板原理图中意识到它只有一个 12Mhz 晶体,但 MCU 的工作频率高达 100MHz。(我认为默认是80MHz。我只是为了好玩才把它调高一次。这只是代码中的一个简单的行。)

它是如何做到的?例如,为什么 Atmega328 以使用的晶体速度运行?

2个回答

这与核心是 ARM 处理器没有任何关系。这是关于时钟电路如何工作的:

在微控制器、射频芯片、音频芯片等许多系统中,您需要生成一个更快的时钟,该时钟是某个参考时钟(例如,外部晶体)的精确倍数。

您可以通过使用压控振荡器 (VCO) 来实现这一点,您可以通过输入或降低控制电压来调整频率。

现在,只需设置任何控制电压,您就可以使其以大致在正确“范围”内的频率振荡,但不是以输入频率的精确倍数。尤其是,VCO 可能会有点漂移,因此频率也会不断地“漂移”到各处。您需要通过将其与参考振荡器进行比较来控制该振荡器。

做到这一点的方法是采用锁相环这个想法很简单:

  1. 将来自 VCO 的频率除以系数\$N\$这就是我们希望 VCO 比参考更快的因素。这样做很容易:例如,您可以简单地使用计数到 N 的数字计数器,然后才更改输出。
  2. 将该\$f_\text{VCO}/N\$时钟与\$f_\text{ref}\$处的参考时钟进行比较。如果一个比另一个快,则相应地调整频率。您可以通过对两个时钟进行异或运算来以数字方式做到这一点——理想情况下,如果它们相同,则结果为常数 0,但如果一个比另一个快,那么当两个时钟的 XOR 为 1;相应地减慢或加快 VCO。

上面是一个控制回路,锁定在相位 - 因此得名。

对于具有大量外围设备并因此受益于内部具有多个时钟的“丰富”微控制器,通常至少具有 1 个 PLL。ATMega328 在这方面有点奇怪:它是一个相对耗电、外围设备相对丰富的微控制器,但仍然没有 PLL。

一些设备中有一个 PLL,可以将晶体频率倍增到更高的频率。ATMega328 没有 PLL,它直接使用晶体。