0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

低频波特率的发射端累积误差

电子设计 来源:电子设计 作者:电子设计 2022-01-11 10:46 次阅读

UART通讯设计中,工程师会根据系统需要先选定合适的波特率(Baud Rate),然后选择合适的时钟源频率,以使UART传输数据时的累积误差最小,数据的误码率最低。本文以MSP430FR2311为例,对UART数据传输过程中发送端累积误差和接收端累积误差进行了详细的分析和计算。根据计算结果,工程师可以优选出时钟源频率,提高UART数据传输系统的可靠性。

在附录1的文章中,对MSP430FR2311的UART模块寄存器配置的分析和计算有了详细介绍,这里不再赘述。BRCLK是时钟源频率,BITCLK是波特率。当BRCLK是BITCLK的整数倍,即BRCLK/BITCLK=N,由于每个数据bit中含有N个BRCLK,和理想值完全相同,所以每个数据bit不存在时长误差,因此在数据传输过程中也不存在累积误差。但是大部分情况下BRCLK不是BITCLK的整数倍,由于在数据传输过程中,每个数据bit时长都是BRCLK的整数倍,这样在每个数据bit中就存在时长误差,因此在数据传输过程中也就存在累积误差。

以下分4部分进行累积误差的分析和计算:低频波特率的发射端累积误差,高频波特率的发射端累积误差,低频波特率的接收端累积误差,高频波特率的接收端累积误差。

低频波特率的发射端累积误差

以时钟源频率BRCLK 32768Hz,波特率BITCLK 2400Hz为例,32768/2400=13.6533,所以UCOS16=0,UCBRx=13,UCBRSx=0xB6.

如图1所示,在每个数据bit的发送结束时刻,实际发送时长和理想发送时长存在误差。

对于Start bit,理想时长13.65BRCLK,实际时长14BRCLK,误差时长为13.65BRCLK-14BRCLK=-0.35BRCLK。

对于LSB bit,理想时长13.65BRCLK,实际时长13BRCLK,误差时长为13.65BRCLK-13BRCLK=0.65BRCLK,累积误差时长为-0.35BRCLK+0.65BRCLK=0.30BRCLK。

对于Bit1,理想时长13.65BRCLK,实际时长14BRCLK,误差时长为13.65BRCLK-14BRCLK=-0.35BRCLK,累积误差时长为0.30BRCLK-0.35BRCLK=-0.05BRCLK。

后续bit位的误差和累积误差以此类推。

图1低频波特率的发射端累积误差示意图

以下是低频波特率的发射端累积误差的公式推导。

t_bits_ideal_TX为发送端理想累积数据时长。

t_bits_ideal_TX[i] = (i+1)/BITCLK (1)

t_bit_period_TX为发送端实际每个数据bit时长。每个数据的BRCLK个数等于UCBRx值和UCBRSx的对应调制值UCBRSx.m之和。

t_bit_period_TX[i] = (UCBRx +UCBRSx.m)/BRCLK (2)

t_bits_TX为发送端实际发送的累积数据时长。

t_bits_TX[0] = t_bit_period_TX[0] (3)

t_bits_TX[i] = t_bits_TX[i-1] + t_bit_period_TX[i], 其中i≠0 (4)

定义Error_TX为实际累积数据时长与理想累积数据时长的差值,相对于理想数据bit时长的百分比,单位为%

Error_TX[i]=( t_bits_ideal_TX[i]- t_bits_TX[i])*BITCLK*100 (5)

表1为带入例程中数据的Error_TX的计算结果。

从表1中可以看到,最大正Error_TX为3.91%,最小负Error_TX为-3.12%.

表1 Error_TX

高频波特率的发射端累积误差

以时钟源频率BRCLK 4000000Hz,波特率BITCLK 57600为例,4000000/57600=69.4444,所以UCOS16=1,UCBRx=4,UCBRFx=5,UCBRSx=0x55.

如图2所示,在每个数据bit的发送结束时刻,实际发送时长和理想发送时长存在误差。

对于Start bit,理想时长69.44BRCLK,实际时长69BRCLK,误差时长为69.44BRCLK-69BRCLK=0.44BRCLK。

对于LSB bit,理想时长69.44BRCLK,实际时长70BRCLK,误差时长为69.44BRCLK-70BRCLK=-0.56BRCLK,累积误差时长为0.44BRCLK-0.56BRCLK=-0.12BRCLK。

对于Bit1,理想时长69.44BRCLK,实际时长69BRCLK,误差时长为69.44BRCLK-69BRCLK=0.44BRCLK,累积误差时长为-0.12BRCLK+0.44BRCLK=0.32BRCLK。

后续bit位的误差和累积误差以此类推。

图2高频波特率的发射端累积误差示意图

以下是高频波特率的发射端累积误差的公式推导。

t_bits_ideal_TX为发射端理想累积数据时长。

t_bits_ideal_TX[i] = (i+1)/BITCLK (6)

t_bit_period_TX为发射端实际每个数据bit时长。每个数据的BRCLK个数等于16*UCBRx+UCBRFx值和UCBRSx的对应调制值UCBRSx.m之和。

t_bit_period_TX[i] = (16*UCBRx+UCBRFx +UCBRSx.m)/BRCLK (7)

t_bits_TX为发射端实际发送的累积数据时长。

t_bits_TX[0] = t_bit_period_TX[0] (8)

t_bits_TX[i] = t_bits_TX[i-1] + t_bit_period_TX[i], 其中i≠0 (9)

定义Error_TX为实际累积数据时长与理想累积数据时长的差值,相对于理想数据bit时长的百分比,单位为%

Error_TX[i]=( t_bits_ideal_TX[i]- T_bits_TX[i])*BITCLK*100 (10)

表2为带入例程中数据的Error_TX的计算结果。

从表2中可以看到,最大正Error_TX为0.64%,最小负Error_TX为-0.80%.

表2 Error_TX

低频波特率的 接收端累积误差

MSP430FR2311 User’s Guide中指出,接收端误差包括两部分:一个是从发射端start bit开始边沿到该边沿被接收端识别的误差,另一个是每个数据bit实际识别时刻和理想识别时刻的偏差。如图3所示。

图3 接收端两种误差

第一种误差用Tsync表示,Tsync = ±0.5BRCLK。

对于第二种误差,由于理想情况下接收端是在数据bit时长一半的位置进行采样识别,所以在进行误差计算时,是以该时刻为参考进行计算,而不像发射端,是以该数据bit理想时长结束的位置为参考进行计算。

MSP430FR2311 User’s Guide中给出了计算公式,但是这些公式中包含的元素太多不便理解。本文通过简化的方式来进行理解和计算,可以得到相同的累积误差结果。

图4为MSP430FR2311的Majority Vote示意图,从图中可以看出Majority Vote在三个边沿的位置进行数据采样,采样的中心位置为INT(N/2)+m,其中N=INT(BRCLK/BITCLK), m为UCBRSx中对应于该数据bit的UCBRSx.m值。理想的数据bit采样中心位置为0.5/BITCLK。

图4 Majority Vote示意图

所以对于从Start bit开始的第i个数据bit,其采样中心位置时刻为Tsync,前i-1个数据bit实际总时长和该数据bit采样中心位置时长的总和,然后和理想的第i个数据bit采样中心位置时刻进行比较,便可得出第i个数据bit的累积误差。

以时钟源频率BRCLK 32768Hz,波特率BITCLK 2400Hz为例,32768/2400=13.6533,所以UCOS16=0,UCBRx=13,UCBRSx=0xB6.理想数据bit采样中心位置13.6533/2=6.8267BRCLK。

如图5和图6所示,在每个数据bit采样中心位置时刻,实际累积采样时刻和理想累积采样时刻存在误差。

当考虑Tsync=0.5BRCLK时,如图5所示。

对于Start bit,理想数据bit累积采样中心位置时刻为6.83BRCLK,实际数据bit累积采样中心位置时刻为7.5BRCLK,误差为6.83BRCLK-7.5BRCLK=-0.67BRCLK。

对于LSB bit,理想数据bit累积采样中心位置时刻为20.48BRCLK,实际数据bit累积采样中心位置时刻为20.5BRCLK,误差为20.48BRCLK-20.5BRCLK=-0.02BRCLK。

对于Bit1,理想数据bit累积采样中心位置时刻为34.13BRCLK,实际数据bit累积采样中心位置时刻为34.5BRCLK,误差为34.13BRCLK-34.5BRCLK=-0.37BRCLK。

后续bit位的累积误差以此类推。

当考虑Tsync=-0.5BRCLK时,如图6所示。

分析方法和图5一样,不再赘述。

图5低频波特率的接收端累积误差示意图,Tsync=0.5BRCLK

图6低频波特率的接收端累积误差示意图,Tsync=-0.5BRCLK

以下是低频波特率的接收端累积误差的公式推导。

t_bits_ideal_RX为接收端理想数据bit累积采样中心位置时刻。

t_bits_ideal_RX[i] = (i+0.5)/BITCLK (11)

t_bit_period_RX为接收端实际数据bit采样中心位置时刻。每个数据bit采样中心位置时刻的BRCLK个数等于INT(0.5UCBRx)和UCBRSx的对应调制值UCBRSx.m之和。

t_bit_period_RX[i] = [INT(0.5*UCBRx) +UCBRSx.m]/BRCLK (12)

t_bits_before_RX为当前数据bit之前的所有i-1个数据bit实际累积数据时长。

t_bits_before_RX[0] = 0

t_bits_before_RX[i] = t_bits_before_RX[i-1] + (UCBRx[i-1] + UCBRSx.m[i-1])/BRCLK, 其中i≠0 (13)

其中t_bits_before_RX[i-1]为所有i-2个数据bit实际累积数据时长,(UCBRx[i-1] + UCBRSx.m[i-1])/BRCLK为第i-1个数据bit实际数据时长。

t_bits_RX为接收端实际数据bit累积采样中心位置时刻。

t_bits_TX[i] = Tsync + t_bit_period_RX[i] + t_bits_before_RX[i] (14)

定义Error_TX为接收端实际数据bit累积采样中心位置时刻相对于理想数据bit累积采样中心位置时刻的误差占理想数据bit时长的百分比,单位为%

Error_TX[i]=( t_bits_ideal_TX[i]- T_bits_TX[i])*BITCLK*100 (15)

表3为带入例程中数据的Error_TX。

从表3中可以看到,最大正Error_TX为8.84%,最小负Error_TX为-5.52%.

表3 Error_TX

高频波特率的 接收端累积误差

以时钟源频率BRCLK 4000000Hz,波特率BITCLK 57600为例,4000000/57600=69.4444,所以UCOS16=1,UCBRx=4,UCBRFx=5,UCBRSx=0x55. 理想数据bit采样中心位置69.4444/2=34.7222BRCLK.

如图7和图8所示,在每个数据bit累积采样中心位置时刻,实际采样时刻和理想采样时刻存在误差。

当考虑Tsync=0.5BRCLK时,如图7所示。

对于Start bit,理想数据bit累积采样中心位置时刻为34.72BRCLK,实际数据bit累积采样中心位置时刻为34.5BRCLK,误差为34.72BRCLK-34.5BRCLK=0.22BRCLK。

对于LSB bit,理想数据bit累积采样中心位置时刻为104.16BRCLK,实际数据bit累积采样中心位置时刻为104.5BRCLK,误差为104.16BRCLK-104.5BRCLK=-0.34BRCLK。

对于Bit1,理想数据bit累积采样中心位置时刻为173.60,实际数据bit累积采样中心位置时刻为173.5BRCLK,误差为173.60BRCLK-173.5BRCLK=0.10BRCLK。

后续bit位的累积误差以此类推。

当考虑Tsync=-0.5BRCLK时,如图8所示。

分析方法和图7一样,不再赘述。

图7高频波特率的接收端累积误差示意图,Tsync=0.5BRCLK

图8高频波特率的接收端累积误差示意图,Tsync=-0.5BRCLK

以下是高频波特率的接收端累积误差的公式推导。

t_bits_ideal_RX为接收端理想数据bit累积采样中心位置时刻。

t_bits_ideal_RX[i] = (i+0.5)/BITCLK (16)

t_bit_period_RX为接收端实际数据bit采样中心位置时刻。每个数据bit采样中心位置时刻的BRCLK个数等于INT[0.5*(16*UCBRx+UCBRFx)]和UCBRSx的对应调制值UCBRSx.m之和。

t_bit_period_RX[i] = [INT(0.5*(16*UCBRx+UCBRFx)) +UCBRSx.m]/BRCLK (17)

t_bits_before_RX为当前数据bit之前的所有i-1个数据bit实际累积数据时长。

t_bits_before_RX[0] = 0

t_bits_before_RX[i] = t_bits_before_RX[i-1] + (16*UCBRx+UCBRFx + UCBRSx.m)/BRCLK, 其中i≠0 (18)

其中t_bits_before_RX[i-1]为所有i-2个数据bit实际累积数据时长,(16*UCBRx+UCBRFx + UCBRSx.m)/BRCLK为第i-1个数据bit实际数据时长。

t_bits_RX为接收端实际数据bit累积采样中心位置时刻。

t_bits_TX[i] = Tsync + t_bit_period_RX[i] + t_bits_before_RX[i] (19)

定义Error_TX为接收端实际数据bit累积采样中心位置时刻相对于理想数据bit累积采样中心位置时刻的误差占理想数据bit时长的百分比,单位为%

Error_TX[i]=( t_bits_ideal_TX[i]- T_bits_TX[i])*BITCLK*100 (20)

表4为带入例程中数据的Error_TX。

从表4中可以看到,最大正Error_TX为1.76%,最小负Error_TX为-1.12%.

表4 Error_TX

时钟源频率优选

时钟源频率优选需要考虑两方面的因素:

尽量降低发射端累积误差和接收端累积误差

对于Majority Vote架构,过高的时钟源频率会减小Majority Vote的检测窗口,降低Majority Vote的性能

以波特率9600Hz为例, Error_TX和Error_RX如表5所示,根据时钟源优选原则,选择1000000Hz。

表5 Error_TX和Error_RX

BRCLKBITCLKError_TX+ (%)Error_TX- (%)Error_RX+ (%)Error_RX- (%)

32768960016.02-17.1937.30-23.24

100000096000.64-0.481.04-1.04

800000096000.04-0.080.14-0.10

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式处理
    +关注

    关注

    0

    文章

    341

    浏览量

    9990
收藏 人收藏

    评论

    相关推荐

    MCU串口自动识别波特率原理分析

    现在的单片机资源越来越丰富了,其中我们常用的串口也是内部集成了多个,关键功能也越来越强了。 我们有些应用可能会用到串口自动识别波特率,今天就来讲讲MCU串口自动识别波特率底层的常见的原理,以及MCU的案例。
    的头像 发表于 10-23 16:12 264次阅读
    MCU串口自动识别<b class='flag-5'>波特率</b>原理分析

    波特率9600和115200的区别

    在现代通信技术中,数据传输速率是一个关键的性能指标。对于串行通信,波特率是衡量数据传输速度的基本单位。波特率9600和115200是两种常见的设置,它们在不同的应用场景中有着各自的优势和局
    的头像 发表于 10-18 14:56 675次阅读

    波特率与比特有何关系 波特率与数据传输速率的关系

    波特率(Baud Rate)和比特(Bit Rate)是衡量数据通信系统性能的两个重要参数,它们之间有着密切的关系,但并不完全相同。 波特率(Baud Rate): 波特率是指在数据
    的头像 发表于 10-18 14:55 372次阅读

    uart波特率和传输频率的关系 UART串口的常用波特率为多少

    UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的异步串行通信技术,它允许两台设备之间进行双向数据传输。在UART通信中,波特率和传输
    的头像 发表于 10-06 16:12 1432次阅读
    uart<b class='flag-5'>波特率</b>和传输频率的关系 UART串口的常用<b class='flag-5'>波特率</b>为多少

    串口通信中的波特率你真的了解吗?差距竟如此重要!

    波特率在串口通信中的作用在串口通信中,波特率起着至关重要的作用。因为在传输数据时,发送方和接收方需要以相同的波特率进行通信。如果两波特率
    的头像 发表于 08-27 11:46 1081次阅读
    串口通信中的<b class='flag-5'>波特率</b>你真的了解吗?差距竟如此重要!

    ESP8266为什么无法达到更高的波特率

    我正在使用具有波特率微调功能的主机 MCU,用于与 ESP8266 ESP-12 模块进行通信。但是,我无法达到更高的波特率,即 350 877 波特率误差为 1,6%)。任何更高的
    发表于 07-16 08:32

    如何更改波特率

    我正在尝试使用与此文档相关的命令更改波特率:https://github.com/Arduinolibrary/DFRob ... _v0.23.pdf 这是固件版本:00200.9.4 当我
    发表于 07-16 06:10

    如何使用示波器测量串口波特率

    在通信和电子测量领域,串口波特率是一个至关重要的参数,它决定了数据在串行通信线上的传输速率。使用示波器来测量串口波特率是一种常见且有效的方法,尤其是在没有专业串口调试工具或需要更精确测量时。本文将
    的头像 发表于 05-27 16:25 4255次阅读

    波特率有什么危害尼?又该如何避免?

    深入探讨了波特率过高可能带来的危害,并提供了一些实用建议来保护设备不受影响。在通信领域,波特率是决定数据传输速度的重要参数。然而,波特率设置不当可能会对设备造成严重的影响。本文旨在揭示波特率
    的头像 发表于 04-03 16:45 1216次阅读

    为啥要转换波特率 波特率和传输速率的关系

    对于串行多主 CAN 总线,如果波特率被称为“500000波特”,则 CAN 上的该端口每秒最多可传输500000位。
    的头像 发表于 03-06 17:38 4436次阅读
    为啥要转换<b class='flag-5'>波特率</b> <b class='flag-5'>波特率</b>和传输速率的关系

    波特率发生器使用哪个定时器 波特率发生器的时钟来源是什么

    波特率发生器是一种用于控制串行数据通信速率的设备,它可以生成特定波特率的时钟信号。在嵌入式系统、通信设备和计算机硬件中,波特率发生器的使用十分常见。波特率发生器通常使用定时器来实现时钟
    的头像 发表于 01-24 09:56 1797次阅读

    什么是串口波特率?串口通信为什么要设置波特率

    什么是串口波特率?串口通信为什么要设置波特率波特率与比特的关系 如何选择串口波特率?  串口波特率
    的头像 发表于 01-22 16:10 1924次阅读

    以太网CAN转换器波特率的设置步骤是怎样的?

    确定CAN总线的波特率:首先,需要确定所连接的CAN总线的波特率。CAN总线的波特率通常以位/秒(bps)为单位,用于确定数据传输速度。
    的头像 发表于 01-17 09:24 904次阅读

    N76E003串口使用115200波特率需要微调HIRC到16.6MHz,使用默认16MHz波特率会有很大的误差是为什么?

    N76E003如果串口使用115200波特率需要微调HIRC到16.6MHz,使用默认16MHz波特率会有很大的误差
    发表于 01-17 06:12

    单片机的各个通信协议的波特率

    下面是一些常见的波特率数值,这些波特率通常被用于串口通信,SPI、I2C、CAN等接口的实际波特率可能有所不同:USART:110bps300bps600bps1200bps2400bps4800bps9600bps14400b
    的头像 发表于 12-09 08:00 2720次阅读
    单片机的各个通信协议的<b class='flag-5'>波特率</b>