葉益陽(yáng) 阮立 徐恒 李偉權(quán) 江曉紅 葛凱杰
(1-臺(tái)州市質(zhì)量技術(shù)監(jiān)督檢測(cè)研究院 浙江 臺(tái)州 318000 2-金浪科技有限公司3-浙江方圓檢測(cè)集團(tuán)股份有限公司)
在海洋環(huán)境監(jiān)測(cè)領(lǐng)域,傳感器設(shè)備電池供電的穩(wěn)定性是一個(gè)重要的指標(biāo),它將直接影響到傳感器能否正常工作,通過(guò)在線(xiàn)監(jiān)測(cè)電池參數(shù),可以及時(shí)了解電池的工作狀態(tài)、,具有速度快、測(cè)量方便等特點(diǎn)。在眾多的參數(shù)中,最直接的一個(gè)參數(shù)是電壓檢測(cè),也是最常采用的檢測(cè)方法[1]。CAN總線(xiàn)屬于現(xiàn)場(chǎng)總線(xiàn)的范疇,它具有擴(kuò)充性好、可靠性高、多主結(jié)構(gòu)等特點(diǎn),通信距離達(dá)到10 km,傳輸速率最高到1 Mbps。支持分布式控制、實(shí)時(shí)控制與遠(yuǎn)程控制[2]。耦合數(shù)據(jù)通信系統(tǒng)的傳輸介質(zhì)為一條簡(jiǎn)易的包塑纜,具有安全性高、裝卸簡(jiǎn)便、允許節(jié)點(diǎn)損壞的特點(diǎn),有助于垂直剖面的多種傳感器任意位置、長(zhǎng)距離、實(shí)時(shí)的數(shù)據(jù)傳輸,實(shí)現(xiàn)長(zhǎng)距離的水下組網(wǎng)通信,它的優(yōu)勢(shì)是體積小、功耗低、成本低。
水下電池電量監(jiān)測(cè)系統(tǒng)的整體結(jié)構(gòu)如圖1所示,主要由傳感器網(wǎng)絡(luò)、耦合鏈通信系統(tǒng)、衛(wèi)星通信系統(tǒng)組成。傳感器節(jié)點(diǎn)之間組網(wǎng)通信采用雙路CAN總線(xiàn)可靠傳輸方式。電池電量監(jiān)測(cè)系統(tǒng)為傳感器設(shè)備提供電池檢測(cè)接口,采集傳感器的電池電量信號(hào),也通過(guò)CAN總線(xiàn)接入傳感器網(wǎng)絡(luò)。水下多傳感器節(jié)點(diǎn)將監(jiān)測(cè)數(shù)據(jù)傳輸給傳感器節(jié)點(diǎn)1進(jìn)行存儲(chǔ),作為匯聚接收器,然后通過(guò)錨系耦合通信鏈,采用耦合數(shù)據(jù)通信(ICC)[3]方式,實(shí)現(xiàn)匯聚接收器與浮標(biāo)數(shù)據(jù)平臺(tái)之間的實(shí)時(shí)通信,最后浮標(biāo)數(shù)據(jù)平臺(tái)通過(guò)衛(wèi)星通信方式將環(huán)境監(jiān)測(cè)數(shù)據(jù)發(fā)送給陸地監(jiān)控中心。
圖1 電池電量監(jiān)測(cè)系統(tǒng)整體結(jié)構(gòu)
微控制器選用ST公司推出的STM32互連型芯片STM32F107[4],此芯片集成了各種高性能工業(yè)標(biāo)準(zhǔn)接口,它自帶兩個(gè)12位AD(模數(shù)轉(zhuǎn)換器),擁有兩路CAN2.0接口,在性能與功能方面完全滿(mǎn)足系統(tǒng)的設(shè)計(jì)要求。
電池電量監(jiān)測(cè)系統(tǒng)內(nèi)部框圖如圖2所示,主要由電壓采集,電壓處理、數(shù)據(jù)傳輸3部分組成。系統(tǒng)提供16路電壓采集接口,各傳感器電池兩端可依次連到每個(gè)電壓采集電路接口。采集到的電壓信號(hào)接至16路選1模擬開(kāi)關(guān)的輸入通道,MCU通過(guò)4路地址譯碼端口控制通道的開(kāi)閉,被選通的一路電壓信號(hào)經(jīng)模擬開(kāi)關(guān)的輸出端口進(jìn)入MCU,MCU的自帶ADC處理該信號(hào)并送入CAN接口,然后,CAN總線(xiàn)收發(fā)器對(duì)其進(jìn)行電平轉(zhuǎn)換和差動(dòng)收發(fā),從而信號(hào)即可通過(guò)CAN總線(xiàn)接入傳感器網(wǎng)絡(luò)進(jìn)行傳輸。
系統(tǒng)設(shè)計(jì)了16路的電壓采集電路,可分別同時(shí)對(duì)16路的電池電壓進(jìn)行采集。電壓信號(hào)的采集采用雙電阻分壓的方法,將實(shí)際電壓經(jīng)過(guò)電阻分壓轉(zhuǎn)化到芯片的測(cè)量電壓范圍內(nèi),該模式可通過(guò)簡(jiǎn)單電路實(shí)現(xiàn),具備較低成本、較長(zhǎng)壽命,不過(guò)存在難以消除的累積誤差。而差分放大器可以克服共模信號(hào)的干擾,而只對(duì)差分信號(hào)進(jìn)行處理,故通過(guò)差分運(yùn)放將電池兩端引出[5]。該方案如圖3所示,結(jié)合運(yùn)算放大器的特性,得到電路的輸出信號(hào)與輸入信號(hào)關(guān)系為:
圖2 電池電量監(jiān)測(cè)系統(tǒng)內(nèi)部框圖
這里取 R1=R2=10 kΩ,R3=R4=5 kΩ,R1、R2、R3、R4均為1%的精密電阻,因此有:
由于差模信號(hào)V+V-可正可負(fù),所以必須提高Vref以便進(jìn)行模數(shù)轉(zhuǎn)換。這里取Vref=3.3V。經(jīng)過(guò)差分放大器之后,電壓信號(hào)才進(jìn)行電阻分壓,由于STM32F107控制器的基準(zhǔn)電壓采用+3.3 V,故此時(shí)的電壓信號(hào)輸入范圍須小于或等于3.3 V。如圖4所示。
圖3 電壓采集電路圖
這里取 R5=1 kΩ,R6=200Ω,得 Vad≤19.8 V,又結(jié)合公式2可知,電池電壓V+-V-≤33 V。R5和R6為分壓電阻,均選用精度為1%的金屬膜電阻。
系統(tǒng)利用模擬開(kāi)關(guān)將采集的每個(gè)電池電壓引出,就可以順序選通16路電壓進(jìn)行處理,模擬開(kāi)關(guān)芯片選擇德州儀器的CD4067。CD4067是一種數(shù)控模擬開(kāi)關(guān),通過(guò)內(nèi)部地址譯碼,截止漏電流低、導(dǎo)通阻抗低。CD4067是16路選通開(kāi)關(guān),具備一個(gè)控制端口C和四個(gè)輸入地址端口A0~A3,通過(guò)輸入的二進(jìn)制組合選通任意一路開(kāi)關(guān),而當(dāng)C端口置1時(shí),通道全部關(guān)閉。這里將控制端C固定接地,保持芯片使能。
如圖4所示,16路的采集電壓分別接入CD4067的16個(gè)輸入/輸出通道,4路地址譯碼端口分別與STM32F107控制器的4個(gè)I/O口PC0~PC3相連,CD4067的I/O端口后接3.3 V的穩(wěn)壓二極管,保證選通后的采集電壓不會(huì)超過(guò)3.3 V,同時(shí)后續(xù)的電壓跟隨器提高了電路的輸入阻抗,降低了輸出阻抗,可極大提高后續(xù)電路的帶載能力,也對(duì)前后級(jí)電路起到隔離作用。STM32F107自帶A/D轉(zhuǎn)換器,精度為12位,對(duì)應(yīng)數(shù)字范圍為0~4 096。STM32控制器有個(gè)很大的優(yōu)點(diǎn),其A/D轉(zhuǎn)換輸入引腳可以是任意GPIO,這里將PA0作為電壓量的ADC輸入端。
系統(tǒng)采用CAN總線(xiàn)進(jìn)行數(shù)據(jù)傳輸,CAN總線(xiàn)具體連接如圖5所示,總線(xiàn)收發(fā)器采用芯片SN65HVD230D,實(shí)現(xiàn)物理總線(xiàn)與CAN控制器之間的差動(dòng)收發(fā)和電平轉(zhuǎn)換。由圖5可以看出,STM32的CAN接口輸出端口(即PB6)與SN65HVD230D的數(shù)據(jù)輸入端D相連,從而把CAN節(jié)點(diǎn)發(fā)送的數(shù)據(jù)傳輸給CAN網(wǎng)絡(luò);CAN接口接收端口(即PB5)接到SN65HVD230D的數(shù)據(jù)輸出端R,完成數(shù)據(jù)的接收。這里將SN65HVD230D方式選擇端口Rs控制引腳接地,選擇工作的模式。這樣就可將轉(zhuǎn)換與處理過(guò)的數(shù)字電壓傳輸?shù)紺AN總線(xiàn)上。
系統(tǒng)的軟件設(shè)計(jì)包括主控制器的軟件設(shè)計(jì)和上位機(jī)的監(jiān)控軟件設(shè)計(jì),其中主控制器軟件設(shè)計(jì)主要包括電壓處理軟件和總線(xiàn)傳輸軟件。主控制器的程序采用嵌入式C語(yǔ)言編寫(xiě),上位機(jī)監(jiān)控軟件采用VC++語(yǔ)言編寫(xiě)。
圖4 電壓處理電路
圖5 CAN總線(xiàn)接口電路
主控制器軟件流程如圖6所示。首先,系統(tǒng)上電復(fù)位,對(duì)各個(gè)模塊初始化,主控制器通過(guò)寫(xiě)入模擬開(kāi)關(guān)的地址譯碼端,選通CD4067的通道1,使該通道上的電壓信號(hào)進(jìn)入主控制器,然后將采集來(lái)的模擬電壓進(jìn)行A/D轉(zhuǎn)換,并將得到的數(shù)字電壓信號(hào)進(jìn)行處理,然后對(duì)數(shù)據(jù)進(jìn)行打包,接著將數(shù)據(jù)送至CAN總線(xiàn)。最后,將通道號(hào)加1,判斷是否為17,即是否超過(guò)了16個(gè)通道的范圍。若是,則將通道號(hào)重新初始化為1,并選通通道1進(jìn)行相同的采集與處理;若不是,則選通該通道進(jìn)行相同的采集與處理。經(jīng)測(cè)試,開(kāi)通下一通道需要加延時(shí)30 ms,以便上位機(jī)軟件進(jìn)行實(shí)時(shí)的數(shù)據(jù)刷新與適時(shí)停留。這樣就輪流選通了模擬開(kāi)關(guān)的16個(gè)通道,完成對(duì)每一路電池電壓信號(hào)的采集與處理。
圖6 主控制器軟件流程圖
2.1.1 電壓處理軟件設(shè)計(jì)
電壓處理部分主要包括對(duì)模擬電壓的A/D轉(zhuǎn)換與對(duì)數(shù)字電壓的處理。模擬電壓的A/D轉(zhuǎn)換主要完成對(duì)主控制器ADC的初始化配置,模擬量輸入GPIO的配置及開(kāi)始轉(zhuǎn)換。
AD轉(zhuǎn)換完成后需要處理已得到的數(shù)字電壓,因電壓量信號(hào)變化較緩,軟件考慮選用平均濾波算法。對(duì)N個(gè)數(shù)據(jù)進(jìn)行連續(xù)采樣,并將A/D轉(zhuǎn)換后得到的數(shù)字電壓進(jìn)行累加,接著對(duì)N個(gè)數(shù)據(jù)的算術(shù)平均值進(jìn)行計(jì)算。經(jīng)過(guò)反復(fù)試驗(yàn),N取20時(shí)可實(shí)現(xiàn)理想的效果。該算法可以排除因脈沖干擾所導(dǎo)致的采樣值偏差,屏蔽偶發(fā)的脈沖性干擾影響。
2.1.2 總線(xiàn)傳輸軟件設(shè)計(jì)
總線(xiàn)傳輸部分主要是完成將通道號(hào)和處理過(guò)的數(shù)字電壓傳輸?shù)紺AN總線(xiàn)上;總線(xiàn)傳輸軟件設(shè)計(jì)主要由系統(tǒng)初始化、數(shù)據(jù)處理與打包和發(fā)送程序3個(gè)部分組成。系統(tǒng)初始化的作用是初始化全部的報(bào)文對(duì)象,主要包括單個(gè)消息的仲裁ID,對(duì)單個(gè)消息是接收?qǐng)?bào)文還是發(fā)送報(bào)文的定義,本消息的消息號(hào)和報(bào)文通信的數(shù)據(jù)長(zhǎng)度。數(shù)據(jù)處理與打包的對(duì)象是經(jīng)A/D轉(zhuǎn)換和處理的數(shù)字電壓,先將十進(jìn)制的數(shù)字電壓的千位、百位、十位、個(gè)位分別拆分出來(lái),選取數(shù)據(jù)長(zhǎng)度為5,其中發(fā)送郵箱的數(shù)據(jù)數(shù)組的第0字節(jié)用來(lái)存儲(chǔ)當(dāng)前數(shù)字電壓所對(duì)應(yīng)的模擬開(kāi)關(guān)通道號(hào),剩下4個(gè)字節(jié)則用來(lái)存儲(chǔ)已經(jīng)拆分出來(lái)的千位、百位、十位、個(gè)位數(shù),這樣就完成了數(shù)據(jù)發(fā)送前的所有準(zhǔn)備工作了;發(fā)送程序通過(guò)CAN控制器自主實(shí)現(xiàn),完成數(shù)據(jù)采集后將發(fā)送緩沖器清空,將待發(fā)送的報(bào)文寫(xiě)入CAN模塊發(fā)送緩沖器,并開(kāi)啟發(fā)送指令,報(bào)文隨之發(fā)送出去。
監(jiān)控界面使用Visual C++語(yǔ)言[6]進(jìn)行設(shè)計(jì),主要任務(wù)是接收數(shù)據(jù)、處理數(shù)據(jù)和數(shù)據(jù)顯示與存儲(chǔ),接收數(shù)據(jù)主要完成對(duì)水下打包傳輸過(guò)來(lái)的通道號(hào)與處理過(guò)的數(shù)字電壓信號(hào)的接收;處理數(shù)據(jù)則是在打包發(fā)送過(guò)來(lái)的數(shù)組中,將通道號(hào)與數(shù)字電壓的千位、百位、十位、個(gè)位區(qū)分開(kāi)來(lái)并分別處理,首先將數(shù)字電壓的千位、百位、十位、個(gè)位重新組合為0~4 096的一個(gè)4位數(shù)字,這樣就重新得到了經(jīng)濾波處理的數(shù)字電壓值Vd,然后將
Vd轉(zhuǎn)換為進(jìn)入MCU前的模擬電壓值Va:
接著根據(jù)電路,將Va換算回電池兩端的電壓,由公式3得:
又由公式2得:
又由公式4得:
這樣就得到了由數(shù)字電壓直接轉(zhuǎn)換回電池電壓的公式。這里電池電壓取小數(shù)點(diǎn)后4位有效數(shù)字。
電池組各通道的備注名稱(chēng)和設(shè)定數(shù)據(jù)顯示與存儲(chǔ)是通過(guò)上位機(jī)的監(jiān)控界面完成的,監(jiān)控界面如圖7所示,主要包括串口通信參數(shù)設(shè)置、數(shù)據(jù)存儲(chǔ)設(shè)置和接收區(qū)電壓顯示。打開(kāi)串口后,可每隔30 ms在各通道對(duì)應(yīng)的文本框里顯示相應(yīng)傳感器的電池電壓值。開(kāi)始存儲(chǔ)后,可存儲(chǔ)各通道的歷史電壓數(shù)據(jù)以供查閱。其中,雙擊通道號(hào)可以更改各通道的備注名稱(chēng)。
圖7 上位機(jī)監(jiān)控界面
在水下運(yùn)用本系統(tǒng),由于傳感器的供電電壓為12~24 V,故抽取12~24 V電壓進(jìn)行測(cè)量,每隔4 V取一個(gè)測(cè)量點(diǎn),每個(gè)測(cè)試點(diǎn)記錄上位機(jī)顯示電壓的8個(gè)數(shù)據(jù),如圖8所示。從圖中可以看出,最大絕對(duì)誤差基本上可以保持在0.17 V以?xún)?nèi),絕對(duì)誤差與相對(duì)誤差都隨著測(cè)量電壓的升高而有所增加,這是由于系統(tǒng)在硬件和軟件方面的累積誤差造成的,是允許的,其中最大相對(duì)誤差小于0.7%,完全可以滿(mǎn)足實(shí)際應(yīng)用需求。
圖8 傳感器供電電壓測(cè)試結(jié)果
本系統(tǒng)選用STM32F107單片機(jī)作為控制核心,利用CAN總線(xiàn)組成傳感器網(wǎng)絡(luò),克服了水聲通信價(jià)格昂貴速率低的缺陷,耦合鏈通信系統(tǒng)體積小,功耗小,也減少了系統(tǒng)成本,水下組網(wǎng)方便,非常適合海洋環(huán)境的數(shù)據(jù)傳輸。本系統(tǒng)適合長(zhǎng)距離傳輸,利于遠(yuǎn)程操作,極大地?cái)U(kuò)充了電池檢測(cè)技術(shù)的數(shù)量和范圍。本文中的系統(tǒng)經(jīng)反復(fù)試驗(yàn),可以實(shí)時(shí)掌握電池電壓參數(shù),并達(dá)到了預(yù)期的精度要求,滿(mǎn)足了實(shí)用性與可靠性的指標(biāo),可廣泛應(yīng)用于水下設(shè)備的電池電壓監(jiān)測(cè)領(lǐng)域。