太阳能热水器控制器设计.docx

上传人:b****8 文档编号:9911813 上传时间:2023-02-07 格式:DOCX 页数:23 大小:250.23KB
下载 相关 举报
太阳能热水器控制器设计.docx_第1页
第1页 / 共23页
太阳能热水器控制器设计.docx_第2页
第2页 / 共23页
太阳能热水器控制器设计.docx_第3页
第3页 / 共23页
太阳能热水器控制器设计.docx_第4页
第4页 / 共23页
太阳能热水器控制器设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

太阳能热水器控制器设计.docx

《太阳能热水器控制器设计.docx》由会员分享,可在线阅读,更多相关《太阳能热水器控制器设计.docx(23页珍藏版)》请在冰豆网上搜索。

太阳能热水器控制器设计.docx

太阳能热水器控制器设计

 

攀枝花学院电信学院专业基础综合实验

[太阳能热水器控制器设计实验]

 

学生姓名:

张科

学生学号:

201010503085

院(系):

电信学院

年级专业:

10自动化2班

指导教师:

孙艳忠

 

二〇一二年十二月

设计准备

1、课程设计的目的

(1)检查学生对本门课程所学知识的掌握程度及对知识的灵活的运用情况。

(2)检查学生对具体问题的分析能力和解决问题的能力。

(3)锻炼学生的实际设计能力。

(4)加强学生对单片机在应用设计中的感性认识,为日后的单片机应用打基础。

2、课程设计的内容和要求

本设计主要利用单片机为核心,选择适当的传感器作为信号的采集来源,温度传感器选择数字式的DS18B20。

水位信号的检测选择PTJ204/205/206/207压力传感器,将检测的模拟信号经过A/D转换后送入单片机处理。

通过LED数码管来显示温度和水位。

要经过几部分的设计来完成:

(a)LED数码管显示部分设计

(b)A/D转换部分设计

(c)温度采集部分设计

(d)控制加热和上水电路设计

(1)设计要求:

1)实验电路及连线。

2)给出实验程序设计框图及程序清单。

3)验证实验的可靠性。

 

一、温度传感器DS18B20

(1)DS18B20的内部结构图

(2)DS18B20的功能

DS18B20单纯通信功能是分时完成的。

单线信号包括复位脉冲,响应脉冲,写“0”,写“1”,读“1”。

它们有严格的时隙概念。

系统对DS18B20的操作以ROM命令(5个)和存储器命令(6个)形式出现。

对它的操作协议是:

初始化DS18B20发复位脉冲-发ROM功能命令-处理数据-发存储器命令处理数据,各种操作都有相应的时序图。

DS18B20在使用时,一般都采用单片机来实现数据采集。

只需将DS18B20信号线与单片机1位I/O线相连,且单片机的1位I/O线可挂接多个DS18B20,就可实现单点或多点温度测量。

DS18B20传感器的精度高、互换性好;它直接将温度数据进行编码,可以只使用一根电缆传输温度数据,通信方便,传输距离远且抗干扰性好,与用传统的温度传感器系统相比系统得以简化。

系统扩充维护十分方便。

二、水压传感器及A/D转换

水位传感器输出的信号为模拟信号,由于输出量微弱,要经过放大器的放大转化为0~5V的电压信号,才能送入ADC0832中进行转换,输出为串行数字数据,送入单片机89C51处理。

传感器和AD转换原理图如下图所示:

模拟量输入及AD转换电路结构

3.3.1水压传感器

力学传感器的种类繁多,如电阻应变片压力传感器、半导体应变片压力传感器、电感式压力传感器、压阻式压力传感器、电容式压力传感器、谐振式压力传感器及电容式加速度传感器等。

但应用最为广泛的是压阻式压力传感器,它具有极低的价格和较高的精度以及较好的线性特性。

在水箱的最底部安装压力传感器,水位的不同,传感器检测到的压力值就不同,采集到的模拟量信号经过处理和计算,就能换算成水位的高低,经过单片机显示。

ADC0832结构及原理

ADC0832芯片引脚图

芯片各引脚说明:

1)CS_片选使能,低电平芯片使能。

2)CH0模拟输入通道0,或作为IN+/-使用。

3)CH1模拟输入通道1,或作为IN+/-使用。

4)GND芯片参考0电位(地)。

5)DI数据信号输入,选择通道控制。

6)DO数据信号输出,转换数据输出。

7)CLK芯片时钟输入。

8)Vcc/REF电源输入及参考电压输入(复用)。

ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。

其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。

芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。

独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。

通过DI数据输入端,可以轻易的实现通道功能的选择。

单片机对ADC0832的控制原理:

正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。

但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。

当ADC0832没有工作时其CS输入端为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。

当要进行A/D转换时,须先将CS使能端为低电平并且保持低电平直到转换完全结束。

此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。

在第1个时钟脉冲的下沉之前DI端必为高电平,表示启始信号。

在第2、3个脉冲下沉之前DI端输入2位数据用于选择通道功能,当此2位数据为“1”、“0”时,只对CH0进行单通道转换。

当2位数据为“1”、“1”时,只对CH1进行单通道转换。

当2位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。

当2位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行输入。

到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。

从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。

直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。

也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。

随后输出8位数据,到第19个脉冲数据输出完成,也标志着一次A/D转换的结束。

最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。

三、电磁开关电路及原理

要实现自动控制,就要有能自动闭合的开关,这里用到的是电磁开关(继电器),继电器上有电流时,由于电磁感应就会在铁心上产生磁性,将开关弹片吸引,使外部电路导通。

为了在电磁继电器上有稳定的电流流过,前端就要有相应的控制元器件,我选择的是光电隔离器件,隔离掉了不稳定的因素。

使光电隔离前端的发光稳定,信号的前端还需要驱动,提供稳定的信号电流。

只有发光部分的稳定,后面的信号才能得到稳定输出。

控制加热装置和上水装置的电路如图3-6所示。

控制电路工作原理:

单片机根据处理的结果,从控制端口输出低电平控制信号,通过正向驱动器,得到稳定的信号,使得光电隔离前端的发光二极发光,电路接通,后续电路工作,输出电压经分压,三极管导通,电磁继电器工作,弹片向下吸引,开关闭合,后面的电路开始工作。

图3-6电磁开关控制电路

(1)光电隔离器的原理

光电隔离器(opticalcoupler,英文缩写为OC)亦称光耦合器,简称光耦。

光耦合器以光为媒介传输电信号。

它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。

目前它已成为种类最多、用途最广的光电器件之一。

光耦合器一般由三部分组成:

光的发射、光的接收及信号放大。

输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。

这就完成了电到光再到电的转换,从而起到输入、输出、隔离的作用。

在发光二极管上提供一个偏置电流,再把信号电压通过电阻耦合到发光二极管上,这样光电晶体管接收到的是在偏置电流上增、减变化的光信号,其输出电流将随输入的信号电压作线性变化。

光电耦合器也可工作于开关状态,传输脉冲信号。

在传输脉冲信号时,输入信号和输出信号之间存在一定的延迟时间,不同结构的光电耦合器输入、输出延迟时间相差很大。

由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。

又由于光耦合器的输入端是电流型工作的低阻元件,因而具有很强的共模抑制能力。

所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。

在计算机数字通信及实时控制中作为信号隔离的接口器件,可以大大增加计算机工作的可靠性。

光耦合器的主要优点是:

信号单向传输,输入端与输出端完全实现了电气隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。

电耦合器之所以在传输信号的同时能有效地抑制尖脉冲和各种干扰,使通道上的信号稳定性大为提高,主要有以下几方面的原因:

(1)光电耦合器的输入阻抗很小,只有几百欧姆,而干扰源的阻抗较大,通常为105~106Ω。

据分压原理可知,即使干扰电压的幅度较大,但馈送到光电耦合器输入端的干扰电压会很小,只能形成很微弱的电流,由于没有足够的能量而不能使二极体发光,从而被抑制掉了。

(2)光电耦合器的输入回路与输出回路之间没有电气联系,也没有共地;之间的分布电容极小,而绝缘电阻又很大,因此回路一边的各种干扰都很难通过光电耦合器馈送到另一边去,避免了共阻抗耦合的干扰信号的产生。

(3)光电耦合器可起到很好的安全保障作用,即使当外部设备出现故障,甚至输入信号线短接时,也不会损坏仪表。

因为光耦合器件的输入回路和输出回路之间可以承受几千伏的高压。

(2)电磁继电器的原理

继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。

故在电路中起着自动调节、安全保护、转换电路等作用。

电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。

电磁继电器的工作原理并不复杂,它主要是利用电磁感应原理而工作的。

当线圈通以电流时,线圈便产生磁场,线圈中间的铁心被磁化产生磁力.从而使衔铁在电磁吸力的作用下吸向铁心,此时衔铁带动支杆将板簧推开,使两个常闭的触点断开。

当断开继电器线圈的电流时,铁心便失去磁性,衔铁在板簧的作用下恢复初始状态,触点则又闭合。

触点的形式一般分为三种:

一种是继电器线圈未通电时处于接通状态的静触点,为常闭触点。

二种是处于断开状态的静触点,称为常开触点,还有一种是一个动触点与一个静触点常闭,而同时与一个静触点常开,形成一开一闭的转换触点形式。

常闭触点在线圈通电时由闭合状态断开,所以又称为动断触点,而把常开触点称为动合触点转换触点有两种情况,即先合后断的转换触点和先断后合的转换触点。

先了解必要的条件:

(1)控制电路的电源电压,能提供的最大电流;

(2)被控制电路中的电压和电流;(3)被控电路需要几组、什么形式的触点。

选用继电器时,一般控制电路的电源电压可作为选用的依据。

控制电路应能给继电器提供足够的工作电流,否则继电器吸合是不稳定的。

四、LED数码管显示电路

7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示0~9等10个数字和小数点,这类数码管可以分为公阴极与共阳极两种,共阳极就是把所有LED的阳极连接到共同的结点,而每个LED的阴极分别为a,b,c,d,e,f,g及dp(小数点);共阴极就是把所有LED的阳极连接到共同的结点,而每个LED的阳极分别为a,b,c,d,e,f,g及dp(小数点),如图3-11所示:

图3-11数码管原理电路

根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

静态显示驱动:

每个数码管的每个段都由一个单片机的I/O端口进行驱动,或者使用如BCD码的二~十进制译码器译码进行驱动。

静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多。

动态显示驱动:

动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp”的同名端连在一起,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形。

单片机与数码管连接电路

 

实验过程

实验线路图

 

实验程序框图

 

程序清单

C语言程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#definesled_AD_portP0

#definesled_WD_portP1

#definesled_wm_portP2

sbitDQ=P3^5;

sbitADCS=P3^2;

sbitADCLK=P3^3;

sbitADDI=P3^4;

sbitADDO=P3^4;

sbitkai1=P3^1;

sbitkai2=P3^2;

ucharcodedu_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};

ucharcodewe_table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchardatasled_data[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

uchardataled_lighten_bit=0;

voiddelay_1ms(ucharz)

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

//////////////////以下是DS18B20驱动程序////////////////

voiddelay(uinti)

{

while(i--);

}

//初始化函数

Init_DS18B20(void)

{

ucharx=0;

DQ=1;

delay(8);

DQ=0;

delay(80);

DQ=1;

delay(14);

x=DQ;

delay(20);

}

Read(void)

{

uchari=0;

uchardat=0;

for(i=8;i>0;i--){

DQ=0;

dat>>=1;

DQ=1;//

if(DQ)dat|=0x80;

delay(4);

}

return(dat);

}

Write(uchardat)

{

uchari=0;

for(i=8;i>0;i--){

DQ=0;

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

}

ReadTemperature(void)

{

uchara=0;

ucharb=0;

uintt=0;

floattt=0;

Init_DS18B20();

Write(0xCC);

Write(0x44);

Init_DS18B20();

Write(0xCC);

Write(0xBE);

a=Read();

b=Read();

t=b;

t<<=8;

t=t|a;

tt=t*0.0625;

t=tt*10+0.5;

return(t);

}

//////////////////以上是DS18B20驱动程序////////////////

//采集数据

unsignedintAdc0832(unsignedcharchannel)

{

uchari=0;

ucharj;

uintdat=0;

ucharndat=0;

if(channel==0)channel=2;

if(channel==1)channel=3;

ADDI=1;

_nop_();

_nop_();

ADCS=0;

_nop_();

_nop_();

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;

_nop_();

_nop_();

ADCLK=1;

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;

_nop_();

_nop_();

ADCLK=1;

ADDI=(channel>>1)&0x1;

_nop_();

_nop_();

ADCLK=0;

ADDI=1;

_nop_();

_nop_();

dat=0;

for(i=0;i<8;i++)

{

dat|=ADDO;

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;

_nop_();

_nop_();

dat<<=1;

if(i==7)dat|=ADDO;

}

for(i=0;i<8;i++)

{

j=0;

j=j|ADDO;

ADCLK=1;

_nop_();

_nop_();

ADCLK=0;

_nop_();

_nop_();

j=j<<7;

ndat=ndat|j;

if(i<7)ndat>>=1;

}

ADCS=1;

ADCLK=0;

ADDO=1;

dat<<=8;

dat|=ndat;

return(dat);

}

xianshiTemperature()

{

uintwendu;

ucharc;

sled_WD_port=0;

P1=0;

{

wendu=ReadTemperature();

sled_data[3]=du_char[wendu/100];

sled_data[4]=du_char[wendu%100/10];

sled_data[5]=du_char[wendu%10];

for(c=0;c<6;c++)

{

sled_wm_port=0x00;

sled_WD_port=sled_data[c];

if(c==4)sled_WD_port=sled_WD_port&0x7f;

sled_wm_port=we_table[c];

delay_1ms(20);

}

}

}

xianshishuiwei()

{

ucharshuiwei,uu;

uchard;

sled_AD_port=0;

{

uu=Adc0832(0);

shuiwei=uu/2.56;

sled_data[0]=du_char[shuiwei%100/10];

sled_data[1]=du_char[shuiwei%10];

for(d=0;d<2;d++)

{

sled_wm_port=0x00;

sled_AD_port=sled_data[d];

sled_wm_port=we_table[d];

delay_1ms

(1);

}

}

}

anjianshezhi()

{

uchartemp_buff,up_key,sled_dm_port,down_key;

uchartemp=10;

uchari;

sled_wm_port=0;

while

(1)

{

if(up_key==0)

{

delay(10);

if(up_key==0)

temp=temp+10;

while(!

up_key);

delay(10);

while(!

up_key);

}

elseif(down_key==0)

{

delay(10);

if(down_key==0)

temp--;

while(!

down_key);

delay(10);

while(!

down_key);

}

temp_buff=temp;

sled_data[5]=du_char[temp_buff/100];

sled_data[6]=du_char[temp_buff%100/10];

sled_data[7]=du_char[temp_buff%10];

for(i=0;i<8;i++)

{

sled_wm_port=0x00;

sled_dm_port=sled_data[i];

if(i==6)sled_dm_port=sled_dm_port&0x7f;

sled_wm_port=we_table[i];

delay(20);

}

}

}

voidmain()

{

ucharshuiwei,wendu;

while

(1)

{

xianshiTemperature();

xianshishuiwei();

if(shuiwei<20)

kai1=0;

if(shuiwei>90)

kai1=1;

if(wendu<35)

kai2=0;

if(wendu>40)

kai2=1;

}

}

 

仿真结果

(1)温度控制仿真

温度高于设定温度

温度低于设定温度

水位显示仿真

当前水位低于设定水位

当前水位高于设定水位

(5)实验结论

本设计以单片机AT89C51协调整个系统的工作,通过数字温度传感器检测当前水的温度,由于是数字信号就直接送入单片机AT89C51内,通过单片机的处理在LED数码管上显示当前的温度值。

另外一路是在水箱中的水压传感器测水的压力从而得到水位的高低,水压传感器输出的是0~5V的模拟量,要经过A/D转换成为数字量再送入单片机AT89C51进行处理,在LED数码管上显示水位值。

按键用来设定想要控制的温度值,单片机在内部通过比较设定的温度和当前温度,当前温度小于设定温度时就会闭合电磁开关,开启加热装置。

高于设定温度时断开开关停止加热。

自动上水方面是设置水位的上限和下限,水位低于下限时就会闭合电磁开关,开始上水,当水位高于上线时就会自动断开电磁开关,停止上水。

温度和水位值在时时检测,达到控制目的。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1