朱思榮,周萬里,畢春元,趙曉華,高廣恒,劉仲匯
(山東省科學院生物研究所,山東省生物傳感器重點實驗室,山東 濟南 250014)
在工業控制系統中,串口通訊是最常用的多機通訊手段,特別是較長距離的信號傳輸,使用485總線的數據變送器較4~20mA摸擬信號傳輸抗干擾能力更好,精度更高,調試也更方便。但常用的單片機、DSP或PLC控制器串口通訊能力卻先天不足,通常只有一個串口,多的也只有2個,常需要對串口進行擴展才能滿足系統需求。在一款帶有生物傳感器檢測系統的發酵過程控制器的設計中,系統的2個空氣流量變送器、生物傳感器檢測系統、上位PC機通訊均使用485總線,彩色LCD顯示器的觸摸屏輸出也是串行信號。由于上位PC機通訊需要獨占一個串口,觸摸屏的突發通訊也不能與其它設備共用串口,生物傳感檢測系統和空氣流量計具有完全不同的通訊協議,所以系統需要進行串口擴展才能滿足設計需求。
對于串口擴展,常用的方法有硬件擴展和軟件模擬。硬件擴展又分并口擴展和子串口擴展,如intel 8251用并口擴展1個全雙工串口,TL16C554用并口同時擴展4個全雙工串口,并口擴展需占用較多的端口資源和外部中斷;子串口擴展法則用1個高速串口擴展出多個低速子串口,如SP2338擴展3個子串口,SP2538和GM8125擴展5個子串口,子串口擴展電路簡單,也需要占用I/O端口資源控制串口切換,并在使用中有一定的條件限制。軟件模擬法通常采用定時器模擬,用查詢或中斷方式接收發送數據,采用中斷方式接收數據起始位也要占用外部中斷[1-5]。
在本系統設計中,使用Silicon Labs公司的C8051F120高速8位單片機[6]作為主控制器,單片機本身具有2個串口,再采用PCA模塊軟件模擬擴展法擴展1個串口,用單串口多路485總線擴展方法擴展3路485總線,成功解決了系統串口資源不足的問題。
軟件模擬串口是根據串口接收和發送原理,通過定時控制在通用I/O口按位順序讀取或發送數據。通常用子程序接收或發送數據[7],也可通過中斷實現,但需要占用一個外中斷和定時中斷[8],本項目中,利用C8051F120單片機的PCA模塊既可捕獲脈沖,又可作定時器使用的特點,只用PCA的1個模塊完成1個半雙工串口的模擬接收和發送。把PCA模塊設置為下降沿捕獲模式等待接收數據,當接收到起始位的下降沿信號,進入PCA模塊中斷,把PCA模塊改為定時器模式,并把定時時間設定到下一數據位的中間位置,以后每次到定時時間,讀取1位數據,并預置下次定時時間,直到接收完一個字節。如要繼續接收數據,再把PCA模塊設置為下降沿捕獲模式。發送數據在PCA模塊定時模式下進行,啟動發送時發送低電平起始位,預置PCA模塊定時時間,以后每次進入PCA模塊中斷發送1位數據,都預置下次定時時間,直到發送完停止位。
對于采用不同協議的下位機的數據通訊,如用1個串口進行順序通訊可用硬件進行通道切換[9]來實現,本項目中因為下位機均為485總線,而MAX485[10]芯片的輸入和輸出可以單獨使用,采用直接控制方式可實現多個通道切換,當前未通訊的下位機通過I/O端口禁止MAX485的輸入和輸出,使數據的發送或接收只針對指定的下位機。
與PC機通訊以PC機作為上位機,本機作為下位機,使用1個獨立串口。與空氣流量變送器和生物傳感器檢測系統的通訊,使用1個獨立串口,本機作為上位機控制數據讀寫,空氣流量變送器和生物傳感器檢測系統作為下位機,構成多機通訊系統。485總線本身是多機通訊總線,但在本系統中因為空氣流量變送器采用MODBUS工作協議,與生物傳感器檢測系統不一致,并且在與流量計的通訊中,主機應答等待時間長達0.2 s以上,如采用單總線循環輪詢通訊,通訊的速度就比較慢。所以本設計為每個設備采用獨立的485接口,并在與流量計通訊等待應答的時間內插入與生物傳感器檢測系統的通訊,提高系統的通訊效率。系統與LCD觸摸屏的通訊采用PCA模塊0模擬,PCA模塊0的CEX0作為串口輸入,任選一I/O口作為串口輸出,本系統中因為觸摸屏不需要輸入信號,實際模擬串口只使用了接收功能。圖1為本設計的硬件接口圖,其中下位機485接口輸出端用3個1 kΩ電阻分壓為485總線提供一個基礎電平,防止本機讀數據時下位機還未切換到輸出狀態,總線處于不確定狀態。
本系統用PCA模塊0模擬擴展1個半雙工串口,用于觸摸屏通訊,系統的數據接收和發送均采用中斷方式,除接收或發送1個數據中斷次數較多外,其它與系統硬件串口完全一樣。對于C8051F120這樣的高速處理器,收發1個數據位的中斷處理只需幾個微秒的時間,不會影響到系統其它任務的執行,為保證數據收發定時準確,PCA中斷必須設為高級中斷,系統中其他高級中斷的處理時間不能超過模擬串口位發送間隔的1/3。

圖1 發酵控制系統串行接口硬件電路Fig.1 Hardware circuit of serial interface of fermentation control system
把PCA模塊0設為下降沿捕獲模式,即把模擬串口切換到接收起始位模式,在該模式下PCA模塊捕獲起始位下降沿脈沖信號開始1個字節的接收,數據接收和接收初始化均在PCA中斷進行。模擬串口的發送初始化需要發送起始位信號并初始化發送數據,以“9600,N,8,1”模式串口通訊為例,發送初始化首先把PCA模塊0設為定時中斷模式,置發送端口為低電平發送起始位,設置捕獲寄存器值為當前PCA計數器值+位接收延時(1/9600 s的PCA計數值),然后初始化發送數據,把要發送的數據放入發送寄存器,并初始化發送中斷計數10,以處理包括起始位和停止位共10位數據的發送。
串口數據的接收或發送在PCA中斷程序中執行,PCA中斷程序流程如圖2所示。
在捕獲起始位后,初始化延時為位接收延時的1.5倍,使串口數據的讀取時間位于該數據脈沖的中部位置,正好是數據最穩定的時候,用以消除串口波特率偏移帶來的數據讀出錯誤。圖2流程中“字節接收處理”和“字節發送處理”同正常硬件串口的中斷處理程序。

圖2 模擬串口PCA中斷處理程序流程Fig.2 Flow chart of PCA interruption process of analogue serial port
本設計中,因為下位機485通訊接口是獨立的總線結構,每個總線的輸入和輸出均可以禁止,所以系統具有最大的靈活性,與下位機通訊可以采用不同的通訊協議和不同的通訊速率。與生物傳感器檢測系統的通訊為高速通訊,每秒與主機通訊4次,每次至少讀出一次狀態和即時數據,如指令緩沖區有數據,在完成讀出狀態和即時數據后再發送一條指令。與空氣流量計的通訊為低速通訊,每秒讀一次流量數據。本設計中與下位機的通訊由定時中斷啟動,每秒啟動2次,第1次啟動與流量計1的通訊,第2次啟動與流量計2的通訊,在發送流量計通訊連絡信號后,立即啟動一次與生物傳感器檢測系統的通訊,在完成與生物傳感器系統通訊后切換回流量計通訊,讀出流量的應答信息,讀出流量的應答后再啟動一次與生物傳感器系統的通訊。定時中斷同時處理子機通訊的超時,保證在某一子機通訊故障的情況下不會影響與其他子機的通訊,圖3為定時中斷對串口處理流程圖,圖4為定時中斷中串口超時處理方法。


設備工作正常時,在串口發送或接收1個數據同時初始化系統的超時延時寄存器,所以不會產生串口通訊超時,定時中斷僅啟動與流量計1和2的通訊,與生物傳感器的通迅在串口中斷中啟動。圖5為串口1的通訊程序流程。如某個設備故障或未連接,則通訊在等待應答過程就會超時,定時中斷的超時處理就終止該設備的通訊進程,啟動與下一設備的通訊或清除串口忙標志,使通訊循環正常進行。

圖5 串口1多下位機通訊工作流程Fig.5 Flow chart of serial port communications with multiple lower computers
PCA是8051單片機的常用功能模塊,一般的增強型8051單片機都帶PCA功能,通常每個PCA有3個以上的捕捉/比較模塊,按本設計方法,每個模塊均可擴展1個半雙工的串口,并且利用PCA擴展的串口。因為采用中斷方式,通訊時占用的CPU時間很少,占用的I/O端口也少,每個串口只需2個I/O口,如串口不需要發送,則只占1個I/O口,基本不影響系統的其它功能的執行,用2個PCA模塊還可以實現全雙工串口,是比較理想的多串口擴展方案。用本方案擴展串口占用系統資源少,較硬件擴展法可降低產品成本,并提高系統的可靠性,特別是對有小型化要求的產品,縮小了線路板的面積,可使產品設計得更加小巧。
對于485接口的下位機數據通訊,采用獨立總線的方法,雖然使用I/O端口較多,但可以把通訊協議完全不同的下位機連接在1個串口中,并根據實際需求合理調整不同子機的數據處理頻率,增加了系統應用的靈活性,特別適合于從485總線數據變送器中讀出檢測數據。如本項目的空氣流量計,當1個串口接8只流量計時,采用單總線讀出方式,由于變送器應答等待時間長,4 s才輪詢一次,但使用多總線結構,可以通過定時發送指令的方式,先完成8個流量計的的數據讀出指令發送,再順序接收8個流量計的返回數據,這樣每秒至少可以輪詢2次,提高了串口通訊效率。
[1]景鑫.51單片機的串行口擴展方法[J].微計算機信息,2005,21(8-2):58-59.
[2]鮑夢,劉智萍.51系列單片機的串口擴展方案[J].軟件導刊,2008,7(5):135-136.
[3]戚建宇,何松.基于TL16C554的嵌入式系統的多串口擴展[J].計算機與信息技術,2011(6):9-12.
[4]孟濤,王福虎,陳森.微控制器的多串口擴展設計[J].艦船防化,2009(5):45-51.
[5]錢震宇,肖昌漢.基于GM8125的單片機多串口通訊電路的設計與實現[J].船電技術,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單片機的軟串口設計[J].安陽工學院學報,2011,10(4):32-33.
[8]程頻,高偉.基于PIC單片機的軟串口的實現[J].計算機與數字工程,2005,33(10):150-153.
[9]林志強.單片機多協議串行通信接口擴展技術[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.