新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于CAN總線的現(xiàn)場設(shè)備控制管理系統(tǒng)

基于CAN總線的現(xiàn)場設(shè)備控制管理系統(tǒng)

作者: 時間:2012-12-04 來源:網(wǎng)絡(luò) 收藏

SJA1000作為微控制器的片外擴(kuò)展芯片,其片選引腳CS應(yīng)接在微控制器的P2.0 上,以用于決定CAN控制器各寄存器的地址。SJA1000通過CAN總線驅(qū)動器PCA82C250連接在物理總線上。PCA82C250器件可提供對總線的差動發(fā)送能力和對CAN控制器的差動接受能力,它同時完全和“ISO11898”標(biāo)準(zhǔn)兼容。由于通信信號傳輸?shù)綄?dǎo)線的端點時會發(fā)生反射,而且反射信號會干擾正常信號的傳輸,因此,總線兩端應(yīng)接有終端電阻R1、R2,以消除反射信號,其阻值應(yīng)當(dāng)與傳輸電纜的特性阻抗大致相當(dāng)。

2.CAN節(jié)點的軟件設(shè)計
本節(jié)點的軟件編程主要包括A/D轉(zhuǎn)換(ADC)、CAN控制器的初始化、CAN總線數(shù)據(jù)的發(fā)送和接收等幾個部分。主程序的流程圖如圖3所示。


下面分別對這幾個主要部分的程序設(shè)計做一介紹。
2.1 A/D轉(zhuǎn)換部分
筆者在本設(shè)計中采用的是單步A/D轉(zhuǎn)換模式,并將A/D轉(zhuǎn)換結(jié)果存入指定的數(shù)據(jù)存儲區(qū)。具體步驟如下:
(1)通過設(shè)置ADC控制寄存器(ADCCON1和ADCCON(2)的值來確定A/D轉(zhuǎn)換的工作狀態(tài)和采樣通道號;
(2)使能ADC中斷,置位SCONV位以啟動單步A/D轉(zhuǎn)換;
(3)等待響應(yīng)ADC中斷,并進(jìn)入中斷服務(wù)程序;
(4)把采樣所得的數(shù)據(jù)從ADCDATAL和ADC-DATAH兩個特殊寄存器中取出,并存入預(yù)設(shè)的片內(nèi)數(shù)據(jù)存儲器中,然后退出中斷服務(wù)程序;
(5)判斷所需通道是否采樣完畢,如果未完成,則設(shè)置采樣通道號并返回步驟(2),若完成則退出A/D轉(zhuǎn)換子程序。
通過該程序可隨時根據(jù)實際需要更改采樣通道數(shù),并將采樣結(jié)果直接存入指定數(shù)據(jù)存儲區(qū),以為今后向CAN總線發(fā)送所得數(shù)據(jù)提供便利。

2.2 SJA1000的初始化
CAN的通信協(xié)議主要是由CAN控制器完成的,因此,要想實現(xiàn)CAN節(jié)點的數(shù)據(jù)傳送,對CAN控制器的初始化是十分關(guān)鍵的。這個步驟直接決定著該CAN網(wǎng)絡(luò)系統(tǒng)各節(jié)點所共同遵守的協(xié)議。對SJA1000進(jìn)行初始化實際上就是通過單片機(jī)向其片內(nèi)的各個寄存器寫入控制字的過程,其寄存器包括以下幾個:
REG CONTROL―內(nèi)部控制寄存器地址;
REG COMMAND―內(nèi)部命令寄存器地址;
REG STATUS ―內(nèi)部狀態(tài)寄存器地址;
REG INTERRUPT―內(nèi)部中斷寄存器地址;
REG ACR―內(nèi)部驗收代碼寄存器地址;
REG AMR―內(nèi)部驗收屏蔽寄存器地址;
REG BTR0―總線定時寄存器0;
REG BTR1―總線定時寄存器1;
REG OCR―輸出控制寄存器。
其中:BTR0、BTR1寄存器的內(nèi)容可用于決定系統(tǒng)通信的波特率和CAN協(xié)議物理層中的同步跳轉(zhuǎn)寬度,因此,對于一個系統(tǒng)中的所有節(jié)點,這兩個寄存器的內(nèi)容必須相同(包括上位機(jī)),否則將無法進(jìn)行通信;OCR寄存器的內(nèi)容用于決定CAN控制器的輸出方式;而寫入ACR、AMR寄存器的內(nèi)容則要根據(jù)實際的網(wǎng)絡(luò)系統(tǒng)和報文標(biāo)志符來決定。本設(shè)計中筆者采用的是BasicCAN模式。
完成初始化后,CAN控制器就能正常運行了,但是要實現(xiàn)具體的數(shù)據(jù)收發(fā)任務(wù),還必須編制特定的收、發(fā)程序。

2.3 CAN總線數(shù)據(jù)的發(fā)送和接收
(1)發(fā)送部分的程序設(shè)計
用CAN總線發(fā)送數(shù)據(jù)的流程圖如圖4所示。實際上,在程序運行過程中,常常會在發(fā)送某一幀數(shù)據(jù)時發(fā)現(xiàn)上一幀的數(shù)據(jù)還沒有完全發(fā)送完畢(可以通過查詢狀態(tài)寄存器REG STATUS的第4位BIT TCS的顯、隱狀態(tài)可了解上次數(shù)據(jù)的發(fā)送情況)。因此,筆者采用的處理方法是:通過指令啟動本次發(fā)送之后,就不停地查詢狀態(tài)寄存器,以判斷本次發(fā)送是否完成,直到確定完成為止。這樣可以為下次發(fā)送提供便利,同時也有利于程序的順利執(zhí)行,從而避免出現(xiàn)錯誤。




(2)接收部分的程序設(shè)計
圖5所示是該系統(tǒng)接收部分的軟件流程圖。實際上,在對響應(yīng)速度要求不太高的場合,以查詢方式來設(shè)計接收子程序是最簡單、最可靠的方式。如果總線上有數(shù)據(jù)發(fā)往本節(jié)點,則通過查詢狀態(tài)寄存器的第1位BIT_RBS的位狀態(tài),便可得知接收緩沖區(qū)(RXFIFO)中的可用信息,然后通過軟件將RXFIFO中的數(shù)據(jù)逐個“移入”到指定的片內(nèi)存儲空間即可。對于這樣一個主要以數(shù)據(jù)采集功能為主的CAN節(jié)點,這些數(shù)據(jù)多半是由CAN網(wǎng)絡(luò)中的“控制中心”發(fā)來的控制信號,設(shè)計時把它們留給ADμC812進(jìn)一步處理就可以了。

參考文獻(xiàn)
1 Bosch 公司 CAN 協(xié)議規(guī)范 V2.0版本
2 肖海榮 周風(fēng)余.基于SJA1000的系統(tǒng)智能節(jié)點設(shè)計 計算機(jī)自動測量與控制 2001、9(2)
3 鄔寬明.原理和應(yīng)用系統(tǒng)設(shè)計,北京航空航天大學(xué)出版社
4 SJA1000獨立CAN控制器介紹,廣州周立功單片機(jī)發(fā)展有限公司.
5 獨立CAN器件SJA1000的應(yīng)用,東南大學(xué)學(xué)報,2002年3月.

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉