基于A(yíng)DμC812的CAN總線(xiàn)智能節點(diǎn)的設計
摘要:介紹了一種用單片機ADμC812、CAN總線(xiàn)控制器SJA1000和CAN總線(xiàn)驅動(dòng)器POA82C250組成的CAN總線(xiàn)智能節點(diǎn)的設計方案,給出了該節點(diǎn)的硬件結構和軟件設計方法,同時(shí)介紹了CAN總線(xiàn)的主要特點(diǎn)。 關(guān)鍵詞:CAN總線(xiàn);ADμC812;數據采集卡 1 引言 CAN(Controller Area Network)總線(xiàn)協(xié)議最初是以研發(fā)和生產(chǎn)汽車(chē)電子產(chǎn)品著(zhù)稱(chēng)的德國B(niǎo)OSCH公司開(kāi)發(fā)的,它是一種支持分布式實(shí)時(shí)控制系統的串行通信局域網(wǎng)。目前,CAN總線(xiàn)以其高性能、高可靠性、實(shí)時(shí)性等優(yōu)點(diǎn),而被廣泛應用于控制系統中的檢測和執行機構之間的數據通信中。CAN總線(xiàn)具有以下一些技術(shù)特性: ●多主方式工作,采用非破壞性的基于優(yōu)先權的總線(xiàn)仲裁技術(shù); ●借助接收濾波可實(shí)現多地址的幀傳送; ●數據采用短幀結構,抗干擾性強,數據幀的信息CRC校驗及其它錯誤檢測措施完善; ●發(fā)送期間丟失仲裁或由于出錯而遭破獲的幀可以自動(dòng)重發(fā); ●嚴重錯誤時(shí)可自動(dòng)關(guān)閉總線(xiàn)功能,以使總線(xiàn)其它操作不受影響。
本文引用地址:http://dyxdggzs.com/article/201610/307572.htm
CAN總線(xiàn)符合ISO11898標準,最大傳輸速率為1MB/s時(shí)傳輸距離最大為40m;傳輸速率為5kB/s時(shí)的最大傳輸距離為10km。CAN總線(xiàn)的傳輸介質(zhì)可為雙絞線(xiàn)、同軸電纜等。由于CAN總線(xiàn)是一種很有發(fā)展前景的現場(chǎng)總線(xiàn),因此得到了國際上很多大公司的支持,加之基于CAN總線(xiàn)的硬件接口簡(jiǎn)單,編程方便,系統容易集成。因此它特別適用于系統分布比較分散、實(shí)時(shí)性要求高、現場(chǎng)環(huán)境干擾大的場(chǎng)合。 2 系統結構 由于CAN總線(xiàn)采用多主方式工作,所以它具有與DCS控制系統不一樣的拓撲結構。其控制系統的構成由計算機和智能節點(diǎn)組成,圖1所示是其系統結構。該系統最大的特點(diǎn)就是所有的節點(diǎn)(包括上位PC機)都能以平等的地位掛接在總線(xiàn)上。一個(gè)CAN總線(xiàn)節點(diǎn)通常至少包括三個(gè)部分,即負責節點(diǎn)任務(wù)控制的單片機、CAN總線(xiàn)控制器以及CAN總線(xiàn)收發(fā)器。本文給出的就是一個(gè)可完成數據采集功能的CAN節點(diǎn)的設計方法。 3 CAN節點(diǎn)的硬件設計

本CAN節點(diǎn)的電路原理簡(jiǎn)圖如圖2所示。該電路的三個(gè)核心器件是單片機ADμC8121、獨立的CAN總線(xiàn)控制器SJA1000和CAN總線(xiàn)驅動(dòng)器PCA82C250。其中SJA10002和PCA82C250兩者的組合應用已經(jīng)在很多CAN總線(xiàn)節點(diǎn)的設計中用到,而本設計的特點(diǎn)就在于,它是根據要完成數據采集功能這一具體要求來(lái)選用微控制器ADμC812。圖2中的串行接口芯片MAX232作為ADμC812與PC機的串口連接,它的使用是由該單片機的調試特點(diǎn)決定的。 ADμC812是高度集成、高精度12位數據采集系統,該產(chǎn)品在其內核中集成了帶有片內可重編程非易失性閃速/電擦除程序存儲器的高性能8位(與8051兼容)MCU和多通道(8個(gè)輸入通道)12位ADC。 由于A(yíng)DμC812只需要通過(guò)其串口模塊和計算機的串口進(jìn)行連接,而不需要額外的仿真器,因而可利用ADI公司的QUICKSTART軟件來(lái)實(shí)現程序的在線(xiàn)下載、在線(xiàn)調試和在線(xiàn)仿真,從而極大地提高了工作效率。這也是本設計使用MAX232的原因。 該系統在工作時(shí),首先將從前面傳感器送來(lái)的工業(yè)標準信號(4~20mA或1~5V)通過(guò)調理電路變?yōu)?~2.5V的模擬電壓信號輸入至ADμC812的P0.0~P0.7 (AD0~AD7)引腳(根據實(shí)際情況確定所需AD端口的數量),然后通過(guò)程序控制,再將A/D轉換所得的數字信息通過(guò)SJA1000和PCA82C250送到CAN總線(xiàn)上的相關(guān)節點(diǎn)。 SJA1000作為微控制器的片外擴展芯片,其片選引腳CS應接在微控制器的P2.0上,以用于決定CAN控制器各寄存器的地址。SJA1000通過(guò)CAN總線(xiàn)驅動(dòng)器PCA82C250連接在物理總線(xiàn)上。PCA82C250器件可提供對總線(xiàn)的差動(dòng)發(fā)送能力和對CAN控制器的差動(dòng)接受能力,它同時(shí)完全和 “ISO11898”標準兼容。為進(jìn)一步提高系統的抗干擾能力,一般在CAN總線(xiàn)控制器SJA1000和CAN總線(xiàn)驅動(dòng)器PCA82C250之間加接6N137光電隔離芯片,只不過(guò)在圖2中沒(méi)有表示出來(lái)。由于通信信號傳輸到導線(xiàn)的端點(diǎn)時(shí)會(huì )發(fā)生反射,而且反射信號會(huì )干擾正常信號的傳輸,因此,總線(xiàn)兩端應接有終端電阻R1、R2,以消除反射信號,其阻值應當與傳輸電纜的特性阻抗大致相當。

4 CAN節點(diǎn)的軟件設計 本節點(diǎn)的軟件編程主要包括A/D轉換(ADC)、CAN控制器的初始化、CAN總線(xiàn)數據的發(fā)送和接收等幾個(gè)部分。主程序的流程圖如圖3所示。 下面分別對這幾個(gè)主要部分的程序設計做一介紹。 4.1 A/D轉換部分 筆者在本設計中采用的是單步A/D轉換模式,并將A/D轉換結果存入指定的數據存儲區。具體步驟如下: (1)通過(guò)設置ADC控制寄存器(ADCCON1和ADCCON2)的值來(lái)確定A/D轉換的工作狀態(tài)和采樣通道號; (2)使能ADC中斷,置位SCONV位以啟動(dòng)單步A/D轉換; (3)等待響應ADC中斷,并進(jìn)入中斷服務(wù)程序; (4)把采樣所得的數據從ADCDATAL和ADC-DATAH兩個(gè)特殊寄存器中取出,并存入預設的片內數據存儲器中,然后退出中斷服務(wù)程序;

(5)判斷所需通道是否采樣完畢,如果未完成,則設置采樣通道號并返回步驟(2),若完成則退出A/D轉換子程序。 通過(guò)該程序可隨時(shí)根據實(shí)際需要更改采樣通道數,并將采樣結果直接存入指定數據存儲區,以為今后向CAN總線(xiàn)發(fā)送所得數據提供便利。 4.2 SJA1000的初始化 CAN的通信協(xié)議主要是由CAN控制器完成的,因此,要想實(shí)現CAN節點(diǎn)的數據傳送,對CAN控制器的初始化是十分關(guān)鍵的。這個(gè)步驟直接決定著(zhù)該CAN網(wǎng)絡(luò )系統各節點(diǎn)所共同遵守的協(xié)議。對SJA1000進(jìn)行初始化實(shí)際上就是通過(guò)單片機向其片內的各個(gè)寄存器寫(xiě)入控制字的過(guò)程,其寄存器包括以下幾個(gè): REG CONTROL—內部控制寄存器地址; REG COMMAND—內部命令寄存器地址; REG STATUS —內部狀態(tài)寄存器地址; REG INTERRUPT—內部中斷寄存器地址; REG ACR—內部驗收代碼寄存器地址; REG AMR—內部驗收屏蔽寄存器地址; REG BTR0—總線(xiàn)定時(shí)寄存器0; REG BTR1—總線(xiàn)定時(shí)寄存器1; REG OCR—輸出控制寄存器。 其中:BTR0、BTR1寄存器的內容可用于決定系統通信的波特率和CAN協(xié)議物理層中的同步跳轉寬度,因此,對于一個(gè)系統中的所有節點(diǎn),這兩個(gè)寄存器的內容必須相同(包括上位機),否則將無(wú)法進(jìn)行通信;OCR寄存器的內容用于決定CAN控制器的輸出方式;而寫(xiě)入ACR、AMR寄存器的內容則要根據實(shí)際的網(wǎng)絡(luò )系統和報文標志符來(lái)決定。本設計中,筆者采用的是BasicCAN模式。 完成初始化后,CAN控制器就能正常運行了,但是要實(shí)現具體的數據收發(fā)任務(wù),還必須編制特定的收、發(fā)程序。 4.3 CAN總線(xiàn)數據的發(fā)送和接收 (1)發(fā)送部分的程序設計 用CAN總線(xiàn)發(fā)送數據的流程圖如圖4所示。

實(shí)際上,在程序運行過(guò)程中,常常會(huì )在發(fā)送某一幀數據時(shí)發(fā)現上一幀的數據還沒(méi)有完全發(fā)送完畢(可以通過(guò)查詢(xún)狀態(tài)寄存器REG STATUS的第4位BIT TCS的顯、隱狀態(tài)可了解上次數據的發(fā)送情況)。因此,筆者采用的處理方法是:通過(guò)指令啟動(dòng)本次發(fā)送之后,就不停地查詢(xún)狀態(tài)寄存器,以判斷本次發(fā)送是否完成,直到確定完成為止。這樣可以為下次發(fā)送提供便利,同時(shí)也有利于程序的順利執行,從而避免出現錯誤。 (2)接收部分的程序設計 圖5所示是該系統接收部分的軟件流程圖。 實(shí)際上,在對響應速度要求不太高的場(chǎng)合,以查詢(xún)方式來(lái)設計接收子程序是最簡(jiǎn)單、最可靠的方式。如果總線(xiàn)上有數據發(fā)往本節點(diǎn),則通過(guò)查詢(xún)狀態(tài)寄存器的第1位BIT_RBS的位狀態(tài),便可得知接收緩沖區(RXFIFO)中的可用信息,然后通過(guò)軟件將RXFIFO中的數據逐個(gè)“移入”到指定的片內存儲空間即可。對于這樣一個(gè)主要以數據采集功能為主的CAN節點(diǎn),這些數據多半是由CAN網(wǎng)絡(luò )中的“控制中心”發(fā)來(lái)的控制信號,設計時(shí)把它們留給ADμC812進(jìn)一步處理就可以了。 還應注意的是:在接收查詢(xún)過(guò)程中,要“觀(guān)察”是否有總線(xiàn)關(guān)閉、總線(xiàn)出錯、接收緩沖器超載等狀態(tài),如果有的話(huà),必須要進(jìn)行相應的“錯誤”處理,否則也不能正常進(jìn)行數據接收,還有一個(gè)問(wèn)題是關(guān)于遠程幀的處理。限于篇幅,本文不作介紹。 5 結束語(yǔ) 實(shí)踐證明:本文所介紹的CAN總線(xiàn)智能節點(diǎn)能夠很好地實(shí)現對工業(yè)標準模擬輸出信號的采集以及與CAN總線(xiàn)上其它節點(diǎn)的通信。由于該節點(diǎn)是基于單片機ADμC812開(kāi)發(fā)的,因此它的體積小巧且擴展靈活。筆者相信,基于該單片機的各種總線(xiàn)節點(diǎn)一定會(huì )得到廣泛的應用。
評論