吳志玲 靳 鴻 陳昌鑫 王 棟
(中北大學電子測試技術重點實驗室、儀器科學與動態(tài)測試教育部重點實驗室,山西 太原 030051)
傳感器、主控制單元、CAN控制器和CAN收發(fā)器。
在測試行業(yè)快速發(fā)展的今天,數據采集已經發(fā)生了重要的變化,數據采集系統已被廣泛應用于各類型局域網及分布式領域。數據采集系統之所以能被廣泛應用的原因在于:首先,分布式控制應用場合中的智能數據采集系統在國內外已經取得了長足的發(fā)展;其次,總線兼容型數據采集插件的數量不斷增大;再次,與個人計算機兼容的數據采集系統的數量也在增加。與此同時,國內外各種數據采集系統先后問世,將數據采集技術帶入了一個全新的時代。
控制器局域網絡 (controllers area network,CAN)是目前國際上影響最廣泛的現場總線之一[1]。CAN總線上數據的傳輸速率高達1 Mbit/s,實時性強,具有較強的檢錯糾錯[2]能力,可靠性高。因此,該數據采集系統采用CAN總線進行數據傳輸。
數據采集系統結構如圖1所示,主要由上位機、多個CAN節(jié)點和CAN總線組成。其中CAN節(jié)點[3]包括
圖1 數據采集系統結構框圖Fig.1 Structure of the data acquisition system
系統一次完整的數據采集過程說明如下。
系統上電復位后,節(jié)點開始進行系統初始化。初始化完成后,等待上位機發(fā)送開始采集數據的命令,數據采集節(jié)點響應該命令后開始采集信號,并將所采集的模擬信號通過單片機內部的A/D模塊轉換為數字信號。數據采集完畢后進入等待狀態(tài),若收到上位機傳輸數據的命令,則在CAN核的控制下將數字信號經由收發(fā)器發(fā)送到總線上,再傳輸給上位機;否則,將數字信號通過CAN的專用緩沖寄存器存儲到消息RAM。繼續(xù)等待上位機的命令,直至節(jié)點收到上位機發(fā)送的停止數據采集命令。
本數據采集系統突出的性能優(yōu)點主要有以下三方面:微型化、可靠性和靈活性。詳細說明如下。
系統微型化主要通過兩方面來實現。一方面,節(jié)點主控單元所選用的單片機是Silicon Lab公司的C8051F500。C8051F500是SoC型單片機,它不僅集成了常用的模塊如定時器、A/D轉換模塊、串口等,還集成了CAN、LIN等模塊,具備較高的集成度。該系統在省去獨立CAN控制器所占體積的同時,降低了外圍電路的復雜性,減小了數據采集節(jié)點的體積。另一方面,CAN收發(fā)器[4]選擇 CTM1050T。CTM1050T是隔離型CAN收發(fā)器,自身具有電源隔離和電氣隔離的作用,避免了外接隔離器件,使得系統體積進一步縮小。
首先,單片機和CAN收發(fā)器的高集成度使系統外圍電路得到簡化,避免了部分系統內部噪聲對性能的干擾,在一定程度上提高了系統的可靠性。其次,CAN總線采用差分信號對數據進行傳輸,由于CAN總線的雙線受到的干擾是一致的,故其傳送的差分信號能有效避免或減少各種電磁噪聲帶來的影響。再次,CAN總線本身具有很好的檢錯糾錯能力,它可對錯誤來源進行正確的定位,將永久的硬件錯誤從軟件錯誤中獨立出來。此外,CAN數據幀中包含CRC域,總線協議采用CRC檢驗并提供相應的錯誤處理能力,保證了數據通信的可靠性。標準數據幀格式[5]如圖2所示。
圖2 標準數據幀格式Fig.2 Format of standard data frame
基于CAN總線的特點,其上節(jié)點可以實現即插即用的功能且節(jié)點數最多可達110個[6],所以CAN總線上節(jié)點的擴展簡單、方便。此外,系統中的CAN節(jié)點主要負責完成數據采集與傳輸,是一個通用性較強的模塊,在測量不同物理參數時,只需將節(jié)點前端的傳感器換成相應不同類型的傳感器即可。因此,CAN節(jié)點的應用方便、靈活。
系統的核心模塊是CAN節(jié)點。單片機C8051F500與上端隔離收發(fā)器(CTM1050T)和下端傳感器共同構成CAN節(jié)點模塊。CAN節(jié)點與總線的接口電路原理圖如圖3所示。
圖3 CAN接口電路原理圖Fig.3 Principle of the CAN interface circuit
單片機內部的CAN模塊即CAN控制器,它主要包括CAN核、消息存儲器、消息處理器和控制寄存器四部分[7]。單片機的MCU不能直接訪問內部的消息RAM,因此將位于控制寄存器的接口寄存器(CAN0Ifx)分為兩組,其中一組用于存儲CPU對消息RAM訪問時傳輸的數據,另一組用于存儲消息RAM與總線進行傳輸的數據。兩個消息寄存器組的功能相同,且允許它們相互被中斷,以解決消息RAM和總線之間數據收發(fā)與單片機和消息RAM之間數據傳輸的沖突問題[8]。
系統軟件主要包括系統初始化、A/D轉換和CAN數據收發(fā)三部分。CAN總線數據采集流程圖如圖4所示。
圖4 CAN節(jié)點數據采集流程圖Fig.4 Flowchart of data acquisition in CAN node
將系統采集的模擬信號經A/D轉換為數字信號后,以CAN通信協議所要求的特定格式(CAN標準數據幀)發(fā)送至消息緩存區(qū)[9]。數據采集系統所采集的模擬信號由其內部A/D轉換為數字信號,該數字信號以標準數據幀的格式發(fā)送至消息緩存區(qū)[9]。在CAN模塊中,單片機內部CAN處理器會控制消息緩存寄存器將數據寫入CAN寄存器,待發(fā)送請求到來時CAN控制器將數據發(fā)送出去。當總線上有節(jié)點消息發(fā)送成功時,其他接收節(jié)點會產生接收中斷并響應中斷,進入中斷接收子程序接收數據,并根據消息標志符判斷該數據幀是否為自身節(jié)點所需的數據。若是所需數據,則存儲該消息;否則丟棄。此為一次數據收發(fā)的過程。
3.2.1 系統初始化
系統初始化主要包括端口、晶振、時鐘、A/D模塊和CAN控制器的初始化。
3.2.2 A/D 轉換模塊
單片機的ADC0由35/28路模擬多路選擇器(AMUX0)、可編程邏輯放大器(PGA)和1個采樣速率為200 kS/s的12位逐次比較寄存器(successive approximation register,SAR)組成。ADC0中還集成了跟蹤保持電路和可編程窗口檢測器。
單片機控制寄存器中A/D轉換使能位AD0EN被置為‘1’時,ADC0子系統(ADC0、跟蹤保持器和PGA)才被允許工作;當 AD0EN位為‘0’時,AD0C子系統處于低功耗關斷方式。當有數據要轉換時,AD0EN位被置‘1’,A/D模塊啟動,將系統測到的模擬信號轉換為數字信號。A/D轉換后的結果保存在ADC0數據寄存器ADC0H、ADC0L中。當有數據傳輸命令到來時,則將數據發(fā)送給所需模塊。
3.2.3 CAN 數據收發(fā)
A/D轉換完成后,將其結果發(fā)送到CAN寄存器[10],由CAN模塊完成與CAN總線上其他節(jié)點的通信。節(jié)點接收到上位機或其他節(jié)點發(fā)送的數據傳輸請求命令后,進入中斷程序,執(zhí)行接收中斷子程序,由接收子程序分析、判斷接收到的消息并響應該數據發(fā)送請求命令。接收子程序除了要完成數據接收外,在處理報文的過程中還要對總線關閉、錯誤報警、接收溢出等情況進行處理。因此,接收子程序要比發(fā)送子程序復雜。
發(fā)送子程序主要負責完成消息的發(fā)送過程。發(fā)送消息時,只需將待發(fā)送數據按數據幀格式組成一條消息,送入發(fā)送緩存區(qū),然后啟動消息發(fā)送即可[11]。消息發(fā)送過程與接收過程只是數據緩存寄存器與消息RAM之間的數據傳輸方向不同而已,其他的設置及對消息的處理過程基本相同。
設計開發(fā)環(huán)境采用的是Silicon Lab IDE,并用其進行仿真,所用適配器為新華龍公司生產的U-EC6(免驅動)。數據采集系統的測試結果采用VB界面進行顯示。發(fā)送節(jié)點測試結果顯示界面截圖如圖5所示,總線上另一節(jié)點所接收到的數據顯示界面截圖如圖6所示。
系統中CAN節(jié)點的通信速率為1 Mbit/s。CAN總線上每個節(jié)點都可以作為主節(jié)點來發(fā)送或接收命令。各節(jié)點是否為主節(jié)點取決于該節(jié)點所收發(fā)報文的標志符。測試結果表明,該數據采集系統有效地解決了系統數據沖突問題,數據傳輸準確、高效,系統的可靠性、實時性得到保證,滿足本次設計的初衷。
數據采集系統的CAN節(jié)點是由傳感器、隔離CAN收發(fā)器CTM1050T和內嵌CAN核的C8051F500單片機共同構成的數據采集模塊。首先,因其采用CAN總線傳輸數據,數據采集節(jié)點的靈活性得到提高;其次,解決了CAN消息內部傳輸時可能發(fā)生的沖突問題,使系統的可靠性得到保證;最后,采用了內部集成CAN核的單片機,并且同以往的節(jié)點相比,減少了外部隔離光耦,使得外圍電路得以簡化,從而使數據采集系統的微型化得以實現。系統的靈活性、可靠性得到保證,微型化得以實現,從而使基于CAN總線的數據采集系統的應用更加廣泛。
[1]宋小慶.軍用車輛綜合電子系統總線網絡[M].北京:國防工業(yè)出版社,2010.
[2]羅峰,孫澤昌.汽車CAN總線系統原理、設計與應用[M].北京:電子工業(yè)出版社,2010.
[3]田帥帥.基于CAN總線的測量系統通信網絡設計[D].太原:中北大學,2011.
[4]郭鐵橋,陳勇.基于CAN_LIN總線的智能照明系統[J].自動化儀表,2011,32(2):46-48.
[5]趙曉軍,曹建坤,李可一,等.基于CAN總線的數據臂通信設計[J].自動化儀表,2010,31(5):13-15.
[6]Li Ran,Wu Junfeng,Wang Haiying,et al.Design method of CAN BUS network communication structure for electric vehicle[J].Strategic Technology(IFOST),2010(10):326-329.
[7]胡曉拓,張培仁,楊天寶,等.基于C8051F040的CAN控制器的應用與分析[J].微計算機信息,2007(23):8-10.
[8]張培仁,孫力.基于C語言C8051F系列微控制器原理與應用[M].北京:清華大學出版社,2007.
[9]陳在平.現場總線及工業(yè)控制網絡技術[M].北京:電子工業(yè)出版社,2008.
[10]劉波,張會新,孟令軍.基于C8051F040的CAN總線采集存儲及實時監(jiān)測系統設計[J].儀表技術與傳感器,2010(10):57-59.
[11]于成毅.CAN總線數據記錄儀的研究與設計[D].太原:中北大學,2011.