SJA1000型CAN控制器在深海測控中的應用
1 引言
為了開發海洋資源,人類必須首先了解海底環境。然而,海底環境十分復雜,對海底探測的要求很高,深海環境下需要采集的參數比較多,包括深度、溫度、鹽度、ph值、溶解氧及各種化學元素等。
深海測控系統工作時需要接收來自甲板控制中心的命令,同時要將采集到的數據反送到甲板控制中心,二者之間的最大通信距離大于5km,因此,它們之間的通信要求很高。can總線與一般的通信總線相比,它的數據通信具有突出的可靠性、實時性和靈活性。can的直接通信距離最遠可達10km(速率在5kb/s以下),報文采用短幀結構,傳輸時間短,受干擾概率低,保證了數據出錯率極低。為此,筆者采用can總線作為通信方式。
2 深海測控系統的基本組成
深海測控模塊由二大部分組成:測控子模塊和通信子模塊。測控子模塊的主要功能是根據甲板控制中心的命令啟動系統并完成參數提取、轉換、數據處理、存儲及發送等操作。通信子模塊的功能是完成甲板與水下測控系統的通信。
測控子模塊以cygnal公司的c8051f020型單片機為核心,擴展信號調理電路及與can總線的接口。通信子模塊是philips公司的sja1000型can控制器。
2.1 測控子模塊
深海測控子模塊由微控制器系統和i/o系統組成。
微控制器是cygnal公司的c8051f020型單片機。c8051f020采用cip-51型微控制器內核及流水線指令結構,70%的指令執行時間為1個或2個系統時鐘周期,峰值速度達到25mi/s,能滿足深海環境下多路數據的快速采集與分析。
c8051f020型單片機內部集成1個12位8通道帶可編程增益放大器的a/d轉換器和1個8位8通道a/d轉換器,能滿足深海多路環境參數采集;2路12位電壓輸出d/a轉換器;16位可編程定時/計數器陣列pca可用于輸出pwm以控制步進電機的運轉;64個耐5v電壓的通用i/o口可控制開關器件的啟動和停止。
微控制器系統還包括了單片機的一些基本外圍電路。系統還開展了1片容量達64mbyte的串行flash存儲器,用以保存采集到的數據,以避免can通信不暢時造成數據丟失。使用時只要微控制器外接相應的傳感器、繼電器、電機等就可以完成各種環境下參數的采集及相應的控制
2.2 通信子模塊
sja1000是philips公司推出的一款獨立的can控制器,主要用于移動目標和一般工業環境中的區域網絡控制。它是pca82c200型can控制器(basiccan)的替代產品,而且增加了一種新的操作模式--pelican,這種模式支持具有很多新特征的can2.0b協議。
sja1000的基本特征如下:
引腳與pca2c200型can控制器兼容。
有擴展的接收緩沖器(64字節,先進先出fifo)。
支持can2.0a和can2.0b協議。
支持11位和29位標識碼。
通信位速率可達1mb/s。
可與不同的微處理器接口。
可編程的can輸出驅動器配置。
sja1000的引腳排列如圖1所示,主要引腳的功能如下所述。

ad7-ad0:地址數據復用線。
ale/as:ale輸入信號(intel模式)或as輸入信號(motorola模式)。
cs:片選信號,低電平允許訪問sja1000。
rd/e:來自微控制器的rd信號(intel模式)或e使能信號(motorola模式)。
wr:來自微控制器的wr信號(intel模式)或rd/wr使能信號(motorola模式)。
clkout:sja1000產生用于微控制器的時鐘輸出信號;時鐘信號由內置晶體振蕩器通過可編程除法器產生;時鐘除法寄存器中的時鐘停止位能使該引腳無效。
vdd1和vss1:邏輯電路5v電源和邏輯電路地。
xtal:晶體振蕩器放大器輸入,外部晶體振蕩器信號由該腳輸入。
xtal2:晶體振蕩器放大器輸出,當使用外部晶體振蕩器信號時,該輸出引腳必須開路。
vdd3和vss3:輸出驅動5v電源和輸出驅動地。
tx0和tx1:can輸出驅動器0和1輸出到物理總線。
int:中斷輸出,用于觸發微控制器中斷;內部中斷寄存器的任何位置位,int將低電平輸出;int為開環輸出;該引腳為低電平將電路從睡眠狀態激活。
rst:復位輸入,用于復位can接口(低電平有效)。
vdd2和vss2:輸入比較器5v電源和輸入比較器地。
rx0和rx1:從物理can總線輸入到sja1000的輸入比較器。
sja1000與微處理器的接口非常簡單,微處理器以訪問外部存儲器的方式來訪問sja1000。由于sja1000的內部寄存器分布在連續的地址內,所以完全可以把sja1000當作外部ram。在設計接口電路時,sja1000的片選地址應與其他外部存儲器的片選在邏輯上無沖突。
3 系統設計
sja1000型can控制器兼容can2.0a和can2.0b二種規范。can2.0b具有二種不同的幀格式:標準幀和擴展幀,前者為11位標識符,后者為29位標識符。前者的標識符比后者的標識符少2個字節。深海測控系統的can節點數量少,只有上位機節點和水下測控中心節點,所以即使距離比較遠,對傳輸數據速度和可靠性的影響也不是很大。
3.1 單片機與can控制器的硬件設計
圖2為c8051f020型單片機與sja1000型控制器的硬件連接電路原理。sja1000占用了0x8000-0x80ff的外部ram空間。當單片機訪問以上空間時片選信號會選中sja1000。

c8051f020有高低2個外部存儲器接口。因此,sja1000的ad0-ad7連接到c8051f020的高端口p7口,cs連接到基址為0x8000的外部存儲器片選信號。當c8051f020訪問地址0x8000-0x80ff時,cpu可對sja1000執行相應的讀/寫操作。sja1000的rd、wr和ale分別與c8051f020的對應引腳相連,int接c8051f020的int0引腳,于是c8051f020可通過中斷方式訪問sja1000。sja1000的復位信號rst為低電平有效。c8051f020的ad0-ad7口用于地址/數據的輸入/輸出,將其配置為漏極開路方式,利用4.7kω上拉電阻器拉至5v。通過設置數字交叉開關,將c8051f020的外部中斷引腳配置到p2.7口。
can能夠使用多種物理介質,例如雙絞線和光纖等。該設計方案采用雙絞線。信號以差分電壓傳送,2條信號線為can_h和can_l,靜態時為2.5v,此時狀態表示邏輯"1",也叫做"隱性"。can_h比can_l高,表示邏輯"0",稱為"顯性",此時can_h=3.5v,can_l=1.5v。tja1050型can總線收發器是can協議控制器和物理總線之間的接口,can總線上二端節點須加60ω電阻器和47nf電容器將信號吸收,以避免信號反射。為了增強can總線節點的抗干擾能力,sja1000的tx1與rx1通過6n137型高速光耦后與tja1050相連。這樣就很好地實現了總線上各can節點間的電氣隔離。其中,光耦部分電路的2個電源vcc和v_can必須完全隔離,否則采用光耦就是失去了意義。電源的完全隔離可采用小功率電源隔離模塊和通過帶多個5v隔離輸出的開關電源模塊實現。
3.2 軟件設計
通信協議采用"id+命令+數據+校驗"的形式,其中id為網絡設備的標識符,采用id.18-id.20。標識符id.21-id.28作為固定命令,不參與驗收濾波。數據表示通信的具體內容。校驗為1個字節,采用校驗和的形式,由于can總線本身具有15位crc校驗,并且該系統節點數少,競爭不會很激烈,通信可靠性比較高。
軟件設計思想為系統上電后c8051f020先對自身和sja1000進行初始化以確定工作主頻、波特率和輸出特性等,然后接收來自甲板上位機的控制命令,同時將獲取的采樣參數通過sja1000傳送到can總線上或備份到flash存儲器中;對sja1000的初始化設計是重點,也是難點,必須對寫入每個寄存器的內容進行仔細和全面考慮,否則系統將無法正常運行。可設上位機sja1000適配卡的acr為xx20,amr為ff00。水下測控中心sja1000的acr為xx40,amr為ff00。
遵循上述思路,筆者采用c51編寫了應用軟件,下面是部分程序清單。
由于深海測控系統對通信的實時性要求很高,一旦接收到甲板上傳來的控制命令就必須及時響應,為此從can總線上接收信息采用中斷方式。即sja1000無錯地接收到消息后使int變為低電平,下降沿觸發c8051f020的外部中斷0,使其進入中斷服務程序。其流程如圖3所所示。

如果要向can總線發送數據,則必須將符合peilcan幀格式的一組數據寫入sja1000的發送緩沖區,然后調用發送子函數。這里筆者采用查詢方式來實現發送。流程如圖4所示。

4 結束語
基于sja1000型can控制器的深海測控系統基本上滿足了功耗低、體積小、重量輕、易擴展的要求,同時與甲板上位機之間的通信可靠,完全能滿足深海探測的需要,并能廣泛應用于海洋油、氣田作業,海洋污染監控和防治,海上漁業生產等,前景廣闊。
評論