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