蓄電池在電力系統(tǒng)中是一種必備的后備電源且數(shù)量較多, 其使用壽命和安全可靠性倍受用戶關(guān)注,。但由于使用不當或者不能及時維護,,經(jīng)常會導(dǎo)致蓄電池組中個別蓄電池的過放電或者早期失效。過放電或者早期失效的個別蓄電池在后備電源投入使用時,會嚴重影響整個電池組的放電容量,甚至會導(dǎo)致整個供電系統(tǒng)的崩潰,。因此,,為保證在市電被切斷時用電設(shè)備能夠安全可靠運行,避免蓄電池在長期使用過程中因個別電池過放電或者失效而引發(fā)事故帶來經(jīng)濟損失,對蓄電池進行實時在線監(jiān)測和及時的故障診斷成為蓄電池維護工作的一個極為重要 方面。本文介紹的基于STC89C58RD+微控制器的蓄電池在線監(jiān)測系統(tǒng),能實現(xiàn)對蓄電池無論在閑置狀態(tài)還是充,、放電動態(tài)過程中的狀態(tài)監(jiān)測,;對蓄電池內(nèi) 部開路、短路,、過壓,、欠壓及過度放電等異常狀態(tài)及時報警并存儲數(shù)據(jù)以備查詢;能對2V,、6V和12V多種多節(jié)電池電壓在線測量,;提高了對蓄電池監(jiān)測的準確 性、自動化和智能化程度,。本文具體介紹了系統(tǒng)的硬件設(shè)計和軟件實現(xiàn),。
系統(tǒng)硬件設(shè)計
系統(tǒng)硬件結(jié)構(gòu)
蓄電池在線監(jiān)測系統(tǒng)是以STC89系列的STC89C58RD+微控制器,、XILINX的XC9572-84為核心,外圍電路主要由電壓采集電路,、 A/D轉(zhuǎn)換電路,、顯示驅(qū)動電路及鍵盤電路等幾部分組成的,,如圖1所示,。A/D轉(zhuǎn)換芯片采用10位ADC TLC1549。顯示驅(qū)動芯片采用MC14489B,,它可以驅(qū)動5位共陰極數(shù)碼管,,微控制器的P1口的低5位作為鍵盤輸入口,擴展的RS485接口用于多 機通信 ,。下面詳細介紹系統(tǒng)中STC89C58RD+,、XC9572-84器件和電壓采集電路、A/D轉(zhuǎn)換電路的設(shè)計與實現(xiàn),。
圖1 系統(tǒng)硬件結(jié)構(gòu)框圖
微控制器STC89C58RD+簡介
STC89C58RD+是STC89系列的微控制器,,它不但與80C51完全兼容,而且還有新的特點:片內(nèi)含有Flash程序存儲器32Kb,, DataFlash數(shù)據(jù)存儲器32Kb,,RAM數(shù)據(jù)存儲器1208B,同時內(nèi)部還有看門狗(WDT),;由于ALE信號開關(guān)狀態(tài)可設(shè)置,,從而降低了EMI; 具有可編程的8級中斷源4種優(yōu)先級,,具有系統(tǒng)可編程(ISP)和應(yīng)用可編程(IAP)等特點,,片內(nèi)資源豐富、集成度高,、使用方便,。STC89C58RD+ 對系統(tǒng)的工作進行實施調(diào)度,實現(xiàn)外部輸入?yún)?shù)的設(shè)置,、電池電壓的測試和顯示,、電池工作狀態(tài)的指示。
邏輯編程器件XC9572-84(CPLD)
由于監(jiān)測的電池節(jié)數(shù)較多,,所需要I/O口較多,,用傳統(tǒng)的設(shè)計方法,需要74HC273,、74HC00,、74HC138、CD4514等多種芯片來實 現(xiàn),,器件種類和數(shù)量多,,使PCB的尺寸加大,,也增加了系統(tǒng)的不穩(wěn)定因素。本系統(tǒng)選用XILINX系列的CPLD器件XC9572-84,,其共有72個宏單 元,,69個I/O口,1600個門,,72個寄存器,,可以對上述多種芯片進行集成。該器件具有在系統(tǒng)可編程能力,,含有先進的數(shù)據(jù)保密特性,,它可以完全保護編 程數(shù)據(jù)不被非法讀取和擦除,每個I/O口都有一個可編程輸出擺率控制位從而可減小系統(tǒng)噪聲,,采用具有較低功耗的快速閃存技術(shù),,每個I/O口的驅(qū)動能力強, 負載電流可達24mA,。XC9572-84接收單片機傳來的數(shù)據(jù)和地址,,控制各個固態(tài)繼電器(G3VM-402C)的選通以及A/D轉(zhuǎn)換的進行,達到采集 電壓的功能,。采用了CPLD器件后,,減少了系統(tǒng)所需器件的數(shù)量和種類,簡化了PCB的排版和布線,,減小了系統(tǒng)體積和節(jié)約成本,,方便了系統(tǒng)調(diào)試,有利于批量化生產(chǎn),。
圖2 電壓采集電路
電壓采集電路
電壓采集電路直接影響到電壓測試的精確程度,因而采集電路設(shè)計得是否適當對整個系統(tǒng)至關(guān)重要,。對每節(jié)電池電壓進行測量,有兩種方法:①對每節(jié)電池電 壓直接采集。②采集(n+1)節(jié)電池的總電壓,減去n節(jié)電池的總電壓得第n+1節(jié)電池電壓,。第一種電壓采集精確而且安全,。第二種雖然電路比較簡單但是當電 池節(jié)數(shù)多時采集的電壓太高,不安全而且會出現(xiàn)較大的誤差,。因此選用第一種方法,。電壓采集電路要求要安全,采集的電壓要足夠的穩(wěn)定,。本系統(tǒng)的蓄電池組采用串 接方式,,BAT1+接第一節(jié)電池的正極,BAT2+接第二節(jié)的正極(第一節(jié)的負極),,如此依次連接,,最多可達41節(jié)。經(jīng)過XC9572-84模擬開關(guān)選通 G3VM-402C后,,將1~n節(jié)電池電壓依次釋放到電壓總線BUS1+,、BUS1-上,,電路選用運算放大器LM358作為信號放大器件,它的前級為差分 式放大器,,后級為電壓跟隨器,,使TLC1549得到一個穩(wěn)定的采樣電壓,如圖2所示,。1VD0和1VD1采用FR104高速開關(guān)管來保護運算放大器的內(nèi)部 電路,。差分式放大倍數(shù)為A=0.2,具體推導(dǎo)如下:
(Ua-Up)/1R12=Up/1R14,; ①
(Ub-Un)/1R11=(Un-Vo)/1R13,;②
注意運放的“虛短”特點,,有Up=Un,;結(jié)合①、②兩式得到Vo=((1R11+1R13)/1R11)·(1R14/(1R12+1R14))·Ua-1R13/1R11·Ub,;選取電阻滿足:1R13/1R11=1R14/1R12的關(guān)系,,輸出電壓可簡化為:Vo=1R13/1R11·(Ua-Ub),故電壓放大倍數(shù)A=Vo/(Ua-Ub)=1R13/1R11=0.2,。
A/D轉(zhuǎn)換電路
本系統(tǒng)A/D轉(zhuǎn)換采用片外串行總線10位高速高精度專用集成電路TLC1549,,其功耗低、體積小,、占用單片機的資源少,,具有連接方便、編程簡單的 特點,。電壓采集電路的輸出電壓與TLC1549的A/D轉(zhuǎn)換通道相連接,,在時鐘脈沖信號作用下,TLC1549將電壓轉(zhuǎn)換成10位二進制數(shù)字信號,,并把上 次A/D轉(zhuǎn)換的結(jié)果以10位二進制數(shù)的形式依次輸出,,再通過光電隔離傳送到單片機進行處理,如圖3所示,。
圖3 A/D轉(zhuǎn)換電路
硬件設(shè)計過程中的注意點
1 系統(tǒng)用多路電源,,要考慮系統(tǒng)的功耗選擇適當?shù)碾娫矗娫措妷簯?yīng)比較穩(wěn)定,。
2 電壓采集部分使用固態(tài)繼電器(G3VM-402C),,由于電池節(jié)數(shù)較多,電壓比較高,,故應(yīng)注意對內(nèi)部電路的保護,,可以采用適當功率的電阻。對放大電路的電 阻精度要求較高,,可選用精度為1%的金屬膜電阻,;電路設(shè)計應(yīng)避免出現(xiàn)因多個固態(tài)繼電器同時開通的直通現(xiàn)象,,這樣會使多節(jié)蓄電池短路,造成電壓采集電路的損 壞,。
3 A/D轉(zhuǎn)換芯片的基準電源要十分穩(wěn)定,,基準電源與芯片工作電源應(yīng)采用不同的共地電源,以保證A/D轉(zhuǎn)換芯片基準電源的穩(wěn)定性,。為了減少干擾,,時鐘和片選信號與單片機、CPLD之間進行光電隔離,。
4 器件的布局和PCB圖的布線采用模塊化,,交流與直流分離,強電與弱電分離,,數(shù)字地和模擬地分開,,注意電源線和地線的布局。
系統(tǒng)軟件設(shè)計
在單片機的軟件編程上,,以Keil C編譯器的Windows集成開發(fā)環(huán)境 μvision2作為軟件開發(fā)平臺,,采用C51高級語言編寫。該語言是80C51系列單片機的專門的高性能的程序設(shè)計語言,。它采用符合ANSI標準的C語 言編程,,便于改進、擴充和移植,,可以對硬件進行操作,,能夠產(chǎn)生極高速和極其簡潔形式的目標代碼,在代碼的效率和執(zhí)行速度上完全可以和匯編語言相媲美,,并且 有十分豐富的庫函數(shù)可以供用戶直接調(diào)用,,從而極大地提高了程序的編寫效率,能提供給用戶高質(zhì)量的程序代碼,。采用硬件描述語言Verilog HDL對CPLD進行編程,。
單片機軟件編程注意點
1 鍵盤在定時中斷服務(wù)程序中讀取,用中斷間隔時間實現(xiàn)鍵盤的去抖,,不必編寫另外的延時程序,,提高了CPU的利用效率。鍵盤值存入數(shù)據(jù)緩沖區(qū),,在主程序中讀數(shù)據(jù)緩沖區(qū)的內(nèi)容,,執(zhí)行鍵盤功能散轉(zhuǎn)子程序。
2 電池電壓的采集在中斷程序中執(zhí)行,,因固態(tài)繼電器的開通與關(guān)斷時間均需1ms,,故通道選通時要有一定的延時,使電池采集電壓建立并穩(wěn)定后再啟動A/D轉(zhuǎn)換,。
3 根據(jù)A/D轉(zhuǎn)換芯片TLC1549的工作原理,,當前輸出的數(shù)據(jù)是上一次A/D轉(zhuǎn)換的結(jié)果,, 故對一節(jié)電池電壓采樣的首次A/D轉(zhuǎn)換結(jié)果應(yīng)丟棄,其余幾次轉(zhuǎn)換結(jié)果保留并加以處理,。
圖4 單片機軟件編程流程圖
4 根據(jù)STC89C58RD+的DataFlash 的特點,,數(shù)據(jù)寫入時必須啟動ISP/IAP命令,CPU等待IAP動作定時后,,才繼續(xù)執(zhí)行程序,,要先關(guān)斷中斷(EA)。要使數(shù)據(jù)寫入DataFlash存 儲器,,不能跨越扇區(qū),,如果要對某個扇區(qū)進行擦除,而其中有些字節(jié)的內(nèi)容需要保護,,則需將其先讀到單片機內(nèi)部的RAM中保存,,再將該扇區(qū)擦除,然后再將保存 的數(shù)據(jù)寫回該扇區(qū),。
CPLD的Verilog HDL編程
用硬件描述語言Verilog HDL的程序設(shè)計硬件的好處在于易于理解,、易于維護、調(diào)試電路速度快,、有許多易于掌握的仿真、綜合和布局布線的工具,,還可以用C語言配合Verilog HDL來做邏輯設(shè)計的布線前和布線后仿真,,驗證功能是否正確。限于篇幅,,下面給出部分模塊的Verilog HDL程序
module REG8 ( CLRB, D, CLK, Q ); //8位數(shù)據(jù)鎖存
input CLRB, CLK;
input [7:0] D;
output [7:0] Q;
reg [7:0] Q;
always @( posedge CLK or negedge CLRB )
Q <= ( !CLRB )? 0: D;
endmodule
module DECODE4_16( E1,A,Y ); //4-16譯碼
input E1;
input [3:0] A;
output [15:0] Y;
reg [15:0] Y;
always @( E1 or A )
if(E1==0 )
begin
case(A)
0:Y=16'b1111111111111110;
1:Y=16'b1111111111111101;
2:Y=16'b1111111111111011;
3:Y=16'b1111111111110111;
4:Y=16'b1111111111101111,;
5:Y=16'b1111111111011111;
6:Y=16'b1111111110111111,;
7:Y=16'b1111111101111111,;
8:Y=16'b1111111011111111;
9:Y=16'b1111110111111111,;
10:Y=16'b1111101111111111,;
11:Y=16'b1111011111111111;
12:Y=16'b1110111111111111,;
13:Y=16'b1101111111111111,;
14:Y=16'b1011111111111111;
15:Y=16'b0111111111111111,;
endcase
end
else
Y=16'b1111111111111111;endmodule