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

    浏览量

    10450
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问支持小数波特率接收数据的意义在哪儿?

    我看芯源支持小数波特率,话说,支持小数波特率接收数据的意义在哪儿?是通讯更有精度吗?
    发表于 12-02 07:17

    UART波特率计算及UART收发回显实验

    决定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty
    的头像 发表于 10-17 09:51 2395次阅读
    UART<b class='flag-5'>波特率</b>计算及UART收发回显实验

    串口波特率设置1200用不了是怎么回事?

    mcu:stm32f407zg 调试时,设置波特率为1200,而串口输出为乱码,电脑设置波特率19200来接收mcu的数据,却能接收正确; (我以前没有用RTT时,用stm32f103rct6
    发表于 09-23 07:19

    115200的波特率,为啥实际速度只有11KB/s?

    波特率≠真实速度! 这几个概念确实容易混淆,但它们描述的是通信过程中不同层面的速率指标。让我们一起来理清楚它们的区别和联系↓ 主要区别解析 比特 (Bit Rate): 指每秒传输的二进制比特数量
    的头像 发表于 09-10 11:18 399次阅读

    请问如何使用低功耗 UART (LP UART) 波特率补偿?

    如何使用低功耗 UART (LP UART) 波特率补偿?
    发表于 08-21 07:05

    波特率是什么

    波特率是串行通信中的一个核心参数,用于描述数据在传输线路上的传输速率。以下从定义、单位、与比特的关系、实际应用及设置注意事项等方面进行详细说明: 一、定义与本质 波特率(Baud Rate)指单位
    的头像 发表于 07-22 11:11 5784次阅读

    可编程电源的通信波特率应如何设置?

    (如RS-485专用电缆)并缩短通信距离。 在电源和PC添加终端电阻(如120Ω)以减少信号反射。 问题3:多台电源通信冲突 原因:多台电源共用同一串口,地址冲突或波特率不一致。 解决: 为每台
    发表于 07-07 15:01

    基于瑞萨64位MPU RZ/G2L的uboot串口多波特率支持介绍

    本文主要介绍基于瑞萨64位MPU RZ/G2L,讨论uboot下非常规波特率115200的支持方法,用于解决客户对uboot下特殊波特率的需求,供客户参考。
    的头像 发表于 07-04 15:54 2762次阅读
    基于瑞萨64位MPU RZ/G2L的uboot串口多<b class='flag-5'>波特率</b>支持介绍

    Embedded Coder Support Package是否支持CAN唤醒和波特率配置?

    Embedded Coder Support Package 是否支持 CAN 唤醒和波特率配置?
    发表于 04-09 06:25

    STM32U575串口接收+GPDMA波特率不匹配怎么解决?

    我用CubeMX配置的串口+GPDMA接收,115200波特率正常能用, 然后如果波特率设置错误为9600,再改回来115200,接收就不能用了,调试好像时DMA出错了,然后启用HAL_UARTEx_ReceiveToIdle_DMA函数依然错误,有大神知道怎么解决吗
    发表于 03-07 07:59

    CAN总线十万个为什么 | CAN自定义波特率有什么用?

    导读CAN总线通信中,波特率一致并不总能保证通信顺畅。本文将揭秘自定义波特率的原理和应用,探讨如何通过优化采样点和提高容忍度解决通信问题,助力工程师提升通信稳定性。通常情况下,CAN总线通信只需确保
    的头像 发表于 02-07 11:36 1100次阅读
    CAN总线十万个为什么 | CAN自定义<b class='flag-5'>波特率</b>有什么用?

    ADS1293的ODR为853HZ,相应的DSP的SPI端口的波特率要设置为多少?

    请问如果我采用5导联的连接方法,那么ADS1293的ODR为853HZ,那么相应的DSP的SPI端口的波特率要设置为多少?DSP的外设晶振为20M,
    发表于 01-16 08:08

    AN-891: ADuC703x系列LIN波特率计算

    电子发烧友网站提供《AN-891: ADuC703x系列LIN波特率计算.pdf》资料免费下载
    发表于 01-14 15:53 0次下载
    AN-891: ADuC703x系列LIN<b class='flag-5'>波特率</b>计算

    请问MSC1210串口UART1如何设置波特率

    如题,MSC1210的手册上面有提到,UART0的波特率可以进行选择,可选择为T1的溢出作为波特率的设置,但是UART1的波特率如何设置?是和UART0的波特率一样吗?还是需要其他
    发表于 01-02 08:27

    RS232通信的波特率设置说明

    RS232通信的波特率设置是确保数据正确传输的关键参数之一。以下是对RS232通信波特率设置的说明: 一、波特率的概念 波特率是指每秒传输的比特数(bps),是衡量数据传输速度的重要指
    的头像 发表于 12-10 16:26 6412次阅读