吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

根據(jù)SCI輸入信號(hào)自動(dòng)校準(zhǔn)波特率

星星科技指導(dǎo)員 ? 來(lái)源:TI ? 作者:Terry Deng ? 2023-03-17 10:34 ? 次閱讀

本文檔概述了一種基于 SCI/UART 輸入信號(hào),可以自動(dòng)校準(zhǔn)本設(shè)備SCI/UART波特率的方法,該方法適用與所有第三代C2000芯片,比如F2807x/37x,F(xiàn)28004x,F(xiàn)28002x等等。

一 原理說(shuō)明

假設(shè)有2塊電路板通過(guò)SCI進(jìn)行通信。“Transmitter”向“Receiver”發(fā)送未知波特率的數(shù)據(jù),“ Receiver”則使用 eCAP 測(cè)量未知的波特率,然后修改其自身的波特率和“Transmitter”匹配。

下面款圖是一種情況,其中“Transmitter” 的波特率設(shè)置為 9889,而“Receiver”的初始波特率設(shè)置為 9601 ,相比之下“Receiver”的波特率為 -3% 偏差。 經(jīng)過(guò)算法的自動(dòng)校準(zhǔn)以后,“Receiver”將會(huì)把自身波特率校正為與“Transmitter”相同的9889。

pYYBAGQT0amARgUfAABA1BlJA4c667.png

下面框圖則是另一種情況,假如“Receiver”和“Transmitter”的初始波特率都是9889,但“Receiver”的內(nèi)部晶振INTOSC有-3%的偏差。使用上述完全相同的方法原理和步驟,“Receiver”波特率設(shè)置將會(huì)從9889校準(zhǔn)成9601,這樣“Receiver”的波特率設(shè)置被自動(dòng)校準(zhǔn)抵消內(nèi)部晶振的偏差。在測(cè)量實(shí)際信號(hào)時(shí),“Receiver”輸出到“Transmitter”的信號(hào)會(huì)是正確的 9889 波特率。

pYYBAGQT0aqAEj78AABV32CtimM689.png

二 Receiver 的校準(zhǔn)代碼

1. 初始化

需要配置以下模塊來(lái)校準(zhǔn)波特率:

時(shí)鐘:使用 INTOSC2 并選擇 100MHz 的 LSPCLK

#define DEVICE_SETCLOCK_CFG (SYSCTL_OSCSRC_OSC2 | SYSCTL_IMULT(20) |

SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) |

SYSCTL_PLL_ENABLE)

//

// Set up PLL control and clock dividers

//

SysCtl_setClock(DEVICE_SETCLOCK_CFG);

//

// Make sure the LSPCLK divider is set to the default (divide by 4)

//

SysCtl_setLowSpeedClock(SYSCTL_LSPCLK_PRESCALE_1);

SCI 模塊:通訊數(shù)據(jù)使用,發(fā)出校準(zhǔn)以后的波形

// Initialize SCIA and its FIFO.

//

SCI_performSoftwareReset(SCIA_BASE);

//

// Configure SCIA for communications.

//

SCI_setConfig(SCIA_BASE, DEVICE_LSPCLK_FREQ, TARGETBAUD, (SCI_CONFIG_WLEN_8 |

SCI_CONFIG_STOP_ONE |

SCI_CONFIG_PAR_NONE));

SCI_resetChannels(SCIA_BASE);

SCI_resetRxFIFO(SCIA_BASE);

SCI_resetTxFIFO(SCIA_BASE);

SCI_clearInterruptStatus(SCIA_BASE, SCI_INT_TXFF | SCI_INT_RXFF);

SCI_enableFIFO(SCIA_BASE);

SCI_enableModule(SCIA_BASE);

SCI_performSoftwareReset(SCIA_BASE);

Xbar 輸入:將 GPIO28/SCI 內(nèi)部連接到 INPUTXBAR7 與 ECAP1 配合使用

//

// Configure GPIO 28 as eCAP input

//

XBAR_setInputPin(XBAR_INPUT7, 28);

ECAP 模塊:監(jiān)控接收到的 SCI 通信脈沖寬度

//

// Disable ,clear all capture flags and interrupts

//

ECAP_disableInterrupt(ECAP1_BASE,

(ECAP_ISR_SOURCE_CAPTURE_EVENT_1 |

ECAP_ISR_SOURCE_CAPTURE_EVENT_2 |

ECAP_ISR_SOURCE_CAPTURE_EVENT_3 |

ECAP_ISR_SOURCE_CAPTURE_EVENT_4 |

ECAP_ISR_SOURCE_COUNTER_OVERFLOW |

ECAP_ISR_SOURCE_COUNTER_PERIOD |

ECAP_ISR_SOURCE_COUNTER_COMPARE));

ECAP_clearInterrupt(ECAP1_BASE,

(ECAP_ISR_SOURCE_CAPTURE_EVENT_1 |

ECAP_ISR_SOURCE_CAPTURE_EVENT_2 |

ECAP_ISR_SOURCE_CAPTURE_EVENT_3 |

ECAP_ISR_SOURCE_CAPTURE_EVENT_4 |

ECAP_ISR_SOURCE_COUNTER_OVERFLOW |

ECAP_ISR_SOURCE_COUNTER_PERIOD |

ECAP_ISR_SOURCE_COUNTER_COMPARE));

//

2. 中斷

捕獲傳入 SCI 通信的脈沖寬度,每捕獲 4 次就中斷一次。 將這 4 個(gè)捕獲添加到陣列中。

__interrupt void ecap1ISR(void)

{

if(stopCaptures==0)

{

//

// Get the capture counts, interrupt every 4. Can be 1-bit or more wide.

// add one to account for partial eCAP counts at higher baud rates

// (e.g. count = 40, but if had higher resolution, this would be 40.5)

//

capCountArr[0] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_1);

capCountArr[1] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_2);

capCountArr[2] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_3);

capCountArr[3] = 1+ECAP_getEventTimeStamp(ECAP1_BASE, ECAP_EVENT_4);

//

// Add samples to a buffer. Get average baud and tune INTOSC if buffer filled.

//

capCountIter = 0;

for (capCountIter=0; capCountIter<4; capCountIter++)

{

//

3. 主循環(huán)

捕獲陣列滿后,計(jì)算陣列的平均脈沖寬度 (也就是波特率),并更新SCI波特率寄存器,使其盡可能接近計(jì)算的平均值。

//

// Loop forever. Suspend or place breakpoints to observe the buffers.

//

for(;;)

{

//

// Array is filled, begin tuning

//

if(stopCaptures==1)

{

//

// Get an average baud rate from the array of samples

//

uint32_t avgBaud = getAverageBaud(samplesArr,NUMSAMPLES,TARGETBAUD);

//

// if the baud function returns the error code '0', then flag an error

//

if(avgBaud==0)

{

ESTOP0;

4. 平均脈沖寬度

對(duì)于許多應(yīng)用的SCI 通信,傳輸?shù)臄?shù)據(jù) (例如 0xA5)是變化不固定的,因此SCI的高低電平脈沖寬度就是變化的。所以必須對(duì)樣本陣列進(jìn)行如下的預(yù)處理,然后才能計(jì)算平均脈沖寬度。

a) 丟棄大于 10 位寬的脈沖寬度 (丟棄空閑時(shí)間)

b) 將 n 位值除以 n

c) 對(duì)修改后的樣本數(shù)組進(jìn)行平均化

uint32_t getAverageBaud(volatile float arr[], int size, float targetBaudRate)

{

//

// clean up variable width array to single-bit-width array

//

uint16_t pass = arrTo1PulseWidth(arr, size, (float)DEVICE_SYSCLK_FREQ/targetBaudRate);

//

// pass only if enough good samples provided

//

if(pass == 0)

{

return 0;

}

//

// convert 2-bit width, 3-bit width, etc. to 1-bit width values by dividing, and average these values.

// skip unrelated values

//

float averageBitWidth = computeAvgWidth(arr, size);

以下是平均脈寬計(jì)算的原理和代碼流程圖

pYYBAGQT0aqAAUOBAABId9BaVcc503.png

poYBAGQT0ayAPcWQAAA6HkSAzxQ287.png

三 結(jié)果

按照以下設(shè)置進(jìn)行測(cè)試,結(jié)果詳見(jiàn)表格,校準(zhǔn)以后的誤差從3% 改善為0.1%左右甚至更小。

“Transmitter”設(shè)置為正確的波特率 (我們嘗試匹配的波特率)

“Receiver”設(shè)置為錯(cuò)誤波特率 (-3% 或 +3%)

“Receiver”運(yùn)行校準(zhǔn)程序以匹配“Transmitter”

100K 波特率 9601波特率
-3% +3% -3% +3%
Transmitter
(我們正在嘗試匹配的內(nèi)容)
理想波特率
(僅供參考)
103306 96899 9889 9314.
實(shí)際波特率
(必須與此匹配)
104174. 96906 9890 9315.
Receiver
(初始錯(cuò)誤波特率)
波特率
(校準(zhǔn)前)
100154. 100157. 9622. 9622.
出錯(cuò)百分比
(校準(zhǔn)前)
-3.859% 3.355% -2.706% 3.296%
Receiver
(校準(zhǔn)后波特率)
波特率
(校準(zhǔn)后)
104336. 97047. 9888 9314.
出錯(cuò)百分比
(校準(zhǔn)后)
0.156% 0.146% -0.016% -0.012%

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5363

    瀏覽量

    121192
  • 電路板
    +關(guān)注

    關(guān)注

    140

    文章

    4997

    瀏覽量

    98878
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1243

    瀏覽量

    101773
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    can波特率計(jì)算

    can波特率其實(shí)并不難計(jì)算,這里給出了can波特率的簡(jiǎn)單計(jì)算,并給出了實(shí)例STM32的CAN波特率計(jì)算。講解CAN波特率計(jì)算原理。
    發(fā)表于 12-14 17:02 ?1.3w次閱讀
    can<b class='flag-5'>波特率</b>計(jì)算

    什么是串口波特率?串口波特率的分類及應(yīng)用詳解

    直接影響到通信的質(zhì)量和效率。本文將介紹串口波特率的分類、選擇以及應(yīng)用。串口波特率的分類根據(jù)不同的應(yīng)用需求,串口波特率包括以下幾種:標(biāo)準(zhǔn)波特率
    的頭像 發(fā)表于 08-08 10:09 ?6163次閱讀
    什么是串口<b class='flag-5'>波特率</b>?串口<b class='flag-5'>波特率</b>的分類及應(yīng)用詳解

    基于SCI/UART輸入信號(hào)自動(dòng)校準(zhǔn)波特率

    本文檔概述了一種基于 SCI/UART 輸入信號(hào),可以自動(dòng)校準(zhǔn)本設(shè)備SCI/UART
    發(fā)表于 11-04 07:16

    C Core芯片SCI串口波特率容限優(yōu)化

    發(fā)現(xiàn)了C*Core國(guó)芯芯片中SCI發(fā)送與接受方波特率誤差導(dǎo)致數(shù)據(jù)不匹配問(wèn)題,分析了發(fā)送與接受方數(shù)據(jù)傳輸丟幀、誤幀現(xiàn)象出現(xiàn)的根本原因,總結(jié)了SCI容限值與芯片主頻及標(biāo)準(zhǔn)波特率之間規(guī)
    發(fā)表于 03-05 17:45 ?17次下載
    C Core芯片<b class='flag-5'>SCI</b>串口<b class='flag-5'>波特率</b>容限優(yōu)化

    串行通信的實(shí)現(xiàn)條件和波特率自動(dòng)整定問(wèn)題

    串行通信在波特率誤差超過(guò)一定范圍時(shí),會(huì)產(chǎn)生錯(cuò)誤。本節(jié)介紹的內(nèi)容在51單片機(jī)上僅用軟件就實(shí)現(xiàn)了波特率自動(dòng)整定,最大程度地減小了波特率誤差,因而可使串行通信的可靠性得到提高。
    發(fā)表于 03-23 14:52 ?3987次閱讀
    串行通信的實(shí)現(xiàn)條件和<b class='flag-5'>波特率</b><b class='flag-5'>自動(dòng)</b>整定問(wèn)題

    在dsPIC30F器件上實(shí)現(xiàn)自動(dòng)波特率檢測(cè)的詳細(xì)中文資料概述

    目前所有 dsPIC30F 器件都擁有一個(gè)具備自動(dòng)波特率檢測(cè)能力的 UART 外設(shè)。UART 接收引腳(RX 引腳)上的信號(hào)能在內(nèi)部傳送至一個(gè)輸入捕捉模塊以獲得輸入
    發(fā)表于 06-29 10:25 ?6次下載
    在dsPIC30F器件上實(shí)現(xiàn)<b class='flag-5'>自動(dòng)波特率</b>檢測(cè)的詳細(xì)中文資料概述

    在dsPIC30F器件上實(shí)現(xiàn)自動(dòng)波特率檢測(cè)

    目前所有 dsPIC30F 器件都擁有一個(gè)具備自動(dòng)波特率檢測(cè)能力的 UART 外設(shè)。UART 接收引腳(RX 引腳)上的信號(hào)能在內(nèi)部傳送至一個(gè)輸入捕捉模塊以獲得輸入
    發(fā)表于 05-11 10:34 ?10次下載

    根據(jù)SCI輸入信號(hào)自動(dòng)校準(zhǔn)波特率

    作者:Terry Deng 本文檔概述了一種基于 SCI/UART 輸入信號(hào),可以自動(dòng)校準(zhǔn)本設(shè)備S
    的頭像 發(fā)表于 01-12 13:56 ?2711次閱讀
    <b class='flag-5'>根據(jù)</b><b class='flag-5'>SCI</b><b class='flag-5'>輸入</b><b class='flag-5'>信號(hào)</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>校準(zhǔn)</b><b class='flag-5'>波特率</b>

    SCI串口自動(dòng)波特率介紹

    自中科昊芯推出專題講解SCI串口通信以來(lái),第一期主要講解SCI串口FIFO通信原理,本期主要講解SCI串口自動(dòng)波特率,F(xiàn)IFO中斷通信邏輯將在下期內(nèi)容中講解。
    的頭像 發(fā)表于 04-26 09:26 ?3333次閱讀
    <b class='flag-5'>SCI</b>串口<b class='flag-5'>自動(dòng)波特率</b>介紹

    根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率

    根據(jù) SCI 輸入信號(hào)自動(dòng)校準(zhǔn)波特率
    發(fā)表于 10-28 12:00 ?0次下載
    <b class='flag-5'>根據(jù)</b> <b class='flag-5'>SCI</b> <b class='flag-5'>輸入</b><b class='flag-5'>信號(hào)</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>校準(zhǔn)</b><b class='flag-5'>波特率</b>

    STM32的USART自動(dòng)波特率檢測(cè)

    當(dāng)在兩個(gè)設(shè)備之間建立通信鏈路時(shí),自動(dòng)波特率檢測(cè)十分有用,因?yàn)閺脑O(shè)備能夠檢測(cè)到主控制器的波特率并進(jìn)行相應(yīng)的自我調(diào)整。這需要使用一種自動(dòng)機(jī)制來(lái)確定波特率
    的頭像 發(fā)表于 11-28 11:15 ?8918次閱讀

    芯教程丨平頭哥助力中科昊芯HX2000系列芯片專題SCI串口通信(二)AutoBaud自動(dòng)波特率

    自中科昊芯推出專題講解SCI串口通信以來(lái),第一期主要講解SCI串口FIFO通信原理,本期主要講解SCI串口自動(dòng)波特率,F(xiàn)IFO中斷通信邏輯將在下期內(nèi)容中講解。HX2000系列
    的頭像 發(fā)表于 04-27 14:48 ?928次閱讀
    芯教程丨平頭哥助力中科昊芯HX2000系列芯片專題<b class='flag-5'>SCI</b>串口通信(二)AutoBaud<b class='flag-5'>自動(dòng)波特率</b>

    什么是波特率?為什么要設(shè)置波特率

    歡迎來(lái)到東用知識(shí)小課堂!一、什么是波特率波特率(BaudRate)單位bps是用于衡量串口通信速度的單位,它表示每秒鐘發(fā)送的比特?cái)?shù)。如果一個(gè)串口的波特率為9600,就表示該串口在一秒鐘內(nèi)可以發(fā)送
    的頭像 發(fā)表于 04-08 00:00 ?7147次閱讀
    什么是<b class='flag-5'>波特率</b>?為什么要設(shè)置<b class='flag-5'>波特率</b>?

    什么是波特率波特率是如何影響CAN總線長(zhǎng)度的?

    信息在通信通道中傳輸?shù)乃俾时环Q為波特率。通俗地說(shuō),波特率是數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)乃俣?速率。這是以比特/秒表示的。因此,一秒鐘內(nèi)在通信網(wǎng)絡(luò)上傳輸?shù)谋忍財(cái)?shù)就是波特率
    的頭像 發(fā)表于 08-14 15:23 ?6720次閱讀
    什么是<b class='flag-5'>波特率</b>?<b class='flag-5'>波特率</b>是如何影響CAN總線長(zhǎng)度的?

    波特率的定義和計(jì)算方法 波特率與數(shù)據(jù)傳輸速度的關(guān)系

    波特率的定義 波特率(Baud Rate),又稱調(diào)制速率或傳符號(hào),是指每秒傳輸?shù)姆?hào)數(shù)目,單位為波特(Bd)。它是一個(gè)數(shù)字信號(hào)通信中重要的
    的頭像 發(fā)表于 11-22 09:49 ?3553次閱讀
    大发888游戏代冲省钱技巧| 百家乐官网金海岸软件| 678百家乐博彩娱乐网| 爱拼百家乐官网现金网| 赌百家乐怎样能赢| 百家乐官网玩法守则| 百家乐赌现金| 澳门百家乐官网玩法与游戏规则| 澳门百家乐小| 百家乐官网赌场代理荐| 大发888 代充| 百家乐官网骗局视频| 优博平台代理开户| 百家乐2珠路投注法| 百家乐官网冯耕耘打法| 百家乐规则以及玩法| 兰桂坊百家乐官网的玩法技巧和规则 | 现场百家乐官网电话投注| 王子百家乐的玩法技巧和规则| 百家乐官网庄闲局部失| bet365备用网址b365etbyty| 正宗杨公风水24山分金| 澳门百家乐官网登陆网址| 路劲太阳城业主论坛| 回力百家乐官网的玩法技巧和规则 | 二代百家乐破解| 网络百家乐官网玩法| 网上娱乐城开户| 狮威百家乐娱乐网| 定做百家乐官网桌子| 足球心水论坛| 百家乐赌的是心态吗| 网络百家乐官网会作假吗| 德州扑克高手| 百家乐赌博博彩赌博网| 百家乐官网小九梭哈| 樟树市| 大发888游戏平台3403| 澳门百家乐备用网址| 百家乐官网娱乐备用网址| 当雄县|