我总是使用图片具有的内部振荡器,因为我从未发现需要以高于 8 MHz 的频率运行任何东西(这是我使用的图片往往能够运行的最快)。除了超过 8 MHz 之外,还有什么原因意味着我应该使用外部振荡器吗?对我来说,这似乎是另外一件事,但我很想听听其他人的所作所为。
内部或外部振荡器
正如其他人所说,准确的频率和频率稳定性是使用外部陶瓷谐振器或晶体的原因。谐振器的精度是内部 RC 振荡器的数倍,并且足以用于 UART 通信。如果您正在进行一些其他类型的通信,如 CAN、USB 或以太网,则晶体要准确得多,并且是必要的。
使用外部晶体的另一个原因是频率的选择。晶体的频率范围很广,而内部振荡器通常是一个频率,可能会启用 4x PLL。一些较新的 24 位内核 PIC 在时钟链中同时具有乘法器和除法器,因此您可以从单个内部振荡器频率中选择多种频率。
当然,除了通信之外,还有各种应用本身需要准确的频率或定时。时间是电子产品中我们可以以最便宜的方式准确测量的属性,因此有时问题会转化为测量时间或产生具有准确时序的脉冲之一。
然后有些应用程序需要与其他块进行一些长期同步。如果用作实时时钟的基础,则 1% 的振荡器每天会关闭超过 14 分钟。也可能需要准确的长期时间,而不必知道实时时间。例如,假设您希望一组低功耗设备每小时唤醒一次,以交换数据几秒钟,然后重新进入睡眠状态。一个 50 ppm 的晶体(非常容易获得)将在一小时内关闭不超过 180 毫秒。不过,1% RC 振荡器可能会关闭 36 秒。这将大大增加设备的准时率,从而增加每小时只需要通信几秒钟的设备的电力需求。
精确。内部时钟不精确,可能会受到噪声的影响。
与温度无关的精度。典型的振荡器变化很大。在低温或高温应用中,或者如果温度变化很大,则可能需要专用温度补偿振荡器。
速度。内部振荡器可能达不到 IC 的最高速度。为此可能需要外部的。
电压。内部定时器的速度可能取决于其运行的电压。
需要多个时钟。一些应用程序想要共享一个振荡器。
内部时钟可能不易使用的特殊应用。对于计时应用,划分内部时钟可能比向其投掷便宜的 31 kHz 手表晶体更难。
在我的脑海中,arduino 使用的 ATMEGA 328 需要一个 5V 的外部晶体才能达到最大速度。睡莲版本在内部振荡器上以 8 MHz 运行,因为它仅限于 3.3v。MSP430 超值系列启动板在 3V 时限制为 10 MHZ,在 2.5V 时限制为 8 兆赫。
使用外部频率稳定性会更高。因此,如果您有一个真正依赖于 MCU 频率的应用程序,那么您可能需要使用外部的应用程序。
但是大多数现代 mcu:s 都有一个相当稳定的内部 osc,因此我认为这在几年前曾经是一个更大的问题。还有越来越多的方法可以修剪内部,并补偿温度漂移(等)。
另一方面,还有其他方法可以确保您同步,在某些国家/地区,电网中的频率稳定性为 50Hz ±0.01Hz,而瑞典等其他地方实际上有 ±0.001Hz,我已经看到项目使用它来保持事情同步。然后你不再依赖单片机频率,你可以使用内部频率。但这是一个小话题:)
频率稳定性是主要因素,特别是对于高速串行通信。但这也导致偶尔需要一个看似奇怪频率的晶体来获得准确的波特率,因为时钟分频器为您提供的选项有限。