向 玲,劉 軍
(杭州快電新能源科技有限公司,杭州 310052)
采用單片機(jī)PCA捕捉比較模塊進(jìn)行載波偵聽的多主RS485通訊系統(tǒng)的設(shè)計(jì)
向 玲,劉 軍
(杭州快電新能源科技有限公司,杭州 310052)
在工業(yè)控制和現(xiàn)場儀表的熟知通訊系統(tǒng)中,RS485總線由于其造價(jià)低廉,使用簡單,而且采用差分信號傳輸,抗干擾性好,傳輸可靠,其應(yīng)用的領(lǐng)域頗多。由于RS485是一種半雙工通訊方式,這種通訊方式一般適應(yīng)于一對多的主從模式系統(tǒng)。如果要實(shí)現(xiàn)多主模式通訊,使得每個節(jié)點(diǎn)都能主動發(fā)起通訊,那么,就需要從硬件和軟件上,對原有的RS485總線方式進(jìn)行改進(jìn),這里軟件上,我們引入以太網(wǎng)的載波監(jiān)聽多點(diǎn)接入/碰撞檢測CSMA/CD的協(xié)議算法,這種協(xié)議能實(shí)現(xiàn)邊發(fā)送邊偵聽的多主通訊;在硬件方案的改進(jìn)上,我們采用最省成本和方便的辦法,使用單片機(jī)內(nèi)部的可編程計(jì)數(shù)器陣列(PCA)捕捉比較模塊的功能,對RS485收發(fā)器的RX線上的電平進(jìn)行捕捉,從而偵聽到當(dāng)前總線上的狀態(tài)。
本文采用的單片機(jī)C8051F340中,可編程計(jì)數(shù)器陣列PCA0有5個16位的捕捉/比較模塊,每個捕捉/比較模塊都有其自己的I/O線(CEXn)。本文使用的是捕捉/比較模塊的邊沿觸發(fā)捕捉工作方式,可以選擇正邊沿、負(fù)邊沿、雙邊沿觸發(fā),選擇雙邊沿觸發(fā),原因是需要測量RX的高電平時長來判斷總線是否空閑。
硬件設(shè)計(jì)簡單,不改變傳統(tǒng)的RS485網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),只是將收發(fā)器的RX線接入到CEXn中的一個PCA捕捉通道既可以。
圖1
3.1 CSMA/CD協(xié)議的工作原理介紹
由于RS485是半雙工方式,在某時刻只能有一方發(fā)送數(shù)據(jù),但是如果上下位機(jī)都要求能主動發(fā)起命令,那么解決485總線控制權(quán)的歸屬以及總線上的沖突處理是個關(guān)鍵的問題,因此,在本通訊系統(tǒng)中借鑒了CSMA/CD(載波監(jiān)聽多路訪問/沖突檢測)協(xié)議進(jìn)行設(shè)計(jì),CSMA/CD介質(zhì)訪問控制過程包括4個處理內(nèi)容:偵聽、發(fā)送、檢測、沖突處理。具體過程可以參考響應(yīng)標(biāo)準(zhǔn),本設(shè)計(jì)中基本過程如同標(biāo)準(zhǔn)所述,但是出現(xiàn)碰撞后不會發(fā)送阻塞信息。強(qiáng)化沖突需要占據(jù)一定時間,降低效率,因此省略這個過程。
3.2 “X堅(jiān)持”算法的介紹
發(fā)送前偵聽到總線忙,或者發(fā)送過程中發(fā)生數(shù)據(jù)碰撞后,我們采用非堅(jiān)持算法,即偵聽到信道忙(即發(fā)現(xiàn)有其他站在發(fā)送數(shù)據(jù)),就不再堅(jiān)持聽下去,而是根據(jù)協(xié)議的退避算法延遲一個隨機(jī)的時間后重新再監(jiān)聽。若進(jìn)行載波監(jiān)聽時發(fā)現(xiàn)信道空閑,則將準(zhǔn)備好的幀發(fā)送出去。優(yōu)點(diǎn)是減少了沖突;其缺點(diǎn)信道利用率降低,不能充分利用信道剛剛轉(zhuǎn)入空閑期的這段時間。因?yàn)镽S485總線能支持的設(shè)備數(shù)量是有限的,盡量減少沖突,提高系統(tǒng)的穩(wěn)定性。二進(jìn)制指數(shù)退避算法也在一定程度上彌補(bǔ)了非堅(jiān)持算法信道利用率不高的缺點(diǎn)。
3.3 PCA捕捉模塊的載波偵聽
由于在空閑時,總線會保持高電平,RX也將保持高電平,可以通過檢測總線保持高電平的時間長短來確定總線是否空閑。
最小檢測時間t0的確定:各站點(diǎn)在發(fā)送一包數(shù)據(jù)幀時,字節(jié)間間隔可以忽略不計(jì)。每個字節(jié)的起始位都是低電平,如果線上有來自其它站點(diǎn)的連續(xù)字節(jié)在發(fā)送,那么線路上保持高電平的時間不會超過一個字節(jié)的時間(如圖2所示,19200b/s,發(fā)送0xff時,線上保持高電平的時間最長),換言說,如果線上保持高電平時間超過一個字節(jié)的時間,那說明沒有連續(xù)字節(jié)在發(fā)送,即說明總線是沒有被占用或者剛被釋放。因此檢測總線空閑與否,至少要檢測1個字節(jié)的發(fā)送時間。假設(shè):對于19200b/s波特率傳輸速度,傳輸1字節(jié)需要521μs,取t0=600μs。
圖2
利用MCU的PCA雙邊沿捕捉/比較模塊和專用定時器T測量RO線上高電平的脈寬。RO轉(zhuǎn)為低電平時,觸發(fā)PCA中斷,將T清零且停止計(jì)時,清零溢出標(biāo)志。RO轉(zhuǎn)為高電平時,T重新開始計(jì)時,T的值等于t0時,將溢出標(biāo)志置位。這樣T的當(dāng)前值記錄了總線為最后一次低電平后保持高電平的脈寬時間。
在準(zhǔn)備發(fā)送前,先檢查溢出標(biāo)志的值即可。如果溢出標(biāo)志置位則認(rèn)為總線是空閑的,可以開始發(fā)送數(shù)據(jù)。反之,認(rèn)為總線是被其
它站點(diǎn)占用,此時要進(jìn)行沖突處理。
3.4 退避延時算法
在各站點(diǎn)嘗試爭用總線而連續(xù)遇到?jīng)_突時,站點(diǎn)會隨機(jī)選擇一個延時時間,在這個時間內(nèi)釋放總線。這是非堅(jiān)持算法的要求。
二進(jìn)制數(shù)指數(shù)退避算法是按“后進(jìn)先出”(LIFO)的次序控制的,即未發(fā)生沖突或很少發(fā)生沖突的數(shù)據(jù)幀,具有優(yōu)先發(fā)送的概率;而發(fā)生過多次沖突的數(shù)據(jù)幀,發(fā)送成功的概率小。這種方法在低負(fù)荷時,如總線空閑時,站點(diǎn)要發(fā)送數(shù)據(jù)幀的能立即發(fā)送;在重負(fù)荷時,仍能保證整個系統(tǒng)的穩(wěn)定性。
這個優(yōu)先級概率的控制就是由二進(jìn)制數(shù)指數(shù)來控制隨時時間M選擇的范圍來實(shí)現(xiàn)的:延時時間M=[(0~2k-1的一個隨機(jī)數(shù))×(一個確定時基Tbase:0.6ms)(k=5,如果沖突times小于5;k=times,如果沖突times在5~10次之間;K=10,如果沖突times大于10次)。
實(shí)現(xiàn)RS485多主通訊,引入CSMA/CD協(xié)議,并且采用單片機(jī)的PCA捕捉模塊進(jìn)行載波偵聽,只需要增加一根PCA線,硬件成本極低,但是軟件設(shè)計(jì)相對來說就稍微復(fù)雜,在通訊繁忙的多站點(diǎn)系統(tǒng)中,由于PCA的中斷頻率太高(每次RX有電平跳變都要產(chǎn)生一次中斷),因此要特別對其進(jìn)行時效分析,關(guān)注MCU的處理速度,是否能滿足PCA中斷任務(wù)處理和其它任務(wù)的及時處理。
[1] IEEE Std 802.3 Carrier Sense Multiple Access with Collision Detection (CSMA/CD) access method and Physical Layer specifications[S],2008
[2] 吳軍輝,林開顏,徐立鴻.RS485總線通信避障及其多主發(fā)送的研究[J].測控技術(shù),2002, 21 (8) :41-43
[3] 孫漢卿,吳海波.現(xiàn)場總線技術(shù)[M].北京:國防工業(yè)出版社,2014
Using PCA’s Capture Comparator Module of MCU to Realize Multi-Master in RS485 Communication System
Xiang Ling, Liu Jun
(Hangzhou Fast Charge New Energy Technology Co., Ltd., Hangzhou, 310052)
10.3969/J.ISSN.1672-7274.2017.06.006
TP336,TN91文獻(xiàn)標(biāo)示碼:A
1672-7274(2017)06-0020-02