基于PC/104的多CAN-Bus系統(tǒng)設(shè)計
1 引言
PC/104嵌入式控制PC出現(xiàn)于80年代末,并于1992年形成IEEEP966.1標準。它一方面繼承了PC的所有資源,另一方面又對PC的各個方面做了優(yōu)化設(shè)計,使其與IBM PC完全兼容,并具有體積小,功耗低,工作溫度寬,可靠性高等特點;它采用了獨特的"自棧式"總線連接、模塊化結(jié)構(gòu),使用起來靈活方便;它采用面向?qū)ο蟮挠布O(shè)計方法,使得在PC/104標準上開發(fā)的擴展模塊具有更強的通用性和更長的生命期;它以其優(yōu)良的品質(zhì)、高可靠性及模塊化,廣泛應(yīng)用于工業(yè)控制、航空、軍事、醫(yī)療、消防設(shè)備、智能、導(dǎo)航、通訊、數(shù)控、自動化生產(chǎn)設(shè)備、便攜式計算機等領(lǐng)域。 在實際應(yīng)用中,一個較為復(fù)雜的系統(tǒng),往往不是由單個計算機獨立控制,而是由多個計算機組成通信網(wǎng)絡(luò)共同完成控制的過程。因此,對于每一個嵌入式計算機來說,除了連接必需的外設(shè)之外,還需要考慮計算機之間的通信。
控制器局域網(wǎng)(簡稱CAN)是目前國際上應(yīng)用最廣泛的現(xiàn)場總線之一。最初,CAN被設(shè)計用作汽車中的微控制器通訊,在車載各電子控制裝置ECU之間交換信息,形成控制網(wǎng)絡(luò)。CAN是一種多主機方式的串行通訊總線,能夠使用諸如雙絞線、光纖等多種物理介質(zhì),其中最常用的就是雙絞線。它的基本設(shè)計規(guī)范是要求具有高的位速率和高的抗電磁干擾性,而且要求能夠檢測出任何錯誤。由于CAN總線具有高實時性、卓越性能、高可靠性、獨特靈活設(shè)計和低廉價格,已廣泛應(yīng)用于工業(yè)現(xiàn)場、控制、智能大廈、小區(qū)安防、交通工具、、環(huán)境監(jiān)控等眾多領(lǐng)域,目前,已被公認為是幾種最有前途的現(xiàn)場總線之一。
2 系統(tǒng)的硬件設(shè)計
設(shè)計的系統(tǒng)采用合適的檔次(以功能、性能夠用為標準)、高性價比、CPU為X86(相當于586)、300 MHz的PC/104模塊作為主控單元,以的+作為CAN接口器件和收發(fā)器;以公司的器件作為邏輯控制和譯碼單元。整個系統(tǒng)共設(shè)計4個CAN接口,其中兩個用于外部遠距離通訊,工作在5 Kb/s下,另外兩個用于近距離通訊,工作在1 Mb/s下,當然這4個CAN接口的硬件是完全相同的。另外,系統(tǒng)還擴展了一個5英寸、320×240點陣的單色屏、按鍵和指示燈組成的人機接口。圖1給出該系統(tǒng)硬件原理框圖。
2.1 I/O端口地址分配表
由于系統(tǒng)在PC/104的基礎(chǔ)上擴充了CAN、、指示燈和按鍵等資源,要對其進行訪問和操作時,必須為它們分配地址,但分配的地址又不能與PC/104原有的I/O接口地址沖突,所以分配地址之前,必須搞清楚所選用的PC/104模塊的地址分配表,即搞清楚哪些地址范圍已被PC/104占用,哪些區(qū)域是空閑的。新分配的地址只能占用空閑區(qū)域,否則會引起端口沖突,導(dǎo)致系統(tǒng)不能正常工作。表1給出PC/104的I/O端口地址分配表。
PC/104總線能訪問64 K個I/O端口,但實際上只用了1 K端口地址(~3FFH),其中256個單元(~OFFH)分配給系統(tǒng)板上的I/O接口器件,其余的768個單元(100~3FFH)分配給擴充卡。當然,現(xiàn)在的PC/104功能非常強大,板上集成了許多接口,如:多個串口、USB、 LAN、GPIO等,它們都要占用端口地址。所以,在實際應(yīng)用中,必須以所選用的PC/104為準,選出一塊空白的地址區(qū)域,對上述系統(tǒng)資源進行編址。該系統(tǒng)設(shè)計選取地址為180~1BFH。
2.2 中斷源的分配
在數(shù)據(jù)通訊中,數(shù)據(jù)的接收是隨機的、突發(fā)的,所以通訊方式必須采用中斷接收方式;(數(shù)據(jù)的發(fā)送是可控的,可以采用查詢方式,也可以采用中斷方式。為此,必須對CAN的中斷號進行分配。表2給出PC/104的中斷分配表。
由表2可見,IRQ10、IRQ11、IRQ12、IRQ15系統(tǒng)不用,故系統(tǒng)設(shè)計選用這4個中斷作為CAN的中斷號。
2.3 設(shè)計
由于系統(tǒng)資源較多,必須采用完成復(fù)雜的邏輯設(shè)計。設(shè)計工具采用提供的MAX+ II工具軟件。圖2示出設(shè)計的CPLD邏輯原理圖。PC/104的地址總線A9~A3經(jīng)比較器和譯碼器。其中一路輸出接4路輸入或門的一個輸入端,再配合低位地址A2~A0、nWR、nRD等信號,即可得到CANOnWR、CANOnRD、CANOALE等的控制信號;CAN0中斷輸出信號經(jīng)反向器接入PC/104的IRQ10。另外,PC/104的數(shù)據(jù)總線D0~D7直接與的AD0~AD7相連,并一一對應(yīng)(圖2中略)。
由于PC/104的地址總線和數(shù)據(jù)總線是各自獨立的;SJA1000的地址總線和數(shù)據(jù)總線是分時復(fù)用的,所以它們之間不能直接相連,必須通過邏輯控制,再配合軟件來實現(xiàn)讀/寫操作。
圖2只給出1路CAN接口的邏輯原理圖,3路原理與其相同。對SJA1000的操作方法是:首先,對地址為CAN0首地址+0(A2A1A0=000)的端口進行寫操作(nWR為低,有效),CAN0ALE為高,有效,此時復(fù)用的地址/數(shù)據(jù)總線上的數(shù)據(jù)被視為地址信號,進入SJA1000內(nèi)部鎖存器;然后,對地址為CAN0首地址+1(A2A1A0=001)的端口進行讀或?qū)懖僮?nRD/nWR為低,有效),CAN0ALE為低,上述中的地址信號已被鎖存,此時復(fù)用的地址/數(shù)據(jù)總線上的數(shù)據(jù)被視為數(shù)據(jù)信號,這樣即可完成對SJA1000的各個寄存器和緩沖區(qū)讀或?qū)懖僮?。另外,譯碼器還要輸出對、指示燈輸出、按鍵采集等電路的片選信號。
3 系統(tǒng)的軟件設(shè)計
為方便軟件調(diào)試,軟件開發(fā)和運行的操作系統(tǒng)采用DOS6.22;軟件開發(fā)環(huán)境采用Turbo C++/ C++編譯器。
3.1 軟件流程圖
圖3a給出采用模塊化設(shè)計的系統(tǒng)軟件流程圖。其中系統(tǒng)初始化模塊負責完成對系統(tǒng)的中斷、時鐘、I/O端口、串口、CAN接口等資源的配置;LCD顯示界面初始化模塊負責完成系統(tǒng)的工作界面顯示;CAN發(fā)送呼叫模塊通過CAN-Bus呼叫各子模塊,各子模塊在收到呼叫命令后,將采集的數(shù)據(jù)發(fā)送給主機,同時主機也可將系統(tǒng)的設(shè)置參數(shù)或動作指令發(fā)送給各子模塊;CAN接收數(shù)據(jù)處理模塊負責處理收到的各種數(shù)據(jù);鍵盤采集處理及LCD顯示刷新模塊負責系統(tǒng)采集和處理鍵盤命令,并通過LCD顯示出系統(tǒng)執(zhí)行結(jié)果和各種狀態(tài)信息。圖3b給出系統(tǒng)中斷服務(wù)子程序,包括4個CAN中斷服務(wù)子程序和定時中斷服務(wù)子程序等。
3.2 軟件代碼
在軟件代碼中,中斷向量的和PC/104對SJA1000的操作比較重要。下面以CAN0為例進行詳細說明。
3.2.1中斷向量的
3.2.2 PC/104對SJA1000的操作
由于篇幅有限,其它子程序不再詳述。
4 具體應(yīng)用結(jié)果
采用該方案設(shè)計了鐵路道岔融雪系統(tǒng)。整個系統(tǒng)的PC/104子系統(tǒng)多達10個以上;各子系統(tǒng)的最遠距離達7~8 km,它們都以遠距離、低速的CAN-Bus與車站中央控制系統(tǒng)相連。每個以PC/104為核心的子系統(tǒng)中都有電流采集模塊、電壓采集模塊、軌溫采集模塊、I/O模塊等,它們都以近距離、高速的CAN-Bus與PC/104模塊相連。另外,系統(tǒng)還可擴展、無線模塊。這樣可以組成了一個功能強大的分布式控制系統(tǒng)。目前,正在對系統(tǒng)的各功能、技術(shù)指標等進行測試。由于系統(tǒng)方案設(shè)計合理,整個系統(tǒng)運行穩(wěn)定、可靠,因此取得了較好的效果。
5 結(jié)語
目前,嵌入式工業(yè)計算機PC/104的檔次很多,其CPU從低端的386、486、X86…一直到高端的 III,IV等,應(yīng)有盡有,運行的操作系統(tǒng)可以是DOS、、WinCE,也可以是,所以以PC/104平臺來搭建控制系統(tǒng)具有廣泛的適應(yīng)性和可擴展性。