用87C196NT單片機(jī)實(shí)現(xiàn)CAN總線通信實(shí)例
1 CAN總線簡(jiǎn)介 CAN(Controller Area Network)即控制器局域往,主要用于各種設(shè)備檢測(cè)及控制的一種現(xiàn)場(chǎng)總線。CAN總線最 初是由德國(guó)Bosch公司為汽車的檢測(cè)、控制系統(tǒng)而設(shè)計(jì)的。CAN總線具有獨(dú)特的設(shè)計(jì)思想、良好的功能特性和極高 的可靠性,現(xiàn)場(chǎng)抗干擾能力強(qiáng)。具體來(lái)講,CAN總線具有如下特點(diǎn): 結(jié)構(gòu)簡(jiǎn)單,只有2根線與外部相連,且內(nèi)部含有錯(cuò)誤探測(cè)和管理模塊。 通信方式靈活??梢远嘀鞣绞焦ぷ鳎W(wǎng)絡(luò)上任意一個(gè)節(jié)點(diǎn)均可以在任意時(shí)刻主動(dòng)地向網(wǎng)絡(luò)上的其它節(jié)點(diǎn)發(fā)送 信息,而不分主從。 可以點(diǎn)對(duì)點(diǎn)、點(diǎn)對(duì)多點(diǎn)及全局廣播方式發(fā)送和接收數(shù)據(jù)。 網(wǎng)絡(luò)上的節(jié)點(diǎn)信息可分成不同的優(yōu)先級(jí),可以滿足不同的實(shí)時(shí)要求。 CAN總線通信格式采用短幀格式,每幀字節(jié)數(shù)最多為8個(gè),可滿足通常工業(yè)領(lǐng)域中控制命令、工作狀態(tài)及測(cè)試 數(shù)據(jù)的一般要求。同時(shí),8個(gè)字節(jié)也不會(huì)占用總線時(shí)間過(guò)長(zhǎng),從而保證了通信的實(shí)時(shí)性。 采用非破壞性總線仲裁技術(shù)。當(dāng)2個(gè)節(jié)點(diǎn)同時(shí)向總線上發(fā)送數(shù)據(jù)時(shí),優(yōu)先級(jí)低的節(jié)點(diǎn)主動(dòng)停止數(shù)據(jù)發(fā)送,而優(yōu) 先級(jí)高的節(jié)點(diǎn)可不受影響 地繼續(xù)傳輸數(shù)據(jù)。這大大地節(jié)省了總線仲裁沖突時(shí)間,在網(wǎng)絡(luò)負(fù)載很重的情況下也不會(huì) 出現(xiàn)網(wǎng)絡(luò)癱瘓。 直接通信距離******可達(dá)10km (速率5kb/s以下),最高通信速率可達(dá)1Mb/s (此時(shí)距離最長(zhǎng)為40m);節(jié)點(diǎn)數(shù)可達(dá) 110個(gè),通信介值可以是雙絞線、同軸電纜或光導(dǎo)纖維。 CAN總線通信接口中集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對(duì)通信數(shù)據(jù)的成幀處理,包括位填 充、數(shù)據(jù)塊編碼、循環(huán)冗余檢驗(yàn)、優(yōu)先級(jí)判別等多項(xiàng)工作。 CAN總線采用CRC檢驗(yàn)并可提供相應(yīng)的錯(cuò)誤處理功能,保證了數(shù)據(jù)通信的可靠性。 CAN總線的以上特點(diǎn),為工業(yè)控制系統(tǒng)中高可靠性的數(shù)據(jù)傳送提供了一種新的解決方案。其在國(guó)外工業(yè)控制領(lǐng) 域已經(jīng)有了廣泛的應(yīng)用, 現(xiàn)國(guó)內(nèi)的許多工業(yè)控制領(lǐng)域也開(kāi)始使用基于CAN的現(xiàn)場(chǎng)總線。CAN總線已成為最有發(fā)展前 途的4種現(xiàn)場(chǎng)總線之一。 2 單片機(jī)控制系統(tǒng)硬件設(shè)計(jì) 本設(shè)計(jì)采用Intel 196系列中的87C196NT單片機(jī)。87C196NT具有1MB的尋址空間。本身不帶CAN控制器,所以要 實(shí)現(xiàn)與CAN總線之間的通 信,需外加CAN控制器和CAN驅(qū)動(dòng)芯片.在本設(shè)計(jì)中作者采用LTL-CAN。LTL-CAN是一種CAN 總線控制、驅(qū)動(dòng)隔離收發(fā)器,由CAN控制器芯片PCA82C200、CAN驅(qū)動(dòng)芯片PCA82C250、16MHz的晶振及光隔電路用厚 膜封裝而成。它只支持標(biāo)準(zhǔn)信息幀格式,其內(nèi)部邏輯功能圖略(詳見(jiàn)《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》2002.8)。 單片機(jī)與CAN總線的接口電路圖略(詳見(jiàn)《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》2002.8)。圖中LTL-CAN是帶光隔的CAN控 制器和物理總線間的接口, 提供對(duì)總線的差動(dòng)發(fā)送和接收功能。電阻R1作為CAN終端的匹配電阻。LTL-CAN芯片的 片選信號(hào)CSCAN通過(guò)GAL16V8譯碼產(chǎn)生,其地址為08000H -08FFFH。87C196NT的P3口是數(shù)據(jù)/地址復(fù)用口。 3 單片機(jī)控制系統(tǒng)軟件設(shè)計(jì) 3.1 CAN信息包格式說(shuō)明 一個(gè)有效的CAN的數(shù)據(jù)幀由幀起始、仲裁域、控制域、數(shù)據(jù)域、校驗(yàn)域、應(yīng)答域和幀結(jié)束組成。CAN控制器有2 種不同的幀格式:標(biāo)準(zhǔn)格式和擴(kuò)展格式。它們的主要區(qū)別在于仲裁域格式不同:標(biāo)準(zhǔn)幀仲裁域由11位標(biāo)志符和遠(yuǎn) 程發(fā)送請(qǐng)求位RTR組成;擴(kuò)展幀仲裁域由29位標(biāo)志符就替代遠(yuǎn)程請(qǐng)求 SRR位、標(biāo)志位和遠(yuǎn)程發(fā)送請(qǐng)求位RTR組成, 圖略(詳見(jiàn)《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》2002.8)。 標(biāo)志符作為報(bào)文的名稱,在仲裁過(guò)程期間,首先被送到總線。在接收器的驗(yàn)收判斷中和仲裁過(guò)程確定訪問(wèn)優(yōu) 先權(quán)中都要用到。 遠(yuǎn)程發(fā)送請(qǐng)求位(RTR)用來(lái)確定發(fā)送遠(yuǎn)程幀還是數(shù)據(jù)幀:當(dāng)RTR為高電平時(shí),CAN控制器發(fā)送遠(yuǎn)程幀;為低電平 時(shí),發(fā)送數(shù)據(jù)幀。 數(shù)據(jù)長(zhǎng)度碼(DLC)用來(lái)確定每幀要發(fā)送幾字節(jié)的數(shù)據(jù),最多為8字節(jié)。 3.2 CAN控制器PCA82C200介紹 PCA82C200芯片是Philips公司生產(chǎn)的CAN控制器,是一種I/O設(shè)備基于內(nèi)存編址的微控制器。該設(shè)備的獨(dú)立操 作是通過(guò)像RAM一樣的片內(nèi)寄存器修正來(lái)實(shí)現(xiàn)的。它只支持標(biāo)準(zhǔn)的信息幀格式。 PCA82C200的地址區(qū)包括控制段和信息緩沖區(qū)控制段。在初始化載入時(shí)可被編程來(lái)配置通信參數(shù)(例如,位時(shí) 序)。微控制器也是通過(guò)這個(gè)段來(lái)控制CAN總線上通信的。 PCA82C200有2種工作模式:復(fù)位模式和工作模式。在復(fù)位模式下可以對(duì)接收代碼、接收屏蔽、總線時(shí)序寄存 器0和1以及輸出控制寄存器 進(jìn)行設(shè)置。一般在CAN初始化時(shí)完成對(duì)以上寄存器的設(shè)置,當(dāng)CAN進(jìn)入工作模式后,它 們的值就不再變化。在工作模式下可進(jìn)行數(shù)據(jù)的發(fā)送和接收。特別要注意的是當(dāng)硬件復(fù)位或控制器掉線時(shí)會(huì)自動(dòng) 進(jìn)入復(fù)位模式,這樣就不能進(jìn)行正常的CAN通信,這就要求對(duì)復(fù)位位進(jìn)行監(jiān)控。當(dāng)發(fā)生硬件復(fù)位或控制器掉線而進(jìn) 入復(fù)位模式時(shí),就要求把復(fù)位位置為0進(jìn)入工作模式,這樣CAN就能正常地發(fā)送和接收了。 3.3 網(wǎng)絡(luò)通信規(guī)則 CAN總線為多主工作方式,網(wǎng)絡(luò)上任一節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)向網(wǎng)絡(luò)上其它節(jié)點(diǎn)發(fā)送信息,而不分主從。通 信方式靈活,且無(wú)需占地址等節(jié)點(diǎn)信息。為禁止總線沖突,CAN總線采用非破壞性總線仲裁技術(shù),根據(jù)需要將各個(gè) 節(jié)點(diǎn)設(shè)定為不同的優(yōu)先級(jí),并以標(biāo)志符ID標(biāo)定,其值越小,優(yōu)先級(jí)越高。 在本系統(tǒng)的實(shí)際應(yīng)用中,主站負(fù)責(zé)整個(gè)網(wǎng)絡(luò)。它向從站發(fā)送各種控制命令,從站按照來(lái)自主站的命令進(jìn)行操 作。主站可以選擇任意一個(gè)從站交換數(shù)據(jù)信息,任一從站一旦被選中,即可以接收來(lái)自主站的信息,也可以依據(jù) 從站的命令向主站回送信息。當(dāng)某一從站發(fā)生故障時(shí),可以主動(dòng)向從站發(fā)送有關(guān)信息。任一從站與主站交換信息 時(shí),必須帶上從站地址信息。 3.4 下位機(jī)軟件編程 單片機(jī)87C196NT與上位機(jī)之間的CAN通信接口程序略。單片機(jī)向上位機(jī)一直以500Kbps的波特率發(fā)生數(shù)據(jù),當(dāng) 單片機(jī)接收到上位機(jī)下傳的 數(shù)據(jù)后,又把接收到的數(shù)據(jù)轉(zhuǎn)發(fā)給上位機(jī)。有多種CAN卡可選用。 結(jié)束語(yǔ) 將CAN現(xiàn)場(chǎng)總線應(yīng)用于電力系統(tǒng)線路分段保護(hù)監(jiān)控單元中,有利于實(shí)現(xiàn)電力系統(tǒng)中檢測(cè)的實(shí)時(shí)性和可靠性。在 現(xiàn)有設(shè)備的基礎(chǔ)上,進(jìn)一步提高了電網(wǎng)的自動(dòng)化檢測(cè)和管理水平,對(duì)提高供電的可靠性、增加電網(wǎng)的經(jīng)濟(jì)效益有 著重大的意義。 |