APP下载

基于太阳能电池供电的温度检测系统设计

2017-08-29韦平安

山西电子技术 2017年4期
关键词:数码管延时太阳能

韦平安

(拉萨师范高等专科学校,西藏 拉萨 850007)

基于太阳能电池供电的温度检测系统设计

韦平安

(拉萨师范高等专科学校,西藏 拉萨 850007)

针对在缺电少电环境下电路系统供电的需求,本设计提出一种利用太阳能电池供电, 采用低功耗、高性能PIC单片机、单总线数字式测温器件DS18B20 构成的测温系统。经测试该系统易于维护、可靠性高、实用性强。

缺电;太阳能电池;PIC单片机;温度检测

1 概述

温度检测被广泛用于工农业生产、科学研究和人们的日常生活等领域。传统温度检测系统大多采用常规电源供电,但是在缺电少电环境下将无法满足系统正常工作的供电需求,本系统的设计主要是针对特殊情况下温度检测系统的供电缺点,尝试设计一种基于太阳能电池供电的温度检测系统。

2 硬件设计

温度检测系统的硬件部分组成如图1所示。

图1 硬件系统框图

温度采集系统主要由供电模块、温度信号采集模块、PIC单片机控制模块、显示模块组成。

2.1 供电模块

晶体硅太阳能电池包含单晶硅和多晶硅太阳能电池。其中单晶硅太阳能电池是目前发展最快的一类太阳能电池,其光电转换效率为15%左右,质量好的转换效率接近20%。图2中BAT1为单晶硅太阳能电池板。太阳能电池组件参数如下,额定功率:8.8 V,5 W,正常光照条件下实际测量出开路电压为:10.8 V左右,短路电流为:0.4 A左右。U3选择线性三端稳压器LM7805,稳压5 V,最大输出电流1 A[1]。C3、C4为滤波电容。D2为1N5819肖基特二极管,反向耐压40 V,正向电压0.3 V,额定正向电流1 A,还可以防止充电电池反向放电。BAT2是四节镍氢充电电池,单节标称电压1.2 V,白天的时候将多余的电量存储于电池中,当无光照或者光照比较弱时,太阳能电池无输出,由充电电池为系统供电。

图2 太阳能供电稳压电路

2.2 温度信号采集模块和PIC单片机控制模块

温度信号采集模块和PIC单片机控制模块硬件电路如图3所示。系统中用到两个重要的芯片:PIC16F877A单片机和DS18B20传感器。PIC16F877A是Microchip公司产品的一款具有RISC结构的高性能中档单片机,采用RISC结构,仅有35条单字指令,内置8 kB的14位程序存储器,并且具有Flash program 程序内存功能,可以重复烧写程序,支持在线串行编程ICSP,非常适合于学校的实验教学、单片机爱好者自学、以及新产品的开发与调试。DS18B20是美国DALLAS半导体公司的智能温度传感器产品,使用one-wire总线接口,封装形式多样,具有体积小,硬件开销低,抗干扰能力强,精度高的特点,适用于各种环境下的温度检测,工作电压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和微触按键开关组成单片机复位电路。温度信号采集模块主要由可编程单总线数字温度传感器DS18B20组成,DS18B20的DQ脚通过上拉电阻R15与VCC直连,微处理器通过RA0脚与传感器DQ脚连接,通过单线即可实现微处理器与DS18B20的双向通讯。

图3 温度采集及单片机控制电路

2.3 温度显示模块

温度数据显示模块的硬件电路如图4所示。LED数码管有静态显示和动态显示两种方式,在文中采用的是动态显示方式,即轮流点亮各位数码管,每隔一定的时间点亮一次,相对静态显示方式来说,占用CPU资源较多。数码管的亮度跟电流大小和通电时间关系密切。显示用的4位数码管为共阳极,Q1~Q4为8550PNP三极管,R9~R12为10 k的电阻,分别与单片机的RA0~RA3连接,单片机控制三极管的通断,实现显示位选,控制显示位亮或者暗,RA0~RA3分别对应温度数据显示的十位、个位、小数十分位、小数百分位。数码管的A~DP分别与单片机的RD0~RD7连接,用于接收单片机发送给数码管的字形代码,即段码。R16~R19是在Proteus仿真中PNP三极管需要连接的下拉电阻(在制作实际硬件电路时不需要连接),如果不接,在仿真时会出现乱码,NPN三极管无此现象。

2.4 程序设计

系统的程序设计部分主要由温度数据采集处理和显示两大部分。程序流程如下:复位one-wire总线,启动采集程序并等待采集结束,读取温度数据,温度数据转换并显示结果。由于篇幅的关系,文中仅列出部分程序的C语言代码及注释。

//主函数

void main()

{

init(); //调用系统初始化函数

while(1)

{

get_temp(); //调用温度转换函数

display(); //调用结果显示函数

PORTA=0x3f; //关闭所有数码管

delayXms(100); //延时10s,以节约电量

}

}

图4 温度显示模块电路原理图

2.4.1 温度转换函数

void get_temp() //启动温度转换函数

{

DQ_HIGH();

reset(); //复位等待从机应答

write_byte(0XCC); //忽略ROM匹配,只有一个DS18B20

write_byte(0X44); //发送温度转化命令

delayXms(10); //延时1000ms,等待温度转换

reset(); //再次复位,等待从机应答

write_byte(0XCC); //忽略ROM匹配

write_byte(0XBE); //发送读温度命令

TLV=read_byte(); //读出温度低8

THV=read_byte(); //读出温度高8位

DQ_HIGH(); //释放总线

TZ=(TLV>>4)|(THV<<4)&0X3f; //温度整数部分

TX=TLV<<4; //温度小数部分

if(TZ>100) TZ/100; //不显示百位

Tge=TZ%10;//个位 //温度整数部分个位

Tshi=TZ/10;//十位 //温度整数十位

wd=0;

if (TX & 0x80) wd=wd+5000;

if (TX & 0x40) wd=wd+2500;

//以上2条指令把小数部分转换为BCD码形式

Tshifen=wd/1000; //温度数据十分位

Tbaifen=(wd%1000)/100; //温度数据百分位

NOP();

}

reset(void) //复位DS18B20函数

{

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;//没有接收到应答信号,继续复位

__delay_us(430); //延时430us; }

}

在编写程序代码时需要特别注意:首先要先读懂DS18B20的时序,再编写相应的程序代码,对DS18B20的读写操作必须严格按照其定义的时序来进行,否则将无法读取温度数据,最终导致温度检测失败。编写程序的过程中还利用到了PICC软件里自定义的延时函数__delay_ms( )、__delay_us( )[3],可以一定程度上减轻程序编写的负担,让程序的编写变得更加轻松。

//延时时间较长的延时函数 延时时间t=n*100ms

voiddelayXms(uch n)

{

while(n--) __delay_ms(100);

}

2.4.2 温度转换及显示函数

void display() //温度值显示函数:动态扫描显示

{

uchi=0;

for(i=0;i<10;i++) //循环动态扫描显示温度10次

{

TRISA=0x00; //设置A口全为输出

PORTA=0x3f; //关闭所有数码管

PORTD=table[Tshi]; //发送整数十位并显示

PORTA=0x3e;

__delay_ms(5);

PORTA=0x3f;

PORTD=table[Tge]&0X7F; //显示整数个位,并点亮小数点

PORTA=0x3d;

__delay_ms(5);

PORTA=0x3f;

PORTD=table[Tshifen]; //显示小数十分位

PORTA=0x3b;

__delay_ms(5);

PORTA=0x3f;

PORTD=table[Tbaifen]; //显示小数百分位

PORTA=0x37;

__delay_ms(5);

PORTA=0x3f;//关闭所有数码管

}

}

其中在每一个数据显示之前加上PORTA=0x3f代码,主要是防止在用Proteus仿真时数码管出现乱码[4]。在实际的硬件电路中这句代码可以不需要。

3 总结

西藏太阳能资源非常丰富,本设计通过引入太阳能电池,拓宽了测温系统的应用范围,该温度检测系统通过了Proteus的软件仿真,也在硬件电路板上测试通过。同时指出了在软件仿真中要注意的一些细节问题。系统中采用的线性稳压器件电源转化效率低,没有能够充分利用大自然赋予我们的太阳能,为了省电,在主程序中加入了一个较长的延时程序,在延时期间不点亮数码管。在今后,将尝试使用转换效率更高的电源稳压器件加以进一步改进,使得整个电路更加高效精巧;另外还可以加入sd存储卡模块和无线发送接收模块,温度数据既可以存储于本地也可以通过无线信号进行数据传送。

[1] 王昊.线性集成电源应用电路设计[M].北京:清华大学出版社,2009.

[2] 张明峰.PIC单片机入门与实战[M].北京:北京航空航天大学出版社,2004.

[3] 彭伟.单片机C语言程序设计实训100例:基于PIC+Proteus仿真[M].第2版.北京:电子工业出版社,2015.

[4] 熊再荣,雷建龙,李汉玲.数码管动态显示乱码现象分析[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- ),男,广西宾阳人,讲师,研究方向:数字信号处理。

1674- 4578(2017)04- 0009- 04

TM914;TP274.5

A

猜你喜欢

数码管延时太阳能
应用广泛的太阳能无人机
微课教学设计之“数码管动态显示”
基于级联步进延时的顺序等效采样方法及实现
Arduino编程
日光灯断电关闭及自动延时开关设计
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
太阳能可以这样玩
Two-dimensional Eulerian-Lagrangian Modeling of Shocks on an Electronic Package Embedded in a Projectile with Ultra-high Acceleration
身边的太阳能