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

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

圖2 CAN控制電路圖Fig.2 CAN control circuit
MCP2515與STC12C5410AD通過6條連接線進行通信。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連接,進行CAN報文的發送和接收。
編碼開關S1電路用于采集編碼信息及設置CAN總線的波特率。電路主要由一個10 kΩ排阻(P6)和一個編碼開關組成,開關電路如圖3所示。

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

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

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