何 鑫,張會(huì)新,劉文怡,熊繼軍,洪應(yīng)平
(中北大學(xué),儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
隨著信息技術(shù)、人工智能技術(shù)、傳感器技術(shù)的發(fā)展,無(wú)人機(jī)機(jī)載電子設(shè)備及傳感器的數(shù)量也越來(lái)越多[1-3]。為了降低布線的復(fù)雜性,無(wú)人機(jī)機(jī)載設(shè)備與傳感器一般采用現(xiàn)場(chǎng)總線進(jìn)行通信,CAN總線是其中一種[4]。同時(shí),為了保證通信的可靠性,使用多個(gè)CAN總線進(jìn)行冗余通信,且不同數(shù)據(jù)量的設(shè)備使用不同波特率通信[5-6]。為了在飛行任務(wù)結(jié)束后能對(duì)飛行器各設(shè)備工作情況進(jìn)行分析,需要對(duì)總線上的數(shù)據(jù)進(jìn)行監(jiān)控與記錄[7]?,F(xiàn)有的數(shù)據(jù)記錄器一般只能對(duì)單個(gè)CAN總線進(jìn)行數(shù)據(jù)采集及記錄,且通信波特率由內(nèi)部程序固化,不能對(duì)通信波特率進(jìn)行自動(dòng)適配,不滿足無(wú)人機(jī)的多通道、多波特率數(shù)據(jù)記錄要求。
針對(duì)以上問(wèn)題,設(shè)計(jì)了一種具有自動(dòng)波特率的多通道CAN總線實(shí)時(shí)監(jiān)測(cè)系統(tǒng),該系統(tǒng)能夠自動(dòng)識(shí)別總線通信波特率,并記錄通信數(shù)據(jù)。在無(wú)人機(jī)飛行完畢后,可讀取內(nèi)部記錄的數(shù)據(jù)重新轉(zhuǎn)化為有效信息,為無(wú)人機(jī)的飛行狀況、故障信息分析提供數(shù)據(jù)。
如圖1所示,系統(tǒng)采用模塊化設(shè)計(jì),可降低系統(tǒng)設(shè)計(jì)的復(fù)雜度[8-9]。系統(tǒng)包括電源模塊、FPGA控制模塊,以太網(wǎng)通信模塊、CAN監(jiān)視模塊、數(shù)據(jù)存儲(chǔ)模塊,計(jì)算機(jī)及數(shù)據(jù)解算上位機(jī)軟件為額外部分。系統(tǒng)上電后,首先對(duì)FLASH進(jìn)行壞塊的檢測(cè)與標(biāo)記,同時(shí)查找上次數(shù)據(jù)存儲(chǔ)記錄,將數(shù)據(jù)寫指針偏移至空白地址,確保已存儲(chǔ)的數(shù)據(jù)不會(huì)被新數(shù)據(jù)覆蓋。CAN總線監(jiān)視模塊采集到的數(shù)據(jù)經(jīng)過(guò)FPGA的封包處理后,冗余存儲(chǔ)到FLASH中。使用W5300實(shí)現(xiàn)以太網(wǎng)接口,計(jì)算機(jī)可通過(guò)以太網(wǎng)總線直接與記錄器進(jìn)行通信,完成數(shù)據(jù)的讀取以及相關(guān)參數(shù)的設(shè)置工作,無(wú)需通過(guò)測(cè)試臺(tái)中轉(zhuǎn)。
圖1 系統(tǒng)整體框圖
CAN監(jiān)視模塊能夠?qū)崟r(shí)監(jiān)控4路總線通信數(shù)據(jù),支持的通信速率最高可達(dá)1 Mbit/s。同時(shí)內(nèi)部留有擴(kuò)展接口,支持對(duì)CAN總線進(jìn)行通道擴(kuò)展,理論可擴(kuò)展總線通道數(shù)只受系統(tǒng)資源限制。如圖2所示,使用MCP2515作為CAN總線控制器,該芯片是獨(dú)立的CAN協(xié)議控制器,完全支持CAN2.0B標(biāo)準(zhǔn),F(xiàn)PGA通過(guò)SPI總線實(shí)現(xiàn)對(duì)該芯片的控制,操作簡(jiǎn)單可靠。CAN收發(fā)器使用TJA1050??紤]到無(wú)人機(jī)內(nèi)部總線掛載設(shè)備較多,以及機(jī)艙內(nèi)部的電氣復(fù)雜性、記錄器自身的穩(wěn)定性等,同時(shí)為了提高系統(tǒng)的EMC性能,使用TVS二極管并接在CAN_H、CAN_L與GND上。當(dāng)外界干擾信號(hào)超過(guò)TVS二極管的擊穿電壓時(shí),二極管將處于鉗位狀態(tài),將電壓限制在一個(gè)安全范圍,保護(hù)電路不受損壞[10]。
圖2 CAN總線監(jiān)視模塊功能原理圖
現(xiàn)有無(wú)人機(jī)的滯空時(shí)間一般為幾h至十幾h[11-12]。按16 h滯空時(shí)間、四通道CAN波特率1 Mbit/s、帶寬利用率60%計(jì)算,則所需存儲(chǔ)容量為:16 h×4×1 Mbit/s×60%÷8 bit=16.875 GB,因此,數(shù)據(jù)存儲(chǔ)模塊選用容量大小為32 GB的NandFlash芯片,可滿足無(wú)人機(jī)不小于16 h的數(shù)據(jù)記錄要求。為保證在意外情況下也能正?;刈x數(shù)據(jù),該部分獨(dú)立于數(shù)據(jù)采集模塊,使用單獨(dú)的存儲(chǔ)小板設(shè)計(jì),放置于抗高過(guò)載的合金鋼小桶內(nèi),僅使用線纜與采集控制模塊相連,并設(shè)計(jì)有備用讀數(shù)接口,當(dāng)線纜損壞時(shí)可通過(guò)備用接口讀取數(shù)據(jù)。圖3為存儲(chǔ)小板電路邏輯圖。
圖3 存儲(chǔ)模塊功能原理圖
系統(tǒng)使用以太網(wǎng)總線與計(jì)算機(jī)進(jìn)行數(shù)據(jù)傳輸。接口芯片使用W5300,該芯片內(nèi)部集成TCP/IP協(xié)議和10/100 M的以太網(wǎng)MAC和PHY,支持全硬件通信協(xié)議技術(shù),如TCP、UDP、IPv4、ICMP、IGMP、ARP等,其內(nèi)置通信數(shù)據(jù)存儲(chǔ)器高達(dá)128 KB字節(jié),極大程度降低了主控器件對(duì)存在資源的需求。如圖4所示,W5300使用并口方式與FPGA進(jìn)行連接,數(shù)據(jù)線寬度為16 bit,地址位寬度為10 bit,配合WR(寫使能)、RD(讀使能)、CS(片選信號(hào))對(duì)W5300內(nèi)部寄存器的讀寫操作,完成數(shù)據(jù)收發(fā)操作。
圖4 以太網(wǎng)模塊原理圖
MCP2515是獨(dú)立的CAN控制器芯片,共有5種工作模式:配置模式、正常模式、休眠模式、僅監(jiān)聽(tīng)模式、環(huán)回模式。控制器具有8個(gè)中斷源,CANINTF是中斷標(biāo)志寄存器,如圖5所示。
圖5 CANINTF中斷標(biāo)志寄存器
當(dāng)中斷被使能且有中斷發(fā)生時(shí),相應(yīng)的標(biāo)志位會(huì)被置位,通過(guò)讀取該寄存器的值可判斷出中斷類型。Bit7為報(bào)文錯(cuò)誤中斷標(biāo)志位,如果在報(bào)文發(fā)送或者接收過(guò)程中有錯(cuò)誤發(fā)生,將觸發(fā)報(bào)文錯(cuò)誤中斷,同時(shí)該標(biāo)志位被置位。Bit0為接收緩沖器0滿中斷標(biāo)志,收到正確報(bào)文時(shí)該標(biāo)志位將被置位。設(shè)計(jì)中使用僅監(jiān)聽(tīng)模式,配合報(bào)文錯(cuò)誤中斷、接收緩沖器0滿中斷實(shí)現(xiàn)CAN波特率的自適應(yīng)功能。
波特率自適應(yīng)流程如圖6所示,在自適應(yīng)階段,系統(tǒng)不斷讀取CANINTF中斷寄存器,并對(duì)寄存器的值進(jìn)行判斷。如果有報(bào)文錯(cuò)誤中斷發(fā)生,則說(shuō)明可能波特率有誤,報(bào)文錯(cuò)誤中斷計(jì)數(shù)器加1,當(dāng)報(bào)文錯(cuò)誤中斷計(jì)數(shù)器值大于設(shè)定的閾值時(shí),輪詢波特率查找表,重新對(duì)波特率進(jìn)行配置;如果無(wú)報(bào)文錯(cuò)誤中斷發(fā)生,同時(shí)有報(bào)文接收中斷發(fā)生,則說(shuō)明接收到的報(bào)文極大概率為正確報(bào)文,正確報(bào)文中斷計(jì)數(shù)器加1,當(dāng)正確報(bào)文中斷計(jì)數(shù)器值大于設(shè)定的閾值時(shí),說(shuō)明當(dāng)前設(shè)置的波特率值是正確的,波特率自適應(yīng)結(jié)束。
圖6 自動(dòng)波特率識(shí)別流程圖
數(shù)據(jù)采集使用MCP2515的僅監(jiān)聽(tīng)模式,在該模式下,芯片不會(huì)發(fā)送任何報(bào)文,包括錯(cuò)誤標(biāo)志或者確認(rèn)信號(hào),此模式能將記錄器對(duì)總線的影響降到最低。
當(dāng)MCP2515監(jiān)聽(tīng)到CAN總線上有數(shù)據(jù)時(shí),其內(nèi)部狀態(tài)寄存器的接收中斷標(biāo)志位會(huì)被置位,F(xiàn)PGA通過(guò)查詢?cè)摌?biāo)志位即可知道數(shù)據(jù)的接收狀態(tài)。當(dāng)有數(shù)據(jù)被緩存到芯片的內(nèi)部緩沖器時(shí),使用讀RX緩沖器指令快速將數(shù)據(jù)讀取到FPGA內(nèi)部。相對(duì)于普通的數(shù)據(jù)讀取指令,該指令只需發(fā)送一次便可以完成數(shù)據(jù)讀取功能,而普通指令則需要間斷讀取14個(gè)寄存器,數(shù)據(jù)讀取更快速,系統(tǒng)實(shí)時(shí)性更高。
系統(tǒng)采集的數(shù)據(jù)以幀頭、CAN通道、幀記數(shù)、幀長(zhǎng)、CAN數(shù)據(jù)、幀校驗(yàn)的形式將數(shù)據(jù)打包,寫入到數(shù)據(jù)緩存FIFO中。幀校驗(yàn)為和校驗(yàn),計(jì)算方式為除校驗(yàn)位自身外所有數(shù)據(jù)的字節(jié)和,取低8位,用于校驗(yàn)數(shù)據(jù)的正確性。
另外,由于電磁干擾的存在,數(shù)據(jù)在寫入、讀取或者存儲(chǔ)的過(guò)程中都可能出現(xiàn)位翻轉(zhuǎn)的情況,從而導(dǎo)致數(shù)據(jù)出現(xiàn)錯(cuò)誤[13-14]。雖然數(shù)據(jù)有幀校驗(yàn),但本設(shè)計(jì)中采用的和校驗(yàn)方式、普通的奇偶校驗(yàn)方式,都只能檢查出數(shù)據(jù)是否有發(fā)生錯(cuò)誤,不能確定是數(shù)據(jù)中的哪一位發(fā)生錯(cuò)誤,也就不能對(duì)錯(cuò)誤進(jìn)行修正。因此,為了最大限度確保存儲(chǔ)數(shù)據(jù)的正確性,設(shè)計(jì)中引入了錯(cuò)誤檢查和糾正技術(shù)(ECC),并在FPGA中實(shí)現(xiàn)了基于漢明碼(hamming code)的ECC糾錯(cuò)算法。漢明碼是一類線性糾錯(cuò)碼,最多可以檢測(cè)2位錯(cuò)誤或者糾正1位數(shù)據(jù)錯(cuò)誤[15]。如圖7所示,數(shù)據(jù)在寫入FLASH中前,使用漢明碼對(duì)數(shù)據(jù)進(jìn)行編碼,將編碼得到的校驗(yàn)值寫入FLASH芯片的spare area區(qū)域。讀取數(shù)據(jù)時(shí),使用讀取的數(shù)據(jù)計(jì)算新校驗(yàn)值并與讀取的校驗(yàn)值對(duì)比。若新計(jì)算的校驗(yàn)值與讀取的校驗(yàn)值不一致,則說(shuō)明有數(shù)據(jù)位發(fā)生錯(cuò)誤,使用特定算法對(duì)2個(gè)校驗(yàn)值進(jìn)行計(jì)算即可確定發(fā)生錯(cuò)誤的數(shù)據(jù)位,對(duì)該位進(jìn)行取反即可得到正確的數(shù)據(jù)。
圖7 數(shù)據(jù)存儲(chǔ)流程圖
計(jì)算機(jī)通過(guò)以太網(wǎng)總線直接讀取數(shù)據(jù),上位機(jī)作為TCP服務(wù)器,而記錄器作為TCP客戶端。上電后,記錄器主動(dòng)尋找服務(wù)器并建立鏈接。在進(jìn)行數(shù)據(jù)的傳輸之前,需要先對(duì)W5300進(jìn)行復(fù)位,并配置相關(guān)寄存器。復(fù)位需要先拉低RST引腳至少2 μs,然后拉高該引腳并等待至少10 ms,直到其內(nèi)部PLL時(shí)鐘鎖定完成。寄存器配置需要設(shè)置TCP服務(wù)器IP地址、通信端口、本機(jī)IP地址及MAC地址,同時(shí)為通信SOCKET分配TX/RX內(nèi)存空間。由于需要配置的寄存器較多,因此事先將寄存器值寫入查找表中,配置寄存器時(shí)只需要從查找表讀取相應(yīng)寄存器的值并寫入W5300內(nèi)部寄存器即可。當(dāng)寄存器配置完成并且TCP鏈接建立成功后,上位機(jī)可發(fā)送指令讀取數(shù)據(jù)并保存至計(jì)算機(jī)。
本文使用具有多路CAN總線的測(cè)試臺(tái)對(duì)系統(tǒng)進(jìn)行測(cè)試,如圖8所示。由測(cè)試臺(tái)內(nèi)部生成多路不同波特率信號(hào)源,發(fā)送周期為10 ms的遞增數(shù)。其中通道1波特率為100 Kpbs,標(biāo)準(zhǔn)遠(yuǎn)程幀;通道2波特率為125 Kbps,標(biāo)準(zhǔn)數(shù)據(jù)幀;通道3波特率為250 Kbps,擴(kuò)展數(shù)據(jù)幀;通道4波特率為1 Mbps,擴(kuò)展遠(yuǎn)程幀,數(shù)據(jù)記錄時(shí)長(zhǎng)為16 h。
圖8 多路CAN總線測(cè)試臺(tái)上位機(jī)
在測(cè)試完成后,使用記錄器配套的上位機(jī)讀數(shù)軟件讀取存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)讀取完成后,使用Hex Edit軟件進(jìn)行數(shù)據(jù)格式分析,由圖9可以看出,系統(tǒng)采集存儲(chǔ)的數(shù)據(jù)格式與設(shè)計(jì)好的幀格式一致,各個(gè)通道的幀記數(shù)有序排列,不同波特率CAN通信數(shù)據(jù)都被正確采集與存儲(chǔ)。結(jié)果表明本系統(tǒng)能夠正確自動(dòng)地識(shí)別CAN通信波特率,并采集存儲(chǔ)數(shù)據(jù)。
圖9 部分?jǐn)?shù)據(jù)結(jié)果
另外,分別對(duì)未使用ECC糾錯(cuò)算法的記錄器和本系統(tǒng)進(jìn)行5次數(shù)據(jù)存儲(chǔ)與分析實(shí)驗(yàn),每次存儲(chǔ)與讀取2 GB數(shù)據(jù),測(cè)試兩者的錯(cuò)誤字節(jié)數(shù),測(cè)試結(jié)果如表1所示。
表1 誤碼率測(cè)試對(duì)比表
分別計(jì)算兩者的誤碼率,未使用ECC糾錯(cuò)算法的常規(guī)記錄器平均誤碼率為5.21×10-9,本系統(tǒng)的平均誤碼率為3.72×10-10。由測(cè)試結(jié)果可以看出,在引入ECC糾錯(cuò)算法后,相對(duì)于無(wú)糾錯(cuò)算法的記錄器,本系統(tǒng)數(shù)據(jù)誤碼率下降了1個(gè)數(shù)量級(jí),可靠性、穩(wěn)定性更高。
本文設(shè)計(jì)的CAN總線監(jiān)控系統(tǒng)的創(chuàng)新點(diǎn)是波特率自適應(yīng)和ECC數(shù)據(jù)糾錯(cuò)算法的引入,多通道數(shù)據(jù)并行記錄也是本系統(tǒng)的亮點(diǎn)。實(shí)驗(yàn)表明,本文系統(tǒng)性能穩(wěn)定、通用性高,數(shù)據(jù)誤碼率低,可以滿足無(wú)人機(jī)多通道、多波特率CAN總線數(shù)據(jù)記錄要求。