SJA1000型CAN控制器在深海測(cè)控中的應(yīng)用
1 引言
為了開(kāi)發(fā)海洋資源,人類(lèi)必須首先了解海底環(huán)境。然而,海底環(huán)境十分復(fù)雜,對(duì)海底探測(cè)的要求很高,深海環(huán)境下需要采集的參數(shù)比較多,包括深度、溫度、鹽度、ph值、溶解氧及各種化學(xué)元素等。
深海測(cè)控系統(tǒng)工作時(shí)需要接收來(lái)自甲板控制中心的命令,同時(shí)要將采集到的數(shù)據(jù)反送到甲板控制中心,二者之間的最大通信距離大于5km,因此,它們之間的通信要求很高。can總線(xiàn)與一般的通信總線(xiàn)相比,它的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性。can的直接通信距離最遠(yuǎn)可達(dá)10km(速率在5kb/s以下),報(bào)文采用短幀結(jié)構(gòu),傳輸時(shí)間短,受干擾概率低,保證了數(shù)據(jù)出錯(cuò)率極低。為此,筆者采用can總線(xiàn)作為通信方式。
2 深海測(cè)控系統(tǒng)的基本組成
深海測(cè)控模塊由二大部分組成:測(cè)控子模塊和通信子模塊。測(cè)控子模塊的主要功能是根據(jù)甲板控制中心的命令啟動(dòng)系統(tǒng)并完成參數(shù)提取、轉(zhuǎn)換、數(shù)據(jù)處理、存儲(chǔ)及發(fā)送等操作。通信子模塊的功能是完成甲板與水下測(cè)控系統(tǒng)的通信。
測(cè)控子模塊以cygnal公司的c8051f020型單片機(jī)為核心,擴(kuò)展信號(hào)調(diào)理電路及與can總線(xiàn)的接口。通信子模塊是philips公司的sja1000型can控制器。
2.1 測(cè)控子模塊
深海測(cè)控子模塊由微控制器系統(tǒng)和i/o系統(tǒng)組成。
微控制器是cygnal公司的c8051f020型單片機(jī)。c8051f020采用cip-51型微控制器內(nèi)核及流水線(xiàn)指令結(jié)構(gòu),70%的指令執(zhí)行時(shí)間為1個(gè)或2個(gè)系統(tǒng)時(shí)鐘周期,峰值速度達(dá)到25mi/s,能滿(mǎn)足深海環(huán)境下多路數(shù)據(jù)的快速采集與分析。
c8051f020型單片機(jī)內(nèi)部集成1個(gè)12位8通道帶可編程增益放大器的a/d轉(zhuǎn)換器和1個(gè)8位8通道a/d轉(zhuǎn)換器,能滿(mǎn)足深海多路環(huán)境參數(shù)采集;2路12位電壓輸出d/a轉(zhuǎn)換器;16位可編程定時(shí)/計(jì)數(shù)器陣列pca可用于輸出pwm以控制步進(jìn)電機(jī)的運(yùn)轉(zhuǎn);64個(gè)耐5v電壓的通用i/o口可控制開(kāi)關(guān)器件的啟動(dòng)和停止。
微控制器系統(tǒng)還包括了單片機(jī)的一些基本外圍電路。系統(tǒng)還開(kāi)展了1片容量達(dá)64mbyte的串行flash存儲(chǔ)器,用以保存采集到的數(shù)據(jù),以避免can通信不暢時(shí)造成數(shù)據(jù)丟失。使用時(shí)只要微控制器外接相應(yīng)的傳感器、繼電器、電機(jī)等就可以完成各種環(huán)境下參數(shù)的采集及相應(yīng)的控制
2.2 通信子模塊
sja1000是philips公司推出的一款獨(dú)立的can控制器,主要用于移動(dòng)目標(biāo)和一般工業(yè)環(huán)境中的區(qū)域網(wǎng)絡(luò)控制。它是pca82c200型can控制器(basiccan)的替代產(chǎn)品,而且增加了一種新的操作模式--pelican,這種模式支持具有很多新特征的can2.0b協(xié)議。
sja1000的基本特征如下:
引腳與pca2c200型can控制器兼容。
有擴(kuò)展的接收緩沖器(64字節(jié),先進(jìn)先出fifo)。
支持can2.0a和can2.0b協(xié)議。
支持11位和29位標(biāo)識(shí)碼。
通信位速率可達(dá)1mb/s。
可與不同的微處理器接口。
可編程的can輸出驅(qū)動(dòng)器配置。
sja1000的引腳排列如圖1所示,主要引腳的功能如下所述。
ad7-ad0:地址數(shù)據(jù)復(fù)用線(xiàn)。
ale/as:ale輸入信號(hào)(intel模式)或as輸入信號(hào)(motorola模式)。
cs:片選信號(hào),低電平允許訪問(wèn)sja1000。
rd/e:來(lái)自微控制器的rd信號(hào)(intel模式)或e使能信號(hào)(motorola模式)。
wr:來(lái)自微控制器的wr信號(hào)(intel模式)或rd/wr使能信號(hào)(motorola模式)。
clkout:sja1000產(chǎn)生用于微控制器的時(shí)鐘輸出信號(hào);時(shí)鐘信號(hào)由內(nèi)置晶體振蕩器通過(guò)可編程除法器產(chǎn)生;時(shí)鐘除法寄存器中的時(shí)鐘停止位能使該引腳無(wú)效。
vdd1和vss1:邏輯電路5v電源和邏輯電路地。
xtal:晶體振蕩器放大器輸入,外部晶體振蕩器信號(hào)由該腳輸入。
xtal2:晶體振蕩器放大器輸出,當(dāng)使用外部晶體振蕩器信號(hào)時(shí),該輸出引腳必須開(kāi)路。
vdd3和vss3:輸出驅(qū)動(dòng)5v電源和輸出驅(qū)動(dòng)地。
tx0和tx1:can輸出驅(qū)動(dòng)器0和1輸出到物理總線(xiàn)。
int:中斷輸出,用于觸發(fā)微控制器中斷;內(nèi)部中斷寄存器的任何位置位,int將低電平輸出;int為開(kāi)環(huán)輸出;該引腳為低電平將電路從睡眠狀態(tài)激活。
rst:復(fù)位輸入,用于復(fù)位can接口(低電平有效)。
vdd2和vss2:輸入比較器5v電源和輸入比較器地。
rx0和rx1:從物理can總線(xiàn)輸入到sja1000的輸入比較器。
sja1000與微處理器的接口非常簡(jiǎn)單,微處理器以訪問(wèn)外部存儲(chǔ)器的方式來(lái)訪問(wèn)sja1000。由于sja1000的內(nèi)部寄存器分布在連續(xù)的地址內(nèi),所以完全可以把sja1000當(dāng)作外部ram。在設(shè)計(jì)接口電路時(shí),sja1000的片選地址應(yīng)與其他外部存儲(chǔ)器的片選在邏輯上無(wú)沖突。
3 系統(tǒng)設(shè)計(jì)
sja1000型can控制器兼容can2.0a和can2.0b二種規(guī)范。can2.0b具有二種不同的幀格式:標(biāo)準(zhǔn)幀和擴(kuò)展幀,前者為11位標(biāo)識(shí)符,后者為29位標(biāo)識(shí)符。前者的標(biāo)識(shí)符比后者的標(biāo)識(shí)符少2個(gè)字節(jié)。深海測(cè)控系統(tǒng)的can節(jié)點(diǎn)數(shù)量少,只有上位機(jī)節(jié)點(diǎn)和水下測(cè)控中心節(jié)點(diǎn),所以即使距離比較遠(yuǎn),對(duì)傳輸數(shù)據(jù)速度和可靠性的影響也不是很大。
3.1 單片機(jī)與can控制器的硬件設(shè)計(jì)
圖2為c8051f020型單片機(jī)與sja1000型控制器的硬件連接電路原理。sja1000占用了0x8000-0x80ff的外部ram空間。當(dāng)單片機(jī)訪問(wèn)以上空間時(shí)片選信號(hào)會(huì)選中sja1000。
c8051f020有高低2個(gè)外部存儲(chǔ)器接口。因此,sja1000的ad0-ad7連接到c8051f020的高端口p7口,cs連接到基址為0x8000的外部存儲(chǔ)器片選信號(hào)。當(dāng)c8051f020訪問(wèn)地址0x8000-0x80ff時(shí),cpu可對(duì)sja1000執(zhí)行相應(yīng)的讀/寫(xiě)操作。sja1000的rd、wr和ale分別與c8051f020的對(duì)應(yīng)引腳相連,int接c8051f020的int0引腳,于是c8051f020可通過(guò)中斷方式訪問(wèn)sja1000。sja1000的復(fù)位信號(hào)rst為低電平有效。c8051f020的ad0-ad7口用于地址/數(shù)據(jù)的輸入/輸出,將其配置為漏極開(kāi)路方式,利用4.7kω上拉電阻器拉至5v。通過(guò)設(shè)置數(shù)字交叉開(kāi)關(guān),將c8051f020的外部中斷引腳配置到p2.7口。
can能夠使用多種物理介質(zhì),例如雙絞線(xiàn)和光纖等。該設(shè)計(jì)方案采用雙絞線(xiàn)。信號(hào)以差分電壓傳送,2條信號(hào)線(xiàn)為can_h和can_l,靜態(tài)時(shí)為2.5v,此時(shí)狀態(tài)表示邏輯"1",也叫做"隱性"。can_h比can_l高,表示邏輯"0",稱(chēng)為"顯性",此時(shí)can_h=3.5v,can_l=1.5v。tja1050型can總線(xiàn)收發(fā)器是can協(xié)議控制器和物理總線(xiàn)之間的接口,can總線(xiàn)上二端節(jié)點(diǎn)須加60ω電阻器和47nf電容器將信號(hào)吸收,以避免信號(hào)反射。為了增強(qiáng)can總線(xiàn)節(jié)點(diǎn)的抗干擾能力,sja1000的tx1與rx1通過(guò)6n137型高速光耦后與tja1050相連。這樣就很好地實(shí)現(xiàn)了總線(xiàn)上各can節(jié)點(diǎn)間的電氣隔離。其中,光耦部分電路的2個(gè)電源vcc和v_can必須完全隔離,否則采用光耦就是失去了意義。電源的完全隔離可采用小功率電源隔離模塊和通過(guò)帶多個(gè)5v隔離輸出的開(kāi)關(guān)電源模塊實(shí)現(xiàn)。
3.2 軟件設(shè)計(jì)
通信協(xié)議采用"id+命令+數(shù)據(jù)+校驗(yàn)"的形式,其中id為網(wǎng)絡(luò)設(shè)備的標(biāo)識(shí)符,采用id.18-id.20。標(biāo)識(shí)符id.21-id.28作為固定命令,不參與驗(yàn)收濾波。數(shù)據(jù)表示通信的具體內(nèi)容。校驗(yàn)為1個(gè)字節(jié),采用校驗(yàn)和的形式,由于can總線(xiàn)本身具有15位crc校驗(yàn),并且該系統(tǒng)節(jié)點(diǎn)數(shù)少,競(jìng)爭(zhēng)不會(huì)很激烈,通信可靠性比較高。
軟件設(shè)計(jì)思想為系統(tǒng)上電后c8051f020先對(duì)自身和sja1000進(jìn)行初始化以確定工作主頻、波特率和輸出特性等,然后接收來(lái)自甲板上位機(jī)的控制命令,同時(shí)將獲取的采樣參數(shù)通過(guò)sja1000傳送到can總線(xiàn)上或備份到flash存儲(chǔ)器中;對(duì)sja1000的初始化設(shè)計(jì)是重點(diǎn),也是難點(diǎn),必須對(duì)寫(xiě)入每個(gè)寄存器的內(nèi)容進(jìn)行仔細(xì)和全面考慮,否則系統(tǒng)將無(wú)法正常運(yùn)行??稍O(shè)上位機(jī)sja1000適配卡的acr為xx20,amr為ff00。水下測(cè)控中心sja1000的acr為xx40,amr為ff00。
遵循上述思路,筆者采用c51編寫(xiě)了應(yīng)用軟件,下面是部分程序清單。
由于深海測(cè)控系統(tǒng)對(duì)通信的實(shí)時(shí)性要求很高,一旦接收到甲板上傳來(lái)的控制命令就必須及時(shí)響應(yīng),為此從can總線(xiàn)上接收信息采用中斷方式。即sja1000無(wú)錯(cuò)地接收到消息后使int變?yōu)榈碗娖剑陆笛赜|發(fā)c8051f020的外部中斷0,使其進(jìn)入中斷服務(wù)程序。其流程如圖3所所示。
如果要向can總線(xiàn)發(fā)送數(shù)據(jù),則必須將符合peilcan幀格式的一組數(shù)據(jù)寫(xiě)入sja1000的發(fā)送緩沖區(qū),然后調(diào)用發(fā)送子函數(shù)。這里筆者采用查詢(xún)方式來(lái)實(shí)現(xiàn)發(fā)送。流程如圖4所示。
4 結(jié)束語(yǔ)
基于sja1000型can控制器的深海測(cè)控系統(tǒng)基本上滿(mǎn)足了功耗低、體積小、重量輕、易擴(kuò)展的要求,同時(shí)與甲板上位機(jī)之間的通信可靠,完全能滿(mǎn)足深海探測(cè)的需要,并能廣泛應(yīng)用于海洋油、氣田作業(yè),海洋污染監(jiān)控和防治,海上漁業(yè)生產(chǎn)等,前景廣闊。
評(píng)論