車身中央控制器的設計與實現
作為分布式車身控制系統的主節點,BCM與其它節點通過LIN總線進行通訊,采用LIN物理層收發器TJA1021和MCU片上外設UART完成LIN接口電路的設計,如圖5所示。TJA1021是Philips(編者注:現在是NXP公司)的LIN物理層芯片,波特率高達20kbit/s,實現總線波形整形和電平轉換功能[3],具有很高的抗電磁干擾性和極低的電磁發射,可以滿足汽車環境的苛刻要求。它內部集成從機端電阻,在從機節點應用中無須再外接電阻便可以實現LIN總線的阻抗匹配,BCM是LIN主節點,如圖5所示,需要外接1k主機端電阻到VEE。
本文引用地址:http://www.104case.com/article/114479.htmLIN總線數據采取SCI格式,將TJA1021的TXD和RXD連接到MCU的UART發送和接收引腳上,便可以在UART上以軟件的形式實現LIN的數據鏈路層。由于LIN在物理上為單線形式,發送和接收都是在LIN線上進行的,所以發送也會觸發接收,這樣便可以將其數據鏈路層的實現統一到UART的接收處理函數中來。該部分可以根據LIN幀的格式以狀態機的形式實現[4]。
BCM做為車身控制系統的LIN主節點,以時間片輪轉的方式調度著LIN報文的傳輸,當時間片到達時,BCM發送包括間隔場、同步場和PID在內的幀頭[5],然后由各個節點根據該PID決定接收數據場還是發送數據場。時間片的輪轉是基于調度表實現的,定義如下形式的結構體實現對調度表條目的管理。
typedef struct
{
uchar handle;
uchar pid;
uchar mode;
uchar *data;
uchar datalen;
uchar ticks;
}l_sch_table_item;
其中handle為調度表條目索引,每次時間片輪轉時加一,輪轉到調度表表尾時切換到調度表表頭繼續輪轉,pid為LIN報文的Protected ID,mode表示該幀數據場是由BCM發送還是由其他節點發送,data為數據場,datalen為數據場長度,ticks定義時間片長度即該幀和下一幀的時間間隔。
LIN幀調度表為l_sch_table_item結構體數組,根據當前調度表條目的ticks決定時間片計時時間,超時發生時,切換當前時間片,同時切換調度表條目,這樣便實現了LIN報文的輪轉調度。
結語
本文針對某車型分析了其車身控制系統結構,從輸入信號檢測、輸出控制和LIN通訊三個方面,描述了其車身中央控制器的設計實現,該控制器經裝車試驗,運行良好,功能穩定,有很高的實用價值。
評論