廖先莉,雷 霖,羅正華
(成都大學 電子信息工程學院,四川 成都 610106)
目前,發展中的汽車網絡技術有高速容錯網絡FlexRay、藍牙、無線局域網以及用于多媒體和導航的MOST 等無線網絡技術,而車內的電子控制系統主要由CAN/LIN 網絡組成[1-3].CAN/LIN 混合網絡在汽車上的應用將會使汽車網絡的可靠性以及經濟性得到較大的提高[4-5].本研究依據CAN 和LIN協議,設計構建了一個基于CAN/LIN 總線的車載通信網絡,并對其進行了測試和驗證.
CAN 總線是20 世紀80年代德國博世公司專門為汽車行業開發的一種串行通信總線.CAN 總線具有很高的實時性能,從傳輸速率最高可達1 Mbps的高速網絡到低成本多線路的50 Kbps 網絡都可以任意搭配,由于其高性能、高可靠性被廣泛應用于汽車業、航空業、工業控制與安全防護等領域[2].
LIN 總線是一種低成本的串行通訊網絡,用于實現汽車中的分布式電子系統控制[3].LIN 總線是一種輔助的總線網絡,為現有汽車網絡(例如CAN總線)提供輔助功能,在不需要CAN 總線的帶寬和多功能的場合,比如智能傳感器和制動裝置之間的通訊,使用LIN 總線可大大節省成本.
汽車內電子控制單元間的數據傳輸特征主要區別在于數據的傳輸速率,美國汽車工程師協會(SAE)將汽車網絡根據速率劃分為:A(低速,1 ~10 Kbps)、B(中速,10 ~100 Kbps)、C(高速,最高可達1 Mbps)3 個等級[4].
本研究設計的汽車車載CAN/LIN 總線的通信網絡系統模型如圖1 所示.

圖1 汽車車載CAN/LIN 通信網絡系統示意圖
如圖1,數據傳輸速率較高的CAN 總線用于B、C 類網絡,其控制對象主要包括發動機電控系統、ABS/ ASR、自動變速器、安全氣囊控制器及組合儀表信號的采集系統等實時性要求高的系統.LIN 總線用于A 類系統,其控制對象主要為車燈、電動座椅、中央門鎖、后視鏡、車窗控制開關等實時性要求低的系統.在該系統中,CAN 總線和LIN總線通過一個網關進行數據交換.
3.1.1 接口設計.
CAN 總線收發器提供CAN 總線通信控制器與物理傳輸媒介之間的接口,是影響CAN 網絡通信的一個重要器件.本設計選用飛利浦公司的數字電路芯片TJA1040 作為CAN 總線收發器,其速率可達1 MBaud,滿足CAN 總線的高速應用.TJA1040 可為CAN 總線提供差動的發送功能,為CAN 總線通信控制器提供差動的接收功能.
3.1.2 協議設計.
本設計中的CAN 總線網絡采用CAN 2.0B 所規定的標準數據幀格式,CAN 2.0B 標準幀共有11位標志位[5].根據CAN 數據幀格式,統一定義:保留位R 為0,數據頁DP 為0,IDE 為0(為標準幀),協議數據單元PDU 格式場PF 為0xFF,RTR 為0.優先級依照節點的需求級別來定義,而數據塊長度DLC則需根據實際的數據字節來定義,源地址和目標地址則根據各個節點地址定義.若目標地址定義為CAN/LIN 網關地址,則定義第1 個數據字節為源地址,第2 個數據字節為最終的目標地址,余下字節則為純數據字節.
3.2.1 接口設計.
本設計選用飛利浦公司的數字電路芯片TJA1020 作為LIN 總線收發器.TJA1020 收發器是一個物理媒體連接,它是LIN 主/從機協議控制器和LIN 傳輸媒體之間的接口,協議控制器輸入引腳TXD 的發送數據流被LIN 收發器轉換成總線信號.TJA1020 的接收器檢測到LIN 總線上的數據流并通過RXD 引腳將它傳送到協議控制器.收發器有低功耗管理模式,它在睡眠模式中幾乎不消耗電流并在錯誤模式中減少功率消耗.
3.2.2 協議設計.
完整的LIN 數據幀包括同步間隔、同步場、標識符ID、數據字節以及校驗碼[6].同步場的格式為0x55,校驗碼是所有數據場字節相加之后再取反,接收處的節點也將所有數據場字節相加,然后將其和與校驗碼相加,判斷結果是否為0xFF,若不是則表明數據傳輸出了錯誤.LIN 數據定義第1 個字節為源地址(SA),定義第2 個字節為目標地址(DA),其余字節為純數據字節.
CAN/LIN 網關硬件設計如圖2 所示.

圖2 CAN/LIN 網關硬件設計框圖
CAN/LIN 網關既是CAN 節點又是LIN 節點,網關節點實現CAN 與LIN 總線數據幀的拆分、數據的暫存和數據幀的生成.網關硬件主芯片選取MC9S08DZ60,MC9S08DZ60 芯片中的MSCAN(CAN通信控制器模塊),通過PTE6 和PTE7 引腳分別和CAN 總線收發器TJA1040 的TXD 和RXD 引腳相連接,TAJ1040 的引腳CANH 和CANL 與CAN 總線接口相連接,實現CAN 數據幀的接收和發送.此外,MC9S08DZ60 芯片其他引腳還可以與按鍵電路和控制電路相連接,實現一定的通信和控制功能.
1)CAN/LIN 網關和其他CAN 節點之間進行通信.如果向其他CAN 節點發送數據幀,首先根據所要生成的CAN 數據幀接收節點地址,設置CAN 數據幀的ID 值,發送ID 場;根據所發送的數據字節的長度設置DLC 值,發送DLC 和CAN 控制位;發送數據字節;計算CRC 場的值,并發送CRC 場;發送ACK 場,發送CAN 數據幀幀結尾,完成CAN 數據幀的發送.如果接收來自CAN 節點的數據幀,并且進行拆分,首先由MSCAN 濾波器判斷ID 值是否是要接收的ID,如果是則進行接收,否則不進行接收;接收DLC 場,確定所要接收的數據場長度;接收數據場,接收CRC 場,并判斷CRC 值是否正確,如果正確就保存數據,否則丟棄數據幀,并發出遠程幀,請求重新發送CAN 數據幀,完成CAN 數據幀的接收.
2)CAN/LIN 總線通信網關與LIN 從節點進行通信.如果向從節點發送LIN 數據幀,首先發送LIN數據幀同步間隔和同步間隔校驗,然后發送LIN 數據幀同步場0x55 和同步場校驗,然后根據接收LIN數據幀的LIN 從節點的地址計算出ID 場的值,并且發送ID 場和LIN 數據場,在計算LIN 數據幀校驗和場的值,并發送這個值,完成LIN 數據幀的發送.如果接收來自LIN 從節點的數據幀,首先接收LIN 數據幀同步場,進行接收同步,然后接收LIN 數據幀ID,由SCI 濾波器判斷D 值是否是要接收的ID,如果是則接收后面的數據字節,否則丟棄數據幀,在接收校驗和場,檢驗校驗和場是否正確,如果正確就保存數據,否則丟棄數據幀,完成LIN 數據幀的接收.
3)非CAN/LIN 通信網關的CAN 節點將數據以CAN 數據幀發送到CAN 總線上.在CAN/LIN 網關在接收到CAN 數據幀之后,在MC9S08DZ60 芯片中將CAN 數據幀中的數據字節拆分出來,再根據它第1 個數據字節的源地址和第2 個數據字節的目標地址,配置LIN 數據字節的源地址和目標地址,即LIN數據幀的第1 字節和第2 字節數據字節的內容.同時,根據加上余下的純數據字節后的長度配置DLC,然后把CAN 的數據字節配置成為LIN 的數據字節,最后,再加上同步場0x55 和相應的校驗碼,完成CAN 數據幀向LIN 數據幀的轉換.
4)由LIN 從節點發送LIN 數據幀到LIN 總線上.在CAN/LIN 網關在接收到LIN 數據幀之后,在MC9S08DZ60 芯片中將LIN 數據幀中的數據字節拆分出來,根據第2 個數據字節即數據幀的目的地址配置CAN 數據的優先級,根據第1 個和第2 個數據字節配置CAN 數據幀的源地址和目標地址,根據純數據字節個數定義CAN 數據塊長度,然后將純數據字節配置為CAN 數據幀中的數據,最后加上CAN數據幀的統一定義位,實現LIN 數據幀向CAN 數據幀的轉換.
根據CAN/LIN 總線協議轉換特點,本研究在Simulink 仿真環境下利用所提供的函數庫模塊并編寫程序分別建立CAN 節點仿真模型、CAN/LIN 網關仿真模型和LIN 節點仿真模型,然后利用所建的仿真模型搭建CAN/LIN 總體的車載通信網絡系統,如圖3 所示.

圖3 CAN/LIN 車載通信網絡系統模型
圖3 模型中,有3 個CAN 節點,2 個LIN 節點和1 個CAN/LIN 網關.模型中每個CANtr 和對應的CANre 模塊組成一個CAN 節點,LINtr 和對應的LINre 模塊組成一個LIN 節點,reCAN 模塊、trCAN模塊、reLIN 模塊和trLIN 模塊組成了CAN/LIN 網關節點.為了使模型簡潔,沒有加入每個階段的數據顯示模塊,其中CAN、LIN 節點的數據幀采用不同周期發送.CAN 節點模型每秒發送5 幀數據,LIN 節點模型每秒發送2 幀數據.CAN 數據幀之間通過比較ID 的大小來競爭使用CAN 總線,模型中的Subsystem 模塊對總線上的CAN 數據幀ID 進行比較,選擇ID 較小的數據幀進行發送.
在利用該模型進行仿真時,模型中的節點按各自的周期發送由Workspace 輸入的數據,加入數據幀顯示模塊對數據的傳輸過程進行觀察,并確認CAN 數據幀和LIN 數據幀的正確生成、發送和接收.
1)在 Matlab 的 Workspace 中 輸 入 x1 =[1010110-011010111],設定該數據由CAN1 節點發送數據,經CAN/LIN 總線通信網關轉發后由LIN2節點接收.
圖4 所示為數據幀的第38 位到54 位是所發送的純數據字節,由圖中可見是[1010110011010111],即x1,該數據幀經CAN/LIN 總線通信網關拆分提取,轉化為LIN 數據幀發送到LIN 總線上(見圖5).數據幀的第41 位到51 位是所發送的純數據字節(LIN 數據幀采用8N1編碼,每一個字節有一個起始位和一個終止位),由圖中可見是[101011001101011-
1],即x1,該數據經LIN2 節點拆分后可得.同時,當LIN1 接收到該數據幀時,由于ID 不匹配,將舍棄對該數據幀的接收.


以上結果驗證了CAN1 節點所發送出的數據被所需要的節點LIN2 正確接收.
2)在Matlab 的Workspace 中輸入y1 =[1101011-010101101],設定作為LIN 節點的待發送數據,經CAN/LIN 總線通信網關轉發后由CAN2 節點接收.
圖6 所示為LIN 總線上的數據幀從第41 位到51 位是所發送的純數據字節(LIN 數據幀采用8N1編碼,每一個字節有一個起始位和一個終止位),由圖中可見是[1101011010101101],即y1.
圖7 所示為CAN/LIN 總線通信網關將拆分LIN 數據幀所得到的數據作為CAN 數據幀的數據生成和發送的CAN 數據幀,數據幀的第38 位到54位是所發送的純數據字節,由圖中可見是[110101101010-1101],即y1,CAN2 節點接收到CAN 數據幀以后,拆分數據幀可得到該數據.


在對CAN2 節點所接收到的數據進行觀察的同時,利用顯示模塊對CAN1 節點和CAN3 節點收到的數據進行觀察,顯示它們沒有收到數據.這一結果驗證了LIN1 節點發出的數據被所需要的節點正確接收.
本研究設計的基于CAN/LIN 總線的車載通信網絡系統.仿真模型中,各CAN 總線節點和LIN 總線節點模型都能夠正確發送和接收數據;CAN/LIN總線通信網關模型能夠正確實現CAN 數據幀和LIN 數據幀的接收、發送和協議轉換,實現了網關的數據幀轉發和通信控制功能.
[1]卓偉.基于CAN/LIN 總線的車燈控制系統的研究[D].武漢:武漢理工大學,2009.
[2]李如石,張津津,任富爭.基于C8051F040 的CAN 總線通信[J].計算機與現代化,2013,29(3):124-127.
[3]沈會,徐青菁,葉子晟,等.基于CAN 總線的電動車窗控制系統設計[J].電力電子技術,2011,45(12):84-86.
[4]聶單根.基于CAN/LIN 總線的汽車車身網絡技術的應用研究[D].杭州:浙江大學,2007.
[5]許萬,陳幼平,陳冰,等.基于CAN/LIN 總線的車載通信網絡設計[J].測控技術,2007,28(10):44-47.
[6]薛定宇,陳陽泉.基于Matlab/Simulink 的系統仿真技術應用[M].北京:清華大學出版社,2011.