基于CAN/LIN息線的混合網(wǎng)關(guān)設(shè)計(jì)
2.1 主控制器的選擇
實(shí)現(xiàn)數(shù)據(jù)的高效率、高質(zhì)量的存儲轉(zhuǎn)發(fā)是網(wǎng)關(guān)的重要目標(biāo),而主控制器是網(wǎng)關(guān)的核心器件,它的性能好壞直接決定了網(wǎng)關(guān)的效率高低。主控器對接收到的數(shù)據(jù)進(jìn)行緩存,因此主控制器需要有較高的存儲容量。主控器還要對它所接收與轉(zhuǎn)發(fā)的數(shù)據(jù)進(jìn)行協(xié)議轉(zhuǎn)換等數(shù)據(jù)處理,因此還要有較強(qiáng)的運(yùn)算能力。
本設(shè)計(jì)選用了Atml公司的AT91SAM7A3作為網(wǎng)關(guān)的核心控制器。這是一顆基于ARM7TDMI內(nèi)核的32位RISC處理器,具有執(zhí)行速度快、效率高的特點(diǎn),能夠滿足網(wǎng)關(guān)的數(shù)據(jù)處理要求。該芯片內(nèi)置32 KB的SRAM和256 KB的高速Flash存儲器,存儲能力強(qiáng),能夠滿足網(wǎng)關(guān)對數(shù)據(jù)存儲的要求。另外,該芯片內(nèi)部集成有2個(gè)功能強(qiáng)大的CAN2.OB的控制器,可以處理所有類型的幀結(jié)構(gòu)(數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀及過載幀),每個(gè)控制器有16個(gè)獨(dú)立的緩存區(qū)(mailbox),十分有利于實(shí)現(xiàn)網(wǎng)關(guān)高速、大容量的數(shù)據(jù)處理。集成的 CAN控制器還能夠減少器件數(shù)目和PCB布線數(shù)量,有利于提高系統(tǒng)的抗干擾性能。
2. 2 CAN節(jié)點(diǎn)設(shè)計(jì)
常用的CAN節(jié)點(diǎn)電路如圖3所示,它主要由MCU、CAN控制器及CAN收發(fā)器組成。為了增強(qiáng)電路的抗干擾性,還需要在控制器與收發(fā)器之間增加一個(gè)隔離電路。
本網(wǎng)關(guān)中的CAN節(jié)點(diǎn)共有2個(gè):高速CAN節(jié)點(diǎn)和低速CAN節(jié)點(diǎn)。由于在汽車中電磁干擾現(xiàn)象非常嚴(yán)重,僅靠單個(gè)的CAN收發(fā)器難以滿足通信品質(zhì)的要求,需要加上適當(dāng)?shù)母綦x電路以提高電路的抗干擾性。
2個(gè)節(jié)點(diǎn)的MCU的功能由主控制芯片AT91SAM7A3實(shí)現(xiàn),且AT91SAM7A3中集成了兩個(gè)高性能的CAN控制器,可以分別作為高低速CAN節(jié)點(diǎn)的控制器。
常用的隔離電路采用高速光耦6N137實(shí)現(xiàn)CAN節(jié)點(diǎn)之間的信號隔離,并且采用電源隔離模塊實(shí)現(xiàn)高速光耦的兩個(gè)電源的隔離。但是這種設(shè)計(jì)無疑增加了PCB的走線,使電路的沒計(jì)變得復(fù)雜,同時(shí)隔離電路的隔離效果也受到影響。
本設(shè)計(jì)采用廣州致遠(yuǎn)電子有限公司生產(chǎn)的CTM系列的CTM1050和CTM1054,分別作為高低速CAN收發(fā)器。CTM系列的CAN收發(fā)器集成了CAN 收發(fā)器以及必需的隔離,即在一塊芯片上實(shí)現(xiàn)了隔離電路和CAN收發(fā)器的功能。這樣就不必單獨(dú)設(shè)計(jì)隔離電路,提高了集成度,使得抗干擾性得到增強(qiáng)。
高速CAN收發(fā)器CTM1050,最高速率可達(dá)1 Mb/s,完全符合ISO11898-2標(biāo)準(zhǔn)的高速CAN通信,用它作為高速CAN網(wǎng)絡(luò)接口的收發(fā)器(電路連接方法見圖2)。容錯(cuò)CAN收發(fā)器 CTM1054,最高通信速率可達(dá)125 kb/s,完全符合ISO11898-3標(biāo)準(zhǔn),用它作為低速CAN網(wǎng)絡(luò)接口的收發(fā)器(電路連接方法見圖2)。需要注意的是,在CTM1054的連接中,有 2個(gè)電阻R1和R2的阻值要根據(jù)低速CAN網(wǎng)絡(luò)中節(jié)點(diǎn)的個(gè)數(shù)來確定。具體值的算法見CTM1054使用手冊。
2.3 LIN接口設(shè)計(jì)
LIN總線是一主多從的總線連接方式,節(jié)點(diǎn)有主從之分。在本設(shè)計(jì)中,將LIN節(jié)點(diǎn)設(shè)計(jì)為主節(jié)點(diǎn)。LIN是一個(gè)基于單線串行的通信協(xié)議,對于硬件的要求比較簡單。通常一個(gè)有SCI/UART接口的單片機(jī)和一個(gè)LIN收發(fā)器就可組成LIN節(jié)點(diǎn)。本設(shè)計(jì)利用AT91SAM7A3的UART口和LIN收發(fā)器 TJA1020組成一個(gè)LIN主節(jié)點(diǎn)。
TJA1020使用的波特率可從2.4~20 kb/s,有較好的保護(hù)功能:總線終端和電池引腳可防止汽車環(huán)境下的瞬變、總線終端對電池和地的短路保護(hù)以及過熱保護(hù)等,可以作為汽車通信中的LIN通信接口(具體電路連接見圖2)。
3 網(wǎng)關(guān)軟件設(shè)計(jì)
網(wǎng)關(guān)的軟件系統(tǒng)主要包括主監(jiān)控程序、數(shù)據(jù)的發(fā)送、數(shù)據(jù)的接收、數(shù)據(jù)的處理(包括協(xié)議轉(zhuǎn)換和緩沖區(qū)內(nèi)數(shù)據(jù)的讀寫處理)等幾部分。
3.1 主監(jiān)控程序
如圖4所示,在主控制器AT91SAM7A3中劃出4塊緩沖區(qū)BUF1~BUF4,每一塊緩沖區(qū)中的數(shù)據(jù)都有明確而且唯一的來源和目的地。主監(jiān)控程序主要通過循環(huán)依次查詢BUF1~BUF4中的存儲情況,來決定是否發(fā)送數(shù)據(jù)以及將數(shù)據(jù)發(fā)送給誰。
當(dāng)高速CAN網(wǎng)絡(luò)上有數(shù)據(jù)需要接收的時(shí)候,通過高速CAN模塊接收數(shù)據(jù),對接收到的數(shù)據(jù)進(jìn)行處理后,將其存到緩沖區(qū)BUF1中,再由低速CAN模塊將其發(fā)送到低速CAN網(wǎng)絡(luò)上;當(dāng)LIN網(wǎng)絡(luò)上有數(shù)據(jù)需要接收時(shí),通過LIN總線模塊接收數(shù)據(jù),對接收到的數(shù)據(jù)進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換(LIN格式的報(bào)文幀轉(zhuǎn)換為CAN 格式的報(bào)文幀),再將其存入到緩沖區(qū)BUF4中,并由低速CAN模塊將其發(fā)送到低速CAN網(wǎng)絡(luò)上;當(dāng)?shù)退貱AN網(wǎng)絡(luò)上有數(shù)據(jù)需要接收時(shí),先接收數(shù)據(jù),然后判斷數(shù)據(jù)是發(fā)送到高速CAN總線,還是發(fā)送到LIN總線,根據(jù)判斷結(jié)果對數(shù)據(jù)進(jìn)行處理,存入相應(yīng)的緩沖區(qū)(如數(shù)據(jù)是發(fā)往高速CAN總線,則存入BUF2,否則存入BUF3)。
3.2 數(shù)據(jù)的發(fā)送
數(shù)據(jù)的發(fā)送由發(fā)送子程序完成,網(wǎng)關(guān)中主要有3個(gè)發(fā)送子程序,分別對應(yīng)兩路CAN控制器以及一路 LIN發(fā)送器。高速CAN的發(fā)送子程序負(fù)責(zé)發(fā)送BUF1中的數(shù)據(jù),LIN的發(fā)送子程序負(fù)責(zé)發(fā)送BUF3中的數(shù)據(jù),低速CAN的發(fā)送子程序負(fù)責(zé)發(fā)送BUF2 和BUF4中的數(shù)據(jù)。數(shù)據(jù)的發(fā)送采用查詢總線狀態(tài)的發(fā)送方式:查詢總線的忙閑情況,如果總線忙,則退出發(fā)送子程序,進(jìn)行其他的工作;如果總線空閑,則發(fā)送數(shù)據(jù)。發(fā)送完1幀數(shù)據(jù)后,再檢查與之相應(yīng)的緩沖區(qū)的狀態(tài)。如果為空,則退出發(fā)送子程序;如果非空,則再檢查總線的忙閑狀態(tài)。如果忙,則退出發(fā)送子程序;如果空閑,則發(fā)送數(shù)據(jù)。然后再開始新一輪的數(shù)據(jù)查詢發(fā)送過程。圖5為高速CAN向低速CAN發(fā)送的流程,其他的發(fā)送子程序過程與此類似。
評論