本文将帮助您确定UART发送器和接收器的波特率之间的最大可接受差值。
我非常感谢具有相当高精度内部振荡器的微控制器所提供的便利。但是这些振荡器的精确度从来没有像晶体那样精确,因此始终存在一个挥之不去的疑问–内部振荡器对于我可能需要的所有定时功能是否足够精确?
UART通信是最常见的时序敏感任务之一。该接口缺少外部时钟,并且Tx和Rx设备仅在内部波特率相等时才能可靠地共享数据。
但是,当然,“相等”并不是一个真正的工程术语-我们始终必须考虑噪声,误差和变化,在微控制器的内部振荡器的情况下,我们所讲的并不是百万分之几。以我的经验,微控制器很少提供内部振荡器,其精度优于±1.5%。具有±1.5%时钟源的两个微控制器的波特率相差多达3%。这样够好吗?
波特率,比特周期和采样 (注意:对于其余的分析,我们将使用Tx设备作为参考;换句话说,我们假设Tx设备始终处于标称波特率,而Rx设备处于不正确的波特率。)
要记住的第一件事是,唯一相关的错误是差变送器的波特率和接收器的波特率之间(而不是预期的波特率和实际波特率之间的差)。例如,即使您的两个通信设备都以9800波特运行,即使预期速率(基于标称时钟频率)为9600波特,您也将毫无困难地传输数据。
下图显示了UART接收中涉及的基本时序过程。如果接收器的波特率与发送器的波特率完全匹配,并且在位周期的正中间采样第一个位,则最后一个数据位也将在位周期的正中间采样。 如果波特率(以及位周期)不同,则每个采样点将逐渐移近位转换。换句话说,最后一个数据位受波特率差异的影响最大。注意:为方便起见,我们始终假定Rx位周期长于Tx位周期;如果我们假设较短的Rx比特周期,结果将是相同的。 解决最大允许错误:更简单的版本
基于此观察,我们可以首先提出以下建议:如果在从最后一个数据位到停止位的转换之前对最后一个数据位进行采样,则波特率足够准确。(我们在这里假设系统可以容忍不适当的采样停止位。)但是我们不想在预期的过渡之前一纳秒采样;我们需要一些保证金。我认为合理的余量为20%,即,在从最后一个数据位到停止位的过渡之前,必须至少对位周期的20%采样最后一位。 Tx设备的位周期定义如下:
如果我们使用E来表示接收器的波特率与发送器的波特率之间的百分比差的绝对值,那么对于Rx侧的附加位周期时间,我们有以下内容:
对于第一个分析,我们将假设定时过程在起始位的正中间开始进行简化。因此,对于一个八数据位接口,采样时间为最后一个数据位会被8ΔT被关闭RX,因此,我们的“足够准确”条件如下:
因为我们说最后一个数据位的可接受采样窗口是从50%(理想值)到80%(尽可能接近我们愿意的过渡),并且80%– 50%= 30%= 0.3 。
我们可以求解最大允许E,如下所示:
因此,基于此简化分析,只要发送器波特率和接收器波特率之间的差小于3.75%,八数据位UART通信就应该可靠。
最大允许误差:完整分析上一节为您提供了一个可以容忍帧错误(即指示停止位采样不正确的错误)的八数据位UART系统的经验法则。在本节中,我们将开发一个综合方程,可以提供更精确和定制的估计。
为此,我们将合并以下内容:
- 起始位采样的可变位置
- 可变数量的数据位
- 采样最后一位的可变余量
- 是否存在奇偶校验位
- 帧容错
在上一节中,我们有
现在我们的最终比特采样余量是一个变量;我们将使用M(以前我们使用了20%)。从下面的方程式可以看出,M必须以小数而不是百分比输入:
我们仍然在ΔTRX前面有8个。我们需要更改它,因为现在数据位数(用N表示)是一个变量。我们还将为奇偶校验位(P)和停止位(S)包括一个变量。如果您有奇偶校验位,则对P使用1;否则,对P使用0。如果要确保正确采样停止位,则对S使用1;否则,请使用0。如果不是,请使用0。
我们需要的最后一件事是变量,该变量说明对起始位进行采样的实际位置。当前形式的方程式假定为50%(即,位周期的正中间)。这是理想的位置。与理想值的任何偏离都可能导致后面的位的采样位置更接近过渡(并因此更接近误差)。通过将以下项添加到左侧,我们将其纳入方程式:
该术语是指与理想起始位采样位置的偏差,表示为十进制乘以接收器的位周期。因此,例如,如果在位周期的60%处对起始位进行了采样,则该项将为|(50%– 60%)| T RX = 0.1T RX。您不能轻易确定该术语的确切值,但是如果您知道UART低级功能的详细信息,则可以得出合理的最坏情况估计。
现在我们的方程是
如果我们记得Rx比特周期等于Tx比特周期加上对应于错误百分比的额外时间,那么我们的最终方程如下:
范例与结论
让我们考虑以下系统:
- 保证金是30%
- 最坏情况下的起始位采样偏差为5%
- 八个数据位
- 不允许出现帧错误
- 使用奇偶校验位
因此,我们有
我希望本文能对以后的波特率精度问题有所帮助,并且请记住,仔细的波特率分析可能会表明您可以放心地省略外部晶体,即使您的内部振荡器不够精确。
|