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