在UART通訊設(shè)計(jì)中,工程師會(huì)根據(jù)系統(tǒng)需要先選定合適的波特率(Baud Rate),然后選擇合適的時(shí)鐘源頻率,以使UART傳輸數(shù)據(jù)時(shí)的累積誤差最小,數(shù)據(jù)的誤碼率最低。本文以MSP430FR2311為例,對(duì)UART數(shù)據(jù)傳輸過(guò)程中發(fā)送端累積誤差和接收端累積誤差進(jìn)行了詳細(xì)的分析和計(jì)算。根據(jù)計(jì)算結(jié)果,工程師可以優(yōu)選出時(shí)鐘源頻率,提高UART數(shù)據(jù)傳輸系統(tǒng)的可靠性。
在附錄1的文章中,對(duì)MSP430FR2311的UART模塊寄存器配置的分析和計(jì)算有了詳細(xì)介紹,這里不再贅述。BRCLK是時(shí)鐘源頻率,BITCLK是波特率。當(dāng)BRCLK是BITCLK的整數(shù)倍,即BRCLK/BITCLK=N,由于每個(gè)數(shù)據(jù)bit中含有N個(gè)BRCLK,和理想值完全相同,所以每個(gè)數(shù)據(jù)bit不存在時(shí)長(zhǎng)誤差,因此在數(shù)據(jù)傳輸過(guò)程中也不存在累積誤差。但是大部分情況下BRCLK不是BITCLK的整數(shù)倍,由于在數(shù)據(jù)傳輸過(guò)程中,每個(gè)數(shù)據(jù)bit時(shí)長(zhǎng)都是BRCLK的整數(shù)倍,這樣在每個(gè)數(shù)據(jù)bit中就存在時(shí)長(zhǎng)誤差,因此在數(shù)據(jù)傳輸過(guò)程中也就存在累積誤差。
以下分4部分進(jìn)行累積誤差的分析和計(jì)算:低頻波特率的發(fā)射端累積誤差,高頻波特率的發(fā)射端累積誤差,低頻波特率的接收端累積誤差,高頻波特率的接收端累積誤差。
低頻波特率的發(fā)射端累積誤差
以時(shí)鐘源頻率BRCLK 32768Hz,波特率BITCLK 2400Hz為例,32768/2400=13.6533,所以UCOS16=0,UCBRx=13,UCBRSx=0xB6.
如圖1所示,在每個(gè)數(shù)據(jù)bit的發(fā)送結(jié)束時(shí)刻,實(shí)際發(fā)送時(shí)長(zhǎng)和理想發(fā)送時(shí)長(zhǎng)存在誤差。
對(duì)于Start bit,理想時(shí)長(zhǎng)13.65BRCLK,實(shí)際時(shí)長(zhǎng)14BRCLK,誤差時(shí)長(zhǎng)為13.65BRCLK-14BRCLK=-0.35BRCLK。
對(duì)于LSB bit,理想時(shí)長(zhǎng)13.65BRCLK,實(shí)際時(shí)長(zhǎng)13BRCLK,誤差時(shí)長(zhǎng)為13.65BRCLK-13BRCLK=0.65BRCLK,累積誤差時(shí)長(zhǎng)為-0.35BRCLK+0.65BRCLK=0.30BRCLK。
對(duì)于Bit1,理想時(shí)長(zhǎng)13.65BRCLK,實(shí)際時(shí)長(zhǎng)14BRCLK,誤差時(shí)長(zhǎng)為13.65BRCLK-14BRCLK=-0.35BRCLK,累積誤差時(shí)長(zhǎng)為0.30BRCLK-0.35BRCLK=-0.05BRCLK。
后續(xù)bit位的誤差和累積誤差以此類推。
圖1低頻波特率的發(fā)射端累積誤差示意圖
以下是低頻波特率的發(fā)射端累積誤差的公式推導(dǎo)。
t_bits_ideal_TX為發(fā)送端理想累積數(shù)據(jù)時(shí)長(zhǎng)。
t_bits_ideal_TX[i] = (i+1)/BITCLK (1)
t_bit_period_TX為發(fā)送端實(shí)際每個(gè)數(shù)據(jù)bit時(shí)長(zhǎng)。每個(gè)數(shù)據(jù)的BRCLK個(gè)數(shù)等于UCBRx值和UCBRSx的對(duì)應(yīng)調(diào)制值UCBRSx.m之和。
t_bit_period_TX[i] = (UCBRx +UCBRSx.m)/BRCLK (2)
t_bits_TX為發(fā)送端實(shí)際發(fā)送的累積數(shù)據(jù)時(shí)長(zhǎng)。
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為實(shí)際累積數(shù)據(jù)時(shí)長(zhǎng)與理想累積數(shù)據(jù)時(shí)長(zhǎng)的差值,相對(duì)于理想數(shù)據(jù)bit時(shí)長(zhǎng)的百分比,單位為%
Error_TX[i]=( t_bits_ideal_TX[i]- t_bits_TX[i])*BITCLK*100 (5)
表1為帶入例程中數(shù)據(jù)的Error_TX的計(jì)算結(jié)果。
從表1中可以看到,最大正Error_TX為3.91%,最小負(fù)Error_TX為-3.12%.
表1 Error_TX
高頻波特率的發(fā)射端累積誤差
以時(shí)鐘源頻率BRCLK 4000000Hz,波特率BITCLK 57600為例,4000000/57600=69.4444,所以UCOS16=1,UCBRx=4,UCBRFx=5,UCBRSx=0x55.
如圖2所示,在每個(gè)數(shù)據(jù)bit的發(fā)送結(jié)束時(shí)刻,實(shí)際發(fā)送時(shí)長(zhǎng)和理想發(fā)送時(shí)長(zhǎng)存在誤差。
對(duì)于Start bit,理想時(shí)長(zhǎng)69.44BRCLK,實(shí)際時(shí)長(zhǎng)69BRCLK,誤差時(shí)長(zhǎng)為69.44BRCLK-69BRCLK=0.44BRCLK。
對(duì)于LSB bit,理想時(shí)長(zhǎng)69.44BRCLK,實(shí)際時(shí)長(zhǎng)70BRCLK,誤差時(shí)長(zhǎng)為69.44BRCLK-70BRCLK=-0.56BRCLK,累積誤差時(shí)長(zhǎng)為0.44BRCLK-0.56BRCLK=-0.12BRCLK。
對(duì)于Bit1,理想時(shí)長(zhǎng)69.44BRCLK,實(shí)際時(shí)長(zhǎng)69BRCLK,誤差時(shí)長(zhǎng)為69.44BRCLK-69BRCLK=0.44BRCLK,累積誤差時(shí)長(zhǎng)為-0.12BRCLK+0.44BRCLK=0.32BRCLK。
后續(xù)bit位的誤差和累積誤差以此類推。
圖2高頻波特率的發(fā)射端累積誤差示意圖
以下是高頻波特率的發(fā)射端累積誤差的公式推導(dǎo)。
t_bits_ideal_TX為發(fā)射端理想累積數(shù)據(jù)時(shí)長(zhǎng)。
t_bits_ideal_TX[i] = (i+1)/BITCLK (6)
t_bit_period_TX為發(fā)射端實(shí)際每個(gè)數(shù)據(jù)bit時(shí)長(zhǎng)。每個(gè)數(shù)據(jù)的BRCLK個(gè)數(shù)等于16*UCBRx+UCBRFx值和UCBRSx的對(duì)應(yīng)調(diào)制值UCBRSx.m之和。
t_bit_period_TX[i] = (16*UCBRx+UCBRFx +UCBRSx.m)/BRCLK (7)
t_bits_TX為發(fā)射端實(shí)際發(fā)送的累積數(shù)據(jù)時(shí)長(zhǎng)。
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為實(shí)際累積數(shù)據(jù)時(shí)長(zhǎng)與理想累積數(shù)據(jù)時(shí)長(zhǎng)的差值,相對(duì)于理想數(shù)據(jù)bit時(shí)長(zhǎng)的百分比,單位為%
Error_TX[i]=( t_bits_ideal_TX[i]- T_bits_TX[i])*BITCLK*100 (10)
表2為帶入例程中數(shù)據(jù)的Error_TX的計(jì)算結(jié)果。
從表2中可以看到,最大正Error_TX為0.64%,最小負(fù)Error_TX為-0.80%.
表2 Error_TX
低頻波特率的 接收端累積誤差
MSP430FR2311 User’s Guide中指出,接收端誤差包括兩部分:一個(gè)是從發(fā)射端start bit開(kāi)始邊沿到該邊沿被接收端識(shí)別的誤差,另一個(gè)是每個(gè)數(shù)據(jù)bit實(shí)際識(shí)別時(shí)刻和理想識(shí)別時(shí)刻的偏差。如圖3所示。
圖3 接收端兩種誤差
第一種誤差用Tsync表示,Tsync = ±0.5BRCLK。
對(duì)于第二種誤差,由于理想情況下接收端是在數(shù)據(jù)bit時(shí)長(zhǎng)一半的位置進(jìn)行采樣識(shí)別,所以在進(jìn)行誤差計(jì)算時(shí),是以該時(shí)刻為參考進(jìn)行計(jì)算,而不像發(fā)射端,是以該數(shù)據(jù)bit理想時(shí)長(zhǎng)結(jié)束的位置為參考進(jìn)行計(jì)算。
MSP430FR2311 User’s Guide中給出了計(jì)算公式,但是這些公式中包含的元素太多不便理解。本文通過(guò)簡(jiǎn)化的方式來(lái)進(jìn)行理解和計(jì)算,可以得到相同的累積誤差結(jié)果。
圖4為MSP430FR2311的Majority Vote示意圖,從圖中可以看出Majority Vote在三個(gè)邊沿的位置進(jìn)行數(shù)據(jù)采樣,采樣的中心位置為INT(N/2)+m,其中N=INT(BRCLK/BITCLK), m為UCBRSx中對(duì)應(yīng)于該數(shù)據(jù)bit的UCBRSx.m值。理想的數(shù)據(jù)bit采樣中心位置為0.5/BITCLK。
圖4 Majority Vote示意圖
所以對(duì)于從Start bit開(kāi)始的第i個(gè)數(shù)據(jù)bit,其采樣中心位置時(shí)刻為Tsync,前i-1個(gè)數(shù)據(jù)bit實(shí)際總時(shí)長(zhǎng)和該數(shù)據(jù)bit采樣中心位置時(shí)長(zhǎng)的總和,然后和理想的第i個(gè)數(shù)據(jù)bit采樣中心位置時(shí)刻進(jìn)行比較,便可得出第i個(gè)數(shù)據(jù)bit的累積誤差。
以時(shí)鐘源頻率BRCLK 32768Hz,波特率BITCLK 2400Hz為例,32768/2400=13.6533,所以UCOS16=0,UCBRx=13,UCBRSx=0xB6.理想數(shù)據(jù)bit采樣中心位置13.6533/2=6.8267BRCLK。
如圖5和圖6所示,在每個(gè)數(shù)據(jù)bit采樣中心位置時(shí)刻,實(shí)際累積采樣時(shí)刻和理想累積采樣時(shí)刻存在誤差。
當(dāng)考慮Tsync=0.5BRCLK時(shí),如圖5所示。
對(duì)于Start bit,理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻為6.83BRCLK,實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻為7.5BRCLK,誤差為6.83BRCLK-7.5BRCLK=-0.67BRCLK。
對(duì)于LSB bit,理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻為20.48BRCLK,實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻為20.5BRCLK,誤差為20.48BRCLK-20.5BRCLK=-0.02BRCLK。
對(duì)于Bit1,理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻為34.13BRCLK,實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻為34.5BRCLK,誤差為34.13BRCLK-34.5BRCLK=-0.37BRCLK。
后續(xù)bit位的累積誤差以此類推。
當(dāng)考慮Tsync=-0.5BRCLK時(shí),如圖6所示。
分析方法和圖5一樣,不再贅述。
圖5低頻波特率的接收端累積誤差示意圖,Tsync=0.5BRCLK
圖6低頻波特率的接收端累積誤差示意圖,Tsync=-0.5BRCLK
以下是低頻波特率的接收端累積誤差的公式推導(dǎo)。
t_bits_ideal_RX為接收端理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻。
t_bits_ideal_RX[i] = (i+0.5)/BITCLK (11)
t_bit_period_RX為接收端實(shí)際數(shù)據(jù)bit采樣中心位置時(shí)刻。每個(gè)數(shù)據(jù)bit采樣中心位置時(shí)刻的BRCLK個(gè)數(shù)等于INT(0.5UCBRx)和UCBRSx的對(duì)應(yīng)調(diào)制值UCBRSx.m之和。
t_bit_period_RX[i] = [INT(0.5*UCBRx) +UCBRSx.m]/BRCLK (12)
t_bits_before_RX為當(dāng)前數(shù)據(jù)bit之前的所有i-1個(gè)數(shù)據(jù)bit實(shí)際累積數(shù)據(jù)時(shí)長(zhǎng)。
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個(gè)數(shù)據(jù)bit實(shí)際累積數(shù)據(jù)時(shí)長(zhǎng),(UCBRx[i-1] + UCBRSx.m[i-1])/BRCLK為第i-1個(gè)數(shù)據(jù)bit實(shí)際數(shù)據(jù)時(shí)長(zhǎng)。
t_bits_RX為接收端實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻。
t_bits_TX[i] = Tsync + t_bit_period_RX[i] + t_bits_before_RX[i] (14)
定義Error_TX為接收端實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻相對(duì)于理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻的誤差占理想數(shù)據(jù)bit時(shí)長(zhǎng)的百分比,單位為%
Error_TX[i]=( t_bits_ideal_TX[i]- T_bits_TX[i])*BITCLK*100 (15)
表3為帶入例程中數(shù)據(jù)的Error_TX。
從表3中可以看到,最大正Error_TX為8.84%,最小負(fù)Error_TX為-5.52%.
表3 Error_TX
高頻波特率的 接收端累積誤差
以時(shí)鐘源頻率BRCLK 4000000Hz,波特率BITCLK 57600為例,4000000/57600=69.4444,所以UCOS16=1,UCBRx=4,UCBRFx=5,UCBRSx=0x55. 理想數(shù)據(jù)bit采樣中心位置69.4444/2=34.7222BRCLK.
如圖7和圖8所示,在每個(gè)數(shù)據(jù)bit累積采樣中心位置時(shí)刻,實(shí)際采樣時(shí)刻和理想采樣時(shí)刻存在誤差。
當(dāng)考慮Tsync=0.5BRCLK時(shí),如圖7所示。
對(duì)于Start bit,理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻為34.72BRCLK,實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻為34.5BRCLK,誤差為34.72BRCLK-34.5BRCLK=0.22BRCLK。
對(duì)于LSB bit,理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻為104.16BRCLK,實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻為104.5BRCLK,誤差為104.16BRCLK-104.5BRCLK=-0.34BRCLK。
對(duì)于Bit1,理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻為173.60,實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻為173.5BRCLK,誤差為173.60BRCLK-173.5BRCLK=0.10BRCLK。
后續(xù)bit位的累積誤差以此類推。
當(dāng)考慮Tsync=-0.5BRCLK時(shí),如圖8所示。
分析方法和圖7一樣,不再贅述。
圖7高頻波特率的接收端累積誤差示意圖,Tsync=0.5BRCLK
圖8高頻波特率的接收端累積誤差示意圖,Tsync=-0.5BRCLK
以下是高頻波特率的接收端累積誤差的公式推導(dǎo)。
t_bits_ideal_RX為接收端理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻。
t_bits_ideal_RX[i] = (i+0.5)/BITCLK (16)
t_bit_period_RX為接收端實(shí)際數(shù)據(jù)bit采樣中心位置時(shí)刻。每個(gè)數(shù)據(jù)bit采樣中心位置時(shí)刻的BRCLK個(gè)數(shù)等于INT[0.5*(16*UCBRx+UCBRFx)]和UCBRSx的對(duì)應(yīng)調(diào)制值UCBRSx.m之和。
t_bit_period_RX[i] = [INT(0.5*(16*UCBRx+UCBRFx)) +UCBRSx.m]/BRCLK (17)
t_bits_before_RX為當(dāng)前數(shù)據(jù)bit之前的所有i-1個(gè)數(shù)據(jù)bit實(shí)際累積數(shù)據(jù)時(shí)長(zhǎng)。
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個(gè)數(shù)據(jù)bit實(shí)際累積數(shù)據(jù)時(shí)長(zhǎng),(16*UCBRx+UCBRFx + UCBRSx.m)/BRCLK為第i-1個(gè)數(shù)據(jù)bit實(shí)際數(shù)據(jù)時(shí)長(zhǎng)。
t_bits_RX為接收端實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻。
t_bits_TX[i] = Tsync + t_bit_period_RX[i] + t_bits_before_RX[i] (19)
定義Error_TX為接收端實(shí)際數(shù)據(jù)bit累積采樣中心位置時(shí)刻相對(duì)于理想數(shù)據(jù)bit累積采樣中心位置時(shí)刻的誤差占理想數(shù)據(jù)bit時(shí)長(zhǎng)的百分比,單位為%
Error_TX[i]=( t_bits_ideal_TX[i]- T_bits_TX[i])*BITCLK*100 (20)
表4為帶入例程中數(shù)據(jù)的Error_TX。
從表4中可以看到,最大正Error_TX為1.76%,最小負(fù)Error_TX為-1.12%.
表4 Error_TX
時(shí)鐘源頻率優(yōu)選
時(shí)鐘源頻率優(yōu)選需要考慮兩方面的因素:
盡量降低發(fā)射端累積誤差和接收端累積誤差
對(duì)于Majority Vote架構(gòu),過(guò)高的時(shí)鐘源頻率會(huì)減小Majority Vote的檢測(cè)窗口,降低Majority Vote的性能
以波特率9600Hz為例, Error_TX和Error_RX如表5所示,根據(jù)時(shí)鐘源優(yōu)選原則,選擇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
審核編輯:何安
-
嵌入式處理
+關(guān)注
關(guān)注
0文章
341瀏覽量
10453
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)支持小數(shù)波特率接收數(shù)據(jù)的意義在哪兒?
UART波特率計(jì)算及UART收發(fā)回顯實(shí)驗(yàn)
串口波特率設(shè)置1200用不了是怎么回事?
115200的波特率,為啥實(shí)際速度只有11KB/s?
請(qǐng)問(wèn)如何使用低功耗 UART (LP UART) 波特率補(bǔ)償?
波特率是什么
可編程電源的通信波特率應(yīng)如何設(shè)置?
基于瑞薩64位MPU RZ/G2L的uboot串口多波特率支持介紹
Embedded Coder Support Package是否支持CAN喚醒和波特率配置?
STM32U575串口接收+GPDMA波特率不匹配怎么解決?
CAN總線十萬(wàn)個(gè)為什么 | CAN自定義波特率有什么用?
異步串行接口有哪些,異步串行接口為何需要波特率
ADS1293的ODR為853HZ,相應(yīng)的DSP的SPI端口的波特率要設(shè)置為多少?
AN-891: ADuC703x系列LIN波特率計(jì)算

低頻波特率的發(fā)射端累積誤差
評(píng)論