CAN總線的數據采集與處理系統的設計
現場總線及其應用技術日益成為國際自動控制領域關注的一個焦點。CAN總線是目前公認的幾種最有前途的現場總線之一。通信介質可以是雙絞線、同軸電纜和光纖,其通信速率可達1mbps。can國際標準的制定更加推動了它的發展和應用,基于can總線的工業應用系統業大量涌現。其主要應用領域包括大型儀器設備、傳感器技術及數據采集系統和工業現場監控系統等[1][2]。本文結合can總線的特點,介紹了基于can總線的數據采集與處理的一種設計方法。
本文引用地址:http://www.104case.com/article/201612/329423.htm2 系統設計
2.1 can系統概要

圖1 結構簡圖
本系統由兩個cpu通過雙口 ram相互連接組成,一片cpu(p87c591)負責can信號的發送與接收,另一片cpu(p89c58ba)負責 rs-485 信號的發送與接收。設計中通訊控制器選用了集成有can控制器的p87c591單片機。它自帶的can控制器完全具有sja1000的功能,可完成can協議中規定的所有數據鏈路層和物理層的功能。且p87c591自帶了15個中斷源和看門狗定時器(wdt),應用十分方便。系統結構簡圖如圖1所示。圖中各部分所完成的主要功能如下:
(1) cpu-1:該芯片帶有can接口,故可與下位機進行can通訊。通過can總線發送上位機的設定信息給下位機,同時接收下位機提供的數據信息,將其存入雙口ram中,以供cpu-2來查詢。
(2) cpu-2:該芯片連接有max491和max485 芯片,故可與外部進行422或485通訊,上位機的信息通過485通訊讀入cpu-2之中,cpu-2再將其存入雙口ram之中,以供cpu-1來查詢,cpu-1再通過can總線將此設定信息傳送給上位機。反之,下位機的所有已存入雙口ram的檢測值信息,也是通過該單片機的讀取,并通過485通訊,將所有顯示信息在人機界面上顯示。
(3) 雙口ram:雙口ram用于存儲系統的設置信息和狀態信息,完成各種信息存儲與交換。選用存儲容量為16k的idt7006系列,并采用后備電池支持,保證掉電時存儲的信息不丟失。雙口ram按存儲內容不同,分為設置區、狀態區和預留區。設置區用來存儲上位機的信息;狀態區用來存儲從下位機收集的系統狀態信息;預留區則作為預留備用。
2.2 p87c591單片機概要
在系統中采用philips公司生產的p87c591單片機,該單片機是一個8 位高性能微控制器具有片內can控制器[3],大大簡化了硬件電路的設計,提高了can接口的穩定性。p87c591 采用了強大的80c51指令集,并集成了sja1000 can控制器的pelican功能。主要有以下功能特點:can2.0b控制器,支持11位標準標識符和29位擴展標識符,4個可獨立配置的驗收濾波器,都可“在運行中改變”。can控制器的發送緩沖區能夠保存一個完整的can信息幀(標準或擴展幀格式),只要通過cpu啟動發送,信息字節就從發送緩沖區傳輸到can內核模塊完成發送。can接口包含5個實現cpu與can控制器連接的特殊功能寄存器,對重要can寄存器的訪問通過快速自動增加的尋址和對特殊功能寄存器的位尋址實現。接收一個信息時,can內核模塊將串行位流轉換成并行數據輸入到驗收濾波器,通過該可編程濾波器,p87c591可以確定實際接收到的信息。
p87c591連接的can節點電路設計比較簡單,所需的外部元件只是一個晶振加兩個電容驅動片內震蕩器、一個連接到復位腳的電阻、電容。使用片內上電復位電路以及一個收發器將p87c591連接到can總線上。如圖2所示。

圖2 can 節點電路
2.3 can總線p87c591單片機側的主要任務
在整個系統中591起到數據傳輸和處理的作用,通過can總線接收數據采集節點接收來的信息,整理后按協議存儲到雙口ram中。其主要任務有以下兩點:其一采集下位機的數據信息;其二將采集來的信息按照協議的約定存儲到雙口ram中的固定的位置,便于58查詢顯示。
3 can總線軟件設計
can總線軟件設計主要包括兩大部分:通信網絡的應用層協議和功能實現的流程和編碼。can通信軟件主要由初始化、接收處理、發送處理及中斷處理等組成。本文重點介紹發送、接收處理子程序。
3.1 發送程序
發送子程序負責節點報文的發送。信息從can控制器發送到can總線是由can控制器自動完成的。其流程圖如圖3所示。

圖3 查詢發送流程圖
3.2 接收程序
接收子程序負責接收節點報文的接收。信息從can總線到can緩沖區是由can控制器自動完成的,接收程序只需從接收緩沖區讀取要接收的信息。其流程圖如圖4所示。

圖4 中斷接收流程圖
4 問題討論
本設計的硬件電路中, 采用雙cpu系統,即用一個cpu完成測控功能,另一個cpu完成系統聯網和接口通信功能。cpu間的通信可以采用串口、并口等方式,但它們共同的缺點是操作復雜、速度慢。因此,采用雙口ram方式在兩個cpu系統間交換數據是一個不錯的選擇。但雙口ram有時會發生共享沖突問題。
一般雙口ram都提供了兩個完全獨立的端口,每個端口都有自己的控制線、地址線和數據線,cpu對雙口ram端口的操作等效于對它對外部ram進行操作。雙口ram在使用上要注意的問題是如何避免兩端cpu對同一ram單元的爭用,雙口ram可提供三種防沖突方式:插入等待狀態的防沖突方式;信號燈防沖突方式;中斷防沖突方式。本設計中雙口ram主要用于兩個cpu之間交換數據,由于交換的實時性很難用軟件來保證,所以采用中斷方式解決沖突問題。
雙口ram被劃分為兩個區域,其中數據接收緩沖區是通信cpu插件向其發送命令和數據的區域;數據發送緩沖區是它向通信cpu插件發送數據的區域。為了保證數據交換的實時性和有效性,可采用雙口ram的中斷方式通知對方,信號intl和intr可作為cpu的一個中斷輸入。數據交換時,先將數據放入對應的雙口ram存儲區,然后寫入對方信箱,以通知對方有數據發送;接收方在相應的中斷中對數據進行處理,同時讀自己的信箱以清除中斷信號,然后再寫入對方信箱以告知其數據已處理完畢。
5 結束語
所設計的系統可用于電力參數監控和其他工業自動化場合。利用can總線結構靈活簡單,可靠性高,適應性好,易于維護等優點。通過rs485/422和can 總線轉換器實現現場智能設備與上位機間或其他監控裝置的數據交換,利用上位機強大的數據處理能力,實現事件記錄、數據處理等功能。因此該系統用于工業領域性價比較高。
評論