我一直使用图片所具有的内部振荡器,因为我从未发现需要以高于8 MHz的频率运行任何东西(这是我使用的图片往往能够达到的最快速度)。除了高于8 MHz之外,是否还有其他原因意味着我应该使用外部振荡器?对我来说,似乎错了另一件事,但我很想听听别人的所作所为。
我一直使用图片所具有的内部振荡器,因为我从未发现需要以高于8 MHz的频率运行任何东西(这是我使用的图片往往能够达到的最快速度)。除了高于8 MHz之外,是否还有其他原因意味着我应该使用外部振荡器?对我来说,似乎错了另一件事,但我很想听听别人的所作所为。
Answers:
正如其他人所说,准确的频率和频率稳定性是使用外部陶瓷谐振器或晶体的原因。谐振器的精度比内部RC振荡器高出几倍,并且足以用于UART通信。晶体要精确得多,如果要进行其他类型的通信(例如CAN,USB或以太网),则必须使用晶体。
外部晶体的另一个原因是频率的选择。晶体具有很宽的频率范围,而内部振荡器通常是一个频率,可以选择启用4x PLL。一些较新的24位核心PIC在时钟链中同时具有乘法器和分频器,因此您可以从单个内部振荡器频率中选择多种频率。
当然,除了通信之外,还有各种固有需要精确频率或定时的应用。时间是电子产品中的属性,我们可以最便宜地对其进行精确测量,因此有时问题会转变为测量时间或产生具有精确定时的脉冲之一。
然后,有些应用程序需要与其他块进行一些长期同步。如果将1%的振荡器用作实时时钟的基础,则每天将关闭14分钟以上。可能需要准确的长期时间,而不必知道实时时间。例如,假设您希望一堆低功耗设备每小时唤醒一次,以交换数据几秒钟,然后再进入睡眠状态。一个50ppm的晶体(非常容易获得)在一个小时内将关闭不超过180ms。1%RC振荡器可能会关闭36秒。这将增加大量的开机时间,从而给每小时仅需要通信几秒钟的设备增加电源需求。
精确。内部时钟不精确,可能会受到噪声的影响。
温度独立精度。典型的振荡器变化很大。在低温或高温应用中,或者温度变化剧烈时,可能需要专用的温度补偿振荡器。
速度。内部振荡器可能无法达到IC的最高速度。为此可能需要外部的。
电压。内部计时器的速度可能取决于其运行电压。
需要多个时钟。一些应用程序希望共享一个振荡器。
内部时钟可能不容易使用的特殊应用。为了保持时间,内部时钟的分频可能比向其扔一个廉价的31 kHz时钟晶体更难。
arduino使用的ATMEGA 328超出了我的头脑,它需要一个5V的外部晶体来达到其最大速度。百合垫版本在内部振荡器上以8 MHz运行,因为它限于3.3v。MSP430 Value Line启动板在3V时限制为10 MHZ,在2.5V时限制为8 MHZ。
外部的频率稳定性会更高。因此,如果您的应用程序确实依赖于单片机的频率,那么您可能需要使用外部程序。
但是大多数现代的mcu:s具有相当稳定的内部osc,因此,我认为这在几年前是一个更大的问题。还有越来越多的方法来修整内部电路,并补偿温度漂移(等)。
另一方面,还有其他方法可以确保您保持同步,在某些国家/地区,电网的频率稳定度为50Hz±0.01Hz,而其他地方(如瑞典)实际上为±0.001Hz,我看到有项目使用该频率来保持同步。事物同步。这样,您将不再依赖于单片机频率,而可以使用内部变频器了。但这只是一个话题:)
我实际上遇到了一种情况,其中1%对于UART 还不够好。
如果你们中有人听说过Teensy ++ v1.0微控制器开发板,它就有一个非常敏感的UART。我将主机波特设置为115200,并将其设置为115200,并且最长的时间无法弄清为什么它无法正确读取数据。原来我的房东正在发送接近114300的波特率。(115200-114300)/ 115200 =〜0.9%误差 我在两个不同的MCU上进行了尝试,它们工作正常。
重点是:无论您的应用是什么,如果时钟频率的准确性更高是有利的,那么如果芯片没有必要的驱动电路,则应使用外部谐振器,晶体甚至振荡器。
PS:我想知道是否有人对他们在UART硬件上做出的使它如此敏感的低级设计选择有任何见解?