韋平安
(拉薩師范高等??茖W校,西藏 拉薩 850007)
基于太陽能電池供電的溫度檢測系統(tǒng)設計
韋平安
(拉薩師范高等專科學校,西藏 拉薩 850007)
針對在缺電少電環(huán)境下電路系統(tǒng)供電的需求,本設計提出一種利用太陽能電池供電, 采用低功耗、高性能PIC單片機、單總線數(shù)字式測溫器件DS18B20 構成的測溫系統(tǒng)。經(jīng)測試該系統(tǒng)易于維護、可靠性高、實用性強。
缺電;太陽能電池;PIC單片機;溫度檢測
溫度檢測被廣泛用于工農(nóng)業(yè)生產(chǎn)、科學研究和人們的日常生活等領域。傳統(tǒng)溫度檢測系統(tǒng)大多采用常規(guī)電源供電,但是在缺電少電環(huán)境下將無法滿足系統(tǒng)正常工作的供電需求,本系統(tǒng)的設計主要是針對特殊情況下溫度檢測系統(tǒng)的供電缺點,嘗試設計一種基于太陽能電池供電的溫度檢測系統(tǒng)。
溫度檢測系統(tǒng)的硬件部分組成如圖1所示。
圖1 硬件系統(tǒng)框圖
溫度采集系統(tǒng)主要由供電模塊、溫度信號采集模塊、PIC單片機控制模塊、顯示模塊組成。
2.1 供電模塊
晶體硅太陽能電池包含單晶硅和多晶硅太陽能電池。其中單晶硅太陽能電池是目前發(fā)展最快的一類太陽能電池,其光電轉換效率為15%左右,質(zhì)量好的轉換效率接近20%。圖2中BAT1為單晶硅太陽能電池板。太陽能電池組件參數(shù)如下,額定功率:8.8 V,5 W,正常光照條件下實際測量出開路電壓為:10.8 V左右,短路電流為:0.4 A左右。U3選擇線性三端穩(wěn)壓器LM7805,穩(wěn)壓5 V,最大輸出電流1 A[1]。C3、C4為濾波電容。D2為1N5819肖基特二極管,反向耐壓40 V,正向電壓0.3 V,額定正向電流1 A,還可以防止充電電池反向放電。BAT2是四節(jié)鎳氫充電電池,單節(jié)標稱電壓1.2 V,白天的時候?qū)⒍嘤嗟碾娏看鎯τ陔姵刂?,當無光照或者光照比較弱時,太陽能電池無輸出,由充電電池為系統(tǒng)供電。
圖2 太陽能供電穩(wěn)壓電路
2.2 溫度信號采集模塊和PIC單片機控制模塊
溫度信號采集模塊和PIC單片機控制模塊硬件電路如圖3所示。系統(tǒng)中用到兩個重要的芯片:PIC16F877A單片機和DS18B20傳感器。PIC16F877A是Microchip公司產(chǎn)品的一款具有RISC結構的高性能中檔單片機,采用RISC結構,僅有35條單字指令,內(nèi)置8 kB的14位程序存儲器,并且具有Flash program 程序內(nèi)存功能,可以重復燒寫程序,支持在線串行編程ICSP,非常適合于學校的實驗教學、單片機愛好者自學、以及新產(chǎn)品的開發(fā)與調(diào)試。DS18B20是美國DALLAS半導體公司的智能溫度傳感器產(chǎn)品,使用one-wire總線接口,封裝形式多樣,具有體積小,硬件開銷低,抗干擾能力強,精度高的特點,適用于各種環(huán)境下的溫度檢測,工作電壓3~5.5V,測量分辨率9~12位,轉換速度快,測溫范圍:-55 ℃~125 ℃。R13、R15為4.7 k的上拉電阻。單片機PIC16F877A的RD0~RD7各接一個100 Ω的限流電阻。另接有X1:4 MHz晶振和C1:22pF和C2:22pF構成的外部振蕩電路[2],晶振和單片機之間的連線距離應盡可能小。上拉電阻R13和微觸按鍵開關組成單片機復位電路。溫度信號采集模塊主要由可編程單總線數(shù)字溫度傳感器DS18B20組成,DS18B20的DQ腳通過上拉電阻R15與VCC直連,微處理器通過RA0腳與傳感器DQ腳連接,通過單線即可實現(xiàn)微處理器與DS18B20的雙向通訊。
圖3 溫度采集及單片機控制電路
2.3 溫度顯示模塊
溫度數(shù)據(jù)顯示模塊的硬件電路如圖4所示。LED數(shù)碼管有靜態(tài)顯示和動態(tài)顯示兩種方式,在文中采用的是動態(tài)顯示方式,即輪流點亮各位數(shù)碼管,每隔一定的時間點亮一次,相對靜態(tài)顯示方式來說,占用CPU資源較多。數(shù)碼管的亮度跟電流大小和通電時間關系密切。顯示用的4位數(shù)碼管為共陽極,Q1~Q4為8550PNP三極管,R9~R12為10 k的電阻,分別與單片機的RA0~RA3連接,單片機控制三極管的通斷,實現(xiàn)顯示位選,控制顯示位亮或者暗,RA0~RA3分別對應溫度數(shù)據(jù)顯示的十位、個位、小數(shù)十分位、小數(shù)百分位。數(shù)碼管的A~DP分別與單片機的RD0~RD7連接,用于接收單片機發(fā)送給數(shù)碼管的字形代碼,即段碼。R16~R19是在Proteus仿真中PNP三極管需要連接的下拉電阻(在制作實際硬件電路時不需要連接),如果不接,在仿真時會出現(xiàn)亂碼,NPN三極管無此現(xiàn)象。
2.4 程序設計
系統(tǒng)的程序設計部分主要由溫度數(shù)據(jù)采集處理和顯示兩大部分。程序流程如下:復位one-wire總線,啟動采集程序并等待采集結束,讀取溫度數(shù)據(jù),溫度數(shù)據(jù)轉換并顯示結果。由于篇幅的關系,文中僅列出部分程序的C語言代碼及注釋。
//主函數(shù)
void main()
{
init(); //調(diào)用系統(tǒng)初始化函數(shù)
while(1)
{
get_temp(); //調(diào)用溫度轉換函數(shù)
display(); //調(diào)用結果顯示函數(shù)
PORTA=0x3f; //關閉所有數(shù)碼管
delayXms(100); //延時10s,以節(jié)約電量
}
}
圖4 溫度顯示模塊電路原理圖
2.4.1 溫度轉換函數(shù)
void get_temp() //啟動溫度轉換函數(shù)
{
DQ_HIGH();
reset(); //復位等待從機應答
write_byte(0XCC); //忽略ROM匹配,只有一個DS18B20
write_byte(0X44); //發(fā)送溫度轉化命令
delayXms(10); //延時1000ms,等待溫度轉換
reset(); //再次復位,等待從機應答
write_byte(0XCC); //忽略ROM匹配
write_byte(0XBE); //發(fā)送讀溫度命令
TLV=read_byte(); //讀出溫度低8
THV=read_byte(); //讀出溫度高8位
DQ_HIGH(); //釋放總線
TZ=(TLV>>4)|(THV<<4)&0X3f; //溫度整數(shù)部分
TX=TLV<<4; //溫度小數(shù)部分
if(TZ>100) TZ/100; //不顯示百位
Tge=TZ%10;//個位 //溫度整數(shù)部分個位
Tshi=TZ/10;//十位 //溫度整數(shù)十位
wd=0;
if (TX & 0x80) wd=wd+5000;
if (TX & 0x40) wd=wd+2500;
//以上2條指令把小數(shù)部分轉換為BCD碼形式
Tshifen=wd/1000; //溫度數(shù)據(jù)十分位
Tbaifen=(wd%1000)/100; //溫度數(shù)據(jù)百分位
NOP();
}
reset(void) //復位DS18B20函數(shù)
{
charstate_DQ=1;
while(state_DQ)
{
DQ_LOW() ; //主機拉至低電平
__delay_us(500); //延時500us
DQ_HIGH(); //釋放總線等電阻拉高總線,并保持15~60us
__delay_us(50); //延時50us
if(DQ==1) state_DQ=1;
else state_DQ=0;//沒有接收到應答信號,繼續(xù)復位
__delay_us(430); //延時430us; }
}
在編寫程序代碼時需要特別注意:首先要先讀懂DS18B20的時序,再編寫相應的程序代碼,對DS18B20的讀寫操作必須嚴格按照其定義的時序來進行,否則將無法讀取溫度數(shù)據(jù),最終導致溫度檢測失敗。編寫程序的過程中還利用到了PICC軟件里自定義的延時函數(shù)__delay_ms( )、__delay_us( )[3],可以一定程度上減輕程序編寫的負擔,讓程序的編寫變得更加輕松。
//延時時間較長的延時函數(shù) 延時時間t=n*100ms
voiddelayXms(uch n)
{
while(n--) __delay_ms(100);
}
2.4.2 溫度轉換及顯示函數(shù)
void display() //溫度值顯示函數(shù):動態(tài)掃描顯示
{
uchi=0;
for(i=0;i<10;i++) //循環(huán)動態(tài)掃描顯示溫度10次
{
TRISA=0x00; //設置A口全為輸出
PORTA=0x3f; //關閉所有數(shù)碼管
PORTD=table[Tshi]; //發(fā)送整數(shù)十位并顯示
PORTA=0x3e;
__delay_ms(5);
PORTA=0x3f;
PORTD=table[Tge]&0X7F; //顯示整數(shù)個位,并點亮小數(shù)點
PORTA=0x3d;
__delay_ms(5);
PORTA=0x3f;
PORTD=table[Tshifen]; //顯示小數(shù)十分位
PORTA=0x3b;
__delay_ms(5);
PORTA=0x3f;
PORTD=table[Tbaifen]; //顯示小數(shù)百分位
PORTA=0x37;
__delay_ms(5);
PORTA=0x3f;//關閉所有數(shù)碼管
}
}
其中在每一個數(shù)據(jù)顯示之前加上PORTA=0x3f代碼,主要是防止在用Proteus仿真時數(shù)碼管出現(xiàn)亂碼[4]。在實際的硬件電路中這句代碼可以不需要。
西藏太陽能資源非常豐富,本設計通過引入太陽能電池,拓寬了測溫系統(tǒng)的應用范圍,該溫度檢測系統(tǒng)通過了Proteus的軟件仿真,也在硬件電路板上測試通過。同時指出了在軟件仿真中要注意的一些細節(jié)問題。系統(tǒng)中采用的線性穩(wěn)壓器件電源轉化效率低,沒有能夠充分利用大自然賦予我們的太陽能,為了省電,在主程序中加入了一個較長的延時程序,在延時期間不點亮數(shù)碼管。在今后,將嘗試使用轉換效率更高的電源穩(wěn)壓器件加以進一步改進,使得整個電路更加高效精巧;另外還可以加入sd存儲卡模塊和無線發(fā)送接收模塊,溫度數(shù)據(jù)既可以存儲于本地也可以通過無線信號進行數(shù)據(jù)傳送。
[1] 王昊.線性集成電源應用電路設計[M].北京:清華大學出版社,2009.
[2] 張明峰.PIC單片機入門與實戰(zhàn)[M].北京:北京航空航天大學出版社,2004.
[3] 彭偉.單片機C語言程序設計實訓100例:基于PIC+Proteus仿真[M].第2版.北京:電子工業(yè)出版社,2015.
[4] 熊再榮,雷建龍,李漢玲.數(shù)碼管動態(tài)顯示亂碼現(xiàn)象分析[J].液晶與顯示,2009,24(5):704-706.
Temperature Detection System Design Based on Solar Battery Power Supply
Wei Pingan
(LhasaNormalCollege,LhasaTibet850007,China)
Aiming at the demand of power supply in power system under the circumstance of less power and less electricity, the paper puts forward a temperature measuring system that composed of solar battery power supply, PIC MCU with low power consumption and high performance and the DS18B20 1-Wire bus digital thermometer. By testing, the system is easy to maintain, and with high reliablity, strong practicability.
lack of electricity; the solar cell; PIC MCU; temperature detection
2017-04-25
韋平安(1981- ),男,廣西賓陽人,講師,研究方向:數(shù)字信號處理。
1674- 4578(2017)04- 0009- 04
TM914;TP274.5
A