基于LPC2294的CAN總線(xiàn)智能節點(diǎn)設計
在本設計所應用的場(chǎng)合中,產(chǎn)生電磁信號的設備較多,包括超短波設備、音頻設備、電源等,因此抗干擾設計顯得尤為重要。主要采取了以下措施:
(1)為了進(jìn)一步提高CAN總線(xiàn)節點(diǎn)的抗干擾能力,保證各節點(diǎn)之間在電氣上是完全隔離和獨立的,我們采用隔離CAN收發(fā)器CTM1050T,取代傳統的光耦與電源隔離模塊,提高性能的同時(shí)簡(jiǎn)化電路設計。
(2)在CAN總線(xiàn)的兩端加有兩個(gè)120Ω的電阻,這兩個(gè)電阻對于總線(xiàn)阻抗的匹配起著(zhù)相當重要的作用。去掉它們會(huì )使數據通信的抗干擾性及可靠性大大降低,甚至無(wú)法通信。
(3)CANH和CANL與地之間并聯(lián)了兩個(gè)30pF的小電容,可慮除總線(xiàn)上的高頻干擾并且具有一定的防電磁輻射的能力。
2.軟件設計
對于一般的32位ARM嵌入式應用系統,在運行主程序前必須初始化運行環(huán)境,即編寫(xiě)ARM控制器啟動(dòng)代碼。該啟動(dòng)代碼包括異常向量表、堆棧初始化、存儲系統初始化和目標板初始化等,一般用匯編語(yǔ)言編寫(xiě)。
對于該設計來(lái)說(shuō),關(guān)鍵的是編寫(xiě)CAN驅動(dòng)程序。主程序只需通過(guò)調用驅動(dòng)程序提供的接口來(lái)實(shí)現數據的接受和發(fā)送。驅動(dòng)程序包括四部分內容:CAN控制器的初始化、接收數據、發(fā)送數據和總線(xiàn)異常處理。圖2為主程序流程圖。
圖2 主程序流程圖
2.1 CAN控制器的初始化
初始化CAN 控制器的操作包括:硬件使能、設置管腳連接、軟件復位、設置報警界限、設置總線(xiàn)波特率、設置中斷工作方式、設置驗收濾波器工作方式、設置工作模式并啟動(dòng)CAN等。需要特別指出的是設置總線(xiàn)波特率是個(gè)難點(diǎn),所有CAN節點(diǎn)的波特率都要相同才能正常工作,所以要正確配置VPBDIV和PLL寄存器。在設置各CAN寄存器之前必須進(jìn)行軟件復位,這是因為CAN的某些寄存器必須在軟復位下讀寫(xiě)。
值得注意的是,LPC2294為所有的CAN 控制器提供了全局接收標識符查詢(xún)功能。2KB的接收過(guò)濾用RAM可容納1024個(gè)標準標識符或者512個(gè)擴展標識符或兩種類(lèi)型混合的標識符。通過(guò)軟件處理,可在該RAM中設置存放1~5個(gè)標識符表格,它能更容易的對任意復雜的ID進(jìn)行篩選過(guò)濾,滿(mǎn)足復雜的ID的接受過(guò)濾要求。大大減少了系統軟件設計復雜度及運行時(shí)的負擔。設置驗收濾波器工作方式,必須首先創(chuàng )建LUT表格,指定每個(gè)表格的起始地址,并用實(shí)際的ID地址初始化該表格。最后設定驗收濾波器模式寄存器。若該節點(diǎn)不主動(dòng)發(fā)送數據,可選擇在總線(xiàn)不活動(dòng)時(shí)進(jìn)入睡眠模式。
2.2 數據發(fā)送
將待發(fā)送的數據打包成符合CAN 協(xié)議的幀格式后,便可寫(xiě)入發(fā)送緩存區,并啟動(dòng)發(fā)送。在寫(xiě)發(fā)送緩存區前必須查詢(xún)其狀態(tài)。LPC2294中的CAN控制器為了提高大量數據發(fā)送的效率,每個(gè)CAN控制器都有三個(gè)獨立的發(fā)送緩沖區,它們的狀態(tài)可以通過(guò)查詢(xún)CANSR得知。只有當其中有空閑的發(fā)送緩沖區時(shí)才可將數據寫(xiě)入。在發(fā)送大量數據數,這一步顯得尤為重要,否則發(fā)送可靠性將不能保證。啟動(dòng)發(fā)送成功后,只能通過(guò)查詢(xún)CANGSR的TCS位或配合發(fā)送成功中斷來(lái)判斷數據是否發(fā)送成功。
2.3 數據接收
接收數據可采用查詢(xún)方式或中斷方式。在某一段時(shí)間內,CAN總線(xiàn)并不總是在活動(dòng),為了提高效率,可采用中斷方式。在初始化程序中必須使能接收中斷。在中斷服務(wù)子程序中,讀取CANICR,判斷是否有接收中斷標志,有則讀取接收緩沖區數據。
2.4 異常情況處理
在總線(xiàn)發(fā)生嚴重故障的情況下,CAN節點(diǎn)有可能脫離總線(xiàn),此時(shí)以下寄存器位被置位:CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CANMOD的RM位。RM將許多CAN控制器功能復位和禁止。軟件下一步必須置零RM位。發(fā)送錯誤計數器將遞減計數總線(xiàn)釋放條件(11個(gè)連續的隱性位)的第128個(gè)事件。軟件可通過(guò)讀取Tx錯誤計數器對計數器遞減計數的情況進(jìn)行監測。
一些不是很?chē)乐氐腻e誤一般不會(huì )引起總線(xiàn)錯誤,即使不處理也不會(huì )產(chǎn)生什么致命錯誤,為了提高中斷處理速度,可以根據實(shí)際情況裁減中斷服務(wù)程序。
3結束語(yǔ)
由于該方案體積小、功耗低、抗干擾性好,現已應用于電磁環(huán)境復雜的某裝甲車(chē)通信設備中,滿(mǎn)足了該項目對CAN網(wǎng)絡(luò )節點(diǎn)的要求。此外該設計作為CAN總線(xiàn)節點(diǎn)的一個(gè)模塊,能夠和儀器儀表等設備相結合,使其具有網(wǎng)絡(luò )通信的能力,有著(zhù)廣闊的應用前景。
本文作者創(chuàng )新點(diǎn):隔離CAN收發(fā)器CTM1050T的使用取代了在以往的設計方案中需要高速光耦(6N137)、DC/DC電源隔離模塊、CAN收發(fā)器等分立元件才能實(shí)現的帶隔離的CAN收發(fā)電路,現在只需利用一片CTM1050T接口芯片就可以實(shí)現帶隔離的CAN收發(fā)電路,并且隔離電壓可以達到DC 2500V。在簡(jiǎn)化硬件電路開(kāi)銷(xiāo)的同時(shí)提高了系統的抗干擾性能。
評論