柴文峰,丁學(xué)明
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
基于STM32單片機(jī)CAN通信控制網(wǎng)絡(luò)設(shè)計(jì)
柴文峰,丁學(xué)明
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
通過(guò)分析點(diǎn)對(duì)點(diǎn)通信方式控制網(wǎng)絡(luò)的缺陷及總線的發(fā)展?fàn)顩r,利用CAN總線的特點(diǎn)和優(yōu)勢(shì),設(shè)計(jì)了基于廣播方式通信控制網(wǎng)絡(luò)。采用C#編寫(xiě)上位機(jī)界面做控制器,智能節(jié)點(diǎn)(下位機(jī))作為執(zhí)行器,根據(jù)CANKingdom應(yīng)用層協(xié)議,制定節(jié)點(diǎn)間相互通信規(guī)則,將發(fā)送的控制命令以幀的形式進(jìn)行打包,設(shè)計(jì)節(jié)點(diǎn)控制算法執(zhí)行相應(yīng)功能。文中設(shè)計(jì)的基于廣播式CAN通信網(wǎng)絡(luò)實(shí)現(xiàn)了對(duì)40個(gè)節(jié)點(diǎn)的數(shù)據(jù)通信和現(xiàn)場(chǎng)實(shí)時(shí)監(jiān)控功能。
CAN總線;通信協(xié)議;上位機(jī)界面;實(shí)時(shí)監(jiān)控
點(diǎn)對(duì)點(diǎn)方式通信的缺陷是只有兩個(gè)設(shè)備之間進(jìn)行信息交換,只有一個(gè)設(shè)備能接受到信息。 電子技術(shù)的發(fā)展使得電控系統(tǒng)中電子設(shè)備日益增多,這些電子設(shè)備之間大多數(shù)要求相互通信,簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)式通信使得電控系統(tǒng)電氣連接線長(zhǎng)度和接頭數(shù)增加,降低了電控系統(tǒng)的穩(wěn)定性和可維護(hù)性。CAN總線是現(xiàn)場(chǎng)總線的一種,最早是由德國(guó)博士公司設(shè)計(jì)用來(lái)解決汽車(chē)通信問(wèn)題[1]。CAN采用基于報(bào)文的通信方式,不同信息以“廣播”的形式發(fā)送給所有節(jié)點(diǎn)。 節(jié)點(diǎn)本身決定對(duì)報(bào)文是否做進(jìn)一步處理。新節(jié)點(diǎn)可以隨時(shí)方便的加入現(xiàn)有的系統(tǒng),不需要對(duì)所有節(jié)點(diǎn)進(jìn)行重新編程來(lái)識(shí)別新的節(jié)點(diǎn)[2]。本文利用CAN總線的這一特點(diǎn),設(shè)計(jì)出基于STM32單片機(jī)CAN通信控制網(wǎng)絡(luò)。
CAN總線通信網(wǎng)絡(luò)主要由智能節(jié)點(diǎn),雙絞線,上位機(jī)組成。上位機(jī)是用來(lái)顯示節(jié)點(diǎn)狀態(tài),以及發(fā)送實(shí)時(shí)命令。雙絞線是數(shù)據(jù)傳輸?shù)耐ǖ?,能抑制共模干擾。節(jié)點(diǎn)由連接在CAN總線上的步進(jìn)電機(jī)、直流電機(jī)、燈、電表以及相關(guān)電路組成。CAN總線通信網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 CAN總線通信網(wǎng)絡(luò)結(jié)構(gòu)
本文采用內(nèi)嵌CAN控制器的STM3210x系列單片機(jī),節(jié)點(diǎn)硬件設(shè)計(jì)避免外接CAN控制器。簡(jiǎn)化外圍電路,減少系統(tǒng)內(nèi)部噪聲,另一方面CAN總線采用非破壞性總線仲裁機(jī)制,多節(jié)點(diǎn)同時(shí)發(fā)送數(shù)據(jù),優(yōu)先級(jí)高的節(jié)點(diǎn)先發(fā)送數(shù)據(jù),減少了總線仲裁沖突時(shí)間,在多負(fù)載情況下也不至于網(wǎng)絡(luò)癱瘓[3]。系統(tǒng)具有較強(qiáng)的穩(wěn)定性。CAN總線中的數(shù)據(jù),以數(shù)據(jù)幀的形式進(jìn)行傳輸,當(dāng)發(fā)送的校驗(yàn)碼與接收的校驗(yàn)碼相同時(shí),數(shù)據(jù)才能發(fā)送成功,否則重新發(fā)送,出錯(cuò)率低。
智能節(jié)點(diǎn)主要由傳感器,信號(hào)調(diào)理電路,微控制器,CAN收發(fā)器,以及外圍電路等構(gòu)成。其節(jié)點(diǎn)結(jié)構(gòu)框圖如圖2所示。
圖2 節(jié)點(diǎn)結(jié)構(gòu)框圖
CAN總線最多可連接110個(gè)智能節(jié)點(diǎn),節(jié)點(diǎn)數(shù)由驅(qū)動(dòng)電路決定。CAN總線在不關(guān)閉總線的情況下,可實(shí)現(xiàn)任意節(jié)點(diǎn)的連接或者拆除??筛鶕?jù)被測(cè)對(duì)象的物理特性,改變測(cè)試節(jié)點(diǎn)前段傳感器類(lèi)型和信號(hào)調(diào)理電路便可以使用不同類(lèi)型的物理量的測(cè)試。根據(jù)被測(cè)對(duì)象的物理特性,設(shè)計(jì)信號(hào)調(diào)理電路的放大倍數(shù)和濾波特性,然后將采集的信號(hào)發(fā)送給微處理器,A/D轉(zhuǎn)換,并將轉(zhuǎn)換的數(shù)據(jù)發(fā)給微處理器內(nèi)的CAN控制器,在CAN控制器的作用下將采集到的數(shù)據(jù)發(fā)給CAN總線。
CAN表達(dá)一個(gè)信號(hào),使用的是兩條差分信號(hào)線。簡(jiǎn)潔的物理層決定了CAN需要一個(gè)復(fù)雜的協(xié)議[4]。
CAN總線上的數(shù)據(jù)主要以幀的形式進(jìn)行通信的。在原始數(shù)據(jù)段的前面加上傳輸?shù)钠鹗紭?biāo)簽,片選標(biāo)簽,控制標(biāo)簽,在數(shù)據(jù)段的末尾加上CRC校驗(yàn)標(biāo)簽,應(yīng)答標(biāo)簽和傳輸結(jié)束標(biāo)簽。這些內(nèi)容以特定的格式打包好,便可用一個(gè)通道表達(dá)各種信號(hào)。這個(gè)數(shù)據(jù)包被傳送到其他設(shè)備,只要按這些設(shè)備的格式去解讀,便可讀出原來(lái)數(shù)據(jù)。這個(gè)數(shù)據(jù)包稱(chēng)為CAN的數(shù)據(jù)幀主要形式。CAN的數(shù)據(jù)幀的格式如表1所示。
表1 CAN數(shù)據(jù)幀結(jié)構(gòu)
CAN規(guī)定了5種類(lèi)型的幀[5]。數(shù)據(jù)幀是用于發(fā)送單元向接受單元傳輸數(shù)據(jù)的幀,遙控幀用于接受單元向具有相同ID的發(fā)送單元請(qǐng)求數(shù)據(jù)的幀,錯(cuò)誤幀用于檢查錯(cuò)誤時(shí)向其他單元通知錯(cuò)誤的幀,過(guò)載幀用于接收單元通知其尚未做好接收準(zhǔn)備的幀,幀間隔用于將數(shù)據(jù)幀和遙控幀與前面幀分離開(kāi)來(lái)的幀[6]。
節(jié)點(diǎn)的軟件設(shè)計(jì)主要包括3個(gè)部分CAN節(jié)點(diǎn)初始化程序,報(bào)文發(fā)送程序,報(bào)文接受程序。本文中系統(tǒng)采用結(jié)構(gòu)化程序設(shè)計(jì),使其具有較好的模塊性和可移植性,可較方便的編程重組,應(yīng)用到不同的環(huán)境[7-8]。
3.1 初始化程序
初始化程序設(shè)置主要包括工作方式的設(shè)置,接受濾波方式的設(shè)置,接受屏蔽寄存器設(shè)置,接受代寄存器的設(shè)置,波特率參數(shù)的設(shè)置和中斷寄存器的設(shè)置??紤]系統(tǒng)中40個(gè)節(jié)點(diǎn)進(jìn)行通信,設(shè)置低波特率以保證節(jié)點(diǎn)間通信正常。波特率設(shè)置
CANbps=Fpclk/bpr*(seg1+seg2+sjw)
本文設(shè)計(jì)取Fpclk bpr seg1 seg2 sjw分別為36M9781。波特率值設(shè)置為250 kHz。
3.2 報(bào)文的發(fā)送
程序初始化完畢后,將報(bào)文的幾個(gè)重要成員 定義一個(gè)結(jié)構(gòu)體內(nèi)。然后將報(bào)文的幀類(lèi)型,,發(fā)送報(bào)文的格式,控制段的長(zhǎng)度及數(shù)據(jù)段的內(nèi)容按照協(xié)議規(guī)范進(jìn)行函數(shù)打包。發(fā)送緩沖器不為空時(shí)執(zhí)行別的程序,發(fā)送緩沖器為空時(shí),調(diào)用庫(kù)函數(shù)CAN_Transmit()將打包好的報(bào)文發(fā)送到CAN通信網(wǎng)絡(luò)中。當(dāng)多個(gè)報(bào)文同時(shí)發(fā)送時(shí),CAN總線仲裁機(jī)制會(huì)依據(jù)幀ID對(duì)應(yīng)位進(jìn)行仲裁,顯性位優(yōu)先發(fā)送,隱性位進(jìn)入發(fā)送等待。發(fā)送請(qǐng)方式即可用中斷方式,也可用查詢(xún)方式。發(fā)送程序的算法設(shè)計(jì)如圖3所示。
圖3 底層報(bào)文發(fā)送程序算法設(shè)計(jì)
3.3 報(bào)文的接收
報(bào)文的接受是CAN控制器依據(jù)議的規(guī)范自身進(jìn)行的,當(dāng)接受相應(yīng)標(biāo)志位置位,進(jìn)入接受中斷程序。接受緩沖器不為空時(shí)執(zhí)行別的程序,接受緩沖器為空時(shí),調(diào)用CAN_Recieve(CAN1CAN_FIFO0,&RxMesaages)函數(shù)進(jìn)行接收。接受的報(bào)文被放在RXBuffer中。然后進(jìn)行CRC校驗(yàn),判斷接受是否成功。接受成功時(shí),當(dāng)幀的ID與需要處理該幀數(shù)據(jù)的CAN節(jié)點(diǎn)地址相同時(shí),根據(jù)報(bào)文的內(nèi)容,執(zhí)行該節(jié)點(diǎn)動(dòng)作。接受報(bào)文的程序算法設(shè)計(jì),如圖4所示。
接受程序即可采用查詢(xún)方式接受,也可采用中斷的方式接受。采用查詢(xún)方式接受,主要通過(guò)不斷查詢(xún)相關(guān)寄存器的狀態(tài)來(lái)實(shí)現(xiàn)幀的接受。采用中斷方式接受,當(dāng)接受相應(yīng)標(biāo)志位置位,進(jìn)入接受中斷程序,準(zhǔn)確度高,本文采用中斷接受方式。
圖4 底層報(bào)文接受程序算法設(shè)計(jì)
3.4 上位機(jī)界面程序設(shè)計(jì)
本文用C#語(yǔ)言編寫(xiě)上位機(jī)界面,用CAN卡連接上位機(jī)和下位機(jī)通信,實(shí)現(xiàn)上位機(jī)與節(jié)點(diǎn)間數(shù)據(jù)通信以及對(duì)節(jié)點(diǎn)狀態(tài)實(shí)時(shí)監(jiān)控[9-13]。上位機(jī)界面設(shè)計(jì)主要包括系統(tǒng)設(shè)置和查詢(xún)?nèi)霂?kù)兩個(gè)模塊。
系統(tǒng)設(shè)置包括參數(shù)上傳設(shè)置,節(jié)點(diǎn)管理設(shè)置,CAN參數(shù)設(shè)置。上傳參數(shù)設(shè)置,用來(lái)更新和存儲(chǔ)下位機(jī)節(jié)點(diǎn)數(shù)據(jù)。節(jié)點(diǎn)管理設(shè)置用來(lái)更新保存節(jié)點(diǎn)狀態(tài)。CAN參數(shù)設(shè)置用來(lái)設(shè)置端口號(hào)及其波特率[14-15]。
查詢(xún)?nèi)霂?kù)完成上位機(jī)與下位機(jī)之間通信,將采集到得節(jié)點(diǎn)狀態(tài)信息保存在數(shù)據(jù)庫(kù)中,并在上位機(jī)上顯示。啟動(dòng)軟件后,系統(tǒng)會(huì)自動(dòng)查詢(xún)下位機(jī)節(jié)點(diǎn)的狀態(tài)[16],將查詢(xún)的結(jié)果在上位機(jī)上顯示。查詢(xún)?nèi)霂?kù)控制算法主流程圖如圖5所示。
圖5 查詢(xún)?nèi)霂?kù)模塊主流程圖
采用多線程查詢(xún)方式,通過(guò)不同路徑來(lái)查詢(xún)節(jié)點(diǎn)狀態(tài),提高查詢(xún)速率。多線程查詢(xún)算法設(shè)計(jì)如圖6所示。
圖6 多線程查詢(xún)算法流程圖
上位機(jī)界面主要實(shí)現(xiàn)對(duì)10個(gè)步進(jìn)電機(jī)控制,10個(gè)直流電機(jī)控制,10個(gè)LED(開(kāi)關(guān)量)控制,10電表控制及對(duì)這40個(gè)節(jié)點(diǎn)的狀態(tài)顯示。通訊正常顯示綠燈,通訊錯(cuò)誤顯示紅燈,上位機(jī)界面,如圖7所示。
圖7 上位機(jī)界面
程序啟動(dòng)后,系統(tǒng)進(jìn)入查詢(xún)主界面,自動(dòng)運(yùn)行查詢(xún)?nèi)霂?kù)模塊,該模塊通過(guò)CAN卡將CAN總線各個(gè)節(jié)點(diǎn)的狀態(tài)信息處理存儲(chǔ)在數(shù)據(jù)庫(kù)中,并將各個(gè)節(jié)點(diǎn)的狀態(tài)在上位機(jī)上顯示。采用多線程查詢(xún)方式能實(shí)時(shí)準(zhǔn)確顯示控制節(jié)點(diǎn)的狀態(tài)信息及迅速的發(fā)送控制命令。點(diǎn)擊節(jié)點(diǎn)控制任務(wù)欄步進(jìn)電機(jī)控制,直流電機(jī)控制,電表控制,LED控制,彈出圖7~圖10窗口然后對(duì)應(yīng)節(jié)點(diǎn)進(jìn)行控制。
圖8 步進(jìn)電機(jī)控制窗口
圖9 直流電機(jī)控制窗口
圖10 電表控制窗口
圖11 LED控制窗口
本文實(shí)現(xiàn)基于廣播方式CAN總線通信控制網(wǎng)絡(luò)絡(luò),實(shí)現(xiàn)對(duì)連接在CAN總線上40個(gè)節(jié)點(diǎn)實(shí)時(shí)控制及狀態(tài)監(jiān)控。CAN報(bào)文不包含地址信息,是否接受報(bào)文
由接受節(jié)點(diǎn)決定,因此本文設(shè)計(jì)的CAN通信網(wǎng)絡(luò)具有很好的拓展性,可拓展應(yīng)用于工業(yè)控制、工程機(jī)械、安防監(jiān)控等領(lǐng)域。
[1] 張培仁.CAN總線設(shè)計(jì)與分布式控制[M].北京:清華大學(xué)出版社,2011.
[2] 劉火良,楊森.STM32庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2013.
[3] 周立功.項(xiàng)目驅(qū)動(dòng):CAN-bus現(xiàn)場(chǎng)總線基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2012.
[4] 龍志強(qiáng).CAN總線技術(shù)與應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2013.
[5] 牛躍聽(tīng),周立功,穆希輝,等.CAN總線應(yīng)用層協(xié)議實(shí)例解析[M].北京:北京航空航天大學(xué)出版社,2014.
[6] 張培仁,杜洪亮.CAN現(xiàn)場(chǎng)總線監(jiān)控系統(tǒng)原理和應(yīng)用設(shè)計(jì)[M].合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2011.
[7] 耿肇英,周真真,耿燚.C#應(yīng)用程序設(shè)計(jì)教程[M].2版.北京:人民郵電出版社,2010.
[8] 張立.C#程序設(shè)計(jì)編程經(jīng)典[M].北京:清華大學(xué)出版社,2008.
[9] 楊春杰,王曙光,亢紅波.CAN總線技術(shù)[M].北京:北京航空航天大學(xué)出版社,2010.
[10] 王黎明,夏立,邵英,等.CAN現(xiàn)場(chǎng)總線系統(tǒng)的設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2008.
[11] 杜尚豐,曹曉鐘,徐津,等.CAN總線測(cè)控技術(shù)及應(yīng)用[M].北京:電子工業(yè)出版社,2007.
[12] 楊建義.基于Visual Basic與RS232串行通信的溫度監(jiān)測(cè)系統(tǒng)[J].電子測(cè)試,2007(12):47-50.
[13] 姜拓,張劍平.基于C#的數(shù)據(jù)采集系統(tǒng)上位機(jī)軟件設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)試,2009(9):58-61.
[14] 劉師良,李長(zhǎng)青.基于CAN總線的煤礦監(jiān)控系統(tǒng)工作站的研究[J].工礦自動(dòng)化,2009(1):66-69.
[15] 王堅(jiān)峰,張任,嚴(yán)海.基于CAN總線的溫室環(huán)境控制系統(tǒng)[J].輕工機(jī)械,2009,27(1):69-72.
[16] 王巖,張福恩.基于CAN總線的智能測(cè)控節(jié)點(diǎn)的設(shè)計(jì)[J].電子器件,2000,23(4):267-270.
Design of CAN Communication Control Network Based On STM32 MCU
CHAI Wenfeng,DING Xueming
(School of Optical-Electrical and Computer Engineering,University of Shanghai for Science and Technology,Shanghai 20093, China)
Through analyzing the defects of the point-to-point communication mode control network and the development of the field bus and taking the advantages of the CAN bus and its characteristic designed the communication control network based on the broadcast mode.Using the C# to prepare the PC interface (the controller), Intelligent node (lower computer) as actuator communication ,based on the CANKingdom application layer protocol,made the node communication rules, then send the control command to the frame in the form of packaging design and design node control algorithm executes the corresponding function. The design of a broadcast based CAN communication network achieve the 40 nodes of the data communication and real-time monitoring of the scene in this paper.
CAN bus; communication protocol; pc interface; real-time monitoring
2016- 04- 10
柴文峰(1990-),男,碩士研究生。研究方向:CAN通信網(wǎng)絡(luò)設(shè)計(jì)。丁學(xué)明(1971-),男,副教授。研究方向:電機(jī)控制等。
10.16180/j.cnki.issn1007-7820.2017.03.039
TN915.04;TP368.1
A
1007-7820(2017)03-142-04