UART波特率:它需要多准确?

本文将帮助您确定UART发送器和接收器的波特率之间的最大可接受差异。

相关信息

  • 基础:通用异步接收器/发送器(UART)
  • 为您的微控制器选择合适的振荡器

我非常感谢微控制器提供的便利性,它具有相当高精度的内部振荡器。但是这些振荡器永远不会像晶体一样精确,所以总是存在一个挥之不去的疑问 - 内部振荡器是否足够准确,以满足我可能需要的所有时序功能?

最常见的时序敏感任务之一是UART通信。接口缺少外部时钟,只有当内部波特率相等时,Tx和Rx器件才能可靠地共享数据。

但当然“相等”并不是一个真正的工程词 - 我们总是要考虑噪声,误差和变化,而对于微控制器的内部振荡器,我们不是在谈论百万分之几。根据我的经验,微控制器很少提供内部振荡器,其精度优于±1.5%。具有±1.5%时钟源的两个微控制器的波特率相差3%。这够好吗?

波特率,比特周期和采样

注意:对于剩下的分析,我们将使用Tx器件作为参考;换句话说,我们假设Tx器件始终处于标称波特率,并且Rx器件处于不准确的波特率。)

要记住的第一件事是,唯一相关的错误是差变送器的波特率和接收器的波特率之间(而不是预期的波特率和实际波特率之间的差)。例如,如果两个通信设备都以9800波特率运行,即使预期速率(基于标称时钟频率)为9600波特,您也可以轻松传输数据。

下图显示了UART接收中涉及的基本时序过程。如果接收器波特率与发送器波特率完全匹配,并且在位周期的正中间对第一位进行采样,则最后一个数据位也将在位周期的正中间进行采样。
UART波特率:它需要多准确?

如果波特率(以及比特周期)不同,则每个采样点将逐渐靠近比特转换。换句话说,最后一个数据位是受波特率差异影响最严重的位。
下图所示:是假设Rx位周期长于Tx位周期; 从bit1的正中间进行采样,到bit 8采样时就不在正中间了。
UART波特率:它需要多准确?

解决最大允许误差:更简单的版本

基于这种观察,我们可以首先提出以下建议:如果在从最后一个数据位到停止位的转换之前对最后一个数据位进行采样,则波特率足够准确。(我们假设系统可以容忍不正确采样的停止位。)但是我们不希望在预期转换之前采样一纳秒; 我们需要一些保证金。我认为合理的余量是20%-ie,最后一位必须在从最后一个数据位到停止位的转换之前的位周期的至少20%被采样。
UART波特率:它需要多准确?

Tx设备的位周期定义如下:
UART波特率:它需要多准确?
如果我们使用E来表示接收器的波特率和发送器的波特率之间的百分比差的绝对值,那么我们在Rx端的附加位周期时间如下:
UART波特率:它需要多准确?
对于第一次分析,我们将通过假设定时过程在起始位的正中间开始来简化。因此,对于一个八数据位接口,采样时间为最后一个数据位会被8ΔT被关闭RX。因此,我们的准确性足够的条件如下:
UART波特率:它需要多准确?

因为我们说最后一个数据位的可接受采样窗口是从50%(理想值)到80%(接近我们愿意去的转换),80% - 50%= 30%= 0.3 。

我们可以解决最大允许E如下:
UART波特率:它需要多准确?

因此,基于这种简化的分析,只要发送器波特率和接收器波特率之间的差异小于3.75%,八位数据位UART通信就应该是可靠的。

最大允许误差:完整分析

上一节为您提供了可以容忍帧错误的任何八位数据UART系统的经验法则(即,指示未正确采样的停止位的错误)。在本节中,我们将开发一个综合方程,可以提供更精确和定制的估计。

为此,我们将包含以下内容:

起始位采样的可变位置
可变数量的数据位
用于对最终位进行采样的可变余量
是否存在奇偶校验位
帧误差容限
从上一节开始,我们有

UART波特率:它需要多准确?
现在我们的最终位采样余量是一个变量; 我们将使用M(之前我们使用过20%)。从下面的等式可以看出,M必须以小数形式输入,而不是百分比。
UART波特率:它需要多准确?

我们仍然在ΔTRX前面有8个。我们需要改变它,因为现在数据位的数量(用N表示)是一个变量。我们还将包括奇偶校验位(P)和停止位(S)的变量。如果你有一个奇偶校验位,用P表示1; 如果不是,请使用0.如果要确保正确采样停止位,请使用1表示S; 如果没有,请使用0。
UART波特率:它需要多准确?

我们需要的最后一件事是考虑起始位采样的实际位置的变量。当前形式的等式假设为50%(即,比特周期的确切中间)。这是理想的位置。任何与理想的偏差都会导致后一位的采样位置更接近转换(因此更接近错误)。我们将通过在左侧添加以下术语将其合并到等式中:
UART波特率:它需要多准确?

该术语是指与理想起始位采样位置的偏差,表示为十进制乘以接收器的位周期。因此,例如,如果在比特周期的60%的路上采样起始位,则该项将为|(50% - 60%)| T RX = 0.1T RX。您无法轻易确定此术语的确切值,但如果您了解UART的低级功能的详细信息,则可以得出合理的最坏情况估计值。

现在我们的等式是
UART波特率:它需要多准确?

如果我们记得Rx位周期等于Tx位周期加上对应于误差百分比的额外时间,我们的最终公式如下:
UART波特率:它需要多准确?

示例和结论

让我们考虑以下系统:

保证金为30%
最坏情况起始位采样偏差为5%
八个数据位
不允许帧错误
使用奇偶校验位
因此,我们有

UART波特率:它需要多准确?
我希望本文可以帮助您解决任何未来的波特率精度问题,并且请记住,仔细的波特率分析可能表明您可以放心地省略外部晶振,即使您的内部振荡器不如您所希望的那样精确。