吳偉斌 洪添勝 朱余清 葉 成 黎浩標(biāo) 何廣斌 許紹忠
(華南農(nóng)業(yè)大學(xué)南方農(nóng)業(yè)機(jī)械與裝備關(guān)鍵技術(shù)教育部重點實驗室1,廣東 廣州 510642;華南農(nóng)業(yè)大學(xué)工程學(xué)院2,廣東 廣州 510642)
CAN總線起源于汽車電子系統(tǒng),由于它在技術(shù)和性價比方面的獨特優(yōu)勢,現(xiàn)已廣泛應(yīng)用于航天、電力、儀表、機(jī)器人等領(lǐng)域[1-2]。無線局域網(wǎng)作為無線通信技術(shù)之一,其發(fā)展迅速,是當(dāng)今網(wǎng)絡(luò)發(fā)展的一個主要潮流,可廣泛應(yīng)用于無線辦公、無線醫(yī)院、無線校園、無線社區(qū)等場合,目前已經(jīng)進(jìn)入工業(yè)控制領(lǐng)域[3]。
采用傳統(tǒng)的有線方式連接各個CAN總線節(jié)點實現(xiàn)通信的方法存在布線和設(shè)備使用不便等缺點。為了不采用有線介質(zhì)實現(xiàn)CAN總線節(jié)點之間的有效通信,可以采用無線通信技術(shù)[4]。無線通信技術(shù)的種類多樣,其中無線局域網(wǎng)技術(shù)組網(wǎng)簡單,能夠快速地搭建網(wǎng)絡(luò),技術(shù)比較成熟。因此,運用無線局域網(wǎng)技術(shù)實現(xiàn)CAN總線數(shù)據(jù)的無線傳送[5]在當(dāng)前具有重大的應(yīng)用價值。目前,無線 CAN 總線的研究還比較少[6-9],但需求量卻越來越大。本文對簡易通用的無線CAN總線系統(tǒng)進(jìn)行了研究。
本文所述無線CAN系統(tǒng)由兩個控制節(jié)點組成,其功能框圖如圖1所示。

圖1 系統(tǒng)功能框圖Fig.1 Block diagram of system function
圖1中,虛線箭頭表示無線通信。
在工作過程中,系統(tǒng)的兩個節(jié)點都在不斷地監(jiān)測自身連接的CAN總線網(wǎng)絡(luò),在將正確接收到的CAN報文通過無線方式發(fā)送到另一模塊的同時,也會接收來自另一模塊的無線CAN報文;然后將這些報文發(fā)送到自身連接的CAN總線網(wǎng)絡(luò),從而實現(xiàn)CAN總線數(shù)據(jù)的無線傳送。兩個CAN總線網(wǎng)絡(luò)無需通過有線介質(zhì)就能實現(xiàn)通信。
系統(tǒng)的兩個節(jié)點構(gòu)造相同,主要由微控制器STC12C5410AD、CAN總線控制器MCP2515、CAN總線收發(fā)器MCP2551和射頻無線模塊RF903組成。系統(tǒng)軟件主要是對微控制器STC12C5410AD進(jìn)行編程控制,包括初始化程序、CAN報文發(fā)送程序、CAN報文接收程序、無線發(fā)送程序和無線接收程序。
本系統(tǒng)選用STC12C5410AD單片機(jī)作為微控制器,它是宏晶科技生產(chǎn)的一款單時鐘/機(jī)器周期的單片機(jī)。MCP2515是一款為簡化連接CAN總線的應(yīng)用而開發(fā)的獨立CAN控制器,完全支持CAN V2.0B技術(shù)規(guī)范;MCP2551是一個可容錯的高速CAN器件,可作為CAN協(xié)議控制器和物理總線接口;RF903是一款高性能射頻通信模塊。
CAN控制電路負(fù)責(zé)進(jìn)行CAN報文的接收和發(fā)送,主要由主控制器STC12C5410AD、CAN控制器MCP2515和CAN收發(fā)器MCP2551組成,主要電路如圖2所示。其中,STC12C5410AD連接電源端(28腳)、地端(14腳)和外部振蕩電路即可正常工作。

圖2 CAN控制電路圖Fig.2 CAN control circuit
MCP2515與STC12C5410AD通過6條連接線進(jìn)行通信。MCP2515由 SPI接口控制,而 STC12C5410AD自帶SPI接口,可以將 MCP2515的 SPI接口的 SCK、SO、SI、CS這4個引腳分別連接到 STC12C5410AD的P1.7、P1.6、P1.5、P1.4。MCP2551 通過 TXD 和 RXD 引腳分別與MCP2515的TXCAN和RXCAN連接,進(jìn)行CAN報文的發(fā)送和接收。
編碼開關(guān)S1電路用于采集編碼信息及設(shè)置CAN總線的波特率。電路主要由一個10 kΩ排阻(P6)和一個編碼開關(guān)組成,開關(guān)電路如圖3所示。

圖3 編碼開關(guān)電路圖Fig.3 Encoding switch circuit
編碼開關(guān)S1內(nèi)部有4個開關(guān),各個開關(guān)的其中一端分別連接到STC12C5410AD的P2端口的高4位,另一端接地。當(dāng)開關(guān)不閉合時,由于端口通過上拉電阻接到電源端,呈現(xiàn)高電平;當(dāng)開關(guān)閉合時,端口與地線相連,電平被拉低。
RF903控制電路由電壓轉(zhuǎn)換電路和RF903接口組成,其電路如圖4所示。

圖4 RF903控制電路圖Fig.4 RF903 control circuit
由于RF903模塊的工作電壓是2.2~3.6 V、其他器件的工作電壓是5 V,所以需要進(jìn)行電壓轉(zhuǎn)換。圖4中的AMS1117是一個穩(wěn)壓芯片,它用于將5 V電壓穩(wěn)壓在3.3 V左右。RF903同樣也通過SPI來控制,其SPI引腳連接到STC12C5410AD的SPI接口上。由于SDIO引腳是SPI雙向數(shù)據(jù)線,所以在與STC12C5410AD的MISO和MOSI連接時要添加一個1 kΩ電阻,以避免2個端口互相影響。IRQ引腳連接到STC12C5410AD的外部中斷1,以便進(jìn)行中斷控制。P3是RF903的接口。
系統(tǒng)的軟件設(shè)計在集成編譯環(huán)境中完成。本系統(tǒng)選用了宏晶科技的微控制器STC12C5410AD作為主控芯片,其編譯、調(diào)試工作在Keil C51軟件開發(fā)環(huán)境下進(jìn)行。本系統(tǒng)配置了與宏晶科技微控制器配套的STCISP軟件。該軟件負(fù)責(zé)將編譯好的程序下載到微控制器STC12C5410AD中。
系統(tǒng)的總體運行過程由主函數(shù)控制。主函數(shù)是一個循環(huán)體,其控制過程具體如下。
系統(tǒng)啟動時先進(jìn)行初始化,然后判斷RF903是否收到無線數(shù)據(jù)。如果收到無線數(shù)據(jù),則啟動無線接收程序,然后啟動CAN報文發(fā)送程序,將CAN報文發(fā)送到CAN總線上,接著返回繼續(xù)檢測是否收到CAN報文。如果RF903沒有收到無線數(shù)據(jù),則直接檢測是否收到CAN報文。如果收到CAN報文,就啟動CAN報文接收程序,然后啟動無線發(fā)送程序,將CAN報文通過RF903發(fā)送到另一端,最后返回重新檢測;如果沒有收到CAN報文,就直接返回重新檢測。檢測的過程可以由中斷控制,從而降低控制器成本。
①初始化程序
先對STC12C5410AD進(jìn)行初始化,包括中斷設(shè)置和SPI的相關(guān)設(shè)置。然后采集編碼信息,以便后續(xù)對CAN波特率進(jìn)行設(shè)置。對MCP2515進(jìn)行初始化時,首先對其進(jìn)行復(fù)位操作并設(shè)置為配置模式,同時設(shè)置接收中斷,從而使微控制器能夠及時進(jìn)行CAN報文的接收。CAN報文有標(biāo)準(zhǔn)和擴(kuò)展兩種類型,為了不丟失報文,MCP2515同時接收這兩種類型的報文。然后,讓其進(jìn)入正常工作模式。初始化RF903前也要對其進(jìn)行復(fù)位操作,并設(shè)置工作頻率和工作模式。由于最長的CAN報文只占用13 B,所以可以將數(shù)據(jù)包長度設(shè)為13 B。每個RF903模塊都有自身的地址,設(shè)置地址用以區(qū)別其他模塊,然后對其接收和發(fā)送指針進(jìn)行復(fù)位。初始化的最后步驟要將RF903設(shè)置為接收狀態(tài),以進(jìn)行接收監(jiān)測。
②CAN總線報文發(fā)送程序
CAN報文發(fā)送程序是對MCP2515進(jìn)行發(fā)送控制。首先判斷發(fā)送緩沖器是否為空,如果不為空,就不能對其進(jìn)行寫入。MCP2515有3個發(fā)送緩沖器,分別是TX2、TX1和TX0。其中,TX2的優(yōu)先級最高,它的報文會被優(yōu)先發(fā)送;TX0的優(yōu)先級最低。當(dāng)檢測到某一緩沖器為空時,就可以清除其中斷標(biāo)志,然后將CAN報文裝載進(jìn)入,最后啟動發(fā)送命令。啟動發(fā)送命令后,該程序即結(jié)束。
③CAN總線報文接收程序
當(dāng)MCP2515產(chǎn)生接收中斷時,微控制器就要開啟CAN報文接收程序。開始接收報文時,要檢測中斷標(biāo)志位,以確定是哪個接收緩沖器產(chǎn)生接收中斷。MCP2515有RX0和RX1兩個接收緩沖器,其中RX0的優(yōu)先級較高。由于接收緩沖器存在優(yōu)先級,所以不存在兩個接收緩沖器同時產(chǎn)生中斷的情況,每次接收中斷只會由其中的一個接收緩沖器產(chǎn)生。
④無線發(fā)送程序
當(dāng)接收完CAN報文后,就要執(zhí)行無線發(fā)送程序,將CAN報文發(fā)送出去。發(fā)送前先復(fù)位發(fā)送指針,然后寫入接收機(jī)的地址。不同的地址對應(yīng)不同的RF903模塊。寫入數(shù)據(jù)后令RF903進(jìn)入發(fā)送狀態(tài),自動將數(shù)據(jù)發(fā)送出去。待數(shù)據(jù)發(fā)送完成后,將RF903的狀態(tài)設(shè)為接收狀態(tài),進(jìn)行自動監(jiān)測,并等待接收無線CAN報文。
⑤無線接收程序
當(dāng)RF903接收到無線CAN報文后,微控制器就要執(zhí)行無線接收程序,讀取并暫存數(shù)據(jù),并將報文發(fā)送到CAN總線網(wǎng)絡(luò)。在復(fù)位接收指針后要對數(shù)據(jù)進(jìn)行CRC校驗檢測,如果校驗錯誤,說明接收的數(shù)據(jù)有錯,應(yīng)該放棄接收;只有校驗正確的數(shù)據(jù)才會被接收。讀取數(shù)據(jù)前先發(fā)送讀數(shù)據(jù)命令,然后就可以將數(shù)據(jù)讀取到微控制器內(nèi)暫存。讀取數(shù)據(jù)完成后,為避免丟失需要接收的數(shù)據(jù),應(yīng)重新設(shè)定RF903模塊,以確保其能進(jìn)入接收狀態(tài),并進(jìn)行實時監(jiān)測。
測試儀器設(shè)備主要包括以下幾種。
① Kvaser USBCAN II是瑞典Kvaser公司開發(fā)的專業(yè)CAN總線分析儀。它與Kvaser公司開發(fā)的CAN總線數(shù)據(jù)測試軟件CanKing結(jié)合使用能夠檢測和發(fā)送符合CAN協(xié)議標(biāo)準(zhǔn)的信號,并在計算機(jī)顯示器上加以顯示,從而便于對CAN報文的各部分進(jìn)行分析。
②CAN節(jié)點模塊XhoCAN,該模塊可以收發(fā) CAN總線報文。
③自主開發(fā)的系統(tǒng)電路板兩塊。
④計算機(jī)一臺、導(dǎo)線若干。
測試過程與步驟具體如下。
① 將 Kvaser USBCAN II與計算機(jī)相連,打開CanKing軟件,將CAN通信波特率設(shè)置為500 kbit/s。
②將Kvaser USBCAN II的CAN接口與CAN節(jié)點模塊的CAN接口相連,啟動CanKing軟件接收CAN節(jié)點模塊發(fā)出的CAN報文。
③將CAN節(jié)點模塊的CAN接口與本系統(tǒng)其中一個模塊的CAN接口相連,然后將Kvaser USBCAN II的CAN接口與本系統(tǒng)另一個模塊的CAN接口相連。通過CanKing測試CAN節(jié)點模塊發(fā)送的CAN報文,并將它和直接測試的報文進(jìn)行對比。
④將Kvaser USBCAN II的CAN接口與本系統(tǒng)其中一個模塊的CAN接口相連,然后將CAN節(jié)點模塊的CAN接口與本系統(tǒng)另外一個模塊的CAN接口相連,并將CAN節(jié)點模塊通過串口與電腦相連,同時打開CanKing軟件的報文發(fā)送窗口。在發(fā)送窗口中設(shè)置好報文標(biāo)志符、數(shù)據(jù)長度和各個數(shù)據(jù)后,按下“Send”鍵,將CAN報文通過本系統(tǒng)發(fā)送到CAN節(jié)點模塊,CAN節(jié)點模塊會將接收到的報文通過串口發(fā)送到計算機(jī),并在STC-ISP顯示收到的數(shù)據(jù)。
⑤設(shè)置不同的報文信息,將重復(fù)多次發(fā)送不同的報文與原來設(shè)定的報文進(jìn)行比較。
4.3.1 Kvaser USBCAN II的接收測試
Kvaser USBCAN II的接收測試步驟如下。
①直接進(jìn)行測試時的數(shù)據(jù)
在4.2章節(jié)的測試步驟②中,通過 Kvaser USBCAN II對 CAN節(jié)點模塊直接進(jìn)行測試時,在CanKing軟件中測試 CAN報文。其中,“Chn”指Kvaser USBCAN II的測試通道。“Identifier”是報文標(biāo)志符,簡稱ID。“Flg”指示報文是標(biāo)準(zhǔn)幀還是擴(kuò)展幀,顯示“X”時為擴(kuò)展幀,沒顯示“X”時為標(biāo)準(zhǔn)幀。“DLC”指示數(shù)據(jù)長度,“D1”~“D7”是數(shù)據(jù)場的8 B數(shù)據(jù)。“Time”顯示接收到報文的時間。“Dir”指示Kvaser USBCAN II的工作模式,接收時為“R”,發(fā)送時為“T”。數(shù)據(jù)窗口的數(shù)據(jù)是以十進(jìn)制的形式顯示的。
②連接無線CAN系統(tǒng)進(jìn)行測試時的數(shù)據(jù)
在4.2章節(jié)的測試步驟③中,采用 Kvaser USBCAN II對CAN節(jié)點模塊CAN報文進(jìn)行測試。測試結(jié)果表明,本系統(tǒng)的模塊也主要用來發(fā)送3個固定標(biāo)志符的CAN報文。測試到標(biāo)志符為180093185、347604230和356516355的3個報文。對于同一個標(biāo)志符的報文,若測試步驟②和步驟③測試的結(jié)果從“Flg”到“D7”每個位置的數(shù)據(jù)都相同,則步驟②和步驟③的測試結(jié)果是相同的,說明CAN節(jié)點模塊可以通過本系統(tǒng)將報文發(fā)送到其他節(jié)點。
4.3.2 Kvaser USBCAN II的發(fā)送測試
Kvaser USBCAN II的發(fā)送測試步驟具體如下。
①通過CanKing軟件發(fā)送預(yù)定義的報文數(shù)據(jù)
在4.2章節(jié)的測試步驟④和步驟⑤中,通過CanKing軟件的發(fā)送窗口預(yù)定義了10個CAN報文,并將它們發(fā)送到本系統(tǒng)的其中1個模塊。試驗結(jié)果表明,10個CAN報文的標(biāo)志符和數(shù)據(jù)場都不相同,有些是標(biāo)準(zhǔn)幀,有些是擴(kuò)展幀。
②通過STC-ISP顯示接收到的報文數(shù)據(jù)
在4.2章節(jié)的測試步驟④和步驟⑤中,通過STPISP將CAN節(jié)點模塊接收到的報文信息加以顯示,結(jié)果顯示有10行數(shù)據(jù),每行表示一個報文,分別對應(yīng)通過CanKing軟件預(yù)定義的10個報文,數(shù)據(jù)以十六進(jìn)制形式顯示。報文的第一列表示從MCP2515的“接收緩沖器標(biāo)準(zhǔn)標(biāo)志符高位”寄存器讀取的數(shù)據(jù),第二列表示從MCP2515的“接收緩沖器標(biāo)準(zhǔn)標(biāo)志符低位”寄存器讀取的數(shù)據(jù),第三列表示從MCP2515的“接收緩沖器擴(kuò)展標(biāo)志符高位”寄存器讀取的數(shù)據(jù),第四列表示從MCP2515的“接收緩沖器擴(kuò)展標(biāo)志符低位”寄存器讀取的數(shù)據(jù),第五列表示從MCP2515的“接收緩沖器數(shù)據(jù)長度碼”寄存器讀取的數(shù)據(jù),第六列至第十三列分別表示從MCP2515的8個“接收緩沖器數(shù)據(jù)段字節(jié)”寄存器讀取的數(shù)據(jù)。
為更好地分析報文的標(biāo)志符、數(shù)據(jù)長度和各個數(shù)據(jù)段字節(jié),將各個報文轉(zhuǎn)換成更直觀的信息,具體如表1所示。
以報文1、報文3和報文5為例,將通過CanKing軟件預(yù)定義的報文與STC-ISP顯示的報文進(jìn)行對比,對比結(jié)果如表2所示。

表2 報文對比表Tab.2 Inter-comparison of the messages
表2表明,2種方式顯示的3個報文的標(biāo)志符分別為170、256和135。對于同一個標(biāo)志符的報文,3種方式顯示的結(jié)果從“Flg”到“D7”的每個位置的數(shù)據(jù)都相同,則這2種方式對這3個報文的顯示結(jié)果是相同的。用相同的方法將其他報文進(jìn)行對比,可以發(fā)現(xiàn),這2種方式顯示的其他報文信息也是相同的,說明可以采用CanKing軟件通過本系統(tǒng)將報文發(fā)送到其他節(jié)點。
整個測試過程表明,本系統(tǒng)可以運用CAN總線分析儀Kvaser USBCAN II進(jìn)行CAN報文的收發(fā)。本系統(tǒng)傳送的報文錯誤率為0,能夠?qū)AN節(jié)點發(fā)送的報文傳送到另一端的CAN節(jié)點。本系統(tǒng)的通信符合CAN協(xié)議標(biāo)準(zhǔn),可與其他符合CAN協(xié)議標(biāo)準(zhǔn)的網(wǎng)絡(luò)相連,實現(xiàn)CAN總線數(shù)據(jù)的無線傳送。該系統(tǒng)可以應(yīng)用于工農(nóng)業(yè)等信息傳輸領(lǐng)域。
運用無線局域網(wǎng)技術(shù)實現(xiàn)了CAN總線數(shù)據(jù)的無線傳送系統(tǒng)構(gòu)建。CAN總線數(shù)據(jù)無線傳送系統(tǒng)由2個節(jié)點組成,每個節(jié)點在不斷地監(jiān)測自身連接的CAN總線網(wǎng)絡(luò),并將正確接收到的CAN報文通過無線方式發(fā)送到另一節(jié)點。系統(tǒng)的軟件采用C語言編寫,模塊化的軟件設(shè)計具有良好的可靠性及可移植性。系統(tǒng)無須改變硬件結(jié)構(gòu),只需對程序進(jìn)行修改即可實現(xiàn)無線通信。系統(tǒng)的通信符合CAN協(xié)議標(biāo)準(zhǔn),可與其他符合CAN協(xié)議標(biāo)準(zhǔn)的網(wǎng)絡(luò)相連,以實現(xiàn)CAN總線數(shù)據(jù)的無線傳送。通過CAN總線分析儀Kvaser USBCAN II,可實現(xiàn)對CAN報文的收發(fā)。
[1]饒運濤,鄒繼勇,王進(jìn)宏,等.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2007.
[2]韓兵,火長躍.現(xiàn)場總線儀表[M].北京:化學(xué)工業(yè)出版社,2007.
[3]楊軍,李瑛,楊章玉.無線局域網(wǎng)組建實踐[M].北京:電子工業(yè)出版社,2006.
[4]呂立亞,王兆伍.基于PIC單片機(jī)的汽車CAN無線傳送系統(tǒng)[J].工業(yè)控制計算機(jī),2008,21(8):80 -81.
[5]關(guān)宇東,李澤鯤.基于CAN總線的無線通信技術(shù)研究[J].工業(yè)控制計算機(jī),2004,17(10):56 -57.
[6]劉楊,程勇,紀(jì)少波,等.基于GPRS與CAN總線的純電動汽車無線監(jiān)測平臺的開發(fā)[J].山東大學(xué)學(xué)報:工學(xué)版,2011,41(6):109 -114.
[7]楊靖,林益,洪露,等.CAN總線中基于無線傳輸方式的智能節(jié)點設(shè)計[J].儀表技術(shù)與傳感器,2011(10):64 -65.
[8]楊海濤.PXI總線工業(yè)無線數(shù)傳板卡的設(shè)計[J].自動化儀表,2010,31(4):60 -62.
[9]陳亮,孟國營,牛一村,等.基于CAN總線及無線傳感技術(shù)的液壓支架壓力監(jiān)測系統(tǒng)[J].煤炭工程,2010(6):111-113.