王高高 王偉偉



摘? ?要:針對傳統CAN總線通信系統基于仲裁發送機制所存在的通信通道易堵塞、實時性、可靠性差問題,設計了CAN總線節點輪詢通信系統。系統CAN總線通信機制為采用主從控制下的節點輪詢方式。最后,通過實驗完成了CAN輪詢通信測試,結果表明,CAN通信實時性高,整機運行穩定、可靠。
關鍵詞:CAN總線;節點輪詢;STM32
中圖分類號:TP393.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻標識碼:A
Design of Polling Communication System Based on CAN Bus
WANG Gao-gao1?WANG wei-wei2
(1. Fengtai County Power Supply Co.,State Grid Anhui Electric Power Co.,Ltd.,Huainan,Anhui 232100,China;
2. The First Construction Co.,Ltd. of China Construction First Group,Hefei,Anhui 230031,China)
Abstract:Aiming at the problems of communication channel blockage,poor real-time and low reliability for traditional communication system of CAN bus based on arbitration transmission mechanism,a CAN bus node-polling communication system is designed. The communication mechanism of the system adopts node-polling of CAN bus under master-slave control. Finally,the CAN polling communication test is completed through the experiment. The results show that the CAN communication has a high real-time performance and the whole machine runs stably and reliably.
Key words:CAN bus;node polling;STM32
隨著社會經濟發展,人們對多機通信的實時性、可靠性提出了更高的要求。相應的,總線通信技術也緊跟應用需求,得到了前所未有的發展[1,2]。
當前在多機通信領域,常用的控制方式為并行集中式和串行分布式兩種架構,其中傳統并行集中式通信系統為對主控制器引出多條并行式信號線,實現單個主控制器對多臺從機運行的控制,這種控制模式通常存在信號線走線占體積大、整機同步性能差、易受干擾、擴展維護困難等一系列問題[3,4]。基于串行總線的多機通信系統,如CAN總線的應用,系統整體性能相對于并行集中式有很大的提升,通信線路少、整機結構簡約、擴展能力強。然而,現行基于串行總線的多機同步通信、控制仍存在實時性、可靠性差等問題[5~7]。系統整機通信機制所存在的缺陷,嚴重阻礙了多機控制系統的發展與應用。針對上述多機通信技術層面與實際應用所存在的問題,本文給出了基于CAN總線的多機輪詢控制系統,系統采用CAN總線實時通信算法,實現對多機運行的實時、同步控制。
1? ?系統架構
CAN總線輪詢通信架構圖如圖1所示。
系統架構主要包括主節點,CAN總線,子節點。對系統進行調試時,上位機與主節點之間通過PL2303串口通信電路實現通信。
系統的總體功能為實現多機實時、可靠控制,系統的具體功能為:主節點接收上位機發來的控制命令,并通過CAN總線將控制命令發送至CAN網絡;子節點接收到主節點發來的控制命令,并執行,子節點根據接受報文類型(為廣播控制報文時),可回傳響應報文;子節點能夠通過反饋報文將本地微控制器運行信息反饋給主節點,主節點再將信息傳輸至上位機。
2? ?系統控制方法
2.1? ?CAN時鐘同步、節點輪詢方法
基本CAN總線通過優先級仲裁實現通信,當總線上有多個節點需要同時發送報文時,標識符小的報文能夠贏得總線發送權,標識符較大的將競爭失敗。在極端情況下,如果某個節點總是仲裁失敗,那么會直接導致通信通道堵塞及發送大延遲[8~10]。
CAN總線時鐘同步通信定義了Level1和Level2兩個級別的時鐘同步方式[11~14]。其中,在Level1模式下,各子節點收到主節點周期性發送至總線的參考消息后,重啟本地時鐘,使系統時間保持同步。
時鐘同步下的節點輪詢CAN通信系統網絡中維護著一個系統信息調度矩陣,信息矩陣的每行內包括獨占、仲裁和空置三種類型的窗口:所有的獨占窗口都被分配給系統的節點,某個獨占窗口只能對應一個CAN節點,該節點在這個獨占窗口內發送報文時,不需要進行優先級仲裁,發送時,禁用報文重發功能;仲裁窗口為系統所有節點提供了一個平等競爭總線的平臺,在這個窗口內,通過優先級仲裁的節點可以進行報文發送;空置窗口為備用拓展。
本文系統要求能夠實現主節點對四個子節點的實時、同步控制,生成的信息矩陣共有兩行,如圖2所示。
以信息矩陣作為系統通信調度的根據,系統在通信時需要進行系統信息矩陣循環掃描、窗口定位、報文傳輸三個過程。矩陣的一行是一個基本掃描周期,在每個基本掃描周期的開始,主節點作為時鐘參考點先發送一個全局廣播參考消息。
合理的規劃基本掃描周期的長度,基本掃描周期太短,在總輪詢節點數不變的情況下,主節點頻繁發送參考消息,導致總的輪詢時間變長,會影響通信的實時性;基本掃描周期太長,參考消息發送次數太少,則有可能導致系統時鐘失去同步。
考慮到標準數據幀的幀格式,幀間隔(3位)及CAN總線的位填充機制,按bit計算出標準數據幀單幀傳輸取整后的幀長Bl為(b為數據域字節數量):
一個通信窗口的時長Ts的取值范圍為:
其中Tb為傳輸一個bit耗費的時長,Tc為一個基本掃描周期的時間長度。
對于數據域填充為8個字節的標準數據幀,若通信的波特率設為250 kbps時,那么一個通信窗口的時長至少應設為0.52 ms,結合CAN時鐘同步通信規范和系統調度延時,將Ts設為4ms,Tc設為20 ms。
在每個基本掃描周期內,通過主節點參考消息實現系統時鐘同步,主節點與子節點實現時鐘同步的具體方式為:主節點發送參考消息后使能本地時鐘TIMER2;各子節點接收到主節點發來的參考消息后,提取報文信息,解讀其中包含的同步標志和行信息,然后使能本地定時器TIMER2。
系統實現時鐘同步后,各個節點依次按照信息矩陣的分布進行通信,實現輪詢。系統節點通信實現輪詢的具體方法為各個節點依照本地定時器產生的時鐘實時判斷本節點是否已經進入自己的獨占窗口,并嚴格控制它可進入發送狀態的時長Ts,并且,在發送模式下,關閉自動重發功能。
如果節點未處于信息矩陣規定的發送時段內,則保持為報文接收模式。接收模式下,各個節點通過濾波器過濾的方式有選擇性的接收CAN總線上的報文。因此,基于時鐘同步下的節點輪詢CAN通信遵從時域正交原則,各節點的報文發送都按信息矩陣的調度進行,實現了對CAN總線的時分多路復用。
系統主節點CAN通信程序框圖如圖3所示。在對系統所有節點時鐘完成同步后,將各節點本地時鐘設定為每1ms發生定時中斷,中斷處理函數對中斷次數(counter)進行累加刷新。通過掃描counter來判斷系統當前處于信息矩陣的哪個通信窗口,并對窗口的時長進行控制。
子節點CAN通信程序框圖如圖4所示(這里給出子節點1的)。
2.2? ?通信協議自定義
使用標識符長度為11位的標準數據幀足以滿足系統數據傳輸的需要。本文系統CAN總線通信的實現需要進行應用層功能的個性化設置。
報文標識符bit分配如表1所示。將11個bit劃分為3部分:占3個bit的功能位、占4個bit的發送節點編號和占4個bit的接收節點編號/特殊編號。標識符設定的原則是:11位的高7位不能均為1;各類型報文標識符唯一,不產生沖突;具有標識作用,即標識符具有指代功能。
功能位的具體內容設置如表2所示。
主節點給子節點發送的控制報文包括廣播和點對點兩種形式,廣播通信時所有子節點均可接收主節點發送的報文,且子節點在收到報文后需做出應答,點對點通信為在某一時間段內主節點只和某個子節點進行通信(子節點無需應答)。
節點編號設置如表3所示。
節點編號設置須考慮到節點通信、控制的重要性及優先級要求,對各個節點依次進行編號和排序。特殊編號是各個子節點設置全局消息及廣播控制濾波器的依據(這里需要用到0x00、0x01兩個特殊編號,要實現多種方式的一點對多點的廣播通信,可繼續擴展特殊編號)。
數據域是整個報文最主要的構成之一,它包含報文所要傳輸的重要控制信息(最多存放8字節的信息)。按數據域所攜帶的數據內容,可將數據幀分為如下五種類型,如表4所示。
3? ?系統硬件
3.1? ?主/子節點微控制器電路
微控制器電路芯片使用基于Cortex-M3內核的32位單片機STM32F103ZET6,該單片機時鐘頻率高達72 MHz,多達11個定時器;支持嵌套矢量中斷控制器(NVIC),可實現極短的中斷處理延遲,最大限度的減少進入中斷時系統的資源占用量,提高處理中斷的速度;支持外部中斷/事件控制器(EXTI),對應的邊沿檢測器可實現輸入信號的上升沿、下降沿的檢測。
3.2? ?PL2303串口通信電路
主節點與上位機之間使用一個PL2303串口通信電路來實現通信。PL2303芯片,兼容USB 2.0規范,支持串行全雙工發送(TXD)和接收(RXD),傳輸的數據可為5~8個數據位,傳輸波特率范圍75bps~6Mbps。使用串口通信電路能夠將上位機發來的數據轉換為標準的單片機TTL電平;又能將主節點發來的串行格式的數據轉變為USB的信息流格式,發給上位機。
3.3? ?CAN通信電路
CAN收發器使用的是SN65HVD230,CAN通信電路圖如圖5所示。收發器的8號腳通過0Ω電阻接地,使收發器工作于全速狀態。
4? ?系統軟件
4.1? ?主節點軟件
主節點軟件使用MDK編寫,程序框圖如圖6所示。
主節點軟件功能設計為:同步系統時鐘;在對系統進行上位機環境下的調試時,接收PC串口數據,提取數據中的控制信息,按照信息矩陣時序以報文的形式,將各個子節點的控制命令發送至CAN總線;接收子節點狀態反饋及回傳的命令執行確認報文,通過串口,以數據流的形式將接收到的子節點的信息發送至上位機。
4.2? ?子節點軟件
子節點軟件的首要功能是實現報文的接收,并根據接收到的報文類型,可選擇給主節點回傳一個響應報文(接收到廣播報文時);子節點運行異常時,子節點按照信息矩陣調度要求,將狀態以反饋報文的形式發給主節點。子節點程序框圖如圖7所示。
5? ?系統測試與結果分析
為了驗證系統CAN節點輪詢通信方法的實時性及可靠性,通過EmbededDebug軟件實現系統在上位機環境下的運行測試。測試時,使用USB/CAN adapter替代主節點與4個子節點組成CAN網絡,并將USB/CAN adapter連接至PC機,按照本文提出的CAN實時通信方法時序要求,設置報文信息和發送延時。實現對自定義CAN報文、時序在PC機環境下的收、發測試,從而實現各種數據的監控與比較。
按照信息矩陣調度要求,設定USB/CAN adapter在一個完整輪詢周期內發送5次報文,軟件的循環發送間隔設為16 ms,CAN通信波特率設為500Kbps,啟用定時發送功能。EmbededDebug軟件監測到的數據收、發狀態如圖8所示。
圖8中標識符為0x10的報文為參考消息,參考消息中,Data0為時鐘同步標志,Data1為信息矩陣行定位標志;標識符為0x111的報文為廣播控制報文;標識符為0x212、0x213的報文為點對點控制報文;標識符為0x421~0x451的報文為響應報文。
數字示波器監測到CAN總線上的信號傳輸波形如圖9、10所示(這里給出標識符為0x213及標識符為0x421的報文的波形)。
連續收發測試結果表明,系統通信正常、工作可靠,實現了CAN總線多個節點在上位機環境下以自定義報文的輪詢通信,即整個系統具有傳輸實時性高、可靠性好、抗干擾能力強的特點,整機測試結果表明,系統達到了預期的設計目標。
6? ?結? ?論
基于CAN總線的輪詢通信系統作為應對多機主從控制的理想選擇,整機具有擴展方便、工作可靠、運行靈活等優點,克服了目前常用的并行集中式多機控制的缺陷、傳統分布式串行總線控制的不足等問題,提高了多機通信的實時性和可靠性。
參考文獻
[1]? ? 王邦繼,劉慶想,李相強,等. CAN總線應用層協議的研究與實現[J]. 計算機工程與應用,2011,47(20):14—16.
[2]? ? 李曉靜,張侃諭. 基于CAN總線的溫室群控系統設計與實現[J]. 計算機工程,2010,36(1):245—247.
[3]? ? XIA J,ZHANG C,BAI R,et al. Real-time and reliability analysis of time-triggered CAN-bus[J]. 中國航空學報:英文版,2013, 26(1):171—178.
[4]? ? 劉濤. 基于CAN總線的多電機協調運動控制系統研究[J]. 機床與液壓,2010,38(3):75—77.
[5]? ? LUO X,LIU Y,YU Y,et al. Dynamic bus dispatching using multiple types of real-time information[J]. Transport Metrica B,2018(2):1—27.
[6]? ? 吳杰長,蘇攀,郝佳. TTCAN總線應用于船舶機艙自動化系統的實時性建模仿真及優化[J]. 中國造船,2015(1):203—209.
[7]? ? 王寧,黃梅,馬添翼,等. 基于CAN總線的微電網監控系統設計[J]. 電測與儀表,2011,48(5):37—40.
[8]? ? 蔣俊祁. 基于嵌入式的分布式電源節能控制系統的設計與實現[J]. 現代電子技術,2017,40(6):88—92.
[9]? ? 王寧,黃梅,馬添翼,等. 基于CAN總線的微電網監控系統設計[J]. 電測與儀表,2011,48(5):37—40.
[10]? 吳桂清. 基于STM32F207與CAN總線的車載監測系統設計[J]. 電源技術,2015,39(2):407—409.
[11]? 劉向明,方建安. CAN總線網絡的實時性研究和改進[J]. 現代電子技術,2011,34(22):46—49.
[12]? 陳園,趙轉萍. 基于CAN總線的航空電纜測試系統分布機研究[J]. 現代電子技術,2011,34(6):25—27.
[13]? MARCHCHETTI M,STABILI D. Anomaly detection of CAN bus messages through analysis of ID sequences[C] Intelligent Vehicles Symposium. IEEE,2017:1577— 1583.
[14]? 強明輝. 基于CAN總線多軸伺服控制系統的研究與應用[J]. 電氣傳動,2016,46(2):60—64.