李旭 孟晨 張曉良 王成 劉志鵬
摘 ?要: 為實(shí)現(xiàn)對(duì)某型高炮總線數(shù)據(jù)的實(shí)時(shí)監(jiān)測(cè),設(shè)計(jì)一種CAN總線檢測(cè)系統(tǒng)。該系統(tǒng)使用CAN收發(fā)接口電路完成對(duì)信號(hào)的采集,采用STM32F1系列單片機(jī)作為下位機(jī)對(duì)采集的數(shù)據(jù)進(jìn)行處理,通過(guò)W5500網(wǎng)絡(luò)接口將數(shù)據(jù)傳輸?shù)絇C104 工控機(jī),由工控機(jī)進(jìn)行數(shù)據(jù)解析,從而實(shí)現(xiàn)CAN總線數(shù)據(jù)的檢測(cè)功能。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)能夠?qū)崿F(xiàn)對(duì)某型高炮CAN數(shù)據(jù)的實(shí)時(shí)檢測(cè)。
關(guān)鍵詞: 數(shù)據(jù)檢測(cè)系統(tǒng); 信號(hào)采集; 數(shù)據(jù)處理; 數(shù)據(jù)傳輸; 網(wǎng)絡(luò)通信; 程序設(shè)計(jì)
中圖分類(lèi)號(hào): TN915?34 ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼: A ? ? ? ? ? ? ? ? ? ? ? ? 文章編號(hào): 1004?373X(2019)15?0013?04
Design of CAN bus detecting system for a certain type antiaircraft gun
LI Xu1, MENG Chen1, ZHANG Xiaoliang1, WANG Cheng1, LIU Zhipeng2
( 1. Army Engineering University, Shijiazhuang 050003, China; 2. Military Delegate Group Stationed in Changzhi Region, Changzhi 046000, China)
Abstract: In order to achieve the real?time monitoring for the bus data of a certain type antiaircraft gun, a CAN bus detecting system is designed, in which the CAN transceiver interface circuit is adopted to fulfill signal acquisition, STM32F1 series SCM is used as its slave computer to process the acquired data through, and then sent to PC104 IPC (industrial personal computer) through the W5500 Ethernet interface. The processed data is analyzed by the IPC to realize the system function for detecting CAN bus data. The experimental results show that the system can realize real?time detection of CAN data of a certain antiaircraft gun.
Keywords: data detecting system; signal acquisition; data processing; data transmission; network communication; program design
0 ?引 ?言
某型高炮作為新一代武器系統(tǒng),其各個(gè)分系統(tǒng)已經(jīng)實(shí)現(xiàn)了采集內(nèi)部某些模擬信號(hào)或開(kāi)關(guān)信號(hào),并輸出到CAN總線的功能。各個(gè)分系統(tǒng)之間的通信采用CAN 2.0B標(biāo)準(zhǔn)總線協(xié)議,總線通信波特率[1]為500 Kb/s。因此,可以通過(guò)采集CAN總線上的數(shù)據(jù)獲取各個(gè)分系統(tǒng)的工作狀況,并對(duì)檢測(cè)出的故障進(jìn)行分析和診斷,使得故障排查工作簡(jiǎn)單化、高效化。本文以某型高炮CAN總線數(shù)據(jù)采集檢測(cè)作為研究對(duì)象,設(shè)計(jì)開(kāi)發(fā)了CAN總線檢測(cè)系統(tǒng),并進(jìn)行相關(guān)的測(cè)試實(shí)驗(yàn)。
1 ?系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
CAN總線檢測(cè)系統(tǒng)結(jié)構(gòu)設(shè)計(jì)框圖如圖1所示,輸入包括某型高炮的待測(cè)信號(hào)和電源,輸出為檢測(cè)結(jié)果,通過(guò)圖形界面進(jìn)行顯示。檢測(cè)系統(tǒng)與某型高炮之間的電氣連接采用可靠性高的航空接頭作為連接方式。檢測(cè)系統(tǒng)包含電源轉(zhuǎn)換電路、工控機(jī)主板、CAN檢測(cè)電路、液晶屏與鍵盤(pán)鼠標(biāo)等模塊組成。其中工控機(jī)主板采用PC104工控機(jī)作為上位機(jī)核心,負(fù)責(zé)數(shù)據(jù)處理與人機(jī)交互;CAN檢測(cè)電路采用STM32F1系列單片機(jī)作為下位機(jī)的控制,負(fù)責(zé)CAN信號(hào)的采集與傳輸。
2 ?CAN總線檢測(cè)系統(tǒng)的硬件設(shè)計(jì)
在CAN總線檢測(cè)電路模塊中,單片機(jī)作為主控制器,CAN接口電路將實(shí)現(xiàn)單片機(jī)與CAN總線之間的互連,W5500接口電路實(shí)現(xiàn)單片機(jī)與以太網(wǎng)之間的連接。STM32單片機(jī)自帶CAN 2.0接口控制器,通過(guò)與CAN收發(fā)器芯片連接可以進(jìn)行CAN總線數(shù)據(jù)幀的收發(fā)。單片機(jī)通過(guò)W5500與PC建立TCP連接,通過(guò)SPI總線與W5500進(jìn)行通信,后者將完成其轉(zhuǎn)換為以太網(wǎng)格式數(shù)據(jù)包,并通過(guò)網(wǎng)線發(fā)送給PC。該部分電路的設(shè)計(jì)框圖如圖2所示。
2.1 ?微控制器接口電路
微控制器采用STM32F103ZET6,主頻為72 MHz,F(xiàn)LASH容量為512 KB,SRAM容量為64 KB。外部時(shí)鐘使用8 MHz晶振,VDD和VSS間的去耦電容值為100 nF,單片機(jī)的BOOT0和BOOT1直接通過(guò)100 kΩ電阻下拉接地[2]。復(fù)位電路采用阻容復(fù)位電路,下載調(diào)試電路采用SWD接口。
2.2 ?CAN接口電路
微控制器的CAN_RX和CAN_TX電平首先經(jīng)過(guò)磁耦隔離,然后與CAN收發(fā)器的TXD和RXD引腳相連,轉(zhuǎn)換成CAN_H和CAN_L信號(hào)與外界CAN總線相連。
如圖3所示,U11為T(mén)JA1050芯片,該芯片是控制器區(qū)域網(wǎng)絡(luò)(CAN)協(xié)議控制器和物理總線之間的接口。TJA1050可以為總線提供差動(dòng)發(fā)送性能,為CAN控制器提供差動(dòng)接收性能。本系統(tǒng)采用TJA1050實(shí)現(xiàn)CAN協(xié)議控制器到CAN物理總線之間的轉(zhuǎn)換。U4為ADuM1201芯片,該芯片是ADI公司推出的新型雙通道數(shù)字磁耦隔離器,它具有諸多優(yōu)于光電隔離器件性能的地方,可滿足CAN總線的要求。
由于現(xiàn)場(chǎng)情況十分復(fù)雜,各節(jié)點(diǎn)之間存在很高的共模電壓,雖然CAN接口采用的是差分傳輸方式,具有一定的抗共模干擾的能力,但當(dāng)共模電壓超過(guò)CAN驅(qū)動(dòng)器的極限接收電壓時(shí),CAN驅(qū)動(dòng)器就無(wú)法正常工作了,嚴(yán)重時(shí)甚至?xí)龤酒蛢x器設(shè)備。因此,為了適應(yīng)強(qiáng)干擾環(huán)境或是高的性能要求,必須對(duì)CAN總線各通信節(jié)點(diǎn)實(shí)行電氣隔離。為了防止瞬態(tài)電壓和ESD損壞CAN收發(fā)器芯片,采取兩種措施:一是采用隔離電路對(duì)大幅度瞬態(tài)干擾進(jìn)行隔離,需要注意的是隔離芯片兩側(cè)要使用隔離電源進(jìn)行供電否則達(dá)不到隔離效果[3],這里采用電源模塊B0505S對(duì)兩側(cè)電源進(jìn)行隔離,如圖4所示;二是采用旁路元件保護(hù)隔離接口不被過(guò)高的瞬態(tài)電壓擊穿。在CAN總線的CAN_H和CAN_L與GND之間放置一個(gè)兩路的TVS瞬態(tài)抑制二極管NUP2105L。需要注意的是,輸入和輸出的電源都要加上旁路電容,并且要盡量靠近芯片的電源引腳。同時(shí)CAN_H和CAN_L信號(hào)在布線時(shí)要采用差分線布線,線的長(zhǎng)度要一致,必要時(shí)采用蛇形走線。CAN_H和 CAN_L之間接120 Ω阻抗匹配電阻非常必要,否則會(huì)影響總線的數(shù)據(jù)傳輸距離和傳輸質(zhì)量[4]。
2.3 ?網(wǎng)絡(luò)接口電路
本系統(tǒng)采用W5500作為微控制器與以太網(wǎng)通信的轉(zhuǎn)換器。W5500是一款全硬件TCP/IP嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加方便的互聯(lián)網(wǎng)連接方案。W5500集成TCP/IP協(xié)議棧、10/100M以太網(wǎng)數(shù)據(jù)鏈路層(MAC)及物聯(lián)層(PHY),通過(guò)SPI總線與微控制器連接。W5500的SPI接口支持80 MHz的通信速率。利用W5500組成的網(wǎng)絡(luò)接口電路如圖5所示。
3 ?網(wǎng)絡(luò)通信程序設(shè)計(jì)
3.1 ?上位機(jī)與下位機(jī)網(wǎng)絡(luò)通信的實(shí)現(xiàn)
下位機(jī)上電后,首先進(jìn)行硬件初始化、內(nèi)存初始化、調(diào)度器初始化、定時(shí)器初始化。完成初始化后,各個(gè)任務(wù)線程會(huì)輪流占用CPU處理器時(shí)間。為了防止設(shè)備接入CAN總線時(shí)由于存在CAN總線數(shù)據(jù)導(dǎo)致程序立刻進(jìn)入CAN中斷程序,從而無(wú)法與PC建立TCP連接,這里的CAN接收線程首先需要保證與PC建立TCP連接,然后才進(jìn)行CAN接口的初始化并使能接收中斷,W5500作為T(mén)CP客戶端,PC作為服務(wù)器端,W5500的socket0與PC端建立TCP連接的流程如圖6所示。
上位機(jī)采用socket編程利用TCP/IP協(xié)議解析收到的CAN總線數(shù)據(jù)然后存儲(chǔ)以備后期處理分析[5]。當(dāng)上位機(jī)與下位機(jī)建立TCP/IP連接后,下位機(jī)通過(guò)調(diào)用W5500提供的接口函數(shù)如recv和send實(shí)現(xiàn)與上位機(jī)之間的通信。上位機(jī)同樣也需要編寫(xiě)相應(yīng)的程序才能實(shí)現(xiàn)與下位機(jī)通信,上位機(jī)的TCP/IP通信流程圖如圖7所示。
3.2 ?CAN總線數(shù)據(jù)收發(fā)程序設(shè)計(jì)
CAN總線數(shù)據(jù)幀為短數(shù)據(jù)報(bào)文,由“幀起始”“仲裁域”“控制域”“數(shù)據(jù)域”“CRC域”“應(yīng)答域”“幀結(jié)尾”等7個(gè)位域組成[6]。CAN數(shù)據(jù)發(fā)送線程用于獲取上位機(jī)通過(guò)TCP連接傳來(lái)的數(shù)據(jù)包,然后轉(zhuǎn)換為CAN數(shù)據(jù)幀并輸出到物理CAN總線,其流程圖如圖8所示。
STM32F1系列單片機(jī)的SPI1最高時(shí)鐘可達(dá)36 MHz,SPI2的時(shí)鐘可達(dá)18 MHz。為了使CAN數(shù)據(jù)能盡快地從接收郵箱中發(fā)送到SPI總線,可以采用DMA傳輸提高數(shù)據(jù)從內(nèi)存到SPI接口的傳輸速度。然而,W5500在配置或讀取其內(nèi)部寄存器時(shí)只需發(fā)送4字節(jié)的數(shù)據(jù),DMA的配置也需要一定時(shí)間,采用DMA可能起不到提高速度的作用。采取以下措施可提高傳輸速度:STM32在內(nèi)存與SPI外設(shè)之間大于4個(gè)字節(jié)采用DMA傳輸,否則采用正常方式傳輸。利用DMA向W5500發(fā)送數(shù)據(jù)時(shí)只需要使用發(fā)送DMA通道[6]。在利用DMA接收W5500的數(shù)據(jù)時(shí),需要同時(shí)使能DMA發(fā)送和接收通道,發(fā)送DMA通道用來(lái)向W5500發(fā)送0x00,從而使W5500向外發(fā)送期望的數(shù)據(jù)然后通過(guò)MCU接收DMA通道存到內(nèi)存中。
CAN數(shù)據(jù)接收線程的作用:當(dāng)CAN總線上出現(xiàn)數(shù)據(jù)幀時(shí),進(jìn)入接收中斷函數(shù)接收CAN數(shù)據(jù)幀,然后將數(shù)據(jù)幀發(fā)送到CAN的接收郵箱中緩存。使用信號(hào)量can_size_sem來(lái)表達(dá)已經(jīng)接收的CAN數(shù)據(jù)幀的數(shù)目。在CAN接收中斷程序中通過(guò)rt_sem_release(can_ size_sem)使信號(hào)量的值加1。CAN接收線程查看CAN的接收郵箱是否有數(shù)據(jù)幀,有,則使用W5500的socket0傳到PC。CAN接收線程流程圖如圖9所示。
4 ?實(shí)驗(yàn)結(jié)果
為了驗(yàn)證所設(shè)計(jì)的CAN總線數(shù)據(jù)采集是否正常,利用模擬器給CAN總線發(fā)送數(shù)據(jù)幀,CAN總線檢測(cè)電路采集數(shù)據(jù)并發(fā)送給上位機(jī),上位機(jī)對(duì)數(shù)據(jù)進(jìn)行解碼處理并顯示,顯示界面如圖10所示。通過(guò)對(duì)發(fā)送的數(shù)據(jù)與檢測(cè)系統(tǒng)接收的數(shù)據(jù)進(jìn)行比對(duì),數(shù)據(jù)完全一致。從實(shí)驗(yàn)結(jié)果來(lái)看本文提出的CAN總線檢測(cè)系統(tǒng)可以實(shí)現(xiàn)實(shí)時(shí)采集CAN總線的所有幀數(shù)據(jù)。
5 ?結(jié) ?語(yǔ)
本文以某型高炮CAN總線數(shù)據(jù)采集檢測(cè)作為研究對(duì)象,通過(guò)STM32單片機(jī)搭配嵌入式以太網(wǎng)控制芯片W5500,將CAN總線數(shù)據(jù)轉(zhuǎn)換成以太網(wǎng)數(shù)據(jù)包并發(fā)送給上位機(jī),完成數(shù)據(jù)的不間斷采集。實(shí)驗(yàn)表明,該系統(tǒng)能夠?qū)崿F(xiàn)對(duì)某型高炮CAN數(shù)據(jù)的實(shí)時(shí)檢測(cè),為裝備的故障診斷工作提供了可靠的數(shù)據(jù)支持。
參考文獻(xiàn)
[1] 趙鑫,張振友,王長(zhǎng)升.某型自行高炮工況分析儀的設(shè)計(jì)與實(shí)現(xiàn)[J].火力與指揮控制,2015,40(11):159?162.
ZHAO Xin, ZHANG Zhenyou, WANG Changsheng. A design and implementation of artillery condition analyzer [J]. Fire control & command control, 2015, 40(11): 159?162.
[2] 劉純虎,付斌,盛慶華.基于STM32的微型USB?CAN適配器開(kāi)發(fā)[J].計(jì)算機(jī)測(cè)量與控制,2013,21(4):996?999.
LIU Chunhu, FU Bin, SHENG Qinghua. ?Development of a small compact USB to CAN converter based on STM32 [J]. Computer measurement & control, 2013, 21(4): 996?999.
[3] 張啟剛,朱維同.綜合電子技術(shù)在自行火炮中的應(yīng)用研究[J].火炮發(fā)射與控制學(xué)報(bào),1997(4):28?34.
ZHANG Qigang, ZHU Weitong. Research on application of integrated electronic technology in self?propelled gun [J]. Gun launch & control journal, 1997(4): 28?34.
[4] 代壽剛,干莽,宋占偉.基于FPGA的CAN總線故障分析儀[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2012,30(5):503?508.
DAI Shougang, GAN Mang, SONG Zhanwei. CAN?bus fault analyzer based on FPGA [J]. Journal of Jilin University (Information sci ed), 2012, 30(5): 503?508.
[5] 孫海民.精通Windows Sockets網(wǎng)絡(luò)開(kāi)發(fā):基于Visual C++實(shí)現(xiàn)[M].北京:人民郵電出版社,2008:80?85.
SUN Haimin. Proficient in Windows Sockets network development: Visual C++ based implementation [M]. Beijing: The Posts and Telecommunications Press, 2008: 80?85.
[6] STMicroelectronics. STM32F10x Standard Peripherals Library [CP]. [S.l.]: STMicroelectronics, 2011.
[7] 馬建輝,胡代榮,郭坤.一種汽車(chē)CAN總線網(wǎng)關(guān)的報(bào)文接收和發(fā)送方法[J].現(xiàn)代電子技術(shù),2018,41(11):5?7.
MA Jianhui, HU Dairong, GUO Kun. A messages receiving and transmitting method of automotive CAN bus gateway [J]. Modern electronics technique, 2018, 41(11): 5?7.
[8] 張婷,馮超,李秋妮,等.高炮武器發(fā)射目標(biāo)毀傷效率優(yōu)化設(shè)計(jì)仿真[J].計(jì)算機(jī)仿真,2017,34(6):27?31.
ZHANG Ting, FENG Chao, LI Qiuni, et al. Optimized design and simulation of anti?craft gun launch target damage effectiveness [J]. Computer Simulation, 2017, 34(6): 27?31.