新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于CAN總線的現場設備控制管理系統

        基于CAN總線的現場設備控制管理系統

        作者: 時間:2012-12-04 來源:網絡 收藏

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

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


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

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

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




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

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

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宁国市| 乐都县| 都昌县| 松阳县| 和平区| 墨竹工卡县| 如皋市| 张家界市| 大洼县| 宜兴市| 彭州市| 乌海市| 昌图县| 原平市| 涡阳县| 绥化市| 哈巴河县| 双江| 西乡县| 砚山县| 衡东县| 溆浦县| 浮梁县| 元氏县| 手机| 恩施市| 合肥市| 和静县| 鄢陵县| 凤翔县| 沈阳市| 云浮市| 庆城县| 赣榆县| 那坡县| 油尖旺区| 准格尔旗| 临朐县| 东安县| 卓尼县| 若尔盖县|