为什么有些微控制器有许多振荡器(它们的功能是什么)?

电器工程 振荡器 手臂 数据表
2022-01-31 13:12:57

目前我正在阅读基于 Arm 的 ATSAM4L系列数据表,在 BSCIF 和 SCIF 部分中,我遇到了至少 8 种不同的振荡器/时钟(见下图)。我知道 MCU 的时钟信号需要振荡器,但为什么这个 MCU 系列和 MCU 通常需要这么多不同的源?

编辑:这些特定振荡器的功能是什么?

在此处输入图像描述

在此处输入图像描述

4个回答

32kHz 超低功耗振荡器:用于 RTC(实时时钟)。这些可以在后台运行并启用计时,即使在控制器核心处于睡眠状态时也是如此。这样就可以在没有控制器内核高功耗的情况下拥有一个运行时钟。32kHz 振荡器非常精确,通常每月误差不到一分钟。

32kHz RC 振荡器:与上述类似,但精度较低。RC 振荡器可以很容易地集成到 µC 本身中,并且不需要外部部件,但公差不是很好。低时钟速度仍然可以进行一些背景工作,而大多数控制器正在休眠以安全供电。

1MHz RC 振荡器:比 32kHz 振荡器快很多(显然)并且能够进行更快的处理。用于非睡眠模式下的正常操作,并集成在控制器中。因此,对于这个 RC 振荡器,不需要(再次)外部部件。时钟不是很精确,可能会相差几个百分点(尽管通常可以校准这些)。

高达 30MHz 的晶体振荡器:与内部 1MHz 振荡器相比,外部 30MHz 晶体可以将运行速度提高 30 倍,并且可以非常精确,但需要额外的外部部件。较高的时钟也会增加功耗。

PLL:如果需要,使控制器能够以精确的晶体频率运行并获得更高的时钟频率。

由开发人员选择哪个时钟源是成本、功耗、电路板面积、精度和性能的最佳折衷方案(这不一定是静态决定:控制器可能会在高时钟速度上运行几秒钟一些采集、计算、数据传输等。之后它可能会进入深度睡眠模式并且只有 RTC 在后台运行,直到某个事件(通过 RTC 或某个外部触发器)唤醒控制器以重复循环.

这些是干什么用的:

  • 32kHz 低功耗:“数字手表”晶体。当您想关闭主振荡器但又不想忘记它的时间时使用它,这样您就可以定期唤醒。

  • 32kHz RC:更便宜(无晶体),但不太准确。当您想要一块不显示正确时间的数字手表时。

  • 外部快速晶体:用于需要精确高速频率的 USB 等。

  • fast RC 80MHz:用于在不需要精度时廉价地提供主系统时钟。

  • RC 4/8/12MHz:上述的低速(因此可能是低功耗)版本,也可用于为外围设备提供时钟

  • DFLL/PLL:用于产生比可用晶体范围更快的频率。

它们不是绝对必要的,但供应商正试图用一个部件覆盖尽可能多的用例。

一些应用程序可能想要使用内部振荡器,其他应用程序可能需要精确的时钟源,其他应用程序可能需要低功耗。

通常,您将在特定设计中只使用一个,尽管在某些情况下时钟模式由应用软件动态更改。

我想你会发现与 ATSAM 同级别的大部分部件都会有类似的时钟和其他外围功能。是的,一开始它看起来很吓人,因为似乎有一系列令人眼花缭乱的选择,但通常你只需要关心其中的一两个。在许多情况下,默认设置可以帮助您入门。

这是来自 ST 配置工具 (STM32F103) 的框图形式的时钟配置。

在此处输入图像描述

如您所见,有内部振荡器和两个使用外部频率确定组件(通常为晶体或谐振器)的振荡器。我将此配置为使用外部 8MHz 晶体和 32.768 kHz 手表晶体。我本可以使用内部 RC 40kHz 和 8MHz 振荡器,但是 USB 不可靠,实时时钟也不是很有用(USB 需要 +/-0.25% 的精度才能在规格范围内,内部振荡器更多1-2%)。

如果您不太关心精度,则内部振荡器是可以的(但这对于某些应用程序是不可接受的)。低频振荡器用于在不进入完全睡眠的情况下节省电力(您可以在需要时加速到全速时钟)和(当准确时)用于实时时钟目的。各种分频器和 PLL 可帮助您生成各种内部模块所需的各种时钟,如图所示。PLL(锁相环)是另一个内部振荡器,带有一个分频器反馈环路,可锁定输入频率的倍数。

ARM 架构允许您以各种速率为外围总线 (APB1/APB2) 提供时钟,以权衡功耗与性能。除了 AHB 总线、内核等,ADC 还需要一个时钟。计时器需要时钟。USB 外设需要时钟。WDT 需要一个时钟,最好是一个独立的时钟。在某些情况下,这些时钟速度可能会动态变化。