許智豪,李維波,華逸飛,徐聰,范磊
武漢理工大學自動化學院,湖北武漢430070
艦船能量管理系統適用于發電自動化、系統監測報警、輸配電監控保護以及用電設備的監控管理,是綜合電力艦船的核心控制部分之一。在能量管理系統中,底層控制器的數量很多,并且需要采集、發送大量的I/O指令信號和狀態信號。如果將底層控制器的各個部件、外圍設備、I/O端口都分別采用獨立的線路與微處理器直接連接,那么連線將會錯綜復雜,甚至難以實現。所以,有必要采用總線技術并借助I/O端口擴展處理芯片,從而最大限度地集成化處理數量龐大的數字量信號。
目前,I2C(Inter Integrated Circuit,I2C)總線主要應用于各類傳感器、模數轉換器、存儲芯片、實時時鐘芯片等數據處理芯片中。相較于其他總線接口,其結構簡單、擴展性強,故可廣泛應用于各種數據采集系統,例如云服務器中的智能家居控制系統[1],以及在移動智能終端領域中利用I2C總線集中處理智能終端的多種傳感器[2]。
I2C總線具備良好的可移植性,可以利用軟件模擬I2C時序,并擺脫了處理器中I2C控制器的引腳范圍限制。但同時,I2C也增加了軟件處理的過程,降低了處理器效率,存在可靠性不高的缺點,可能會在數據傳輸過程中丟失或改變數據。為了提高I2C信號傳輸的可靠性,本文將增加I2C驅動芯片和專用隔離芯片,以保證其波形的穩定性。將介紹通過I2C總線采集控制大容量數據的方法,即CPU僅依靠串行數據線(Serial Data,SDA)和串行時鐘線(Serial Clock,SCL)來實現與多個外圍器件之間的全雙工數據傳輸。I2C總線系統為串行接口,傳輸速率快且結構簡單,一條I2C總線上可以連接多個具有I2C接口的設備。通過硬件外圍電路即可確定各個器件的地址,再利用軟件尋址即可方便地擴展多型設備。本文將基于單片機的普通I/O端口和軟件編程來模擬I2C總線,從而實現高級精簡指令集機器(Advanced RISC Machine,ARM)與 I2C接口器件之間的可靠通信[3-4]。
為了保證艦船能量管理系統的正常運行,需要采集多路數字量來獲取當前電站的運行狀態,并根據讀入的數字量和集控臺下達的指令來輸出相應的數字量信號,用以控制各底層設備。圖1所示為基于ARM控制器的能量管理系統的硬件架構,其主要由頂層集控臺、數字量信號處理模塊及底層各個電站的開關量信號組成。首先,由具備光耦隔離功能的數字量采集模塊獲取各個艦船電站的出口斷路器狀態信號、反饋量信號和配電板輸入指令信號等;然后,通過I2C總線將所有的數字量輸入電平信號傳輸至信號處理控制器,隨即進行信號處理;最后,通過CAN總線和以太網與集控臺進行數據交互。同時,當集控臺發出指令操作數字量控制器時,信號處理控制器可以根據所采集的信號來控制參考電壓,從而選擇接觸器、電源出口斷路器分合閘、配電板指示燈等被控對象并完成相應的邏輯互鎖等判斷工作,用以避免底層器件的誤操作情況。

圖1 基于ARM控制器的能量管理系統的硬件架構Fig.1 Hardware architecture of the energy manage system based on ARM controller
信號處理的硬件部分主要由CPU最小系統、I2C專用隔離芯片、I2C驅動芯片、基于I2C總線的I/O端口擴展芯片及光耦隔離芯片組成,基本結構如圖2所示。首先,ARM輸出的信號通過I2C專用隔離芯片構成第1級隔離,以保證ARM讀取數據的抗干擾能力;然后,通過I2C驅動芯片使隔離后的I2C信號能夠對多路I/O端口擴展芯片進行操作;最后,經由光耦隔離芯片構成的第2級隔離,I/O端口擴展芯片接收或控制外部數字量信號,用以防止外部干擾影響系統內部的處理電路。
其中,I/O端口擴展芯片可以配置為輸入模式或輸出模式。當CPU將其配置為輸入模式時,芯片將讀取外擴的8路輸入信號的電平狀態并將其轉換為I2C信號,在時鐘信號的配合下,可將數據信號經由驅動芯片和隔離芯片傳輸至CPU;當CPU將其配置為輸出模式時,芯片將讀取經由隔離芯片和驅動芯片放大的I2C數據,并在時鐘信號的配合下由擴展芯片轉換為電平信號,用以驅動光耦隔離芯片輸出數字量[5-6]。

圖2 數字量信號處理硬件的拓撲結構Fig.2 Topology of the digital signal processing hardware
本文將選用TI公司的PCA9554/54A系列芯片,該芯片可以提供8位通用并行輸入/輸出端口(General Purpose Input Output,GPIO)的擴展功能,其內部結構如圖3所示,主要由I2C總線控制器、移位寄存器、中斷控制器等模塊組成。通過I2C總線控制器與移位寄存器的配合,PCA9554/54A可將其讀取的I2C數據轉換為8路輸出信號,或在讀取8路輸入狀態后通過I2C總線將數據傳輸至控制器處理。其中,上電復位模塊可將所有寄存器設置為默認值并將器件狀態初始化。

圖3 PCA9554芯片的內部結構示意圖Fig.3 Schematic diagram of internal structure of PCA9554 chip
PCA9554/54A設置了 3個管腳(A0,A1,A2)來確定芯片的地址,最多可允許8個器件共用一條I2C總線。PCA9554與PCA9554A的唯一區別在于固定I2C的地址不同,理論上最多可以允許16個器件(9554和9554A各8個)連接到同一條I2C總線上。
本文將選用ADI公司的ADM3260產品作為I2C隔離芯片,其內部結構如圖4所示。該芯片集成了數據信號隔離模塊和電源隔離模塊,可以有效減小外部的共模干擾信號。芯片可以在高達1 MHz的通信頻率下處理雙向I2C通道信號,從而滿足本文對數字信號控制的響應速度要求。

圖4 隔離芯片的內部結構示意圖Fig.4 Schematic diagram of internal structure of isolated chip
本文將選用TI公司的PCA9517芯片作為I2C信號的驅動芯片,其內部結構如圖5所示。由圖5可知,該驅動芯片采用了開漏機制,故器件本身只能輸出低電平而無法主動輸出高電平,除非通過外部上拉電阻將信號拉至高電平,因此必須在I2C總線上設置上拉電阻。由于PCA9517芯片引腳的最大灌電流為6 mA,故對于5 V的上拉電平而言,上拉電阻不宜低于1 kΩ,以免損壞芯片端口或導致輸出低電平的幅值增加。

圖5 I2C驅動芯片的內部結構示意圖Fig.5 Schematic diagram of internal structure of I2C drive chip
I2C總線由一條SDA和一條SCL組成,從設備將在SCL時鐘信號的控制下讀取主設備傳輸的數據信號。當時鐘信號為高時,讀取數據線的電平信號;時鐘信號為低時,允許改變數據線的電平信號。根據選用的從設備通信協議,可以對從設備進行尋址和數據傳輸。
啟動I2C總線后,主機即可對從設備進行尋址操作。I2C從設備的地址為1個字節,即需要8個時間周期來完成尋址操作,若某個從設備的地址對應主機發送的地址,該從設備便在下一個時鐘周期反饋一個應答信號,之后即可讀取從設備的數據信息或對該從設備進行寫操作。分析了I2C的讀取時序之后,即可利用普通I/O端口模擬I2C時序[7-9]。
當SCL為高時,SDA由高到低的跳變定義為啟動信號;當SCL為低時,SDA由低到高的跳變定義為停止信號。
發送設備每發送1個字節,就在下一個時鐘周期內開始讀取應答信號狀態,由此來判斷接收設備是否正確收到了該字節。當應答信號為低電平時,表示接收設備已成功接收該字節,即為有效應答信號(Acknowledgment,ACK);當應答信號為高電平時,一般表示接收設備未成功接收該字節,即為非應答信號(Negative Acknowledgment,NACK)。
由于需要在時鐘信號為高時讀取數據,所以當從設備為發送設備、主設備為接收設備時,ACK波形應在時鐘信號為高時保持為低。如果主設備為發送設備,則當其收到1個字節后即發送1個NACK信號,用以通知被控發送器結束數據發送,并產生一個停止信號,由此結束I2C總線的本輪操作。
在I2C總線上傳送的每一位數據都有一個時鐘脈沖與之對應(或同步控制),即在SCL串行時鐘的配合下,在SDA上逐位串行傳送每一位數據。
圖6所示為I2C總線啟、停信號的軟件模擬方法。首先,根據I2C總線的啟動信號和停止信號波形將時鐘信號保持為高電平,延時4 μs后,將數據信號電平由高設置為低;然后,發出啟動信號,再將時鐘信號設置為低電平,準備發送或接收數據;最后,在發送停止時將時鐘信號保持為高電平,延時4 μs后,將數據信號電平由低設置為高。

圖6 I2C總線啟、停信號的軟件實現方法Fig.6 Software implementation method of I2C bus start and stop signal
發送啟動信號后,將由控制器發送芯片的地址。芯片地址實際上由硬件電路決定,地址長度為1個字節,其中前7位為地址,第8位為數據方向位,這個方向位也決定了下一個操作是接收還是發送。當主機收到該數據的應答后,將寫入1個字節的控制指令,0x00表示PCA9554之后的輸入端口寄存器,0x01表示輸出端口寄存器,0x03則表示輸入/輸出模式配置。若0x03設置為輸入模式,則依次讀取擴展的8路輸入信號;若0x03設置為輸出模式,則發送1個字節以控制擴展的8路輸出信號。I/O端口擴展芯片PCA9554的寫數據和讀數據的時序如圖7所示,其中n為端口數據量。

圖7 I/O端口擴展芯片PCA9554的寫數據和讀數據時序圖Fig.7 Timing diagram of writing data and reading data for I/O port extension chip PCA9554
本數字量處理模塊的主要應用目標為控制艦船能量管理系統的各個電站開關量,為了驗證工程應用效果,本文設計了一塊含有64路撥碼開關(數字量輸入)與64路LED發光二極管(數字量輸出)的工裝板。當撥通某一路輸入開關時,相應的LED燈便會發光,以驗證數字量采集、處理、輸出整個環節的可靠性。通過I2C總線向PCA9554寫入字節的波形如圖8所示。
在CPU發出啟動信號后的8個周期內,SDA將發出1個字節的地址信號0x4A,對應于輸出板的第5塊芯片。收到應答信號后,即可認為CPU與該芯片通信正常。
在本輪操作之后的8個周期內,SDA將發出1個字節的控制命令0x01,即將該芯片配置為輸出模式。收到應答信號后,CPU將控制該芯片輸出設定的數據字節0xAA,而工裝板上的輸出狀態也為0xAA。

圖8 通過I2C總線向PCA9554寫入字節的波形圖Fig.8 The waveform of bytes is written to PCA9554 via the I2C bus
由圖8可知,模擬I2C總線時序可以有效控制I/O端口擴展芯片,從而實現I/O端口的擴展工作。
目前,本文提出的艦船能量管理系統的數字量處理模塊已完成電磁干擾試驗和環境試驗,并已進行實船安裝且運行狀態良好。
若從設備存在問題,則將會出現如圖9所示的情況[5]。即接受1個字節數據后,從設備向CPU發出1幀非應答信號,隨后CPU將直接發送停止信號,并不再對該芯片進行操作。

圖9 非應答信號的處理波形Fig.9 The processing waveform of negative acknowledgment
本文采用軟件編程模擬I2C總線的方法,利用2個GPIO端口實現了對I2C總線接口器件的訪問,擴大了串行擴展總線I2C器件的應用范圍。通過采用PCA9554/54A芯片,可以最多擴展128個I/O端口,有效節約了芯片的引腳資源,簡化了系統結構,并使得多個數字量的采集與控制工作不再受單片機自身I/O端口不足的限制。通過專用芯片ADM3260,可以將I2C信號進行隔離,并適當增加I2C信號的電平延時時間,從而大為提高系統的可靠性。該系統易于移植到其他單片機系統上,在工業控制領域具備一定的推廣與參考價值。
然而,采用軟件模擬I2C波形時,雖然精簡了硬件資源,但也占用了較多的CPU資源,故其數據處理時間比直接引腳訪問增加了100倍以上。因此,在設計系統時需要統籌考慮,應在滿足時序需求的情況下盡量減少硬件資源的占用。