LIN總線技術(shù)在汽車智能燈控系統(tǒng)中的應用
下面對汽車智能燈控模塊控制思想及LIN總線技術(shù)在其中的應用做出具體分析:在系統(tǒng)啟動并進行初始化以后,子模塊1開始啟動一個定時器,實現(xiàn)周期性地對數(shù)字量診斷輸出的車燈和模擬電流傳感器診斷輸出的車燈進行檢測(檢測不同智能開關(guān)向微控制器反饋的數(shù)字和模擬故障信號),對于出現(xiàn)故障的車燈信息,通過LIN總線傳輸?shù)阶幽K2。傳輸信息包括故障車燈的名稱、故障車燈所在的診斷組(數(shù)字量診斷組或模擬量診斷組)和故障狀態(tài)(斷路或短路等)。子模塊1同時亦接收來自于子模塊2的儀表盤的車燈按鈕掃描信息,該信息包含了駕駛員對于車燈狀態(tài)的要求(開通或關(guān)斷)。然后結(jié)合診斷結(jié)果及儀表盤的掃描結(jié)果,決定是否打開車燈或關(guān)閉車燈。子模塊2通過LIN總線接收子模塊1傳輸過來的車燈的故障診斷信息,周期性的通過LCD進行顯示。同時亦周期性的掃描儀表盤的按鈕狀態(tài),并通過LIN總線傳輸?shù)阶幽K1。
本汽車燈光控制模塊作為車身低端網(wǎng)絡,傳輸數(shù)據(jù)量小,對傳輸快速性要求不高,20kBaud完全可以滿足系統(tǒng)對傳輸速率的要求。相比于具有更多優(yōu)良性能而價格也更高昂的CAN總線,LIN總線成本較低,容易在UART中實現(xiàn),并具有較好的容故障能力和傳輸可靠性。在綜合考慮總線的硬件與軟件成本和總線的可靠性之后,選擇LIN總線實現(xiàn)燈控模塊內(nèi)部兩個子模塊間的數(shù)據(jù)傳輸,而CAN總線則用于燈控模塊與車身內(nèi)部其他ECU之間的通信。
3.1 LIN總線硬件接口電路
LIN總線硬件接口電路如圖5所示,該模塊分為主節(jié)點和從節(jié)點兩個單元。供電電源電路采用英飛凌TLE4278電壓調(diào)節(jié)器實現(xiàn),輸入Vi為12V,輸出Vq為5V。收發(fā)器采用英飛凌TLE 6258系列LIN總線收發(fā)器。從安全角度考慮,主節(jié)點電路在電源引腳和總線間以及總線和參考地之間分別連接1kΩ電阻和1nF電容,以保證總線信號在顯性電平和隱性電平間切換時有合適的時間延遲。
TLE 6258是單線收發(fā)器,適用于LIN協(xié)議,與LIN規(guī)范1.2兼容,發(fā)送速率可達20kbps,功率消耗低,且具有短路保護和過溫保護等功能,特別適于作為汽車和工業(yè)應用,且可用于標準的ISO9141系統(tǒng)。為了減小電流損耗,TLE 6258提供了一種空閑模式。在空閑模式下,TLE 6258退出總線活動,既不接收也不發(fā)送數(shù)據(jù),電流降到最低,從而達到減小電流損耗的目的。TLE 6258在正常工作模式和空閑模式之間的切換過程如圖6所示,在正常工作模式下,通過對ENN置1進入空閑模式。在空閑模式下,通過在總線上發(fā)送喚醒幀,可把主機或從機從空閑模式喚醒,返回到正常工作模式。進入正常工作模式后,ENN變?yōu)?,釋放RxD為傳輸數(shù)據(jù)狀態(tài)。
3.2 LIN總線通訊軟件設(shè)計
LIN軟件基于幾個狀態(tài)機制和功能塊,狀態(tài)機制通過串行接口的中斷調(diào)用,在程序中用nTRANSCEIVER_STATUS表示每個狀態(tài)。主機任務發(fā)送同步間隔場(Synch Break Field)、同步場(Synch Field)和標識符場,如果從機在總線上檢測到匹配的標識符,它會接收或發(fā)送數(shù)據(jù)到總線(這里假設(shè)數(shù)據(jù)字節(jié)是8個,主機為接收數(shù)據(jù),從機為發(fā)送數(shù)據(jù),也可定義為主機發(fā)送數(shù)據(jù),從機接收數(shù)據(jù))。以下(1)~(3)為主機任務,(4)~(13)為從機任務。
(1)發(fā)送同步間隔場;
(2)接收同步間隔場和發(fā)送同步場;
(3)接收同步場和產(chǎn)生/發(fā)送ID域;
(4)接收ID域(報文過濾),拷貝數(shù)據(jù)到緩沖器(LIN transfer buffer) 并發(fā)送第一個數(shù)據(jù)字節(jié);
(5)接收第一個數(shù)據(jù)字節(jié)和發(fā)送第二個數(shù)據(jù)字節(jié);
(6)接收第二個數(shù)據(jù)字節(jié)和發(fā)送第三個數(shù)據(jù)字節(jié);
(7)接收第三個數(shù)據(jù)字節(jié)和發(fā)送第四個數(shù)據(jù)字節(jié);
(8)接收第四個數(shù)據(jù)字節(jié)和發(fā)送第五個數(shù)據(jù)字節(jié);
(9)接收第五個數(shù)據(jù)字節(jié)和發(fā)送第六個數(shù)據(jù)字節(jié);
(10)接收第六個數(shù)據(jù)字節(jié)和發(fā)送第七個數(shù)據(jù)字節(jié);
(11)接收第七個數(shù)據(jù)字節(jié)和發(fā)送第八個數(shù)據(jù)字節(jié);
(12)接收第八個數(shù)據(jù)字節(jié)和計算/發(fā)送校驗和域;
(13)接收校驗和域。
為了傳輸汽車智能燈控模塊中所需要的信息,定義了7個字節(jié)變量a0、a1、a2、a3、a4、a5和a6,用于存儲車燈故障狀態(tài)信息;另外還定義了兩個字節(jié)變量key_result0和key_result1,用于存儲儀表盤的車燈按鈕掃描信息。
車燈故障狀態(tài)信息的定義分為數(shù)字量診斷組和模擬量診斷組:數(shù)字量診斷組包括駐車燈、示警燈和尾燈等20盞燈;模擬量診斷組包括前照燈、霧燈等6盞燈。每盞燈的故障狀態(tài)有三種情況,用兩個“位”來表示:正常狀態(tài)(DIAG_OK),用“00”表示;斷路狀態(tài)(DIAG_OPEN_LOAD),用“01”表示;過載狀態(tài)(DIAG_OVERLOAD),用“10”表示。例如,左駐車燈用a2的低兩位表示,定義為static sbit parklightfrontleft_lowbit=a2^0、static sbit parklightfrontleft_highbit=a2^1;a2^1=0,a2^0=1,則表示駐車燈處于斷路故障狀態(tài)。如此推算,模擬量診斷組6盞車燈,故障狀態(tài)信息需要占用12位,我們用字節(jié)存儲器a0和a1表示;數(shù)字量診斷組20盞車燈,故障狀態(tài)信息需要占用40位,我們用字節(jié)存儲器a2、a3、a4、a5和a6表示。車燈故障狀態(tài)信息共計7字節(jié),采用字節(jié)數(shù)為8的報文幀格式傳輸,第8個字節(jié)用0補齊。
儀表盤車燈按鈕共計16個開關(guān)量,每個開關(guān)量有兩種狀態(tài),用一個“位”表示:按鈕關(guān)斷,用“1”表示;按鈕打開,用“0”表示。我們用兩個字節(jié)存儲器key_result0和key_result1存儲按鈕信息,報文幀含有兩個字節(jié)的數(shù)據(jù)量。
發(fā)送數(shù)據(jù)字節(jié)過程如圖7所示。以發(fā)送車燈故障狀態(tài)信息為例,這個狀態(tài)機制用于把數(shù)據(jù)字節(jié)發(fā)送到總線上去,ID被定義為發(fā)送ID(SEND_ID)。
子狀態(tài)及相應的收發(fā)器狀態(tài)如下。
子狀態(tài)1~8:節(jié)點用于發(fā)送數(shù)據(jù)字節(jié) 接收中斷 LIN_vRxd_Interrupt;
子狀態(tài)9:節(jié)點用于發(fā)送數(shù)據(jù)字節(jié) 接收中斷 LIN_vRxd_Interrupt;
子狀態(tài)10:校驗和域已經(jīng)被正確接收 接收中斷 LIN_vRxd_Interrupt。
其中,子狀態(tài)1接收中斷中調(diào)用功能函數(shù)UCB_Txd,該函數(shù)獲取用戶數(shù)據(jù)存儲的首地址。
接收數(shù)據(jù)字節(jié)過程如圖8所示。以接收儀表盤車燈按鈕信息為例,這個狀態(tài)機制用于接收來自總線的數(shù)據(jù),ID被定義為接收ID(REC_ID)。
評論