加入收藏
 免費(fèi)注冊(cè)
 用戶登陸
首頁(yè) 展示 供求 職場(chǎng) 技術(shù) 智造 職業(yè) 活動(dòng) 視點(diǎn) 品牌 鐠社區(qū)
今天是:2026年3月17日 星期二   您現(xiàn)在位于: 首頁(yè) →  智造 → 工業(yè)電子(應(yīng)用指南)
在dsPIC30F器件上實(shí)現(xiàn)自動(dòng)波特率檢測(cè)
日期:2007/7/9 16:43:59   作者:Microchip Technology

目前所有dsPIC30F器件都擁有一個(gè)具備自動(dòng)波特率檢測(cè)能力的UART外設(shè)。UART接收引腳(RX引腳)上的信號(hào)能在內(nèi)部傳送至一個(gè)輸入捕捉模塊以獲得輸入信號(hào)邊沿的時(shí)序。根據(jù)該時(shí)序,應(yīng)用程序能正確設(shè)置UART的波特率。

當(dāng)輸入數(shù)據(jù)的波特率以及處理器的振蕩器頻率未知時(shí),自動(dòng)波特率檢測(cè)是很有用的。由于RC振蕩器經(jīng)常不夠精確且隨時(shí)間變化會(huì)產(chǎn)生漂移,因此采用RC振蕩器的系統(tǒng)非常適合采用自動(dòng)波特率檢測(cè)。

方法

自動(dòng)波特率檢測(cè)的方法取決于接收到的已知數(shù)據(jù)。為實(shí)現(xiàn)自動(dòng)波特率檢測(cè),通常可使用通信協(xié)議發(fā)送特定數(shù)據(jù)。根據(jù)已接收數(shù)據(jù)的時(shí)序可計(jì)算U1BRG或U2BRG寄存器的值。上述寄存器用來(lái)設(shè)定UART的波特率。
本文的兩個(gè)示例都使用輸入數(shù)據(jù)0x55(ASCII字符“U”)來(lái)計(jì)算波特率發(fā)生器的值。該特定數(shù)據(jù)字節(jié)提供了最大數(shù)目的脈沖邊沿,因此具有最大的準(zhǔn)確度。實(shí)際上可采用任何數(shù)據(jù)字節(jié),此時(shí)波特率計(jì)算將會(huì)自動(dòng)適應(yīng)被測(cè)數(shù)據(jù)。通常,數(shù)據(jù)中出現(xiàn)的邊沿(位狀態(tài)變化)越多,則結(jié)果會(huì)越精確。

信號(hào)

UART信號(hào)的發(fā)送順序?qū)嵭械臀辉谙鹊脑瓌t。發(fā)送字節(jié)中首先是起始位(邏輯零),末尾則為停止位(邏輯1)。發(fā)送字節(jié)通常具有8個(gè)數(shù)據(jù)位,但也可使用不同長(zhǎng)度的數(shù)據(jù)位,在數(shù)據(jù)位之后可加入奇偶校驗(yàn)位。所有這些都將對(duì)自動(dòng)波特率檢測(cè)的計(jì)算造成影響。但應(yīng)事先知道數(shù)據(jù)的格式。
由于存在起始位和停止位,因此存在至少兩個(gè)脈沖邊沿,但也可能是10個(gè)或更多。

時(shí)序和采樣

在記錄了脈沖邊沿的時(shí)序并去除偏移量t0后,可利用公式1來(lái)計(jì)算UxBRG寄存器的值。我們還采用線性回歸算法對(duì)該公式進(jìn)行了推導(dǎo),具體過(guò)程見附錄(http://ww1.microchip.com/downloads/en/AppNotes/00962a_cn.pdf)。計(jì)算是在最后一個(gè)脈沖邊沿被記錄后進(jìn)行的,且應(yīng)在下一個(gè)字節(jié)的起始位出現(xiàn)前完成以避免造成數(shù)據(jù)丟失。因此,計(jì)算過(guò)程須設(shè)定時(shí)間限制并應(yīng)對(duì)其進(jìn)行檢查。在某些情況下,有必要使用一種具有較快執(zhí)行速度的較簡(jiǎn)便計(jì)算方法。此時(shí),同樣需考慮誤差檢查所需的時(shí)間。

UxBRG=[2(t1+2t2+3t3+...+9t9)-9(t1+t2+t3+...t9)]/2640-1……公式1

誤差

誤差檢查是一個(gè)好的編程習(xí)慣。輸入信號(hào)中可能不包含期望數(shù)據(jù)0x55。誤差可能是明顯的,因?yàn)檫呇刂g的時(shí)間較長(zhǎng)且簡(jiǎn)便的超時(shí)即可對(duì)該問(wèn)題進(jìn)行檢測(cè)。假使所有邊沿都出現(xiàn)在可接受的超時(shí)周期內(nèi),這些邊沿仍然有可能與期望的順序不匹配。有幾種統(tǒng)計(jì)方法可用來(lái)顯示被測(cè)信號(hào)偏離期望信號(hào)的程度。示例代碼中使用了平均絕對(duì)誤差。如果距離期望時(shí)間測(cè)量值偏移量的平均值超過(guò)位時(shí)間的5%,則該數(shù)據(jù)將被丟棄。

替代方法

因?yàn)槭褂昧怂械妮斎氩蹲綌?shù)據(jù),線性回歸方法具有極佳的準(zhǔn)確性。但這種方法對(duì)于某些應(yīng)用來(lái)說(shuō)計(jì)算量太大且太慢。我們還推導(dǎo)了一種簡(jiǎn)化的方法,該方法用兩個(gè)邊沿之間的時(shí)間差除以位數(shù)以計(jì)算單個(gè)位時(shí)間。

UxBRG=(t8–t0)/128–1……公式2

代碼實(shí)例

本文附錄中的代碼實(shí)例(http://ww1.microchip.com/downloads/en/AppNotes/00962a_cn.pdf)是基于輸入字節(jié)0x55(ASCII字符“U”)實(shí)現(xiàn)自動(dòng)波特率檢測(cè)。這些代碼是使用MPLAB®C30編譯器進(jìn)行開發(fā)的。

結(jié)構(gòu)

軟件具有三個(gè)主要部分:主循環(huán),初始化和中斷服務(wù)程序。

主循環(huán)

main()函數(shù)具有一個(gè)執(zhí)行自動(dòng)波特率檢測(cè)功能的無(wú)限循環(huán)。函數(shù)開頭調(diào)用SetupAutoBaud()對(duì)所有外設(shè)和自動(dòng)波特率檢測(cè)過(guò)程所使用的中斷進(jìn)行初始化。隨后代碼處于循環(huán)等待狀態(tài)直至U1BRG寄存器具有一個(gè)非零值,表明自動(dòng)波特率檢測(cè)過(guò)程已成功完成。

代碼根據(jù)U1BRG中的值來(lái)計(jì)算實(shí)際波特率,并從UART發(fā)送一條報(bào)文顯示計(jì)算后的波特率。波特率計(jì)算不是自動(dòng)波特率檢測(cè)工作所必需的,但該項(xiàng)工作用于演示目的。

待該文本發(fā)送后,程序重新循環(huán)并重新開始自動(dòng)波特率檢測(cè)過(guò)程。

初始化

SetupAutoBaud()函數(shù)對(duì)UART1外設(shè)、輸入捕捉1模塊和Timer 3進(jìn)行初始化以對(duì)輸入數(shù)據(jù)執(zhí)行自動(dòng)波特率檢測(cè)。

UART1啟用并使能自動(dòng)波特率檢測(cè)功能。此時(shí)U1RX引腳上的輸入串行數(shù)據(jù)信號(hào)在內(nèi)部傳送到輸入捕捉1模塊。

為獲得最高的精度,Timer 3設(shè)定在每一個(gè)指令周期進(jìn)行遞增計(jì)數(shù)。周期設(shè)置為最大值,以便在16位計(jì)數(shù)計(jì)滿之后定時(shí)器才會(huì)出現(xiàn)溢出返回。

輸入捕捉1模塊設(shè)置為捕捉Timer 3且在輸入信號(hào)的每一個(gè)邊沿產(chǎn)生中斷。輸入捕捉1模塊中斷使能。

中斷服務(wù)程序

共有兩個(gè)中斷服務(wù)程序,分別為Timer 3中斷和輸入捕捉1中斷。

Timer 3中斷服務(wù)程序?qū)ψ陨弦淮屋斎氩蹲绞录蟮亩〞r(shí)器溢出中斷次數(shù)進(jìn)行計(jì)數(shù)。如果脈沖邊沿之間存在一次以上的溢出,則表明自動(dòng)波特率檢測(cè)失敗并將重新開始該過(guò)程。這種情況發(fā)生在輸入信號(hào)脈沖邊沿間存在較大間隔時(shí)。

輸入捕捉1中斷服務(wù)程序是自動(dòng)波特率檢測(cè)過(guò)程的核心部分。根據(jù)當(dāng)前執(zhí)行的是簡(jiǎn)化計(jì)算或復(fù)雜的回歸計(jì)算,該中斷服務(wù)程序?qū)⒂兴煌?/P>

中斷服務(wù)程序首先將前一脈沖邊沿的記錄時(shí)間進(jìn)行保存并讀入與已經(jīng)檢測(cè)到的當(dāng)前脈沖邊沿對(duì)應(yīng)的新時(shí)間值。

定時(shí)器溢出時(shí)計(jì)數(shù)將被復(fù)位為零以開始一個(gè)新的超時(shí)周期。

第一次捕捉中斷將使能Timer3中斷以對(duì)超時(shí)進(jìn)行檢查并對(duì)自動(dòng)波特率檢測(cè)計(jì)算變量進(jìn)行初始化。

隨后發(fā)生的每一次捕捉中斷都用來(lái)從前一時(shí)間減去當(dāng)前捕捉時(shí)間值以獲得當(dāng)前位的時(shí)間。該計(jì)算采用無(wú)符號(hào)整數(shù)來(lái)進(jìn)行的,因此相鄰捕捉間定時(shí)器是否溢出不會(huì)產(chǎn)生影響。
對(duì)于簡(jiǎn)便計(jì)算,位時(shí)間加入到一個(gè)累加和直至所有8個(gè)位時(shí)間都已被累積在一起。

對(duì)于回歸計(jì)算,位時(shí)間加入到前一次記錄的時(shí)間并存儲(chǔ)到時(shí)間數(shù)組的下一個(gè)元素中。這為回歸計(jì)算以及以后的誤差檢查提供了數(shù)據(jù)點(diǎn);貧w計(jì)算所需的累加運(yùn)算也是在中斷服務(wù)程序中完成的。

當(dāng)最后一個(gè)(第十)捕捉中斷發(fā)生后,中斷服務(wù)程序隨后禁止全部?jī)蓚(gè)中斷,結(jié)束自動(dòng)波特率檢測(cè)計(jì)算并使能使用新波特率的UART。

對(duì)于簡(jiǎn)化計(jì)算,除了超時(shí)檢查外將不進(jìn)行誤差檢查,且U1BRG寄存器的值直接來(lái)自8個(gè)位時(shí)間的累加和。在除以128前,該數(shù)通過(guò)加上64進(jìn)行舍入。這將在截取前有效加入½。除以128的操作是通過(guò)進(jìn)行7次移位來(lái)實(shí)現(xiàn)的。

對(duì)于回歸計(jì)算,將計(jì)算回歸線的斜率和Y截距。這將用來(lái)計(jì)算期望時(shí)間值,該值將從用于誤差檢查的實(shí)際時(shí)間測(cè)量值中減去。如果誤差大于5%,自動(dòng)波特率檢測(cè)過(guò)程將重新開始。該門限值可以根據(jù)不同的準(zhǔn)確度要求進(jìn)行改動(dòng)。最后,根據(jù)回歸線的斜率計(jì)算U1BRG值。

代碼的使用

本示例代碼是使用運(yùn)行于29.5MIPS的dsPIC30F6014器件在dsPICDEM1.1演示板上進(jìn)行開發(fā)和測(cè)試的。

時(shí)序允許將代碼應(yīng)用于低至600的任何標(biāo)準(zhǔn)波特率?赏ㄟ^(guò)以下步驟對(duì)示例代碼進(jìn)行測(cè)試:
• 使用標(biāo)準(zhǔn)的RS232電纜連接PC的COM口和dsPICDEM 1.1控制板上標(biāo)有“PORT B”的連接器。
• 在PC上運(yùn)行終端程序,如超級(jí)終端,應(yīng)確保終端程序使用了正確的COM口。
• 編譯代碼,將代碼燒寫到dsPIC器件中,并運(yùn)行代碼。
• 在終端程序中鍵入“U”。
• dsPICDEM1.1演示板將以“Baud rate: xxxx”文本作出響應(yīng),其中xxxx是使用的波特率。
• 改變波特率并在終端程序中再次鍵入“U”。
• dsPICDEM1.1演示板將響應(yīng)新的波特率。

使用的資源

除UART外,自動(dòng)波特率檢測(cè)代碼還將用到程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,一個(gè)輸入捕捉模塊以及一個(gè)定時(shí)器。自動(dòng)波特率檢測(cè)過(guò)程中用到的RAM很少且在執(zhí)行完畢之后定時(shí)器和輸入捕捉模塊還可用于其它用途。程序存儲(chǔ)器的使用取決于計(jì)算的復(fù)雜程度。

調(diào)整和改進(jìn)

提供的示例代碼給出了兩種方法對(duì)輸入數(shù)據(jù)字節(jié)0x55(ASCII字符“U”)執(zhí)行自動(dòng)波特率檢測(cè)。這些方法可應(yīng)用于任何已知的輸入數(shù)據(jù)。所有方法都通過(guò)確定輸入脈沖沿的時(shí)序來(lái)確定單個(gè)位周期。可以使用不同程度的分析和誤差檢查措施以提高可靠性或運(yùn)行速度。

對(duì)于未知數(shù)據(jù)也可使用自動(dòng)波特率檢測(cè)方式,但難以確定單個(gè)位時(shí)間并難以將起始和停止位與數(shù)據(jù)位進(jìn)行區(qū)分。理想的情況下自動(dòng)波特率檢測(cè)過(guò)程應(yīng)利用數(shù)據(jù)的相關(guān)信息來(lái)簡(jiǎn)化計(jì)算。

自動(dòng)波特率檢測(cè)過(guò)程是利用中斷在后臺(tái)執(zhí)行的。dsPIC器件靈活的中斷優(yōu)先級(jí)結(jié)構(gòu)允許自動(dòng)波特率檢測(cè)中斷配置為對(duì)應(yīng)用的其余部分影響最小。用于自動(dòng)波特率檢測(cè)的定時(shí)器和輸入捕捉資源在自動(dòng)波特率檢測(cè)計(jì)算完畢之后還可用于應(yīng)用的其他部分。

備用中斷矢量表可用于自動(dòng)波特率檢測(cè)中斷,允許主應(yīng)用程序擁有自己?jiǎn)为?dú)的輸入捕捉和定時(shí)器中斷。

兩個(gè)UART都具有自動(dòng)波特率檢測(cè)能力。注意,由于UART1使用輸入捕捉1模塊而UART2使用輸入捕捉模塊2,因此兩個(gè)UART都可同時(shí)執(zhí)行自動(dòng)波特率檢測(cè)。

結(jié)論

內(nèi)置的自動(dòng)波特率檢測(cè)功能使得未知波特率的UART的配置變得簡(jiǎn)便。由于該過(guò)程可在中斷控制下在后臺(tái)完成,因此其對(duì)應(yīng)用的其余部分影響甚小。代碼可根據(jù)用戶需求,使用一種簡(jiǎn)便的計(jì)算方法來(lái)獲得較高的執(zhí)行速度,或使用一種具有完備誤差檢查功能且較為復(fù)雜的計(jì)算方法以實(shí)現(xiàn)更佳的可靠性。

進(jìn)一步信息,請(qǐng)?jiān)L問(wèn)http://ww1.microchip.com/downloads/en/AppNotes/00962a_cn.pdf

→ 『關(guān)閉窗口』
 發(fā)布人:-----
 [ → 我要發(fā)表 ]
上篇文章:MICRF008:?jiǎn)纹疤炀入,數(shù)據(jù)出”接收器
下篇文章:用PSoC技術(shù)驅(qū)動(dòng)LCD的方法
→ 主題所屬分類:  工業(yè)電子 → 應(yīng)用指南
 熱門文章
 中航光電(158廠)電連接器產(chǎn)品選型指南 (64376)
 國(guó)巨(Yageo)片式電阻電容產(chǎn)品規(guī)格書 (57638)
 下一代前傳網(wǎng)絡(luò)接口(NGFI)白皮書 (49840)
 2013年移動(dòng)經(jīng)濟(jì)(The Mobile Economy 2013… (48116)
 鐳射二極管 (46553)
 使用NFC進(jìn)行藍(lán)牙配對(duì)(Using NFC for Bluet… (45345)
 為濾波電路選擇合適的運(yùn)算放大器 (42190)
 mirasol顯示器與競(jìng)爭(zhēng)性顯示技術(shù)的比較 - Qualco… (41851)
 CodeWarrior Development Studio (41015)
 u-blox產(chǎn)品目錄(Product Catalog 16… (40723)
 最近更新
 風(fēng)華高科中高壓MLCC解決方案多領(lǐng)域全場(chǎng)景滲透 (8月29日)
 用樹莓派Pico W和Lora Hat構(gòu)建網(wǎng)格節(jié)點(diǎn) (5月8日)
 用Pulsus PLD系統(tǒng)實(shí)現(xiàn)突破性piezoMEMS器件 (1月21日)
 復(fù)旦芯片實(shí)現(xiàn)感存算一體化:像人眼一樣智能 (9月29日)
 增強(qiáng)型人工智能為Meteor Lake處理器的設(shè)計(jì)提速 (5月15日)
 教育行業(yè)數(shù)字化自主創(chuàng)新飛騰生態(tài)解決方案白皮書 (4月2日)
 人形機(jī)器人設(shè)計(jì)原則及人類智能和內(nèi)部身體系統(tǒng)仿真 (2月2日)
 用傳感器讓中央空調(diào)更節(jié)能環(huán)保,精確測(cè)量溫濕度、… (1月30日)
 不干膠標(biāo)簽印刷UL認(rèn)證 (11月22日)
 基于廣芯微UM3242F-RET6主控芯片的DC-AC逆… (11月9日)
 文章搜索
搜索選項(xiàng):            
  → 評(píng)論內(nèi)容 (點(diǎn)擊查看)
您是否還沒有 注冊(cè) 或還沒有 登陸 本站?!
關(guān)于我們 ┋ 免責(zé)聲明 ┋ 產(chǎn)品與服務(wù) ┋ 聯(lián)系我們 ┋ About 365PR ┋ Join 365PR
Copyright @ 2005-2008 365pr.net Ltd. All Rights Reserved. 深圳市產(chǎn)通互聯(lián)網(wǎng)有限公司 版權(quán)所有
E-mail:postmaster@365pr.net 不良信息舉報(bào) 備案號(hào):粵ICP備06070889號(hào)