基于CAN總線的車身電器控制系統(tǒng)網絡實驗臺設計
3 系統(tǒng)軟件設計
任何CAN總線系統(tǒng)的通信協(xié)議都由物理層協(xié)議、數(shù)據(jù)鏈路層協(xié)議和應用層協(xié)議組成。SJAl000和PCA82C250的硬件結構保證了協(xié)議的物理層和數(shù)據(jù)鏈路層。對于應用層,在不同的應用領域,人們制定了不同的協(xié)議,包括CANopen、DeviceNet及SAE J1939等。應用層協(xié)議決定了CAN總線系統(tǒng)的可擴展性。將CAN應用層合理分配后應用于軟件結構中可提高軟件的兼容性。
本設計各類節(jié)點可將程序分為主程序和子程序。主程序的目的是監(jiān)控本節(jié)點中各電器的狀態(tài),采用查詢方式編程:子程序分為接收子程序和發(fā)送子程序,采用模塊化編程,將節(jié)點的功能分成各種模塊并形成文件,在編寫各節(jié)點程序時直接調用各個模塊程序函數(shù)即可。這里參考SAE J1939的編碼規(guī)則對CAN系統(tǒng)的應用層進行分配,并介紹各節(jié)點的軟件結構。
3.1節(jié)點主程序
上位機轉換節(jié)點主程序的作用是:查詢總線上的數(shù)據(jù),并將依據(jù)CAN協(xié)議的數(shù)據(jù)轉換為依據(jù)RS232電平標準的數(shù)據(jù)。圖7為上位機轉換節(jié)點流程:開關控制節(jié)點主程序用于查詢開關的閉合或斷開狀態(tài)并將開關狀態(tài)存儲到單片機的寄存器中。圖8所示為開關控制節(jié)點的程序流程,其車燈控制節(jié)點主程序用于查詢CAN總線上的數(shù)據(jù)以控制相應的電器。圖9所示為車燈控制節(jié)點的程序流程,其車門控制節(jié)點既要查詢開關的狀態(tài)存人單片機,又要查詢CAN總線的數(shù)據(jù)控制相應的電機,其主程序包含開關控制節(jié)點和車燈控制節(jié)點主程序的功能。
3.2 節(jié)點子程序
接收子程序的作用是將CAN總線上傳來的數(shù)據(jù)存儲到單片機中合適的位置,需要用時,CPU直接從該位置查詢即可。在運行接收函數(shù)前,需先檢查CAN控制器SJAl000的寄存器中是否有傳來的數(shù)據(jù),如果有則運行此程序;如果無,則放棄或繼續(xù)查詢。發(fā)送子程序的作用是將所要發(fā)送的數(shù)據(jù)包裝并發(fā)送到CAN控制器。在主程序中,系統(tǒng)不斷查詢SJAl000的狀態(tài),一旦空閑,CPU將待發(fā)送的數(shù)據(jù)發(fā)送到CAN控制器。
4 結束語
通過對基于CAN總線的車身電器控制系統(tǒng)的整體優(yōu)化設計,得出結論:對車身節(jié)點進行優(yōu)化后,資源得到合理使用,并增強了節(jié)點的實用和美觀性,使節(jié)點的接口電路設計更加靈活。本方案側重于對實驗臺實用性的改進。通信過程中存在的干擾、基于時間觸發(fā)的CAN(即TTCAN)的應用問題尚待進一步的研究。
評論