外部高频晶振时钟(4MHz~20MHz)
外部低频晶振时钟(32.768KHz)
内部高频RC时钟(32MHz)
内部低频RC时钟(44KHz)
单片机依赖于它们的时钟源。处理器、总线和外围设备都使用时钟来同步它们的操作。时钟决定了处理器执行指令的速度,因此它是性能的基础。但时钟源有多重要?它有多准确重要吗?简短的回答是它取决于……它取决于单片机正在做什么及其接口。
需要考虑两个因素:时钟速度,它决定了事情发生的速度,以及时钟的准确性,它决定了每个时钟滴答之间的周期的一致性以及时钟速度如何随时间变化。
为什么时钟源很重要
什么是单片机处理中的时钟?
单片机的中央处理器可以被认为是执行特定功能的同步逻辑块链。如果时钟运行得太慢,则处理时间会更长。如果时钟运行得太快,则可能没有足够的时间在下一组开始之前完成所需的操作——处理器与一系列不同的组件模块连接,从动态存储器到接口引脚。时钟速度的任何重大错误都会对内部单片机操作产生不可预知的后果。
数据采样
单片机时钟信号将控制任何模数操作的转换速率。时钟的速度将决定模拟信号可以被采样的最大速率;时钟的准确性将决定采样率的准确性。假设您每秒记录两次带有时间戳的样本。在这种情况下,时钟频率中百分之一的误差(在内部振荡器中并不罕见)很快就会消除样本时间戳与挂钟上显示的时间之间的任何相关性。时钟源有 1% 的恒定偏移量,您的样本时间戳每天将延迟超过 14 分钟。
波形生成
至于数据采样,单片机时钟信号将控制任何数模操作的转换速率。时钟速度将决定模拟信号可以产生的最大频率。时钟的精度将决定生成波形的精度。
异步串行通信
单片机时钟信号的一个关键应用是管理异步通信,其中时钟信号决定何时对输入数据流进行采样;一旦接收到起始位和输出数据流的波形,就每个数据位之间发生转换的时间而言。
对于异步通信,发送器和接收器依赖于具有相同的时钟速度来编码和解码数据流。但是,这些时钟不需要同步;他们只需要有足够相等的时钟频率。这是因为接收器在检测到信号线上的第一个边沿时开始处理传入的数据流。然后,它需要在数据流的持续时间内保持正确的时钟速度,以便在正确的时间对数据位进行采样。所需的精度将取决于必须对数据进行采样的窗口。每个数据位都可能对其信号有一个上升沿和下降沿,其中数据的值是不确定的,当数据有效并且可以被采样时,在两个边沿之间留下一个周期。
该采样周期将取决于通信链路的类型和长度。长传输长度和高电容电缆会增加上升和下降时间。噪声的存在也会增加信号稳定所需的时间。
它还取决于时钟速度和消息格式。对于短数据流,精度要求可能非常宽松,因为每次接收到新数据流时采样时钟都会重置。然而,对于具有长数据流的高速串行通信,所需的精度可以变得更加精确。例如,CAN 总线协议对时钟偏差非常敏感,以至于使用任何基于非晶振的时钟信号源都可能存在问题。
以 UART 设备为例,我们可以看到绝对时钟速率并不重要,因为 UART 接收器会在每一帧开始时自行同步。该问题简化了可以容忍的发送和接收 UART 时钟之间的差异。
时钟源选项
在为任何特定单片机选择时钟源时,通常有几个不同的选项可供选择。具体选项取决于您将使用的单片机时钟的品牌和型号,因此我们将在此处讨论所有标准选项。
不同选项的主要区别在于其准确性、成本和组件数量。使用所有好的单片机都包含的内部时钟源将是最便宜和最简单的选择,但通常是最不准确的。使用外部时钟源将提高精度,但代价是需要在电路板上添加额外的组件并增加设计的复杂性。
您选择哪个选项将取决于您需要的性能以及在电路板空间和预算方面的限制。由于总是有几个替代选项可以为任何给定的单片机生成时钟信号,因此请研究特定设备的数据表。这通常会提供一些关于您可以使用哪些类型的时钟源以及如何最好地实现它们的重要信息。
内部振荡器
单片机通常带有一个内部电阻电容振荡器以生成基本时钟信号和一个锁相环以提供倍频功能。使用内部振荡器的问题是它们的精度明显低于频率稳定性差的外部振荡器。根据定义,单片机芯片内部不是放置任何 RC 电路的理想位置。这来自 RC 电路的高温依赖性和固有的宽组件容差。通常,具有良好热管理的单片机可以提供精度在 1% 到 5% 范围内的时钟信号。这对于一些较慢的异步通信总线和管理低频模拟信号处理可能已经足够了。尽管如此,在大多数典型应用中,这还是太不准确了。
值得一提的是,内部振荡器的性能可以通过使用锁相环来提高,以允许更准确的外部时钟信号来校正内部时钟信号。但是,如果外部时钟信号可用,那么使用它而不是内部时钟是有意义的,除非单片机有任何特定的限制可以防止这种情况发生。
外部振荡器
单片机的时钟源有两种主要类型:机械谐振设备,包括晶体和陶瓷谐振器,以及无源 RC 振荡器。
振荡器的最基本形式是 RC 电路,它模拟内部振荡器电路,但使用具有更高精度值的组件,并使用热管理技术将组件与微控制器时钟和电路的任何其他热元件产生的热量隔离开来。虽然这可以将精度提高至少一个数量级,但它是迄今为止外部振荡器最不准确的选择,并且在成本和占位面积相对相似的情况下,可以使用更好的解决方案。 RC 电路产生的时钟也会受到电源电平波动的影响,并且容易受到电气干扰,从而限制了它们在大多数典型应用中的用途。
晶体振荡器是需要精确时钟信号的最常见的外部振荡器形式。石英晶体和支持电路提供出色的稳定性和精度。一个典型的低成本晶体振荡器的精度可以超过百万分之一,这对于除了对时间最敏感的应用之外的所有应用来说已经足够了。但是,石英晶体可能会受到可能需要额外保护的环境因素的影响。石英晶体的支持电路也可能导致高阻抗输出,需要额外的阻抗匹配才能与电路的其余部分集成。如果您的预算允许,使用现成的晶体振荡器模块而不是分立元件可以降低对环境影响的敏感性并使电路板设计更加简单。它们通常提供低阻抗方波输出,使与电路设计的其余部分的集成更简单,其精度与使用分立晶体非常相似。
另一种选择是基于 IC 谐振器电路的硅振荡器,该电路易于实现,精度约为 0.05%。略好于外部 RC 电路,但远不及晶体振荡器。然而,硅振荡器比晶体振荡器更坚固可靠,非常适合设备可能受到严重机械振动的操作环境。
最后,可以使用陶瓷谐振器,其精度不如晶体振荡器,但比硅振荡器更准确。基于压电陶瓷材料,它们使用共振机械振动来产生时钟信号。它们的主要优点是它们采用简单的集成封装,比晶体振荡器及其支持组件的占用空间更小。然而,与晶体振荡器一样,它们对环境因素很敏感,包括温度、湿度、振动和电气干扰。
选择外部振荡器时,选项的功耗可能是您决定的一个因素。分立振荡器电路的功耗主要由反馈放大器的电源电流及其电容值决定。典型的晶体振荡器电路将消耗数十 mA。陶瓷谐振器电路通常需要比晶体振荡器更大的负载电容值,从而需要更多功率。硅振荡器的功耗主要与工作频率成正比。尽管如此,它们还是有多种选择,从消耗几毫安的低功率设备到消耗几十毫安的标准设备。
结论
总而言之,您的单片机需要使用哪种类型的时钟信号主要取决于它所嵌入的设备的性质及其操作环境。与高速异步通信总线和高频模拟信号的接口将推动对精确时钟信号的需求。假设设备需要在恶劣的环境中运行,无论是在很宽的温度范围内、在高水平的电磁干扰中还是受到机械振动的影响。在这种情况下,它可以限制可用的选择。没有这种时间敏感或环境挑战要求的单片机时钟可以使用更便宜的解决方案。
外部高频晶振时钟(4MHz~20MHz) 异步串行通信 11.0592MHz 18.432MHz 22.1184MHz
外部低频晶振时钟(32.768KHz) RTC 低功耗
内部高频RC时钟(32MHz)
内部低频RC时钟(44KHz)