收藏 分享(赏)

电热水器实训.ppt

上传人:kpmy5893 文档编号:7183339 上传时间:2019-05-09 格式:PPT 页数:71 大小:410KB
下载 相关 举报
电热水器实训.ppt_第1页
第1页 / 共71页
电热水器实训.ppt_第2页
第2页 / 共71页
电热水器实训.ppt_第3页
第3页 / 共71页
电热水器实训.ppt_第4页
第4页 / 共71页
电热水器实训.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

1、电热水器自动控温系统的设计与实现,下位机,主要内容,模块总述 下位机模块示意图 元件介绍和参数的设置 各部分电路设计 程序 参考文献,模块总述,数据采集是此系统中较为重要得一个部分。它是单片机应用系统中最为普遍的应用需求。本实训采集的对象为温度,因为温度作为一个非电量的模拟量,我们需要经一个温度传感器将其转化为一个电量值。一般情况下,采集到的数据会含有一定的噪声且电压值较小,不适合A/D转换器的工作,为此在此之前需要经过滤波处理和运算放大器的放大。,因为单片机的处理对象为数字量,需通过A/D转换器将模拟量转换为数字量。A/D转换器得的主要指标是分辨率和转换时间。它的转换位数与其分辨率有直接的关

2、系。8位转换器可以对满量程电压的1/256进行分辨。,显示电路一般为液晶显示或数码管显示。本实训中,它既可以显示外界采集到的温度,也可以显示用户按键设置的温度档位,还可以显示由通信模块传过来的档位值。,按键控制主要是为满足用户由按键来设定档位的需求。作为补充,本实训中还增加了用语音信号来控制档位。按键有一个RESET键、启/停键等(按需设置)、档位选择键(1 - 4)等。按键的响应可以采用中断方式,单片机的中断有两种方式一种是电平触发方式,一种是跳沿触发方式。如果采用的跳沿触发方式这样标志位的清零就不用外加电路。为消除键盘抖动,采用软件消抖,即通过一定的延时来实现消抖。,与通信模块之间的数据传

3、递主要涉及到单片机的串行通信接口编程问题。综上所述,下位机包含数据采集,按键电路,晶振电路,显示电路。,返回,下位机模块示意图,基本电路:(1)复位:要求具有软硬件两种复位功能。清楚电路中每个电子器件的作用及取值范围。实训中采用上电外部复位。,(2)晶振电路:清楚电路中每个电子器件的作用及取值范围。,(3)电源电路:清楚电路中每个电子器件的作用。,返回,元件选择、介绍和参数设置,温度传感器,选用lm35:lm35是由National Semiconductor所生产的温度感测器,其输出电压与摄氏温标呈线性关係,转换公式如式(1),0C时输出0V,每升高 1C,输出电压增加10mV。,实际应用中

4、,滤波是很重要的一步。滤波有软件滤波和硬件滤波之分。在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。硬件滤波即通过运放、电阻、电容组成电路图来实现的。,运算放大放,选择lm358:LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器。,A/D转化,选用0808时钟频率600khz。将引脚A、B、C均接地,选择IN0作为模拟信号电压的输入端。当向A/D转换器发出启动命令后,即进行软件延时,延时时间稍大于进行一次A/D转换所需要的时间,之后打开A/D转换器的输出缓冲器读数即为转换好的数字量。下图为adc0808的内部逻辑电路图:,

5、由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。下图所示为引脚图,并对各个引脚进行介绍:,IN0IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压范围是05V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电

6、平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0IN7上的一路模拟量输入。 数字量输出及控制线:11条,START(ST)为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 C

7、LK为时钟输入信号线。因ADC0808的内部没有时钟电路,所需时钟信号必须由外界提供,使用频率的上限为640KHZ.在本系统中由于89c51的ALE无效,不能通过四分频电路获得相应的时钟,只能单独为其设置一个时钟发生器,单片机,选择AT89C51:时钟频率1.0592MHZ。提供16为地址。P0口分时提供地址的低八位和数据,P2口提供高八位。P1口外接按键。P3口用于中断和发出各种控制信号。P0口发送段码,P2口发送位码。,51系列硬件组成和部分资源,运放电路,电压范围选择-15+15可使晕方的工作状态更加稳定,滤波介绍,在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的

8、,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。下面介绍几种常见的滤波算法:,限幅滤波算法,该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。,#define A /允许的最大差值 char data; /上一次的数据 char f

9、ilter() char datanew; /新数据变量 datanew=get_data(); /获得新数据变量 if( (datanew-data)A|(data-datanewA) )return data; elsereturn datanew; /A如何确定呢?,中值滤波算法,该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。,#define N 11 /定义获得的数据个数 char filter() char value_buffN; /定义存储数据的数组 char count,i,

10、j,temp; for(count=0;countN;count+) /获取数据 value_bufcount=get_data();delay(); /如果采集数据比较慢,那么就需要延时或中断 ,for(j=0;jvalue_buffi+1temp=value_buffi;value_buffi=value_buffi+1;value_buffi+1=temp; return value_buff(N-1)/2; ,算术平均滤波算法,该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。N取值一般为2的整数幂,即2,4,8,16.,char filter() int sum=0; fo

11、r (count=0;countN;count+) sum+=get_data();delay(): return (char)(sum/N); ,加权平均滤波算法,由于前面所说的“算术平均滤波算法”存在平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可采用加权平均滤波。它的原理是对连续N次采样值分别乘上不同的加权系数之后再求累加,加权系数一般先小后大,以突出后面若干采样的效果,加强系统对参数变化趋势的认识。,char code jqN=1,2,3,4,5,6,7,8,9,10,11,12; /code数组为加权系数表,存在程序存储区 char code sum_jq=1+2+3+

12、4+5+6+7+8+9+10+11+12; char filter() char count; char value_buffN; int sum=0; for(count=0;countN;count+) value_buffcount=get_data();delay(); for(count=0;countN;count+)sum+=value_buffcount*jqcount; return (char)(sum/sum_jq); ,以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。这里介绍的滑动平均滤波算法只采

13、样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。,char value_buffN; char i=0; char filter() char count;int sum=0;value_buffi+=get_data();if(i=N)i=0; for(count=0;countN;count+)sum=value_buffcount; return (char)(

14、sum/N); ,显示器,选择六位8段阳极数码管,此外还用一些晶振、电阻,独立按键等。 显示格式如下所示:,如果当前温度为30.5度,档位为4,则显示为:4-30.5,单片机串行通信,AT89C51的串行接口是一个可编程的全双工接口。考虑到下位机与上位机之间进行温度和档位的传递,采用全双工通信。可以通过设置串行接口的控制寄存器的值来获得相应的工作方式。下面简要介绍它的发送数据和接受数据的过程。,接收数据时,SCON的REN置1即可,外界数据通过引脚RXD串行输入,书局的低位首先进入移位寄存器,一帧数据接受完毕之后在并行存入数据缓冲寄存器SBUF中,同时中断标志位置1,向CPU发出请求。CPU相

15、应中断后读SBUF取数据,且软件请0,这样一次串行通信完成。,发送数据时,先将数据并行写入发送数据缓冲寄存器SBUF中,之后数据有引脚TXD串行发送出去。当发送结束之后,缓冲器空,由硬件发送中断标志,向CPU发出请求。CPU相应中断后,应由软件清0。,返回,各部分电路设计,温度采集电路,运放电路,模数转换电路,单片机电路,显示电路,按键电路,复位电路,晶振电路,做电路图的一些经验方法总结,利用总线; 利用结点命名法; 并列的多个电阻可使用电阻包; 高版本的protues比低版本的可支持更多的仿真模型; 可以使用电压探测笔对lm35和放大器的输出电压值进行测量,以修正放大倍数。,实现连调的方法,

16、把keil安装目录c51bin的vdm51.dll文件复制到proteusmodels目录下; 修改keil安装目录下tools.ini文件,在c51字段加入“TDRV9=BINVDM51.DLL(PROTUES)”并保存。 打开protues,在protues的debug菜单中选中“use remote debug moitor”; 在keil的project菜单中进入“options for target工程名”,在debug选项中选择“protues driver”,单击确定即可。,返回,程序,程序流程图,主程序流程图,主程序流程图,显示程序流程图,程序,按键中断程序: void key

17、()interrupt 2 unsigned char i;for(i=0;i30;i+);/*消抖*/if(int_1)return;if(!key1)level=1;,if(!key2)level=2;if(!key3)level=3;if(!key4)level=4;levelflag=1;EX1=1;/*允许INT1中断*/ 注:在书写中断子程序时,要注意在主程序的任何位置不能调用它。,显示程序,void show() unsigned int i;for(i=0;i6;i+) P2=locationi;/*取位码*/P0=ledtablevideo_buffi;/*送段吗*/dela

18、y(); ,采集数据程序,unsigned char gettemper()/*adc转换一次 */ unsigned char dat;EA=0;ALE=1;_nop_(); _nop_();ALE=0;adcstart=1;_nop_(); _nop_();adcstart=0;P0=0XFF; while(!EOC);OE=1;,dat=P0;OE=0;if(temper!=dat)temperflag=1; EA=1; return dat; ,void fiter() /均值滤波 /对四次采样进行求平均,考虑到实际中温度的变化是一个比较缓慢的过程,/相邻的几次采样变化幅度不大,且为计

19、算简便,N取值为4 int sum=0,count;for (count=0;countN;count+)temper=gettemper();if(temperflag)processdata(); sum+=video_buff2*100+video_buff3*10+video_buff5;delay();sum=sum/N;video_buff2=sum/100;video_buff3=sum%100/10;video_buff5=sum%10; ,与串口的通信程序,void senddata() if(!TI)if(temperflag)SBUF=t;while(!TI);SBUF=

20、video_buff2+0x30; /发送temperaturewhile(!TI);SBUF=video_buff3+0x30;while(!TI);SBUF=.;,while(!TI);SBUF=video_buff5+0x30;while(!TI); temperflag=0; if(levelflag)SBUF=c; /发送command标识while(!TI);SBUF=video_buff0+0x30; while(!TI);levelflag=0;/按键状态清除 /一定是软件清0,串口初始化程序,void inituart() SCON=0X50;TMOD=0X20;TH1=0X

21、FD;TL1=0XFD;TR1=1;ES=1; ,延时子程序,void delay() unsigned char i,j;for(i=0;i10;i+)for(j=0;j90;j+); ,对采集到的数据处理程序,void processdata() unsigned int tmp;tmp=temper*1.9646;video_buff0=level;video_buff1=10;video_buff4=11;video_buff2=tmp/100;tmp=tmp%100;video_buff3=tmp/10;tmp=tmp%10;video_buff5=tmp; ,返回,参考文献,模拟电子技术基础 高等教育出版社 华成英 童诗白 单片机原理与应用及C51程序设计 清华大学出版社 谢维成 杨加国 单片机原理及应用-C51编程技术 西南交通大学出版社 靳桅 例说51单片机(C语言版) 人民邮电出版社 张义和 单片机原理与应用实例仿真 北京航空航天大学出版社 李泉溪,返回,谢谢!,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报