一種實(shí)現(xiàn)載波監(jiān)聽多點(diǎn)接入/沖突檢測(cè)的多主RS485總線
2.1 系統(tǒng)框圖
系統(tǒng)由總線狀態(tài)判斷邏輯、驅(qū)動(dòng)器自動(dòng)切換邏輯兩部分組成,如圖3所示。系統(tǒng)資源只占用CPU的3個(gè)管腳:RXD、TXD、總線狀態(tài)指示腳,不占用任何中斷。在軟件實(shí)現(xiàn)方面由于采用了硬件判斷總線狀態(tài)而變得非常簡(jiǎn)單,只需要對(duì)標(biāo)準(zhǔn)的232通信程序做微小修改即可。
2.2 總線狀態(tài)判斷邏輯
該電路由雙RS485總線接收器構(gòu)成,兩個(gè)接收器的輸出相與后得到總線狀態(tài)信號(hào)。偏置電阻網(wǎng)絡(luò)的對(duì)稱形式使得在總線沒有被驅(qū)動(dòng)的情況下,兩條總線的電平相等??偩€狀態(tài)判斷邏輯如圖4所示。由于接收器的兩個(gè)接入點(diǎn)電平不同,所以當(dāng)總線處于高阻狀態(tài)或者總線被短路時(shí),兩個(gè)接收器都是高電平輸出,總線狀態(tài)為高電平。因?yàn)椋?、B線通過6.8kΩ電阻分別接入兩個(gè)接收器的不同接收端,所以當(dāng)總線出現(xiàn)任何一個(gè)確定的邏輯狀態(tài)時(shí),都將引起其中一個(gè)接收器的輸出變?yōu)榈碗娖?,這樣總線狀態(tài)就變?yōu)榈碗娖?,表明總線被占用。經(jīng)過理論計(jì)算和EWB仿真,該網(wǎng)絡(luò)從A、B點(diǎn)看接入阻抗為12.2kΩ,恰好滿足RS485協(xié)議的接收器輸入阻抗要求。 2.3 驅(qū)動(dòng)器無延遲自動(dòng)切換邏輯 為了實(shí)現(xiàn)驅(qū)動(dòng)器的無延遲自動(dòng)切換,TXD信號(hào)反相后接到驅(qū)動(dòng)器使能,而驅(qū)動(dòng)器輸入直接接地,如圖5所示。這樣處理使驅(qū)動(dòng)器只在數(shù)據(jù)為0時(shí)打開,把數(shù)據(jù)0發(fā)出去。而當(dāng)數(shù)據(jù)為1或者無數(shù)據(jù)時(shí)立刻關(guān)閉,縮短了切換時(shí)間。但是這樣做,使得數(shù)據(jù)1無法被正常發(fā)送出去。為使串行數(shù)據(jù)能被正確地接收,有兩個(gè)辦法產(chǎn)生數(shù)據(jù)中的1。第一個(gè)辦法,使用總線判斷電路中的正向接收器的輸出端?穴OUT+?雪作為RXD信號(hào),該信號(hào)在總線空閑、開路和短路時(shí)輸出邏輯1,并且與RXD信號(hào)同相。第二個(gè)辦法,使用類似MAX3080自帶故障保護(hù)(fail-safe)功能的芯片作為接收器。MAX3080將接收器的觸發(fā)門限電壓從-200mv~+200mv調(diào)整為-200mv~-50mv,也能夠在總線空閑、開路和短路時(shí)輸出邏輯1。如果總線上的每一個(gè)節(jié)點(diǎn)都使用這些方法,那么所有節(jié)點(diǎn)都可以實(shí)現(xiàn)驅(qū)動(dòng)器無延遲自動(dòng)切換而不必?fù)?dān)心數(shù)據(jù)中的1不能被正確接收。 2.4 軟件的實(shí)現(xiàn) 發(fā)送數(shù)據(jù)方面,只需將標(biāo)準(zhǔn)串口函數(shù)putc()封裝成一個(gè)函數(shù)RS485PutString()發(fā)送數(shù)據(jù)即可。在RS485PutString()函數(shù)中,能夠方便地實(shí)現(xiàn)各種總線狀態(tài)判斷策略,甚至是CSMA/CD協(xié)議,實(shí)現(xiàn)載波監(jiān)聽,邊發(fā)送邊監(jiān)聽。也可以在此函數(shù)的基礎(chǔ)上進(jìn)行諸如定義不同數(shù)據(jù)包的實(shí)時(shí)性級(jí)別、定義總線超時(shí)判斷等高級(jí)編程。
評(píng)論