沈良恒+劉建明



通信機(jī)房設(shè)備在使用蓄電池應(yīng)急供電時(shí),針對(duì)蓄電池工作狀態(tài)的各參數(shù)進(jìn)行實(shí)時(shí)遠(yuǎn)程監(jiān)測(cè),并能根據(jù)電壓閾值手動(dòng)或自動(dòng)控制負(fù)載的通斷,保護(hù)蓄電池避免虧電損壞和確保設(shè)備正常運(yùn)行的功能需求,綜合運(yùn)用單片機(jī)結(jié)合電子測(cè)量技術(shù)、通信技術(shù)和計(jì)算機(jī)軟件技術(shù),從軟硬件和協(xié)議的設(shè)計(jì)實(shí)現(xiàn)入手開發(fā)本系統(tǒng),為蓄電池遠(yuǎn)程監(jiān)測(cè)和控制提供了有效的解決方案,并可方便推廣應(yīng)用到其他需要實(shí)時(shí)監(jiān)控蓄電池的場(chǎng)合。
【關(guān)鍵詞】電池監(jiān)測(cè)器 STC單片機(jī) AT指令 遠(yuǎn)程監(jiān)控 欠壓保護(hù)
近年來,隨著通信行業(yè)的飛速發(fā)展,通信機(jī)房和機(jī)房設(shè)備總量大幅增加,通信運(yùn)營商出于對(duì)其服務(wù)質(zhì)量提升的要求,機(jī)房監(jiān)管趨向無人值守和遠(yuǎn)程集中管理。通信機(jī)房往往給諸如傳輸設(shè)備、服務(wù)器及監(jiān)控?cái)z像頭等用電設(shè)備配置有蓄電池作為備電,以便在市電停電時(shí)能支撐設(shè)備運(yùn)行一段時(shí)間,而除了高端的UPS系統(tǒng)之外,普通蓄電池的工作狀態(tài)缺乏有效的監(jiān)控手段,比如需要實(shí)時(shí)遠(yuǎn)程了解蓄電池的電壓、電流、溫度和電量等關(guān)鍵參數(shù),并在蓄電池將要虧電的情況下切斷負(fù)載來保護(hù)蓄電池的使用壽命。于是需要設(shè)計(jì)開發(fā)一套可在局域網(wǎng)或廣域網(wǎng)中使用的通信機(jī)房電池組遠(yuǎn)程監(jiān)控系統(tǒng),以滿足尤其是中小型機(jī)房蓄電池的監(jiān)管需求。
1 總體設(shè)計(jì)
本系統(tǒng)整體架構(gòu)分為下位機(jī)和上位機(jī)兩部分。其中下位機(jī)包括微控制器板、電池監(jiān)測(cè)板、通信適配模塊、繼電器模塊、溫度傳感探頭五個(gè)組成部分;上位機(jī)軟件則部署在一臺(tái)計(jì)算機(jī)上,與下位機(jī)通過以太網(wǎng)連接。系統(tǒng)總體結(jié)構(gòu)如圖1所示。
微控制器板選用工業(yè)級(jí)抗干擾能力強(qiáng)的高速1T單機(jī)器周期指令單片機(jī)STC15W204S開發(fā)。電池監(jiān)測(cè)板核心組件采用集成度高的電池監(jiān)測(cè)器DS2438芯片。通信適配模塊內(nèi)嵌有TCP/IP協(xié)議棧,提供微控制器UART串口轉(zhuǎn)以太網(wǎng)Ethernet功能,實(shí)現(xiàn)有線聯(lián)網(wǎng),也可以增加無線WIFI模塊,實(shí)現(xiàn)無線聯(lián)網(wǎng)。在計(jì)算機(jī)端則使用易于上位機(jī)開發(fā)的虛擬串口方式進(jìn)行通信。繼電器模塊用于接通和關(guān)斷負(fù)載用電設(shè)備和蓄電池之間的連線,采用底成本的機(jī)械繼電器即可。電池監(jiān)測(cè)器芯片內(nèi)部已帶有直接數(shù)字化的溫度傳感器,可監(jiān)測(cè)芯片內(nèi)部工作溫度,在本系統(tǒng)中用于監(jiān)測(cè)機(jī)房環(huán)境溫度。但要監(jiān)測(cè)蓄電池的溫度,且要考慮方便安裝則需要另外的溫度傳感探頭,此處優(yōu)選金屬殼貼片式DS18B20便于粘貼蓄電池表面測(cè)溫。機(jī)房環(huán)境溫度和蓄電池表面溫度兩者具有相關(guān)性,可更精確的融合判斷蓄電池工作情況。
上位機(jī)軟件通過計(jì)算機(jī)的以太網(wǎng)物理端口(邏輯上則是虛擬串口)向下位機(jī)發(fā)出自定義好的AT指令。指令數(shù)據(jù)先通過通信適配模塊轉(zhuǎn)換,即IP包數(shù)據(jù)流轉(zhuǎn)換成串口TTL電平數(shù)據(jù)流,并被微控制器STC15W204S的UART口接收。再由微控制器響應(yīng)具體的指令請(qǐng)求來控制電池監(jiān)測(cè)板,如讀取DS2438芯片中的電池電壓、電流、電量和芯片溫度對(duì)應(yīng)的寄存器值,以及讀取DS18B20的溫度值,隨后經(jīng)過微控制器解析與轉(zhuǎn)換數(shù)據(jù)格式,再回傳至計(jì)算機(jī)上位機(jī)窗體中顯示。通過上位機(jī)可遠(yuǎn)程控制繼電器模塊通斷負(fù)載,也可預(yù)先設(shè)置蓄電池欠壓保護(hù)閾值來自動(dòng)通斷負(fù)載,避免蓄電池虧電使用。
2 電池監(jiān)測(cè)器
作為電池監(jiān)測(cè)板的核心部件DS2438,其片內(nèi)具備唯一的64位硅序列號(hào),自帶40字節(jié)非易失EEPROM存儲(chǔ)器存儲(chǔ)電池相關(guān)參數(shù),與微控制器之間使用1-Wire接口,除地線外僅需1條連線。在單一芯片內(nèi)即可完成對(duì)電池的電壓、電流、溫度和電量的數(shù)據(jù)采集,并內(nèi)置優(yōu)化算法,采樣數(shù)據(jù)準(zhǔn)確度高。
DS2438的狀態(tài)配置寄存器內(nèi)為最經(jīng)常訪問的數(shù)據(jù),具體位的數(shù)值為0或1。格式如圖2所示。
IAD為電流A/D控制位,1表示電流A/D和ICA啟用,電流測(cè)量將以36.41Hz的頻率采樣,0表示電流A/D和ICA被禁用。CA 為電流累加器配置位,1表示CCA/DCA啟用,數(shù)據(jù)將被存儲(chǔ)并能取回?cái)?shù)據(jù),0表示CCA/DCA被禁用。EE為電流累加器映射選擇位,1表示每次相應(yīng)的寄存器遞增時(shí)CCA/DCA計(jì)數(shù)器數(shù)據(jù)能夠被映射到EEPROM,0表示CCA/DCA計(jì)數(shù)器數(shù)據(jù)將不會(huì)映射到EEPROM,隨著電池組放電CCA/DCA可能會(huì)丟失。AD為電壓A/D輸入選擇位,1表示電池輸入VDD被選作DS2438電壓A/D轉(zhuǎn)換器的輸入,0表示通用A/D輸入VAD被選作DS2438電壓A/D轉(zhuǎn)換器的輸入。對(duì)于任一種設(shè)置電壓轉(zhuǎn)換命令將會(huì)初始化電壓A/D轉(zhuǎn)換器。以上寄存器位的默認(rèn)值都是1。
TB為溫度忙碌標(biāo)志,1表示溫度轉(zhuǎn)換正在進(jìn)行, 0表示溫度轉(zhuǎn)換完成。NVB為非易失性存儲(chǔ)器忙碌標(biāo)志,1表示從中間結(jié)果暫存器復(fù)制到EEPROM正在進(jìn)行,0表示非易失性存儲(chǔ)器不忙。復(fù)制到EEPROM可能要花費(fèi)2ms到10ms,在低供電電壓下花費(fèi)時(shí)間更長。ADB為A/D轉(zhuǎn)換器忙碌標(biāo)志,1表示電池電壓的A/D轉(zhuǎn)換正在進(jìn)行,0表示轉(zhuǎn)換完成或沒有測(cè)量值要被轉(zhuǎn)換,A / D轉(zhuǎn)換大約需要10 ms。X為無用位。
DS2438初始化配置操作程序?qū)崿F(xiàn)舉例:
void ds2438_init(void) //初始化配置寄存器
{
WritePage(page(0)); //寫第一頁,即page0的地址
WriteByte(0X07); //設(shè)置page0配置寄存器Byte0為:IAD =1,電流A/D啟用;
//CA=1,啟用電流累加器;EE =1,電流值、累計(jì)值映射到EEPROM;
//AD =0,電壓輸入選擇為通用電壓輸入;其它為狀態(tài)標(biāo)志
CopyPage(page(0)); //將page0的瞬時(shí)電流、電壓、溫度等易失數(shù)據(jù)
//復(fù)制到片內(nèi)EEPROM存儲(chǔ)
}
void WritePage(unsigned char PageX) //寫DS2438中間結(jié)果暫存器PageX
{
reset_presence(); //發(fā)送復(fù)位脈沖
WriteByte(0xCC); //跳過讀取64位芯片編號(hào),節(jié)省時(shí)間
WriteByte(0x4E); //寫堆棧指針
WriteByte(PageX); //寫寄存器PageX地址
}
3 通信協(xié)議設(shè)計(jì)
上位機(jī)和下位機(jī)之間通過自定義的通信協(xié)議進(jìn)行雙向通信。下位機(jī)向上位機(jī)發(fā)送數(shù)據(jù)為上行通信,上位機(jī)向下位機(jī)發(fā)送數(shù)據(jù)為下行通信。協(xié)議設(shè)計(jì)要考慮松耦合、可擴(kuò)展和便于維護(hù),上下位機(jī)之間方便并行開發(fā),而AT指令一般應(yīng)用于終端設(shè)備與PC應(yīng)用之間的連接與通信,已被大家普遍認(rèn)同,本設(shè)計(jì)借鑒并發(fā)展了AT指令。有開發(fā)能力的用戶也可根據(jù)本協(xié)議自行開發(fā)上位機(jī)軟件。串口通信波特率默認(rèn)為9600bps-8-N-1,信息幀為ASCII碼,可通過串口調(diào)試工具進(jìn)行協(xié)議驗(yàn)證調(diào)試。
3.1 上行數(shù)據(jù)通信協(xié)議設(shè)計(jì)
上行數(shù)據(jù)樣本舉例解釋如下(電流的+-表示電流方向,+表示充電,-表示放電;字段間以“,”作為分隔符):
$000000D3C19A,VOL=13.252V,CUR=-10.170A,BAT=18.226C,CHIP=13.513C,QUA=18934mAh,REL=1,CLO=10.8V,OPE=11.8V
$符號(hào)作為起始字,代表上行數(shù)據(jù)開始?!氨O(jiān)測(cè)板ID”即DS2438序列號(hào)為000000D3C19A?!爱?dāng)前電壓”值為13.252V?!爱?dāng)前電流”值為-10.170A?!半姵販囟取敝禐?8.226攝氏度?!靶酒瑴囟取敝禐?3.513攝氏度。“電池電量”剩余值為18934mAh?!柏?fù)載通(1)斷(0)”表示當(dāng)前負(fù)載為接通狀態(tài)。已預(yù)設(shè)的“欠壓關(guān)斷負(fù)載值”為10.8V。已預(yù)設(shè)的“恢復(fù)接通負(fù)載值”為11.8V。數(shù)據(jù)末尾帶回車換行。
“欠壓關(guān)斷負(fù)載值”和“恢復(fù)接通負(fù)載值”之間保留1V電壓間隔是為防止蓄電池電壓在閾值臨界點(diǎn)附近因抖動(dòng)導(dǎo)致繼電器不斷在關(guān)斷和接通之間跳動(dòng)。
3.2 下行數(shù)據(jù)通信協(xié)議設(shè)計(jì)
(1)“查詢”指令:ATG
即請(qǐng)求一條包含當(dāng)前所有狀態(tài)值的上行數(shù)據(jù),返回舉例:
$000000D3C19B,VOL=10.707V,CUR=0.536A,BAT=+30.080C,CHIP=+27.156C,QUA=1077mAh,REL=0,CLO=10.8V,OPE=11.8V
考慮到下位機(jī)采集數(shù)據(jù)和轉(zhuǎn)換數(shù)據(jù)需要時(shí)間,上位機(jī)在操作兩次“查詢”指令時(shí)最小時(shí)間間隔為2秒(亦為缺省值,最大間隔為1小時(shí))。
(2)“關(guān)斷負(fù)載”指令:ATC
(3)“接通負(fù)載”指令:ATO
(4)“欠壓關(guān)斷負(fù)載值”配置指令:ATL。舉例:ATL10.8
(5)“恢復(fù)接通負(fù)載值”配置指令:ATH。舉例:ATH11.8
4 上位機(jī)軟件功能設(shè)計(jì)
上位機(jī)軟件基于JAVA語言開發(fā),開發(fā)平臺(tái)為Eclipse Java EE IDE for Web Developers,使用RXTX串口API包mfz-rxtx-2.2-20081207-win-x64。上位機(jī)在Windows7及以上64位操作系統(tǒng)上運(yùn)行需Windows 64-bit版本的JRE支持。軟件功能窗體如圖3所示。
“通信端口”默認(rèn)自動(dòng)選中當(dāng)前可以使用的端口號(hào),可選擇“打開”或“關(guān)閉”端口。點(diǎn)擊一次“手動(dòng)查詢”獲取一次數(shù)據(jù),并刷新窗體右側(cè)數(shù)據(jù)?!盎謴?fù)缺省值”,用于恢復(fù)出廠設(shè)置,即還原“欠壓關(guān)斷值”為10.8V和 “恢復(fù)接通值”為11.8V,其實(shí)是通過發(fā)送一次ATL10.8
5 結(jié)語
目前本系統(tǒng)已在一些大型商場(chǎng)通信機(jī)房中部署使用,表現(xiàn)出蓄電池工作狀態(tài)數(shù)據(jù)采集準(zhǔn)確,實(shí)時(shí)性高,控制操作簡(jiǎn)單,遠(yuǎn)程聯(lián)網(wǎng)方便的優(yōu)點(diǎn)。尤其是根據(jù)預(yù)置電壓值自動(dòng)欠壓保護(hù)功能,使得在無人值守環(huán)境下蓄電池使用壽命更長。本系統(tǒng)可推廣到諸如控制機(jī)房、計(jì)算機(jī)機(jī)房、保安監(jiān)控機(jī)房和臨時(shí)設(shè)備供電等其他需要實(shí)時(shí)遠(yuǎn)程監(jiān)控蓄電池工作狀態(tài)的場(chǎng)合。
參考文獻(xiàn)
[1]蔣維.基于STC15系列增強(qiáng)型單片機(jī)原理與接口技術(shù)[M].北京:清華大學(xué)出版社,2014.
[2]陸玲.嵌入式系統(tǒng)軟件設(shè)計(jì)中的數(shù)據(jù)結(jié)構(gòu)[M].北京:北京航天航空大學(xué)出版社,2008.
[3]何立民.單片機(jī)應(yīng)用技術(shù)選編[M].北京:北京航天航空大學(xué)出版社,2006.
[4]何曙輝.Java面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2012.
[5]嚴(yán)加朋,王大志,金有超.基于DS2438的大功率蓄電池狀態(tài)檢測(cè)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011,11(03):40-42.
[6] 張瀚文,周艷,孟國營.基于DS2438的智能直流不間斷電源[J].電子世界,2013(05):72-74.
作者單位
桂林電子科技大學(xué)計(jì)算機(jī)與信息安全學(xué)院 廣西壯族自治區(qū)桂林市 541004