王高高 王偉偉
摘? ?要:針對傳統(tǒng)CAN總線通信系統(tǒng)基于仲裁發(fā)送機(jī)制所存在的通信通道易堵塞、實時性、可靠性差問題,設(shè)計了CAN總線節(jié)點輪詢通信系統(tǒng)。系統(tǒng)CAN總線通信機(jī)制為采用主從控制下的節(jié)點輪詢方式。最后,通過實驗完成了CAN輪詢通信測試,結(jié)果表明,CAN通信實時性高,整機(jī)運行穩(wěn)定、可靠。
關(guān)鍵詞:CAN總線;節(jié)點輪詢;STM32
中圖分類號:TP393.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識碼: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
隨著社會經(jīng)濟(jì)發(fā)展,人們對多機(jī)通信的實時性、可靠性提出了更高的要求。相應(yīng)的,總線通信技術(shù)也緊跟應(yīng)用需求,得到了前所未有的發(fā)展[1,2]。
當(dāng)前在多機(jī)通信領(lǐng)域,常用的控制方式為并行集中式和串行分布式兩種架構(gòu),其中傳統(tǒng)并行集中式通信系統(tǒng)為對主控制器引出多條并行式信號線,實現(xiàn)單個主控制器對多臺從機(jī)運行的控制,這種控制模式通常存在信號線走線占體積大、整機(jī)同步性能差、易受干擾、擴(kuò)展維護(hù)困難等一系列問題[3,4]?;诖锌偩€的多機(jī)通信系統(tǒng),如CAN總線的應(yīng)用,系統(tǒng)整體性能相對于并行集中式有很大的提升,通信線路少、整機(jī)結(jié)構(gòu)簡約、擴(kuò)展能力強。然而,現(xiàn)行基于串行總線的多機(jī)同步通信、控制仍存在實時性、可靠性差等問題[5~7]。系統(tǒng)整機(jī)通信機(jī)制所存在的缺陷,嚴(yán)重阻礙了多機(jī)控制系統(tǒng)的發(fā)展與應(yīng)用。針對上述多機(jī)通信技術(shù)層面與實際應(yīng)用所存在的問題,本文給出了基于CAN總線的多機(jī)輪詢控制系統(tǒng),系統(tǒng)采用CAN總線實時通信算法,實現(xiàn)對多機(jī)運行的實時、同步控制。
1? ?系統(tǒng)架構(gòu)
CAN總線輪詢通信架構(gòu)圖如圖1所示。
系統(tǒng)架構(gòu)主要包括主節(jié)點,CAN總線,子節(jié)點。對系統(tǒng)進(jìn)行調(diào)試時,上位機(jī)與主節(jié)點之間通過PL2303串口通信電路實現(xiàn)通信。
系統(tǒng)的總體功能為實現(xiàn)多機(jī)實時、可靠控制,系統(tǒng)的具體功能為:主節(jié)點接收上位機(jī)發(fā)來的控制命令,并通過CAN總線將控制命令發(fā)送至CAN網(wǎng)絡(luò);子節(jié)點接收到主節(jié)點發(fā)來的控制命令,并執(zhí)行,子節(jié)點根據(jù)接受報文類型(為廣播控制報文時),可回傳響應(yīng)報文;子節(jié)點能夠通過反饋報文將本地微控制器運行信息反饋給主節(jié)點,主節(jié)點再將信息傳輸至上位機(jī)。
2? ?系統(tǒng)控制方法
2.1? ?CAN時鐘同步、節(jié)點輪詢方法
基本CAN總線通過優(yōu)先級仲裁實現(xiàn)通信,當(dāng)總線上有多個節(jié)點需要同時發(fā)送報文時,標(biāo)識符小的報文能夠贏得總線發(fā)送權(quán),標(biāo)識符較大的將競爭失敗。在極端情況下,如果某個節(jié)點總是仲裁失敗,那么會直接導(dǎo)致通信通道堵塞及發(fā)送大延遲[8~10]。
CAN總線時鐘同步通信定義了Level1和Level2兩個級別的時鐘同步方式[11~14]。其中,在Level1模式下,各子節(jié)點收到主節(jié)點周期性發(fā)送至總線的參考消息后,重啟本地時鐘,使系統(tǒng)時間保持同步。
時鐘同步下的節(jié)點輪詢CAN通信系統(tǒng)網(wǎng)絡(luò)中維護(hù)著一個系統(tǒng)信息調(diào)度矩陣,信息矩陣的每行內(nèi)包括獨占、仲裁和空置三種類型的窗口:所有的獨占窗口都被分配給系統(tǒng)的節(jié)點,某個獨占窗口只能對應(yīng)一個CAN節(jié)點,該節(jié)點在這個獨占窗口內(nèi)發(fā)送報文時,不需要進(jìn)行優(yōu)先級仲裁,發(fā)送時,禁用報文重發(fā)功能;仲裁窗口為系統(tǒng)所有節(jié)點提供了一個平等競爭總線的平臺,在這個窗口內(nèi),通過優(yōu)先級仲裁的節(jié)點可以進(jìn)行報文發(fā)送;空置窗口為備用拓展。
本文系統(tǒng)要求能夠?qū)崿F(xiàn)主節(jié)點對四個子節(jié)點的實時、同步控制,生成的信息矩陣共有兩行,如圖2所示。
以信息矩陣作為系統(tǒng)通信調(diào)度的根據(jù),系統(tǒng)在通信時需要進(jìn)行系統(tǒng)信息矩陣循環(huán)掃描、窗口定位、報文傳輸三個過程。矩陣的一行是一個基本掃描周期,在每個基本掃描周期的開始,主節(jié)點作為時鐘參考點先發(fā)送一個全局廣播參考消息。
合理的規(guī)劃基本掃描周期的長度,基本掃描周期太短,在總輪詢節(jié)點數(shù)不變的情況下,主節(jié)點頻繁發(fā)送參考消息,導(dǎo)致總的輪詢時間變長,會影響通信的實時性;基本掃描周期太長,參考消息發(fā)送次數(shù)太少,則有可能導(dǎo)致系統(tǒng)時鐘失去同步。
考慮到標(biāo)準(zhǔn)數(shù)據(jù)幀的幀格式,幀間隔(3位)及CAN總線的位填充機(jī)制,按bit計算出標(biāo)準(zhǔn)數(shù)據(jù)幀單幀傳輸取整后的幀長Bl為(b為數(shù)據(jù)域字節(jié)數(shù)量):
一個通信窗口的時長Ts的取值范圍為:
其中Tb為傳輸一個bit耗費的時長,Tc為一個基本掃描周期的時間長度。
對于數(shù)據(jù)域填充為8個字節(jié)的標(biāo)準(zhǔn)數(shù)據(jù)幀,若通信的波特率設(shè)為250 kbps時,那么一個通信窗口的時長至少應(yīng)設(shè)為0.52 ms,結(jié)合CAN時鐘同步通信規(guī)范和系統(tǒng)調(diào)度延時,將Ts設(shè)為4ms,Tc設(shè)為20 ms。
在每個基本掃描周期內(nèi),通過主節(jié)點參考消息實現(xiàn)系統(tǒng)時鐘同步,主節(jié)點與子節(jié)點實現(xiàn)時鐘同步的具體方式為:主節(jié)點發(fā)送參考消息后使能本地時鐘TIMER2;各子節(jié)點接收到主節(jié)點發(fā)來的參考消息后,提取報文信息,解讀其中包含的同步標(biāo)志和行信息,然后使能本地定時器TIMER2。
系統(tǒng)實現(xiàn)時鐘同步后,各個節(jié)點依次按照信息矩陣的分布進(jìn)行通信,實現(xiàn)輪詢。系統(tǒng)節(jié)點通信實現(xiàn)輪詢的具體方法為各個節(jié)點依照本地定時器產(chǎn)生的時鐘實時判斷本節(jié)點是否已經(jīng)進(jìn)入自己的獨占窗口,并嚴(yán)格控制它可進(jìn)入發(fā)送狀態(tài)的時長Ts,并且,在發(fā)送模式下,關(guān)閉自動重發(fā)功能。
如果節(jié)點未處于信息矩陣規(guī)定的發(fā)送時段內(nèi),則保持為報文接收模式。接收模式下,各個節(jié)點通過濾波器過濾的方式有選擇性的接收CAN總線上的報文。因此,基于時鐘同步下的節(jié)點輪詢CAN通信遵從時域正交原則,各節(jié)點的報文發(fā)送都按信息矩陣的調(diào)度進(jìn)行,實現(xiàn)了對CAN總線的時分多路復(fù)用。
系統(tǒng)主節(jié)點CAN通信程序框圖如圖3所示。在對系統(tǒng)所有節(jié)點時鐘完成同步后,將各節(jié)點本地時鐘設(shè)定為每1ms發(fā)生定時中斷,中斷處理函數(shù)對中斷次數(shù)(counter)進(jìn)行累加刷新。通過掃描counter來判斷系統(tǒng)當(dāng)前處于信息矩陣的哪個通信窗口,并對窗口的時長進(jìn)行控制。
子節(jié)點CAN通信程序框圖如圖4所示(這里給出子節(jié)點1的)。
2.2? ?通信協(xié)議自定義
使用標(biāo)識符長度為11位的標(biāo)準(zhǔn)數(shù)據(jù)幀足以滿足系統(tǒng)數(shù)據(jù)傳輸?shù)男枰?。本文系統(tǒng)CAN總線通信的實現(xiàn)需要進(jìn)行應(yīng)用層功能的個性化設(shè)置。
報文標(biāo)識符bit分配如表1所示。將11個bit劃分為3部分:占3個bit的功能位、占4個bit的發(fā)送節(jié)點編號和占4個bit的接收節(jié)點編號/特殊編號。標(biāo)識符設(shè)定的原則是:11位的高7位不能均為1;各類型報文標(biāo)識符唯一,不產(chǎn)生沖突;具有標(biāo)識作用,即標(biāo)識符具有指代功能。
功能位的具體內(nèi)容設(shè)置如表2所示。
主節(jié)點給子節(jié)點發(fā)送的控制報文包括廣播和點對點兩種形式,廣播通信時所有子節(jié)點均可接收主節(jié)點發(fā)送的報文,且子節(jié)點在收到報文后需做出應(yīng)答,點對點通信為在某一時間段內(nèi)主節(jié)點只和某個子節(jié)點進(jìn)行通信(子節(jié)點無需應(yīng)答)。
節(jié)點編號設(shè)置如表3所示。
節(jié)點編號設(shè)置須考慮到節(jié)點通信、控制的重要性及優(yōu)先級要求,對各個節(jié)點依次進(jìn)行編號和排序。特殊編號是各個子節(jié)點設(shè)置全局消息及廣播控制濾波器的依據(jù)(這里需要用到0x00、0x01兩個特殊編號,要實現(xiàn)多種方式的一點對多點的廣播通信,可繼續(xù)擴(kuò)展特殊編號)。
數(shù)據(jù)域是整個報文最主要的構(gòu)成之一,它包含報文所要傳輸?shù)闹匾刂菩畔ⅲㄗ疃啻娣?字節(jié)的信息)。按數(shù)據(jù)域所攜帶的數(shù)據(jù)內(nèi)容,可將數(shù)據(jù)幀分為如下五種類型,如表4所示。
3? ?系統(tǒng)硬件
3.1? ?主/子節(jié)點微控制器電路
微控制器電路芯片使用基于Cortex-M3內(nèi)核的32位單片機(jī)STM32F103ZET6,該單片機(jī)時鐘頻率高達(dá)72 MHz,多達(dá)11個定時器;支持嵌套矢量中斷控制器(NVIC),可實現(xiàn)極短的中斷處理延遲,最大限度的減少進(jìn)入中斷時系統(tǒng)的資源占用量,提高處理中斷的速度;支持外部中斷/事件控制器(EXTI),對應(yīng)的邊沿檢測器可實現(xiàn)輸入信號的上升沿、下降沿的檢測。
3.2? ?PL2303串口通信電路
主節(jié)點與上位機(jī)之間使用一個PL2303串口通信電路來實現(xiàn)通信。PL2303芯片,兼容USB 2.0規(guī)范,支持串行全雙工發(fā)送(TXD)和接收(RXD),傳輸?shù)臄?shù)據(jù)可為5~8個數(shù)據(jù)位,傳輸波特率范圍75bps~6Mbps。使用串口通信電路能夠?qū)⑸衔粰C(jī)發(fā)來的數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)的單片機(jī)TTL電平;又能將主節(jié)點發(fā)來的串行格式的數(shù)據(jù)轉(zhuǎn)變?yōu)閁SB的信息流格式,發(fā)給上位機(jī)。
3.3? ?CAN通信電路
CAN收發(fā)器使用的是SN65HVD230,CAN通信電路圖如圖5所示。收發(fā)器的8號腳通過0Ω電阻接地,使收發(fā)器工作于全速狀態(tài)。
4? ?系統(tǒng)軟件
4.1? ?主節(jié)點軟件
主節(jié)點軟件使用MDK編寫,程序框圖如圖6所示。
主節(jié)點軟件功能設(shè)計為:同步系統(tǒng)時鐘;在對系統(tǒng)進(jìn)行上位機(jī)環(huán)境下的調(diào)試時,接收PC串口數(shù)據(jù),提取數(shù)據(jù)中的控制信息,按照信息矩陣時序以報文的形式,將各個子節(jié)點的控制命令發(fā)送至CAN總線;接收子節(jié)點狀態(tài)反饋及回傳的命令執(zhí)行確認(rèn)報文,通過串口,以數(shù)據(jù)流的形式將接收到的子節(jié)點的信息發(fā)送至上位機(jī)。
4.2? ?子節(jié)點軟件
子節(jié)點軟件的首要功能是實現(xiàn)報文的接收,并根據(jù)接收到的報文類型,可選擇給主節(jié)點回傳一個響應(yīng)報文(接收到廣播報文時);子節(jié)點運行異常時,子節(jié)點按照信息矩陣調(diào)度要求,將狀態(tài)以反饋報文的形式發(fā)給主節(jié)點。子節(jié)點程序框圖如圖7所示。
5? ?系統(tǒng)測試與結(jié)果分析
為了驗證系統(tǒng)CAN節(jié)點輪詢通信方法的實時性及可靠性,通過EmbededDebug軟件實現(xiàn)系統(tǒng)在上位機(jī)環(huán)境下的運行測試。測試時,使用USB/CAN adapter替代主節(jié)點與4個子節(jié)點組成CAN網(wǎng)絡(luò),并將USB/CAN adapter連接至PC機(jī),按照本文提出的CAN實時通信方法時序要求,設(shè)置報文信息和發(fā)送延時。實現(xiàn)對自定義CAN報文、時序在PC機(jī)環(huán)境下的收、發(fā)測試,從而實現(xiàn)各種數(shù)據(jù)的監(jiān)控與比較。
按照信息矩陣調(diào)度要求,設(shè)定USB/CAN adapter在一個完整輪詢周期內(nèi)發(fā)送5次報文,軟件的循環(huán)發(fā)送間隔設(shè)為16 ms,CAN通信波特率設(shè)為500Kbps,啟用定時發(fā)送功能。EmbededDebug軟件監(jiān)測到的數(shù)據(jù)收、發(fā)狀態(tài)如圖8所示。
圖8中標(biāo)識符為0x10的報文為參考消息,參考消息中,Data0為時鐘同步標(biāo)志,Data1為信息矩陣行定位標(biāo)志;標(biāo)識符為0x111的報文為廣播控制報文;標(biāo)識符為0x212、0x213的報文為點對點控制報文;標(biāo)識符為0x421~0x451的報文為響應(yīng)報文。
數(shù)字示波器監(jiān)測到CAN總線上的信號傳輸波形如圖9、10所示(這里給出標(biāo)識符為0x213及標(biāo)識符為0x421的報文的波形)。
連續(xù)收發(fā)測試結(jié)果表明,系統(tǒng)通信正常、工作可靠,實現(xiàn)了CAN總線多個節(jié)點在上位機(jī)環(huán)境下以自定義報文的輪詢通信,即整個系統(tǒng)具有傳輸實時性高、可靠性好、抗干擾能力強的特點,整機(jī)測試結(jié)果表明,系統(tǒng)達(dá)到了預(yù)期的設(shè)計目標(biāo)。
6? ?結(jié)? ?論
基于CAN總線的輪詢通信系統(tǒng)作為應(yīng)對多機(jī)主從控制的理想選擇,整機(jī)具有擴(kuò)展方便、工作可靠、運行靈活等優(yōu)點,克服了目前常用的并行集中式多機(jī)控制的缺陷、傳統(tǒng)分布式串行總線控制的不足等問題,提高了多機(jī)通信的實時性和可靠性。
參考文獻(xiàn)
[1]? ? 王邦繼,劉慶想,李相強,等. CAN總線應(yīng)用層協(xié)議的研究與實現(xiàn)[J]. 計算機(jī)工程與應(yīng)用,2011,47(20):14—16.
[2]? ? 李曉靜,張侃諭. 基于CAN總線的溫室群控系統(tǒng)設(shè)計與實現(xiàn)[J]. 計算機(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]. 中國航空學(xué)報:英文版,2013, 26(1):171—178.
[4]? ? 劉濤. 基于CAN總線的多電機(jī)協(xié)調(diào)運動控制系統(tǒng)研究[J]. 機(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總線應(yīng)用于船舶機(jī)艙自動化系統(tǒng)的實時性建模仿真及優(yōu)化[J]. 中國造船,2015(1):203—209.
[7]? ? 王寧,黃梅,馬添翼,等. 基于CAN總線的微電網(wǎng)監(jiān)控系統(tǒng)設(shè)計[J]. 電測與儀表,2011,48(5):37—40.
[8]? ? 蔣俊祁. 基于嵌入式的分布式電源節(jié)能控制系統(tǒng)的設(shè)計與實現(xiàn)[J]. 現(xiàn)代電子技術(shù),2017,40(6):88—92.
[9]? ? 王寧,黃梅,馬添翼,等. 基于CAN總線的微電網(wǎng)監(jiān)控系統(tǒng)設(shè)計[J]. 電測與儀表,2011,48(5):37—40.
[10]? 吳桂清. 基于STM32F207與CAN總線的車載監(jiān)測系統(tǒng)設(shè)計[J]. 電源技術(shù),2015,39(2):407—409.
[11]? 劉向明,方建安. CAN總線網(wǎng)絡(luò)的實時性研究和改進(jìn)[J]. 現(xiàn)代電子技術(shù),2011,34(22):46—49.
[12]? 陳園,趙轉(zhuǎn)萍. 基于CAN總線的航空電纜測試系統(tǒng)分布機(jī)研究[J]. 現(xiàn)代電子技術(shù),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總線多軸伺服控制系統(tǒng)的研究與應(yīng)用[J]. 電氣傳動,2016,46(2):60—64.