朱思榮,周萬里,畢春元,趙曉華,高廣恒,劉仲匯
(山東省科學(xué)院生物研究所,山東省生物傳感器重點實驗室,山東 濟南 250014)
在工業(yè)控制系統(tǒng)中,串口通訊是最常用的多機通訊手段,特別是較長距離的信號傳輸,使用485總線的數(shù)據(jù)變送器較4~20mA摸擬信號傳輸抗干擾能力更好,精度更高,調(diào)試也更方便。但常用的單片機、DSP或PLC控制器串口通訊能力卻先天不足,通常只有一個串口,多的也只有2個,常需要對串口進行擴展才能滿足系統(tǒng)需求。在一款帶有生物傳感器檢測系統(tǒng)的發(fā)酵過程控制器的設(shè)計中,系統(tǒng)的2個空氣流量變送器、生物傳感器檢測系統(tǒng)、上位PC機通訊均使用485總線,彩色LCD顯示器的觸摸屏輸出也是串行信號。由于上位PC機通訊需要獨占一個串口,觸摸屏的突發(fā)通訊也不能與其它設(shè)備共用串口,生物傳感檢測系統(tǒng)和空氣流量計具有完全不同的通訊協(xié)議,所以系統(tǒng)需要進行串口擴展才能滿足設(shè)計需求。
對于串口擴展,常用的方法有硬件擴展和軟件模擬。硬件擴展又分并口擴展和子串口擴展,如intel 8251用并口擴展1個全雙工串口,TL16C554用并口同時擴展4個全雙工串口,并口擴展需占用較多的端口資源和外部中斷;子串口擴展法則用1個高速串口擴展出多個低速子串口,如SP2338擴展3個子串口,SP2538和GM8125擴展5個子串口,子串口擴展電路簡單,也需要占用I/O端口資源控制串口切換,并在使用中有一定的條件限制。軟件模擬法通常采用定時器模擬,用查詢或中斷方式接收發(fā)送數(shù)據(jù),采用中斷方式接收數(shù)據(jù)起始位也要占用外部中斷[1-5]。
在本系統(tǒng)設(shè)計中,使用Silicon Labs公司的C8051F120高速8位單片機[6]作為主控制器,單片機本身具有2個串口,再采用PCA模塊軟件模擬擴展法擴展1個串口,用單串口多路485總線擴展方法擴展3路485總線,成功解決了系統(tǒng)串口資源不足的問題。
軟件模擬串口是根據(jù)串口接收和發(fā)送原理,通過定時控制在通用I/O口按位順序讀取或發(fā)送數(shù)據(jù)。通常用子程序接收或發(fā)送數(shù)據(jù)[7],也可通過中斷實現(xiàn),但需要占用一個外中斷和定時中斷[8],本項目中,利用C8051F120單片機的PCA模塊既可捕獲脈沖,又可作定時器使用的特點,只用PCA的1個模塊完成1個半雙工串口的模擬接收和發(fā)送。把PCA模塊設(shè)置為下降沿捕獲模式等待接收數(shù)據(jù),當(dāng)接收到起始位的下降沿信號,進入PCA模塊中斷,把PCA模塊改為定時器模式,并把定時時間設(shè)定到下一數(shù)據(jù)位的中間位置,以后每次到定時時間,讀取1位數(shù)據(jù),并預(yù)置下次定時時間,直到接收完一個字節(jié)。如要繼續(xù)接收數(shù)據(jù),再把PCA模塊設(shè)置為下降沿捕獲模式。發(fā)送數(shù)據(jù)在PCA模塊定時模式下進行,啟動發(fā)送時發(fā)送低電平起始位,預(yù)置PCA模塊定時時間,以后每次進入PCA模塊中斷發(fā)送1位數(shù)據(jù),都預(yù)置下次定時時間,直到發(fā)送完停止位。
對于采用不同協(xié)議的下位機的數(shù)據(jù)通訊,如用1個串口進行順序通訊可用硬件進行通道切換[9]來實現(xiàn),本項目中因為下位機均為485總線,而MAX485[10]芯片的輸入和輸出可以單獨使用,采用直接控制方式可實現(xiàn)多個通道切換,當(dāng)前未通訊的下位機通過I/O端口禁止MAX485的輸入和輸出,使數(shù)據(jù)的發(fā)送或接收只針對指定的下位機。
與PC機通訊以PC機作為上位機,本機作為下位機,使用1個獨立串口。與空氣流量變送器和生物傳感器檢測系統(tǒng)的通訊,使用1個獨立串口,本機作為上位機控制數(shù)據(jù)讀寫,空氣流量變送器和生物傳感器檢測系統(tǒng)作為下位機,構(gòu)成多機通訊系統(tǒng)。485總線本身是多機通訊總線,但在本系統(tǒng)中因為空氣流量變送器采用MODBUS工作協(xié)議,與生物傳感器檢測系統(tǒng)不一致,并且在與流量計的通訊中,主機應(yīng)答等待時間長達0.2 s以上,如采用單總線循環(huán)輪詢通訊,通訊的速度就比較慢。所以本設(shè)計為每個設(shè)備采用獨立的485接口,并在與流量計通訊等待應(yīng)答的時間內(nèi)插入與生物傳感器檢測系統(tǒng)的通訊,提高系統(tǒng)的通訊效率。系統(tǒng)與LCD觸摸屏的通訊采用PCA模塊0模擬,PCA模塊0的CEX0作為串口輸入,任選一I/O口作為串口輸出,本系統(tǒng)中因為觸摸屏不需要輸入信號,實際模擬串口只使用了接收功能。圖1為本設(shè)計的硬件接口圖,其中下位機485接口輸出端用3個1 kΩ電阻分壓為485總線提供一個基礎(chǔ)電平,防止本機讀數(shù)據(jù)時下位機還未切換到輸出狀態(tài),總線處于不確定狀態(tài)。
本系統(tǒng)用PCA模塊0模擬擴展1個半雙工串口,用于觸摸屏通訊,系統(tǒng)的數(shù)據(jù)接收和發(fā)送均采用中斷方式,除接收或發(fā)送1個數(shù)據(jù)中斷次數(shù)較多外,其它與系統(tǒng)硬件串口完全一樣。對于C8051F120這樣的高速處理器,收發(fā)1個數(shù)據(jù)位的中斷處理只需幾個微秒的時間,不會影響到系統(tǒng)其它任務(wù)的執(zhí)行,為保證數(shù)據(jù)收發(fā)定時準確,PCA中斷必須設(shè)為高級中斷,系統(tǒng)中其他高級中斷的處理時間不能超過模擬串口位發(fā)送間隔的1/3。
圖1 發(fā)酵控制系統(tǒng)串行接口硬件電路Fig.1 Hardware circuit of serial interface of fermentation control system
把PCA模塊0設(shè)為下降沿捕獲模式,即把模擬串口切換到接收起始位模式,在該模式下PCA模塊捕獲起始位下降沿脈沖信號開始1個字節(jié)的接收,數(shù)據(jù)接收和接收初始化均在PCA中斷進行。模擬串口的發(fā)送初始化需要發(fā)送起始位信號并初始化發(fā)送數(shù)據(jù),以“9600,N,8,1”模式串口通訊為例,發(fā)送初始化首先把PCA模塊0設(shè)為定時中斷模式,置發(fā)送端口為低電平發(fā)送起始位,設(shè)置捕獲寄存器值為當(dāng)前PCA計數(shù)器值+位接收延時(1/9600 s的PCA計數(shù)值),然后初始化發(fā)送數(shù)據(jù),把要發(fā)送的數(shù)據(jù)放入發(fā)送寄存器,并初始化發(fā)送中斷計數(shù)10,以處理包括起始位和停止位共10位數(shù)據(jù)的發(fā)送。
串口數(shù)據(jù)的接收或發(fā)送在PCA中斷程序中執(zhí)行,PCA中斷程序流程如圖2所示。
在捕獲起始位后,初始化延時為位接收延時的1.5倍,使串口數(shù)據(jù)的讀取時間位于該數(shù)據(jù)脈沖的中部位置,正好是數(shù)據(jù)最穩(wěn)定的時候,用以消除串口波特率偏移帶來的數(shù)據(jù)讀出錯誤。圖2流程中“字節(jié)接收處理”和“字節(jié)發(fā)送處理”同正常硬件串口的中斷處理程序。
圖2 模擬串口PCA中斷處理程序流程Fig.2 Flow chart of PCA interruption process of analogue serial port
本設(shè)計中,因為下位機485通訊接口是獨立的總線結(jié)構(gòu),每個總線的輸入和輸出均可以禁止,所以系統(tǒng)具有最大的靈活性,與下位機通訊可以采用不同的通訊協(xié)議和不同的通訊速率。與生物傳感器檢測系統(tǒng)的通訊為高速通訊,每秒與主機通訊4次,每次至少讀出一次狀態(tài)和即時數(shù)據(jù),如指令緩沖區(qū)有數(shù)據(jù),在完成讀出狀態(tài)和即時數(shù)據(jù)后再發(fā)送一條指令。與空氣流量計的通訊為低速通訊,每秒讀一次流量數(shù)據(jù)。本設(shè)計中與下位機的通訊由定時中斷啟動,每秒啟動2次,第1次啟動與流量計1的通訊,第2次啟動與流量計2的通訊,在發(fā)送流量計通訊連絡(luò)信號后,立即啟動一次與生物傳感器檢測系統(tǒng)的通訊,在完成與生物傳感器系統(tǒng)通訊后切換回流量計通訊,讀出流量的應(yīng)答信息,讀出流量的應(yīng)答后再啟動一次與生物傳感器系統(tǒng)的通訊。定時中斷同時處理子機通訊的超時,保證在某一子機通訊故障的情況下不會影響與其他子機的通訊,圖3為定時中斷對串口處理流程圖,圖4為定時中斷中串口超時處理方法。
設(shè)備工作正常時,在串口發(fā)送或接收1個數(shù)據(jù)同時初始化系統(tǒng)的超時延時寄存器,所以不會產(chǎn)生串口通訊超時,定時中斷僅啟動與流量計1和2的通訊,與生物傳感器的通迅在串口中斷中啟動。圖5為串口1的通訊程序流程。如某個設(shè)備故障或未連接,則通訊在等待應(yīng)答過程就會超時,定時中斷的超時處理就終止該設(shè)備的通訊進程,啟動與下一設(shè)備的通訊或清除串口忙標志,使通訊循環(huán)正常進行。
圖5 串口1多下位機通訊工作流程Fig.5 Flow chart of serial port communications with multiple lower computers
PCA是8051單片機的常用功能模塊,一般的增強型8051單片機都帶PCA功能,通常每個PCA有3個以上的捕捉/比較模塊,按本設(shè)計方法,每個模塊均可擴展1個半雙工的串口,并且利用PCA擴展的串口。因為采用中斷方式,通訊時占用的CPU時間很少,占用的I/O端口也少,每個串口只需2個I/O口,如串口不需要發(fā)送,則只占1個I/O口,基本不影響系統(tǒng)的其它功能的執(zhí)行,用2個PCA模塊還可以實現(xiàn)全雙工串口,是比較理想的多串口擴展方案。用本方案擴展串口占用系統(tǒng)資源少,較硬件擴展法可降低產(chǎn)品成本,并提高系統(tǒng)的可靠性,特別是對有小型化要求的產(chǎn)品,縮小了線路板的面積,可使產(chǎn)品設(shè)計得更加小巧。
對于485接口的下位機數(shù)據(jù)通訊,采用獨立總線的方法,雖然使用I/O端口較多,但可以把通訊協(xié)議完全不同的下位機連接在1個串口中,并根據(jù)實際需求合理調(diào)整不同子機的數(shù)據(jù)處理頻率,增加了系統(tǒng)應(yīng)用的靈活性,特別適合于從485總線數(shù)據(jù)變送器中讀出檢測數(shù)據(jù)。如本項目的空氣流量計,當(dāng)1個串口接8只流量計時,采用單總線讀出方式,由于變送器應(yīng)答等待時間長,4 s才輪詢一次,但使用多總線結(jié)構(gòu),可以通過定時發(fā)送指令的方式,先完成8個流量計的的數(shù)據(jù)讀出指令發(fā)送,再順序接收8個流量計的返回數(shù)據(jù),這樣每秒至少可以輪詢2次,提高了串口通訊效率。
[1]景鑫.51單片機的串行口擴展方法[J].微計算機信息,2005,21(8-2):58-59.
[2]鮑夢,劉智萍.51系列單片機的串口擴展方案[J].軟件導(dǎo)刊,2008,7(5):135-136.
[3]戚建宇,何松.基于TL16C554的嵌入式系統(tǒng)的多串口擴展[J].計算機與信息技術(shù),2011(6):9-12.
[4]孟濤,王福虎,陳森.微控制器的多串口擴展設(shè)計[J].艦船防化,2009(5):45-51.
[5]錢震宇,肖昌漢.基于GM8125的單片機多串口通訊電路的設(shè)計與實現(xiàn)[J].船電技術(shù),2011,33(11):22-24.
[6]Silicon Labs.C8051F120/1/2/3/4/5/6/7,C8051F130/1/2/3,Mixed signal ISP flash MCU family[EB/OL].[2012 - 05 - 06].http://www.silabs.com/Support%20Documents/TechnicalDocs/C8051F12x -13x.pdf.
[7]李瑋,楊紅霞.基于51單片機的軟串口設(shè)計[J].安陽工學(xué)院學(xué)報,2011,10(4):32-33.
[8]程頻,高偉.基于PIC單片機的軟串口的實現(xiàn)[J].計算機與數(shù)字工程,2005,33(10):150-153.
[9]林志強.單片機多協(xié)議串行通信接口擴展技術(shù)[J].福建電腦2009,(9):40-41.
[10]Maxim Intergrated.Low-Power,Slew-Rate-Limited RS-485/RS-422 Transceivers[EB/OL].[2012 - 05 - 06].http://datasheets.maxim-ic.com/en/ds/MAX1487-MAX491.pdf.