當前汽車應用開發人員正面臨著眾多設計挑戰,由于現代汽車增加了更多電子功能,對低功耗和更小印刷電路板的需求也越來越強烈,所有這些都表明在諸如車身控制和傳動系統等應用領域中這樣的特性將日益重要。
如今汽車中的絕大多數電子控制單元互相之間都有連接,但汽車制造商對不同的應用使用了不同的總線系統。例如傳動系統和制動系統多數通過控制器局域網絡(CAN)來聯系,而通訊不太密集的應用(如車窗升降電機和控制車鏡的按鍵)則可能使用局域互聯網絡(LIN)協議。本文將論述怎樣利用LIN總線來滿足汽車業所需要的新增電子功能,并同時確保低功耗以及使用較小面積的PCB。
圖1:LIN在汽車上的典型應用領域
LIN協議
LIN協議由歐洲汽車制造商協會設計,是一種低成本短距離低速網絡。它旨在傳送開關設置和傳感器輸入等狀態的變化,并對這類變化做出響應,因此可用于傳送發生時間約為幾分之一秒的事件,并不適用于汽車應用中的高速事件(如引擎管理)。LIN的另一個目的是利用該協議的簡單性降低系統成本,以便能夠方便地在質優價廉的8位單片機中實現。LIN總線協議的最新版本是V2.0,可以在LIN聯盟的網站(www.lin-subbus.de)上得到。
LIN支持單線雙向通訊,采用廉價的由RC振蕩器驅動的單片機,可省掉晶體振蕩器或陶瓷振蕩器的費用。雖然LIN降低了系統總成本,但在時間和軟件上卻要付出代價,每條報文都必須經過一個自動確定波特率的過程。LIN協議支持最高20kbps傳輸速率,以及一個低功耗休眠模式,此時總線將被關閉,不再消耗汽車電池。采用8位單片機并結合外部或內部RC有助于降低系統成本,并減少PCB實際的面積。
圖1顯示了LIN在汽車中的典型應用。總線上的地電位信號為顯性狀態,只要任何節點將總線電壓拉低,就會出現這一狀態。當總線處于電池電壓且所有節點都使總線處于懸空狀態時,會出現隱性狀態。在空閑狀態下,總線通過上拉電阻懸空為高電平。
LIN總線的工作電壓范圍為9~18V,但總線上所有部件都必須能夠承受40V電壓。通常,單片機通過線路驅動器/接收器與總線隔離,這種方案下總線每個節點都端接為VBAT電平,主節點通過1kΩ電阻端接,從節點則通過20-47kΩ的電阻端接。總線最大設計長度為40米。
每個字節都利用起始位和停止位作為頭尾標志位。起始位與空閑狀態相反,為0,而停止位則等同空閑狀態(即1)。在每個字節內,數據從最低位(LSB)開始傳送。
報文協議
圖2:LIN網絡在車鏡控制上的應用
主節點用于控制LIN總線,它通過對從節點進行查詢,將數據發布到總線上。從節點僅在主節點的命令下發送數據,從而在無需仲裁的情況下實現雙向通訊。報文的傳送是在主節點發出一個同步間隔脈沖后開始的,然后跟隨的是同步字段和報文字段。主節點通過在每個報文的開始處發送同步字段可設定整個總線時鐘。
每條報文的第二字節是一個標識符字節,它告訴LIN總線隨后將發送的是什么數據,并指明哪個節點應該應答及應答的長度是多少。對于給定的命令,只有一個從節點可以應答。
從節點僅在主節點的控制下在LIN總線上發送數據。一旦數據發布到總線上,任何節點都可以接收該數據。因此,一個從節點向其它從節點發送數據無需主節點干預。
由于LIN協議使用低成本RC振蕩器,因此從節點必須檢測主節點每次發送的波特率,并調整為當前速率,所以每次通訊都以同步字段開始,它是一個0、1交替出現的字節。
同步字段之后是標識符字段,它告訴LIN總線接著出現的內容。該字段進一步分為三個子字段:4位(0-3)用于對總線上的設備進行尋址;2位(4-5)指明此后報文的長度,最后2位(6-7)用于奇偶校驗。
除休眠命令之外,LIN協議沒有定義任何報文的內容,其它命令是在具體應用中定義的。
錯誤檢測
以下錯誤必須在每一節點處進行檢測和計數,一旦出現錯誤,該命令就要被丟棄,并記錄這一錯誤事件。位錯誤——正在發送的節點應該對希望發送的數據與總線上實際出現的數據進行比較,控制器必須等待足夠時間以確保總線對發出的數據做出反應,然后才可測試這一數據。假定總線響應信號的最小邊沿變化速率為1V/μs,最大總線電壓為18V,那么發送器應等待18μs后才可進行測試。校驗和錯誤——每條報文的數據內容都受到校驗和字節的保護,該字節是數據字節相加后取256模的余數再取反的結果。奇偶校驗——命令字節使用2個奇偶位來保護其它6個數位,這兩個數位在接收后要重新計算,再與接收結果進行比較。
該協議沒有定義直接錯誤報告機制,然而由于每個從節點都應自行追蹤各自的錯誤,因此主節點可利用正常的報文協議來請求獲得錯誤狀態。
LIN和系統要求
那么LIN是如何滿足對低功耗、低系統成本、功能增加甚至減少汽車總重量的要求呢?
首先它可以方便地用軟件實現LIN協議,該協議不需要單片機給予過多的硬件支持,通過使用一個簡單的USART或增強型USART就可以實現。USART支持諸如自動波特率檢測等功能,這意味著在LIN應用中可以使用一個簡單的質優價廉的8位單片機。還有一個優點就是LIN在協議層不需要復雜的操作系統,不多的軟件開銷還使得設計人員能夠選擇存儲器容量較小的單片機。
如何運用像LIN這樣的簡單協議對汽車進行控制呢?以車鏡控制為例,許多汽車的車鏡相互之間仍是硬連接,或者在豪華型汽車中通過CAN這樣的昂貴協議連接,其實利用LIN總線就可以方便地將左右車鏡和四向儀(可以改變車鏡位置的四方向開關)連接起來。在典型的LIN方案中,四向儀是主節點,兩個車鏡是從節點。四向儀讀取按鍵的狀態,將報文發送給相應的車鏡。
那么使用LIN能夠為諸如車鏡控制等應用增加新功能嗎?回答是不需要額外連線,就可以方便地添加其它功能,如集成式轉向信號、集成式照地燈或車鏡加熱器。這里車鏡只需要與地電位、VBAT和LIN總線連接,需要改動的只有主節點,它必須知道要實現哪些車鏡功能。
圖2說明了用于車鏡應用的LIN網絡。為了更清楚地理解這個例子,讓我們更深入地研究一下。該網絡中的主節點是一個PIC18F4680 8位閃存單片機,它讀取車鏡選擇開關和四向儀,還通過CAN總線接收報文。從CAN總線發送給主控LIN節點的報文包括左右轉向信號和開門,接收到來自CAN總線的報文后,主節點通過LIN總線向從節點發出命令,如“左車鏡上升或左車鏡下降”。
在此例中,從節點由PIC16F688 8位閃存單片機組成。PIC16F688具有一個集成的LIN收發器和一個增強型USART,其中USART能自動執行自動波特率檢測。從節點收到報文并利用步進電機使車鏡上升或下降。假設車鏡模塊沒有集成式轉向信號等其它功能,當從節點從LIN總線上接收到一條諸如“左轉向信號”的報文時,它就會忽略這一報文或者觸發I/O用于轉向信號(這部分內容已超出本文討論范圍)。觸發I/O的好處是無論車鏡是否集成了轉向信號都可應用相同的軟件,只需要對硬件做適當更改即可運行,也就是說功能不同的各種車鏡都可以使用同一軟件。
LIN軟件
LIN主節點有三個主要的軟件進程,第一個進程接收CAN報文,并將其轉變為LIN報文;第二個進程讀取四向儀和車鏡選擇開關的狀態;第三個進程向從節點發出報文。
如果主節點從CAN總線上接收到“左轉向信號打開”的報文,它會將該報文轉變成LIN協議,并發送給適當的LIN總線節點(在本例中為左車鏡)。對PIC18F4680中的CAN控制器進行編程后,它可以只接收來自CAN總線的特定報文,而不會有任何其它軟件開銷,這一硬件過濾方式使CAN總線的通訊只有極少軟件工作量。PIC18F4680也集成了一個可用于LIN總線通訊的USART,由于LIN總線主節點不必執行自動波特率檢測,因此它能夠通過USART發送整條報文。
車鏡從節點有n+1個進程,其中n是車鏡中集成的功能數目。如果只要控制車鏡的上下左右,軟件進程就只有2個,第一個是收發進程,第二個是車鏡控制進程,主要驅動步進電機,其它可能的進程有“照地燈開”和“左轉向信號開”。因為PIC16F688有一個增強型USART,可實現波特率檢測,所以LIN通訊的軟件開銷非常少,這就為實現其它功能(包括檢修)留出了很大余地。
本文總結
正如前面所述,LIN總線能夠增加功能和降低成本,可以用軟件編程實現各種特性,也可以通過軟硬件功能增添新的特性,這樣不同的模塊就都可以用一個硬件或一個軟件平臺實現。LIN總線的靈活性有利于降低生產和軟/硬件維護方面的成本。因為LIN總線非常簡單,所以用質優價廉的8位單片機就可以實現,從而降低系統總成本。