廖先莉,雷 霖,羅正華
(成都大學(xué) 電子信息工程學(xué)院,四川 成都 610106)
目前,發(fā)展中的汽車(chē)網(wǎng)絡(luò)技術(shù)有高速容錯(cuò)網(wǎng)絡(luò)FlexRay、藍(lán)牙、無(wú)線局域網(wǎng)以及用于多媒體和導(dǎo)航的MOST 等無(wú)線網(wǎng)絡(luò)技術(shù),而車(chē)內(nèi)的電子控制系統(tǒng)主要由CAN/LIN 網(wǎng)絡(luò)組成[1-3].CAN/LIN 混合網(wǎng)絡(luò)在汽車(chē)上的應(yīng)用將會(huì)使汽車(chē)網(wǎng)絡(luò)的可靠性以及經(jīng)濟(jì)性得到較大的提高[4-5].本研究依據(jù)CAN 和LIN協(xié)議,設(shè)計(jì)構(gòu)建了一個(gè)基于CAN/LIN 總線的車(chē)載通信網(wǎng)絡(luò),并對(duì)其進(jìn)行了測(cè)試和驗(yàn)證.
CAN 總線是20 世紀(jì)80年代德國(guó)博世公司專門(mén)為汽車(chē)行業(yè)開(kāi)發(fā)的一種串行通信總線.CAN 總線具有很高的實(shí)時(shí)性能,從傳輸速率最高可達(dá)1 Mbps的高速網(wǎng)絡(luò)到低成本多線路的50 Kbps 網(wǎng)絡(luò)都可以任意搭配,由于其高性能、高可靠性被廣泛應(yīng)用于汽車(chē)業(yè)、航空業(yè)、工業(yè)控制與安全防護(hù)等領(lǐng)域[2].
LIN 總線是一種低成本的串行通訊網(wǎng)絡(luò),用于實(shí)現(xiàn)汽車(chē)中的分布式電子系統(tǒng)控制[3].LIN 總線是一種輔助的總線網(wǎng)絡(luò),為現(xiàn)有汽車(chē)網(wǎng)絡(luò)(例如CAN總線)提供輔助功能,在不需要CAN 總線的帶寬和多功能的場(chǎng)合,比如智能傳感器和制動(dòng)裝置之間的通訊,使用LIN 總線可大大節(jié)省成本.
汽車(chē)內(nèi)電子控制單元間的數(shù)據(jù)傳輸特征主要區(qū)別在于數(shù)據(jù)的傳輸速率,美國(guó)汽車(chē)工程師協(xié)會(huì)(SAE)將汽車(chē)網(wǎng)絡(luò)根據(jù)速率劃分為:A(低速,1 ~10 Kbps)、B(中速,10 ~100 Kbps)、C(高速,最高可達(dá)1 Mbps)3 個(gè)等級(jí)[4].
本研究設(shè)計(jì)的汽車(chē)車(chē)載CAN/LIN 總線的通信網(wǎng)絡(luò)系統(tǒng)模型如圖1 所示.
圖1 汽車(chē)車(chē)載CAN/LIN 通信網(wǎng)絡(luò)系統(tǒng)示意圖
如圖1,數(shù)據(jù)傳輸速率較高的CAN 總線用于B、C 類網(wǎng)絡(luò),其控制對(duì)象主要包括發(fā)動(dòng)機(jī)電控系統(tǒng)、ABS/ ASR、自動(dòng)變速器、安全氣囊控制器及組合儀表信號(hào)的采集系統(tǒng)等實(shí)時(shí)性要求高的系統(tǒng).LIN 總線用于A 類系統(tǒng),其控制對(duì)象主要為車(chē)燈、電動(dòng)座椅、中央門(mén)鎖、后視鏡、車(chē)窗控制開(kāi)關(guān)等實(shí)時(shí)性要求低的系統(tǒng).在該系統(tǒng)中,CAN 總線和LIN總線通過(guò)一個(gè)網(wǎng)關(guān)進(jìn)行數(shù)據(jù)交換.
3.1.1 接口設(shè)計(jì).
CAN 總線收發(fā)器提供CAN 總線通信控制器與物理傳輸媒介之間的接口,是影響CAN 網(wǎng)絡(luò)通信的一個(gè)重要器件.本設(shè)計(jì)選用飛利浦公司的數(shù)字電路芯片TJA1040 作為CAN 總線收發(fā)器,其速率可達(dá)1 MBaud,滿足CAN 總線的高速應(yīng)用.TJA1040 可為CAN 總線提供差動(dòng)的發(fā)送功能,為CAN 總線通信控制器提供差動(dòng)的接收功能.
3.1.2 協(xié)議設(shè)計(jì).
本設(shè)計(jì)中的CAN 總線網(wǎng)絡(luò)采用CAN 2.0B 所規(guī)定的標(biāo)準(zhǔn)數(shù)據(jù)幀格式,CAN 2.0B 標(biāo)準(zhǔn)幀共有11位標(biāo)志位[5].根據(jù)CAN 數(shù)據(jù)幀格式,統(tǒng)一定義:保留位R 為0,數(shù)據(jù)頁(yè)DP 為0,IDE 為0(為標(biāo)準(zhǔn)幀),協(xié)議數(shù)據(jù)單元PDU 格式場(chǎng)PF 為0xFF,RTR 為0.優(yōu)先級(jí)依照節(jié)點(diǎn)的需求級(jí)別來(lái)定義,而數(shù)據(jù)塊長(zhǎng)度DLC則需根據(jù)實(shí)際的數(shù)據(jù)字節(jié)來(lái)定義,源地址和目標(biāo)地址則根據(jù)各個(gè)節(jié)點(diǎn)地址定義.若目標(biāo)地址定義為CAN/LIN 網(wǎng)關(guān)地址,則定義第1 個(gè)數(shù)據(jù)字節(jié)為源地址,第2 個(gè)數(shù)據(jù)字節(jié)為最終的目標(biāo)地址,余下字節(jié)則為純數(shù)據(jù)字節(jié).
3.2.1 接口設(shè)計(jì).
本設(shè)計(jì)選用飛利浦公司的數(shù)字電路芯片TJA1020 作為L(zhǎng)IN 總線收發(fā)器.TJA1020 收發(fā)器是一個(gè)物理媒體連接,它是LIN 主/從機(jī)協(xié)議控制器和LIN 傳輸媒體之間的接口,協(xié)議控制器輸入引腳TXD 的發(fā)送數(shù)據(jù)流被LIN 收發(fā)器轉(zhuǎn)換成總線信號(hào).TJA1020 的接收器檢測(cè)到LIN 總線上的數(shù)據(jù)流并通過(guò)RXD 引腳將它傳送到協(xié)議控制器.收發(fā)器有低功耗管理模式,它在睡眠模式中幾乎不消耗電流并在錯(cuò)誤模式中減少功率消耗.
3.2.2 協(xié)議設(shè)計(jì).
完整的LIN 數(shù)據(jù)幀包括同步間隔、同步場(chǎng)、標(biāo)識(shí)符ID、數(shù)據(jù)字節(jié)以及校驗(yàn)碼[6].同步場(chǎng)的格式為0x55,校驗(yàn)碼是所有數(shù)據(jù)場(chǎng)字節(jié)相加之后再取反,接收處的節(jié)點(diǎn)也將所有數(shù)據(jù)場(chǎng)字節(jié)相加,然后將其和與校驗(yàn)碼相加,判斷結(jié)果是否為0xFF,若不是則表明數(shù)據(jù)傳輸出了錯(cuò)誤.LIN 數(shù)據(jù)定義第1 個(gè)字節(jié)為源地址(SA),定義第2 個(gè)字節(jié)為目標(biāo)地址(DA),其余字節(jié)為純數(shù)據(jù)字節(jié).
CAN/LIN 網(wǎng)關(guān)硬件設(shè)計(jì)如圖2 所示.
圖2 CAN/LIN 網(wǎng)關(guān)硬件設(shè)計(jì)框圖
CAN/LIN 網(wǎng)關(guān)既是CAN 節(jié)點(diǎn)又是LIN 節(jié)點(diǎn),網(wǎng)關(guān)節(jié)點(diǎn)實(shí)現(xiàn)CAN 與LIN 總線數(shù)據(jù)幀的拆分、數(shù)據(jù)的暫存和數(shù)據(jù)幀的生成.網(wǎng)關(guān)硬件主芯片選取MC9S08DZ60,MC9S08DZ60 芯片中的MSCAN(CAN通信控制器模塊),通過(guò)PTE6 和PTE7 引腳分別和CAN 總線收發(fā)器TJA1040 的TXD 和RXD 引腳相連接,TAJ1040 的引腳CANH 和CANL 與CAN 總線接口相連接,實(shí)現(xiàn)CAN 數(shù)據(jù)幀的接收和發(fā)送.此外,MC9S08DZ60 芯片其他引腳還可以與按鍵電路和控制電路相連接,實(shí)現(xiàn)一定的通信和控制功能.
1)CAN/LIN 網(wǎng)關(guān)和其他CAN 節(jié)點(diǎn)之間進(jìn)行通信.如果向其他CAN 節(jié)點(diǎn)發(fā)送數(shù)據(jù)幀,首先根據(jù)所要生成的CAN 數(shù)據(jù)幀接收節(jié)點(diǎn)地址,設(shè)置CAN 數(shù)據(jù)幀的ID 值,發(fā)送ID 場(chǎng);根據(jù)所發(fā)送的數(shù)據(jù)字節(jié)的長(zhǎng)度設(shè)置DLC 值,發(fā)送DLC 和CAN 控制位;發(fā)送數(shù)據(jù)字節(jié);計(jì)算CRC 場(chǎng)的值,并發(fā)送CRC 場(chǎng);發(fā)送ACK 場(chǎng),發(fā)送CAN 數(shù)據(jù)幀幀結(jié)尾,完成CAN 數(shù)據(jù)幀的發(fā)送.如果接收來(lái)自CAN 節(jié)點(diǎn)的數(shù)據(jù)幀,并且進(jìn)行拆分,首先由MSCAN 濾波器判斷ID 值是否是要接收的ID,如果是則進(jìn)行接收,否則不進(jìn)行接收;接收DLC 場(chǎng),確定所要接收的數(shù)據(jù)場(chǎng)長(zhǎng)度;接收數(shù)據(jù)場(chǎng),接收CRC 場(chǎng),并判斷CRC 值是否正確,如果正確就保存數(shù)據(jù),否則丟棄數(shù)據(jù)幀,并發(fā)出遠(yuǎn)程幀,請(qǐng)求重新發(fā)送CAN 數(shù)據(jù)幀,完成CAN 數(shù)據(jù)幀的接收.
2)CAN/LIN 總線通信網(wǎng)關(guān)與LIN 從節(jié)點(diǎn)進(jìn)行通信.如果向從節(jié)點(diǎn)發(fā)送LIN 數(shù)據(jù)幀,首先發(fā)送LIN數(shù)據(jù)幀同步間隔和同步間隔校驗(yàn),然后發(fā)送LIN 數(shù)據(jù)幀同步場(chǎng)0x55 和同步場(chǎng)校驗(yàn),然后根據(jù)接收LIN數(shù)據(jù)幀的LIN 從節(jié)點(diǎn)的地址計(jì)算出ID 場(chǎng)的值,并且發(fā)送ID 場(chǎng)和LIN 數(shù)據(jù)場(chǎng),在計(jì)算LIN 數(shù)據(jù)幀校驗(yàn)和場(chǎng)的值,并發(fā)送這個(gè)值,完成LIN 數(shù)據(jù)幀的發(fā)送.如果接收來(lái)自LIN 從節(jié)點(diǎn)的數(shù)據(jù)幀,首先接收LIN 數(shù)據(jù)幀同步場(chǎng),進(jìn)行接收同步,然后接收LIN 數(shù)據(jù)幀ID,由SCI 濾波器判斷D 值是否是要接收的ID,如果是則接收后面的數(shù)據(jù)字節(jié),否則丟棄數(shù)據(jù)幀,在接收校驗(yàn)和場(chǎng),檢驗(yàn)校驗(yàn)和場(chǎng)是否正確,如果正確就保存數(shù)據(jù),否則丟棄數(shù)據(jù)幀,完成LIN 數(shù)據(jù)幀的接收.
3)非CAN/LIN 通信網(wǎng)關(guān)的CAN 節(jié)點(diǎn)將數(shù)據(jù)以CAN 數(shù)據(jù)幀發(fā)送到CAN 總線上.在CAN/LIN 網(wǎng)關(guān)在接收到CAN 數(shù)據(jù)幀之后,在MC9S08DZ60 芯片中將CAN 數(shù)據(jù)幀中的數(shù)據(jù)字節(jié)拆分出來(lái),再根據(jù)它第1 個(gè)數(shù)據(jù)字節(jié)的源地址和第2 個(gè)數(shù)據(jù)字節(jié)的目標(biāo)地址,配置LIN 數(shù)據(jù)字節(jié)的源地址和目標(biāo)地址,即LIN數(shù)據(jù)幀的第1 字節(jié)和第2 字節(jié)數(shù)據(jù)字節(jié)的內(nèi)容.同時(shí),根據(jù)加上余下的純數(shù)據(jù)字節(jié)后的長(zhǎng)度配置DLC,然后把CAN 的數(shù)據(jù)字節(jié)配置成為L(zhǎng)IN 的數(shù)據(jù)字節(jié),最后,再加上同步場(chǎng)0x55 和相應(yīng)的校驗(yàn)碼,完成CAN 數(shù)據(jù)幀向LIN 數(shù)據(jù)幀的轉(zhuǎn)換.
4)由LIN 從節(jié)點(diǎn)發(fā)送LIN 數(shù)據(jù)幀到LIN 總線上.在CAN/LIN 網(wǎng)關(guān)在接收到LIN 數(shù)據(jù)幀之后,在MC9S08DZ60 芯片中將LIN 數(shù)據(jù)幀中的數(shù)據(jù)字節(jié)拆分出來(lái),根據(jù)第2 個(gè)數(shù)據(jù)字節(jié)即數(shù)據(jù)幀的目的地址配置CAN 數(shù)據(jù)的優(yōu)先級(jí),根據(jù)第1 個(gè)和第2 個(gè)數(shù)據(jù)字節(jié)配置CAN 數(shù)據(jù)幀的源地址和目標(biāo)地址,根據(jù)純數(shù)據(jù)字節(jié)個(gè)數(shù)定義CAN 數(shù)據(jù)塊長(zhǎng)度,然后將純數(shù)據(jù)字節(jié)配置為CAN 數(shù)據(jù)幀中的數(shù)據(jù),最后加上CAN數(shù)據(jù)幀的統(tǒng)一定義位,實(shí)現(xiàn)LIN 數(shù)據(jù)幀向CAN 數(shù)據(jù)幀的轉(zhuǎn)換.
根據(jù)CAN/LIN 總線協(xié)議轉(zhuǎn)換特點(diǎn),本研究在Simulink 仿真環(huán)境下利用所提供的函數(shù)庫(kù)模塊并編寫(xiě)程序分別建立CAN 節(jié)點(diǎn)仿真模型、CAN/LIN 網(wǎng)關(guān)仿真模型和LIN 節(jié)點(diǎn)仿真模型,然后利用所建的仿真模型搭建CAN/LIN 總體的車(chē)載通信網(wǎng)絡(luò)系統(tǒng),如圖3 所示.
圖3 CAN/LIN 車(chē)載通信網(wǎng)絡(luò)系統(tǒng)模型
圖3 模型中,有3 個(gè)CAN 節(jié)點(diǎn),2 個(gè)LIN 節(jié)點(diǎn)和1 個(gè)CAN/LIN 網(wǎng)關(guān).模型中每個(gè)CANtr 和對(duì)應(yīng)的CANre 模塊組成一個(gè)CAN 節(jié)點(diǎn),LINtr 和對(duì)應(yīng)的LINre 模塊組成一個(gè)LIN 節(jié)點(diǎn),reCAN 模塊、trCAN模塊、reLIN 模塊和trLIN 模塊組成了CAN/LIN 網(wǎng)關(guān)節(jié)點(diǎn).為了使模型簡(jiǎn)潔,沒(méi)有加入每個(gè)階段的數(shù)據(jù)顯示模塊,其中CAN、LIN 節(jié)點(diǎn)的數(shù)據(jù)幀采用不同周期發(fā)送.CAN 節(jié)點(diǎn)模型每秒發(fā)送5 幀數(shù)據(jù),LIN 節(jié)點(diǎn)模型每秒發(fā)送2 幀數(shù)據(jù).CAN 數(shù)據(jù)幀之間通過(guò)比較ID 的大小來(lái)競(jìng)爭(zhēng)使用CAN 總線,模型中的Subsystem 模塊對(duì)總線上的CAN 數(shù)據(jù)幀ID 進(jìn)行比較,選擇ID 較小的數(shù)據(jù)幀進(jìn)行發(fā)送.
在利用該模型進(jìn)行仿真時(shí),模型中的節(jié)點(diǎn)按各自的周期發(fā)送由Workspace 輸入的數(shù)據(jù),加入數(shù)據(jù)幀顯示模塊對(duì)數(shù)據(jù)的傳輸過(guò)程進(jìn)行觀察,并確認(rèn)CAN 數(shù)據(jù)幀和LIN 數(shù)據(jù)幀的正確生成、發(fā)送和接收.
1)在 Matlab 的 Workspace 中 輸 入 x1 =[1010110-011010111],設(shè)定該數(shù)據(jù)由CAN1 節(jié)點(diǎn)發(fā)送數(shù)據(jù),經(jīng)CAN/LIN 總線通信網(wǎng)關(guān)轉(zhuǎn)發(fā)后由LIN2節(jié)點(diǎn)接收.
圖4 所示為數(shù)據(jù)幀的第38 位到54 位是所發(fā)送的純數(shù)據(jù)字節(jié),由圖中可見(jiàn)是[1010110011010111],即x1,該數(shù)據(jù)幀經(jīng)CAN/LIN 總線通信網(wǎng)關(guān)拆分提取,轉(zhuǎn)化為L(zhǎng)IN 數(shù)據(jù)幀發(fā)送到LIN 總線上(見(jiàn)圖5).數(shù)據(jù)幀的第41 位到51 位是所發(fā)送的純數(shù)據(jù)字節(jié)(LIN 數(shù)據(jù)幀采用8N1編碼,每一個(gè)字節(jié)有一個(gè)起始位和一個(gè)終止位),由圖中可見(jiàn)是[101011001101011-
1],即x1,該數(shù)據(jù)經(jīng)LIN2 節(jié)點(diǎn)拆分后可得.同時(shí),當(dāng)LIN1 接收到該數(shù)據(jù)幀時(shí),由于ID 不匹配,將舍棄對(duì)該數(shù)據(jù)幀的接收.
以上結(jié)果驗(yàn)證了CAN1 節(jié)點(diǎn)所發(fā)送出的數(shù)據(jù)被所需要的節(jié)點(diǎn)LIN2 正確接收.
2)在Matlab 的Workspace 中輸入y1 =[1101011-010101101],設(shè)定作為L(zhǎng)IN 節(jié)點(diǎn)的待發(fā)送數(shù)據(jù),經(jīng)CAN/LIN 總線通信網(wǎng)關(guān)轉(zhuǎn)發(fā)后由CAN2 節(jié)點(diǎn)接收.
圖6 所示為L(zhǎng)IN 總線上的數(shù)據(jù)幀從第41 位到51 位是所發(fā)送的純數(shù)據(jù)字節(jié)(LIN 數(shù)據(jù)幀采用8N1編碼,每一個(gè)字節(jié)有一個(gè)起始位和一個(gè)終止位),由圖中可見(jiàn)是[1101011010101101],即y1.
圖7 所示為CAN/LIN 總線通信網(wǎng)關(guān)將拆分LIN 數(shù)據(jù)幀所得到的數(shù)據(jù)作為CAN 數(shù)據(jù)幀的數(shù)據(jù)生成和發(fā)送的CAN 數(shù)據(jù)幀,數(shù)據(jù)幀的第38 位到54位是所發(fā)送的純數(shù)據(jù)字節(jié),由圖中可見(jiàn)是[110101101010-1101],即y1,CAN2 節(jié)點(diǎn)接收到CAN 數(shù)據(jù)幀以后,拆分?jǐn)?shù)據(jù)幀可得到該數(shù)據(jù).
在對(duì)CAN2 節(jié)點(diǎn)所接收到的數(shù)據(jù)進(jìn)行觀察的同時(shí),利用顯示模塊對(duì)CAN1 節(jié)點(diǎn)和CAN3 節(jié)點(diǎn)收到的數(shù)據(jù)進(jìn)行觀察,顯示它們沒(méi)有收到數(shù)據(jù).這一結(jié)果驗(yàn)證了LIN1 節(jié)點(diǎn)發(fā)出的數(shù)據(jù)被所需要的節(jié)點(diǎn)正確接收.
本研究設(shè)計(jì)的基于CAN/LIN 總線的車(chē)載通信網(wǎng)絡(luò)系統(tǒng).仿真模型中,各CAN 總線節(jié)點(diǎn)和LIN 總線節(jié)點(diǎn)模型都能夠正確發(fā)送和接收數(shù)據(jù);CAN/LIN總線通信網(wǎng)關(guān)模型能夠正確實(shí)現(xiàn)CAN 數(shù)據(jù)幀和LIN 數(shù)據(jù)幀的接收、發(fā)送和協(xié)議轉(zhuǎn)換,實(shí)現(xiàn)了網(wǎng)關(guān)的數(shù)據(jù)幀轉(zhuǎn)發(fā)和通信控制功能.
[1]卓偉.基于CAN/LIN 總線的車(chē)燈控制系統(tǒng)的研究[D].武漢:武漢理工大學(xué),2009.
[2]李如石,張津津,任富爭(zhēng).基于C8051F040 的CAN 總線通信[J].計(jì)算機(jī)與現(xiàn)代化,2013,29(3):124-127.
[3]沈會(huì),徐青菁,葉子晟,等.基于CAN 總線的電動(dòng)車(chē)窗控制系統(tǒng)設(shè)計(jì)[J].電力電子技術(shù),2011,45(12):84-86.
[4]聶單根.基于CAN/LIN 總線的汽車(chē)車(chē)身網(wǎng)絡(luò)技術(shù)的應(yīng)用研究[D].杭州:浙江大學(xué),2007.
[5]許萬(wàn),陳幼平,陳冰,等.基于CAN/LIN 總線的車(chē)載通信網(wǎng)絡(luò)設(shè)計(jì)[J].測(cè)控技術(shù),2007,28(10):44-47.
[6]薛定宇,陳陽(yáng)泉.基于Matlab/Simulink 的系統(tǒng)仿真技術(shù)應(yīng)用[M].北京:清華大學(xué)出版社,2011.