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