内部或外部振荡器


22

我一直使用图片所具有的内部振荡器,因为我从未发现需要以高于8 MHz的频率运行任何东西(这是我使用的图片往往能够达到的最快速度)。除了高于8 MHz之外,是否还有其他原因意味着我应该使用外部振荡器?对我来说,似乎错了另一件事,但我很想听听别人的所作所为。


即使MCU具有内部CPU,有时还是需要外部晶振?MCU具有内部CPU的事实与使用内部或外部时钟的原因几乎无关。您是否在混淆/混淆两个不同的问题?
gbulmer

Answers:


33

正如其他人所说,准确的频率和频率稳定性是使用外部陶瓷谐振器或晶体的原因。谐振器的精度比内部RC振荡器高出几倍,并且足以用于UART通信。晶体要精确得多,如果要进行其他类型的通信(例如CAN,USB或以太网),则必须使用晶体。

外部晶体的另一个原因是频率的选择。晶体具有很宽的频率范围,而内部振荡器通常是一个频率,可以选择启用4x PLL。一些较新的24位核心PIC在时钟链中同时具有乘法器和分频器,因此您可以从单个内部振荡器频率中选择多种频率。

当然,除了通信之外,还有各种固有需要精确频率或定时的应用。时间是电子产品中的属性,我们可以最便宜地对其进行精确测量,因此有时问题会转变为测量时间或产生具有精确定时的脉冲之一。

然后,有些应用程序需要与其他块进行一些长期同步。如果将1%的振荡器用作实时时钟的基础,则每天将关闭14分钟以上。可能需要准确的长期时间,而不必知道实时时间。例如,假设您希望一堆低功耗设备每小时唤醒一次,以交换数据几秒钟,然后再进入睡眠状态。一个50ppm的晶体(非常容易获得)在一个小时内将关闭不超过180ms。1%RC振荡器可能会关闭36秒。这将增加大量的开机时间,从而给每小时仅需要通信几秒钟的设备增加电源需求。


1
偏离主题,但我认为CANbus的设计足够强大,可以处理节点之间时钟频率的变化。我误会了吗
Stephen Collings 2012年

1
@Remiel:尽管有一些时钟频率差异,CAN仍规定节点保持同步。节点仍需要合理关闭。在大多数情况下,基本上每个节点至少需要一个陶瓷谐振器。
奥林·拉斯洛普

24
  1. 精确。内部时钟不精确,可能会受到噪声的影响。

  2. 温度独立精度。典型的振荡器变化很大。在低温或高温应用中,或者温度变化剧烈时,可能需要专用的温度补偿振荡器。

  3. 速度。内部振荡器可能无法达到IC的最高速度。为此可能需要外部的。

  4. 电压。内部计时器的速度可能取决于其运行电压。

  5. 需要多个时钟。一些应用程序希望共享一个振荡器。

  6. 内部时钟可能不容易使用的特殊应用。为了保持时间,内部时钟的分频可能比向其扔一个廉价的31 kHz时钟晶体更难。

arduino使用的ATMEGA 328超出了我的头脑,它需要一个5V的外部晶体来达到其最大速度。百合垫版本在内部振荡器上以8 MHz运行,因为它限于3.3v。MSP430 Value Line启动板在3V时限制为10 MHZ,在2.5V时限制为8 MHZ。


10
精度示例:USB需要精确的时钟。Microchip PIC18F2550可以在内部产生几乎任何时钟速度,但是它的精度对于USB来说太差了。当我尝试时,每10-20秒就会断开一次连接。使用外部振荡器不会发生这种情况。同时,它们具有PIC18F25k50,可以将其时钟与USB信号同步,并且不再需要用于USB的外部振荡器。
sweber

1
只是为了讲究技巧,内部8MHz时钟是一个RC振荡器,而不是晶体,因此其准确性很差。
奥斯丁

@奥斯汀固定评论。
路人2015年

13

外部的频率稳定性会更高。因此,如果您的应用程序确实依赖于单片机的频率,那么您可能需要使用外部程序。

但是大多数现代的mcu:s具有相当稳定的内部osc,因此,我认为这在几年前是一个更大的问题。还有越来越多的方法来修整内部电路,并补偿温度漂移(等)。

另一方面,还有其他方法可以确保您保持同步,在某些国家/地区,电网的频率稳定度为50Hz±0.01Hz,而其他地方(如瑞典)实际上为±0.001Hz,我看到有项目使用该频率来保持同步。事物同步。这样,您将不再依赖于单片机频率,而可以使用内部变频器了。但这只是一个话题:)


3
请注意,这些电源频率数字是长期稳定性。可以在数周或数月内准确地保留时间,但是在短时间内(几小时),您可能会遇到严重偏差。但是,您几乎不必调整任何廉价数字时钟上的时间。
stevenvh 2011年

@stevenvh好点,还请注意,还有其他来源也可用于验证长期稳定性。gps和gsm系统都有很好的时钟,但是使用它们要复杂得多。
约翰

3
尽管还有许多其他应用程序需要使用它,但是有一个应用程序会特别引起很多问题,而这些问题没有准确的时基-串行通信。
JustJeff 2011年

我不知道使用外部石英晶体不会获得更高的频率稳定性。硅振荡器不会获得低于0.1%的精度。
詹森·S

1
@Johan-DCF77 / WWVB的精度与GPS或GSM一样,并且更容易使用(1Hz心跳)
stevenvh 2011年

2

频率稳定性是主要因素,特别是对于高速串行通信。但是,由于时钟分频器为您提供的选择有限,因此偶尔需要以似乎奇数频率获得正确的波特率的晶体。


1

我实际上遇到了一种情况,其中1%对于UART 还不够好。

如果你们中有人听说过Teensy ++ v1.0微控制器开发板,它就有一个非常敏感的UART。我将主机波特设置为115200,并将其设置为115200,并且最长的时间无法弄清为什么它无法正确读取数据。原来我的房东正在发送接近114300的波特率。(115200-114300)/ 115200 =〜0.9%误差 我在两个不同的MCU上进行了尝试,它们工作正常。

重点是:无论您的应用是什么,如果时钟频率的准确性更高是有利的,那么如果芯片没有必要的驱动电路,则应使用外部谐振器,晶体甚至振荡器。

PS:我想知道是否有人对他们在UART硬件上做出的使它如此敏感的低级设计选择有任何见解?


UART的基本要求是,接收器在有效时对每个位进行采样。理想情况下,接收器会注意到起始位到达的确切时刻,并在1.5个位次之后精确地对数据进行采样,然后在8.5个位次之后精确地对2.5、3.5等进行采样。实际上,当接收器检测到起始脉冲时,通常会有一些斜率,此后可能会有更多的斜率。例如,可能会尝试使用每秒运行8,192条指令的处理器来接收2400波特
。...– supercat

如果发送定时非常干净,则可以执行此操作,但是不会以精确的417usec间隔进行采样。相反,它将以366us和488us的间隔发生。当接收器“挑剔”时,这通常意味着它比应该采样的时间早或晚采样数据,而此时理想的发射器将输出期望的数据位。
supercat

@supercat为什么他们会设计成早于采样?似乎像您描述的那样以.5采样总是最好的。几年前,这就是我实现软件UART的方式……我什至没有想到要以其他方式实现它。这只是允许发射机上的最大误差余量。
NickHalden

@JGord:如果采样是由一个比波特率快得多的时钟控制的,那就太好了,但并非总是如此。例如,假设有人试图使用运行在1.0MHz且没有UART的6502接收115,200波特。等待起始位的循环将花费7us,并且轮询机会的间隔为1us。关于6502何时进行轮询有8us的不确定性,但由于这些位的长度为8.6us,如果...的话,一个人可以成功接收数据...
supercat

...传输速度精确,上升和下降时间均匀一致,并且没有其他抖动。我不了解Teensy板,但是如果它使用软件UART将控制器推超出其正常功能,我不会感到惊讶。
supercat

1

外部晶体振荡器比内部时钟更为精确,因此在需要精确定时时应使用它们。有时为了省钱,设计师使用内部的。


2
这似乎没有为现有答案添加任何内容。
亚当·豪恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.