陳 飛 謝 建
(中國人民解放軍第二炮兵工程大學,西安 710025)
某大型機電設備信息檢測仍采用傳統的檢測系統體制,即各檢測點位傳感器信息單獨傳輸至上位機進行處理,一臺設備包含幾百個傳感器,匯總至上位機的信號線就有幾百甚至上千根,使得整個信息檢測系統復雜臃腫、可靠性差、故障排除困難。而控制器局域網CAN(Controller Area Net)作為一種全數字化、全分散、全透明、標準化、規格化的串行現場總線技術,具有可靠性高、實時性好、靈活及價格低廉等優點[1]。利用其對該大型機電設備的信息檢測系統進行改制,硬件上僅需對原有的各類傳感器加裝CAN通信接口。但是,對于多個節點同時上傳報文的情況,CAN采用的是帶優先權的非破壞性逐位仲裁機制來解決總線沖突,當總線上的節點數較多時,若繼續采用一般的固定優先級方式進行報文的定時自動上傳,將導致節點沖突頻繁,低優先級報文傳輸延時大為延長,特別是在某節點檢測到異常信號或發生故障時,很難在第一時間被發現和定位。為解決此類問題,筆者提出循環問答和重要信息優先權搶占相結合的信息調度機制。并依據實際設備的工作特點,設計基于CAN總線的狀態信息檢測系統,制定了應用于系統的CAN應用層協議。
基于CAN總線的狀態信息檢測系統組成如圖1所示,包括監控主機、CAN通信接口和狀態信息采集節點3部分。系統采用自帶CAN總線接口的STM32F103C8T6微控制器作為下位機控制單元,完成采集數據的實時處理和應用層、數據鏈路層的工作,各節點采用CAN總線通信。監控計算機通過CAN網絡適配器對各節點進行管理,接收并處理各點位傳感器采集的數據[2]。

圖1 狀態信息檢測系統組成
選擇STM32F103C8T6作為下位機節點主控制器。STM32F103C8T6是中等容量的STM32產品,具有體積小、功耗低及性價比高的特點,它基于ARM的Cortex-M3內核,工作頻率72MHz,具有64KByte的系統內可編程Flash、20KByte的SRAM、37個可獨立編程的I/O、2個16通道12位轉換精度的ADC、1個CAN接口、2個DMA控制器(DMA1有7個通道,DMA2有5個通道)和3個16位通用定時器,完全可滿足本設計需要和后續擴展的要求。其本身集成的bxCAN控制器,支持CAN2.0A和2.0B協議,位通信波特率可達1Mbit/s,支持11位標準幀格式和29位擴展幀格式的接收與發送,具備3個發送郵箱和2個接收FIFO,此外還有14個可編程的過濾器組,完全符合J1939規范[3]。
常用的變送器輸出量都是標準電流(4~20mA)或標準電壓信號(0~10V)。設計中為簡化電路,采用STM32F103C8T6的片內ADC進行模數轉換,而其參考電壓為3.3V,因此要先把變送器的輸出信號轉換為0.0~3.3V范圍內的電壓信號,再進行模數轉換。
Linear公司的LT1793放大器輸入阻抗大(1013Ω),輸入偏置電流很低,一般為3pA,最大為10pA,具體電路如圖2、3所示,其I/V轉換電路和電壓衰減電路精度高、線性程度好、結構簡單。
上位機節點由PC機進行監控,涉及CAN協議和USB協議,設計中直接利用ZLG的USBCAN-2A接口卡作為網絡適配器實現上位機與CAN總線的數據交換,因此這里僅需要對下位機節點的接口電路進行設計。圖4為STM32的CAN控制器與物理總線之間的接口電路。

圖2 I/V轉換電路

圖3 電壓衰減電路

圖4 CAN控制器與物理總線接口電路
在接口的CAN_H和CAN_L之間連接一個120Ω的電阻R4進行總線上的阻抗匹配,減小了因長距離傳輸所產生的反射波干擾強度。在CAN_H和CAN_L上各自串聯一個5Ω的限流電阻,可保護收發器免受過流沖擊,并通過一組上拉電阻R2、R7進行阻抗匹配,從而有效抑制反射波的干擾,保持總線穩定在較高阻抗時接收端收到的始終是隱性電平。另外,在CAN_H和CAN_L與地之間并聯兩個瞬態二極管D1、D2,可以提高接口抗瞬變干擾的能力。設計中選用雙通道數字隔離器ADuM1201芯片來隔離SN65HVD與STM32F103C8T6的電源線和地線,采用兩組電源模塊負責供電,很好地避免了CAN收發器和控制器之間的互相干擾,相較于傳統的光電隔離器,采用ADuM1201簡化了電路設計,提高了傳輸性能,降低了系統功耗[4]。
CAN網絡通信協議僅解決了數據發送、接收及錯誤處理等底層硬件數據傳輸問題,對于應用層數據并沒有規定相應的解析協議,應用層協議需要使用者自定。主要需確定幀格式、總線資源的分配及報文各位域功能定義等問題。
考慮到系統的擴展性,協議采用擴展幀格式進行報文傳輸??偩€資源的分配是指總線上各節點和各傳感器地址的分配。而位域的功能定義涉及異常報警指示、異常類型的確定及應答信息的標識等。根據系統要實現正常運行時網絡負載的穩定性和節點檢測的可控性、有序性,當有檢測量超限、突變或掉線發生時,此類重要信息能夠實時通知監控節點,筆者提出了循環問答和重要信息優先權搶占相結合的調度機制,并在此基礎上制定了適合本系統的應用層協議。
根據圖5所示的報文標識符分配規則,劃分出3種類型的系統應用幀,包括上位機向檢測節點發送的數據請求幀、檢測節點向上位機發送的數據響應幀、檢測節點向上位機發送的異常報警幀,異常位為0(顯性)是異常報警幀,應答位為1(隱性)是數據響應幀,異常位為1、應答位為0是數據請求幀。3類報文的優先級為:異常報警幀最高,數據響應幀次之,數據請求幀最低。當存在總線競爭時,優先級高的報文獲得總線使用權。

圖5 報文標識符分配規則
下位機軟件設計和調試采用針對各種嵌入式處理器的軟件開發工具Keil MDK。它集成了μUision集成開發環境和RealView編譯器,同時包含了眾多的案例模板和固件實例,支持多種調試接口(如UART、JTAG及JLINK等)[5]。ST公司提供了一個完整的STM32設備固件庫,該固件庫包含了STM32設備所有外設的底層驅動函數,設計中直接利用這些底層函數進行應用程序的編寫,可大為減小開發難度,縮短開發周期。
下位機節點的主程序流程如圖6所示,配置ADC工作于DMA(存儲器直接存取)模式,在該模式下ADC在每次轉換結束后申請一次DMA傳輸,DMA隨后將該轉換結果傳輸到指定目標地址。這樣就避免了普通轉換模式下,由ADC不斷向CPU請求中斷以通知CPU轉換完成,從而ADC可以不受影響地進行連續的轉換工作,同時也釋放了CPU的工作空間。

圖6 主程序流程
各檢測節點都設置了CAN接收中斷和異常報警中斷,如圖7、8所示。驗收過濾器的配置在CAN控制器初始化時完成。當上位機向CAN總線發送遠程幀請求數據服務時,CAN控制器只接收標識符與驗收濾波器相匹配的數據請求幀,存入接收緩沖區,同時觸發CAN接收中斷服務程序,將ADC轉換結果打包成響應請求的數據幀,上傳至CAN總線,而在主程序中設置節點故障檢測函數,當檢測到某傳感器采樣結果超限或為零時,觸發異常報警中斷服務程序,再次對異常進行判定,而后上傳超限或者掉線異常報警幀。

圖7 CAN接收中斷服務

圖8 異常報警中斷服務
為測試各節點的通信能力并進行后續的開發,采用VC++6.0設計上位機監控軟件。由于利用了USBCAN-2A作為總線接口卡,程序中僅需包含設備的動態鏈接庫就能實現接口庫函數的直接調用。監控軟件實現的功能主要有通信參數的設置、遠程請求的發送及數據的處理和顯示等。
軟件有定點手動測試和輪詢自動測試兩種模式[6]。圖9為上位機軟件運行界面。

圖9 上位機軟件運行界面
闡述了基于CAN總線的某大型機電設備狀態信息檢測系統的設計過程。以集成CAN控制器的STM32F103C8T6芯片為核心,配合SN65HVD高性能CAN收發器和ADuM1201隔離器簡化了電路的設計,提高了接口的穩定性,適用于各類典型傳感器的CAN接口改制。按監控機輪詢檢測和節點異常搶占優先權報警的思路設計適用于系統的應用層協議,配合監控軟件,實現了多傳感器的在線監測和異常的遠程實時定位。
[1] 饒運濤.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2007.
[2] 趙永剛,劉曉霏,張國義,等.基于CAN總線的分布式測量系統設計[J].航天制造技術,2013,(2):62~66.
[3] 李寧.基于MDK的STM32處理器開發應用[M].北京:北京航空航天大學出版社,2008.
[4] 臧春華.綜合電子系統設計與研究[M].北京:北京航空航天大學出版社,2009.
[5] 張河新,王曉輝,黃曉東.基于STM32和CAN總線的智能數據采集節點設計[J].化工自動化及儀表,2012,39(1):78~80.
[6] 劉銳寧.Visual C++編程寶典[M].北京:人民郵電出版社,2011.