王 渙,劉鐘宇
(中國(guó)電子科技集團(tuán)公司第四十七研究所,沈陽(yáng) 110032)
一個(gè)由CAN 總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無(wú)數(shù)個(gè)節(jié)點(diǎn)[1]。一個(gè)CAN 節(jié)點(diǎn)要完成相應(yīng)的測(cè)控功能,需要以下部分:CAN 收發(fā)器直接與CAN的物理總線相連,控制CAN 控制器與總線物理層之間的邏輯電平信號(hào);CAN 控制器內(nèi)部集成了完整的CAN 通信協(xié)議,用以完成CAN的各項(xiàng)功能,并實(shí)現(xiàn)與模塊控制器的接口;模塊控制器既要控制各執(zhí)行元件完成特定測(cè)控任務(wù),又要處理一定的人機(jī)接口功能,還要控制CAN 控制器實(shí)現(xiàn)與其他節(jié)點(diǎn)的數(shù)據(jù)通信[2]。
從圖1 中可以看出,微處理器AT89S52 負(fù)責(zé)SJA1000的初始化,通過(guò)控制SJA1000 實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送等通信任務(wù)。SJA1000的AD0~AD7 連接到AT89S52的P0 口。連接到AT89S52的P2.7,P2.7為0的CPU 片 外 存 儲(chǔ) 器 地 址 可 對(duì)SJA1000 執(zhí)行相應(yīng)的讀寫操作。SJA1000的、、ALE 分別與AT89S52的對(duì)應(yīng)引腳相連,接AT89S52的。AT89S52 可以通過(guò)中斷方式訪問(wèn)SJA1000。控制器SJA1000 通過(guò)串行數(shù)據(jù)輸出線TX和串行數(shù)據(jù)輸入線RX 連接到收發(fā)器PCA82C250。收發(fā)器通過(guò)有差動(dòng)發(fā)送和接收功能的兩個(gè)總線終端CANH 和CANL 連接到總線電纜。輸入Rs 用于模式控制,參考電壓VREF的輸出電壓是額定VCC的0.5 倍,其中收發(fā)器的額定電源電壓是5V。R3 和R4是120Ω,稱為終端電阻,起增大負(fù)載、減少回波反射作用,是一種阻抗匹配的補(bǔ)償措施。它對(duì)于匹配總線阻抗起著相當(dāng)重要的作用,否則數(shù)據(jù)通信的抗干擾性及可靠性會(huì)大大降低,甚至無(wú)法通信。
CAN 總線節(jié)點(diǎn)的軟件設(shè)計(jì)主要包括三大部分:SJA1000 初始化、報(bào)文發(fā)送和報(bào)文接收。
AT89S52 上電或復(fù)位后,調(diào)用復(fù)位程序給SJA1000的復(fù)位端RST 提供復(fù)位信號(hào),使SJA1000進(jìn)入復(fù)位模式,SJA1000的初始化只有在復(fù)位模式下才可以進(jìn)行[3]。初始化程序框圖如圖2 所示。
初始化程序主要包括以下寄存器的設(shè)置:①時(shí)鐘分頻寄存器定義:BasicCAN 模式還是PeliCAN模式;是否使能CLKOUT 及輸出時(shí)鐘頻率;是否旁路CAN 輸入比較器;TX1 輸出是否用專門的接收中斷輸出。②通過(guò)驗(yàn)收碼寄存器和驗(yàn)收屏蔽寄存器定義接收?qǐng)?bào)文的驗(yàn)收碼和對(duì)報(bào)文和驗(yàn)收碼進(jìn)行比較的相關(guān)位定義驗(yàn)收屏蔽碼。③通過(guò)總線定時(shí)寄存器定義總線的位速率、位周期內(nèi)的采樣點(diǎn)和一個(gè)位周期內(nèi)的采樣數(shù)量。④通過(guò)輸出寄存器定義CAN 總線輸出管腳TX0、TX1的輸出模式和輸出配置。⑤最后,清除SJA1000的復(fù)位請(qǐng)求標(biāo)志進(jìn)入工作模式,SJA1000 方可進(jìn)行報(bào)文的發(fā)送和接收。
圖1 CAN 總線節(jié)點(diǎn)電路圖
圖2 初始化程序框圖
單片機(jī)將要發(fā)送的報(bào)文送到SJA1000的發(fā)送緩沖器中,然后將SJA1000 命令寄存器的發(fā)送請(qǐng)求標(biāo)志位(TR)置位,發(fā)送過(guò)程由SJA1000 獨(dú)立完成。在新報(bào)文寫入發(fā)送緩沖器之前,必須先檢查狀態(tài)寄存器的發(fā)送緩沖器狀態(tài)標(biāo)志(TBS),若為“1”,發(fā)送緩沖器被釋放,可將新的報(bào)文寫入緩沖器,否則,發(fā)送緩沖器將被鎖定,新報(bào)文不能被寫入。發(fā)送程序框圖如圖3 所示。
圖3 發(fā)送程序框圖
報(bào)文的接收也是由SJA1000 獨(dú)立完成的。收到的報(bào)文通過(guò)接收濾波放在FIFO 隊(duì)列中,第一條報(bào)文進(jìn)入接收緩沖器,由狀態(tài)寄存器的接收緩沖器狀態(tài)標(biāo)志位(RBS)和接收中斷標(biāo)志位(RI)標(biāo)出。單片機(jī)從接收緩沖器取走一條報(bào)文后可通過(guò)置位SJA1000 中命令寄存器的釋放接收緩沖器的標(biāo)志位(RRB)來(lái)釋放接收緩沖器。接收程序的設(shè)計(jì)采用中斷方式,這時(shí)在主程序中必須使用SJA1000的中斷使能寄存器(PeliCAN 模式)或控制寄存器(BasicCAN 模式)的中斷接收使能位(RIE)置“1”。若FIFO 滿,但還有報(bào)文接收,導(dǎo)致數(shù)據(jù)超載時(shí),進(jìn)行相應(yīng)處理。接收程序框圖如圖4 所示。
圖4 接收程序框圖
通過(guò)硬件、軟件兩方面,介紹了一種CAN 總線網(wǎng)絡(luò)節(jié)點(diǎn)電路的設(shè)計(jì)。如果要將CAN 總線應(yīng)用于通信任務(wù)比較復(fù)雜的系統(tǒng)中,那么在軟件設(shè)計(jì)上還需要加入CAN 總線錯(cuò)誤處理、總線脫離處理、接收濾波處理、波特率參數(shù)設(shè)置和自動(dòng)檢測(cè)等程序,以及CAN 總線通信距離和節(jié)點(diǎn)數(shù)的計(jì)算等方面的內(nèi)容。
[1]鄔寬明.CAN 總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2002.
[2]甘永梅,李慶豐,劉小娟.現(xiàn)場(chǎng)總線技術(shù)及其應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2004.
[3]李全利,仲偉峰,徐軍.單片機(jī)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2006.