linux网站做301重定向,制造业中小微企业,网站套模板教程,wordpress 置顶字段目录
摘要 3 Controling system design and simulation of the solar water heater based on single chip microcomputer 4 第一章 前言 5 1.1设计背景和意义 5 1.2国内外的发展趋势 5 第二章 系统设计总览 7 2.1控制中心 7 2.2外围设备 7 第三章 系统硬件设计 8 3.1 总硬件的…目录
摘要 3 Controling system design and simulation of the solar water heater based on single chip microcomputer 4 第一章 前言 5 1.1设计背景和意义 5 1.2国内外的发展趋势 5 第二章 系统设计总览 7 2.1控制中心 7 2.2外围设备 7 第三章 系统硬件设计 8 3.1 总硬件的设计原理与框图 8 3.2 温度传感器DS18B20模块 9 3.3水位传感器模块 10 3.4电磁阀原理及电路 12 3.4.1光电隔离器原理 12 3.4.2继电器的原理 13 3.5显示模块 13 3.6键盘模块 14 3.7报警器 15 3.8 CPU模块 16 第四章 软件设计 19 4.1 DS18B20的调试与驱动 21 4.1.1 DS18B20的驱动程序 21 4.1.2 DS18B20的工作协议 21 4.1.3 DS18B20的图时序 22 4.2 按键电路模块的程序设计 23 4.3 LED显示模块程序 26 第五章 系统的仿真 29 5.1 仿真软件的介绍 29 5.2 温度的仿真 31 5.3 水位的仿真 32 总结 34 参考文献 35 附录1 37 附录2 40
基于单片机的太阳能热水器控制系统设计与仿真 摘要 跟着社会科技迅速的发展人们的生活水平的快速提升。在热水器这方面从以前的锅炉成为现在的太阳能热水器仅仅只是用了几十年的时间。 本设计主要采用单片机系统针对太阳能热水器的控制系统展开研究工作。其功能主要是设计和实现太阳能与热能混合为热源提供的热水器控制可在节能具有做出贡献。 本文设计的系统采用AT89C52单片机为控制中心在温度控制与检测模块是采用DS18B20。DS18B20具有价格低廉它的精度有0.5度十分满足对此控制系统的要求。在水位检测与控制方面是用自制的三条导线是利用水的导电性良好来决定的。能对水位有三档的检测最低位、有水位、水满位实现对水箱的水位检测。 关键字单片机、太阳能、热水器、DS18B20
Controling system design and simulation of the solar water heater based on single chip microcomputer Abstract With rapid development of science and technology society, the improvement of human life is fast. In this respect from the previous water heater, boiler and is now the solar water heater is only use for decades. The control system is to control the solar energy and electrical energy water heater as heat source provided. There is a great contribution in terms of energy saving. This system uses AT89C52 single chip microcomputer as the control center, and the temperature control and detection module is used DS18B20. DS18B20 with low price, its precision is 0.5 degrees, which meets the requirements of this control system. In the aspect of water level detection and control, three homemade wires with good electrical conductivity of water are used, with which, can water level three gears, its lowest level, water level, water, full implementation of water tank water level be detected. Key words: single chip microcomputer, solar, water heater, DS18B20
第一章 前言
1.1设计背景和意义 跟着社会的发展人类的生活水平的提升热水器成为了大家的必须品传统的锅炉热水器主要用煤来进行给水加热对环境造成了很大的破坏用继电器来进行控制给使用带来不便和效率较低。所以传统的热水器已经不适合于当今社会人们的需求。现在市场上出现的大部分都是用电来给热水器加热这让效率很大程度上提高了。可是由于电的产生对坏境的污染越来越严重不管是水能发电还是直接用煤来发电都对环境进行了一定程度上的破坏所以电热水器的使用间接的导致了环境的破坏。所以此设计采用电和太阳能的集合形式的热水器最小程度减少在使用热水器的过程中对环境的污染。在太阳能充足的情况下直接采用太阳能来给热水器进行加热在太阳能不是充足的情况下才采用电热的方式给热水器的水加热。用单片机为控制中心结合温度传感器和水位传感器实现对水温和水量的检查和控制让热水器的效率更高更智能化。随着科技的发展单片机的造价是越来越低用单片机来对热水器的控制让热水器的价格更低。因此此设计具有价格低廉、使用方便、对环境有一定的保护、智能化等优点。从而满足现代人们的对热水器的需求。 1.2国内外的发展趋势 从总的来说热水器的使用受到居住的环境面积的大小和能源的限制。主要从两个方面来讲1、是从技术的层面上来说对环境污染小体积小维护成本低使用寿命长操作简单智能化和加热快等2、是从外观设计上来讲主要还是喜欢欧美的风格潮流前卫时尚高雅的外形设计当然在它的主要研究中最重要的还是温度、液面的测量检测与控制系统技术。 1国外最新研究动向欧美国家关于液面和温度控制的相关技术的研究起于20世纪70年代相对于中国来说比较早。首先是选用模拟式的组合仪表收集现场信息并进行指示、记载和控制。80年代末出现了分布式控制系统。当前正在对计算机数据采集控制系统的多因子综合控制系统进行研制和开发。目前当下在液面和温度测量和控制技术的成长得非常的快在每一个国家中然而很多的国家在不断努力地实现从自动控制到没有人和完全自动的目标。 2国内最新研究动向在中国在1980年才开始在液面、温度测量和控制技术的研究和开发 我国对于温度和液面测控技术的研究较晚在我们国家的在这方面的科技研究科学家们在不断的学习其他的先进国家的相关科学技术的基础上才能把在室内的温度和湿度的微机对它们的控制技巧这项技术它是只有在温度和湿度上面的单项环境因子的控制应用国内在温度、湿度和水位的测量和控制措施计算机的应用从总的来说应用温度、湿度和水位的测量和控制设备在中国一般都是从吸收和简单应用阶段的实践与综合应用阶段的过度和发展。 从技术上来说都是用单片机的控制的单参数单回路系统比较多一点并没有实际上的多参数的综合控制系统在这方面和其他的在这方面走在前面的国家来说是有着一定的距离的在我们国家还离对液面和温度的检测控制工厂化有非常远的距离在工厂生产的过程中还是有许许多的难题还等着我们去解决但是一些是我们现在还不能解决的问题比如产业水平较低、环境控制的水准还达不到、相关配套的装备比较差在很多的资源上还是不能够进行去分享和共用可靠性的差等很多缺点。 今年来国内和国际水平和温度传感器的测量系统向集成化、智能化的发展随着研究人员的不断努力类型系统取得了很大的成就随着社会不断地发展我们的生活水平的提升在提升我们的生活水平的高度中扮演着重要的角色现在市面上出现的热水器的类型愈来愈多电加热式、太阳能加热式、煤气加热式的热水器、、观其它们只是加热的形式不一样不管是怎么样的它们的主要参数温度和水位的都有对它们进行测量和控制从而让热水器变得智能化。
第二章 系统设计总览
2.1控制中心 要实现本设计首先是要对设计要达到的目的进行概括。本设计要实现要用单片机来进行总的控制来协调各个模块之间的动作以期望能对温度和水位传感器的检测与控制本控制中心采用的是单片机AT89C52是用来对外围设备的检测与控制让外围设备能工作起来从而来达到本设计的要求AT89C52将会在下一章详细的介绍。 2.2外围设备 在本设计中外围设备起着十分的巨大作用如果说控制中心是人的大脑那么外围设备就是人的四支它在本设计中是起到收集数据、执行结果外围设备包括显示模块、按键模块、温度模块、水位模块、温度补偿模块、水位补偿模块。这些模块都将在下一章进行详细的介绍。本设计温度模块采用DS18B20位温度传感器来进行对水温的检测与控制用自制的导线来成为水位检测器件。用4个按键来作为键盘模块1按键作为菜单选择、2和3按键作为加减设定、4按键为确定按键LED为显示器循环来显示温度和水位状况。用两个光电隔离器来实现对上水、温度加热的控制。
第三章 系统硬件设计
3.1 总硬件的设计原理与框图 对设计的预期目标要求分析可以得到如下框图3—1 图3.1 系统设计总框图
在框图中系统的工作原理为以单片机AT89C52为整体的处理器温度传感器选择为DS18B20由于DS18B20输出是数字量所以就直接传给AT89C52进行处理AT89C52得到DS18B20的温度数据就送到LED显示器进行当前温度的显示。水位的检测是自制的三根导线对当前水位的检测通过电平转换把高电平转为低电平输入到单片机的P1口然后再由单片机送到显示器进行对当前水位的显示。当然检测出了温度和水位当太阳能不能及时满足对水温的加热时就进行用电加热方式对水加热为了减少加热负载对单片机的影响采用一个光电隔离器让后通过电池阀来控制是加热还是不加热。当水位检测到当前的水位不能满足当前的需求时通一个抽水泵来就行进对其上水让水能满足当前的要求当然为了减小负载对电路的影响同样用一个光电隔离器来实现再通过一个电池阀来选择到底是上水还是不上。在满足这些的同时需要一个报警器来对错处和危险的提醒报警器是采用一个发光二极管和一个蜂鸣器来实现听觉和视觉的提醒。然后用四个按键来实现对系统的设置1按键为菜单选择2和3按键为上下选择和加减4按键为确认按键[1]。3.2 温度传感器DS18B20模块 DS18B20温度传感器是有达拉斯生产的数字温度传感器他有9个数字的温度0.5最小的分辨率能够最大程度地对满足对温度检测的需求。它有三个引脚一个引脚为接地用的一个引脚是用来接电源的当然它也是可以通过数据引脚进行对它来电源供应所以的电源引脚可以不用最后一个引脚用与单片机进行通信DS18B20的各有其独特的序列号所以在一条线上可以挂很多的DS18B20实现对不同位置的温度检测它的序列号包括唯一的一个64位的号在它的内部有一个ROM和两个RAM它的序列号就是存放在它的ROM中的前8位都一样的产品类型编码都是10H接下来的48是唯一的号码DS18B20最后8是CRC码的前面。接下来的48位是DS18B20的唯一的号最后的8位是前面的CRC码。它测得的温度是放在它的两个RAM中的一号RAM是存放符号的也就是说如果它的值是负的及一号RAM存的都是1相反都是0。0号RAM是用来存储补充温度值最低位的1表示为0.5度的二进制数转十进制的RAM被分为两种并计算出测量的温度值而DS18B20的测量范围为-55到125度完全能满足本设计的需求。如果要他的测量速度快得话就得外接一根电源线它的速度能达到1s左右是非常的快的。 图3.2封装和引脚图DS18B20的测量原理是在它的内部采用了一种很是独特的温度采集技术用一个时钟来进行对它的温度值计数的能实现加减当温度太低时振荡器发出的脉冲无法通过大门以满足在温度变化时的温度值可以修改内部计数是由于温度的影响所以计数器设置成为-55度当计算器复位在现在的温度时对振荡器的温度系数进行补偿从而让计数器能开始计数计数到0为止如果这样门电路还没有关闭时就重复上面讲得过程直到门电路关闭。 DS18B20的内部主要有非易失性温度报警触触发器TH和TL、64位的激光ROM和温度传感器前面说过DS18B20是可以不需要再接电源都可以的它是用当通讯线上是高电平的时候就把电存在电容中当从高电平变位低电平后电容就开始放电用来提供电源。它的内部电路图为如下 图3.3 内部图 由于它的数据和地址都一条线所以它有着严格的时序来对相应的操作以便于能让它能好的工作不会出乱。它的工作流程是初始化时它发出一个复位脉冲、发一个ROM功能命令、处理数据、发一个存储器命令进行数据处理。它使用时一般都是与单片机来进行数据的采集把它连到单片机的一个输出与输入线相连即可而且可以连多个能对要进行温度采集的物体进行多点采集能得到更多的数据能进行更好的分析而且它的有效距离为50米能满足本设计的需求[2]。 3.3水位传感器模块 在现在的水位传感器中有很多种类比如谐振式压力传感器、电感式压力传感器、及电容式加速度传感器、电阻应变片式压力传感器、电容式压力传感器、半导体应变片式压力传感器、半导体应变片式压力传感器、压阻式压力传感器、等但是本设计使用了价格更加低廉的自制的水位传感器是采用三根导线放在三个不同的位置利用水有良好的导电性从而实现对水位信息的采集。 在底部放一个5v的电源导线在底部的另一边放一根导线然后再水位的百分之19处放一根导线最后在水位的百分之92处放一根导线然后把三导线接上电平转换模块把高电平转为低电平如下图所示 图3.4 水箱水位传感器图3.5 电平转换电路 电平转换电路中电容是为了减小干扰信号当w1口有信号进来时经过电阻分压再通过三极管Q4输入到P2口下面是水位与数据信号对应表 表3.1水位与数据信号对应表 07H 92 06H 19 04 0
3.4电磁阀原理及电路 自动控制的实现就是要让开关能够自己的闭合与打开本设计是用的是一般常规用到的电磁开关就是所谓的继电器当继电器的线圈上有电流流过是就会产生电磁场有电磁力去作用弹片让外部的电路能够导通从而实现自动开关的控制但是有一个问题是先要在继电器的线圈上有稳定的电流进过那么在前面就得有相关的控制能让电流稳定下来光电隔离器是个很好得选择它是用光来实现对电流的控制能够隔离一些不稳定的因素但是让光电隔离器有稳定的电流来让其发光稳定那么就再光电隔离器的前面就得加一个驱动让它能提供稳定的电流信号。 控制电路的工作原理单片机根据要求处理得到的结果从一个控制端口发出低电平的控制信号通过积极推动稳定电路可以得到让光电隔离器能够发出稳定的光后面的光感应器就可以感知到光稳定电路经过电阻分压器三极管链接继电器弹片是吸引该开关可以打开开始工作。
图3.6 电磁阀工作电路图 3.4.1光电隔离器原理 光电隔离器通常称为光电耦合器或电光耦合器它是作为传输介质的光来实现光与电的转换是由于光电转换因此它具有良好的隔振效果。能最大程度地减少负载电路对电路的影响。光电耦合器在不同的电路中都有着十分广泛的应用在目前它已经是种类最繁多用得最多的光电器件之一。它一般都有着3部分光的感应器光的接收、电信号的放大、发光二极管光的发射当光电耦合器有信号进入时二极管被输入的电流驱动发光二极管就发出特定的波长的光从而能让光感应器能接收到二极管发的光光感应器感应到后就会产生光电流然后光电信号经过放大最后才是输出从而完整的完成了从光信号转换为电信号的过程实现了把输入与输出隔离开来的功能[3]。光电耦合器有着下面几个优点 1信号传输的单向性。由于是把光转换为电流的所以它是不可逆的不能反向的进行信号的传输。 2输出电流与输入信号有很好线性。由于是再发光二极管上是接了一个电压然后是经过一个电阻耦合得到的电流来让二极管来发光的光感应器收到的光是随偏置的电流而变化的所以输出与输入信号是有很好的线性变化的。 3有很强的共模抑制能力是因为光电耦合器的输入端是电流型工作的低电阻元件。 4的输出信号对输入信号的干扰完全消除并具有较强的抗干扰能力而且使用寿命长 3.4.2继电器的原理 继电器是一种使用电流控制的元件它的主要组成分为两部分控制系统和被控制系统就是输入回路和输出回路由于是用电流去控制的因此它被广泛应用于自动控制电路。在开始还没有继电器的时候是用手动去代替控制的在工业控制和其他的地方都带来不便所以继电器的出现让自动开关控制带来很大的便利。继电器其实就是一个被电流控制的开关它能自动的开和关所以它能通过小电流去控制大电流所以它在电路中起着电路转换、安全保护、自动开关、的作用继电器它的部件由铁芯线圈弹簧片和衔铁组成继电器的工作原理当电流通过线圈的时候在线圈中就会产生电磁场从而在弹簧片上产生一个磁矩力让弹簧片与衔铁并合在一起产生通或者断。继电器分为3种一种是常开的也就是说弹簧片一直都是和衔铁断开的一种是常闭的就是弹簧片一直都是和衔铁是闭合的电路是通的最后一种是出于闭合与开的循环状态。最后种由分为两种情况就是先闭合后断开和先断开后闭合的两种形式[4]。 3.5显示模块 显示模块是用的是用的4个LED数码管显示的数码管有两种一种是共阳的和共阴的。所谓的共阳就是把数码管的所有的段的就是a、b、c、d、e、f、g、dp段都接在一起接在电源上而共阴的就是把所有的段的一段也是都接在一起然后再一起接地。 图3.7 7段数码管图静态显示和动态显示是LED显示工作的两种不同的方式静态显示就是把每一个数码管的脚都接在cpu上或者是用138译码器来进行驱动如果用138译码器来进行驱动则就是每一个数码管都是要一个138译码器来进行驱动而这样做的缺点就是占用的资源较大用的cpu的脚就比较多但是有个好处是编程相对来说要简单一点而且数码管会比较亮。动态显示就是把多个数码管的脚直接或者间接的接在cpu的I/O脚上而这样做的优点比较与静态显示来时是很明显的那就是占用的资源比较少所用到的cpu的口就比较少但是相对的来说在数码管的亮度上和对其进行编程上来说就没有静态显示的那么好亮度没有那么亮编程难度要大一点。 3.6键盘模块 键盘模块用的是只有四个按键来进行组合的第一个按键是用来进行菜单选择的选择的是水位菜单还是温度菜单第二个和第三个是用来进行加减的就是当在设置水的温度的时候用来进行对当前温度的设定的第四个按键是用进行确认的当第一个按键选好菜单和第二个和第三个把温度设置好后但是这时候只是我们看见我们设定的但是cpu还是没确定我们是不是要选定的用第四个按键来确定就是让cpu能确定我们所设定的值和选定的菜单。 当然实际的按键的时候会出现一些误操作的时候比如当你的其中一个按键被无意的碰到的时候会让cpu出现误识别识别出是按过该按键的所以为了消除这种误操作就采用了一种消除抖动的方法而消除的方法有两方面一种是以硬件来进行消除抖动另一种就是用软件来消除抖动。 硬件消除抖动的原理图3.6-1是用硬件来消除抖动的按键电路图当是S1没有被按下时电路由于没有被接通所以电容C1两端的电压为零因为电容有一端是接地的与非门输出为1当S1被按下时被接上了电源电容C1的两端电压将会慢慢的发生变化而在这时候只要选对 了R1、R2和C1的值就会让电容充电的时间合适从而起到了一定的延时作用就会给按键按下争取到一定的时间从而来识别是人为的把按键按下还是误操作造成的。实现了硬件消除抖动的功能下面是硬件消除按键抖动的按键电路图 图3.8 按键的电路图另一种就是软件进行消除抖动用软件来进行延时当cpu识别到第一次有按键按下时程序就开始延时10ms到70ms然后再去检查按键还是不是高电平当是高电平时就说明了有按键按下如果不是那就说明没有按键按下是误操作从而来实现消除抖动影响。 3.7报警器 报警器是采用从听觉和视觉来提醒的听觉是采用一个蜂鸣器来进行发出声音的从而当人的视线没有在太阳能热水器上的时候会用声音来提示你你的热水器出现了故障了就不用什么时候都要人去守着太阳能热水器了。视觉是采用一个二极管来发光来刺激的就是当你人在它的旁边的时候会用光的形式来提醒你出现了问题而只是蜂鸣器响的时候有时候会误判成是其他的东西发出的声音而不管热水器的事所以发光二极管的设计能更加进一步的确认了是热水器出现了问题。图3.7-1是报警器的电路图。 图3.9 报警器的电路图当p0.5口有信号过来时三极管Q1导通蜂鸣器响而C21电容的作用是让蜂鸣器响的时间加长而不是就只是响一下就不响了从而就让这个报警器的设计失去了意义。 当p0.6有个低电平过来时LED灯导通就会发光电阻R4的作用是限流就是对发光二极管的保护不让电流过大而损坏了发光二极管从而实现报警功能。 3.8 CPU模块 本设计采用的CPU是PIC18F4620它是一种低功耗的八位的微型处理器它跟其他的单片机一样有一个512k的内部存储器RAM一个4k的片内程序存储器有4个八位的输出输入口p0口到p3口中断控制系统有5个一个外接的脉冲信号一般都是接一个11.095MHz的晶振还有一个全双工的uart的串行输出输入口它们相互的连在一起就构成了一个完整的微处理器。当然还有些其他的口。单片机的复位方式有两种一种是手动的复位一种是自动的复位图3.8-1是手动复位电路3.8-2是自动复位电路
图 3.10手动复位电路 图3.11自动复位电路下面是外接为11.095M的晶振电路
图3,12 外接的晶振电路 AT89C52里面置有8KB能在线编程的闪存那是因为高密度非易失性的存储技术被Atmel公司所应用在这方面上所以它是可以在线编程的它的指令是与8051的相兼容的它的应运是十分的广泛的可以用在很复杂的控制上并且它的成本和其他同类型的来比是比较低的。下面是它的PDIP封装图
图3.13 CPU的封装图和引脚 它有32个p0到p3的输出输入口用来进行与其他元件进行数据和地址通讯的一个接电源和一个接地口用来给单片机进行供电源的一个复位口只要同时有两个高电平输入到复位口单片机就进行复位两个晶振输入口使用与外接时钟脉冲的是一个访问外部程序存储器的控制信号而他是低电平有效也就是说当它接的是低电平时它才是让处理器的与外部程序存储器接的口读外部程序存储器的程序当它接的是高电平时它选择的是内部自己带的程序存储器因为AT89C52内部是带有4K的程序存储器的。它是外部存储器选通信号就是用来进行选择到底是不是要和外部存储器进行通信不如果外部程序存储器在运行外部的程序是就会在每一个机械周期都被激活2次然而时间当访问外部数据存储器未被激活P3口本来它们也是一个双向输入输出的地址与数据口但是它不止有这个功能他还是有着第二功能的它的第二功能不光是有串行输入与输出他还是有着能接2个外部中断和两个定时器的输入最后他还有着两个分别为对外部数据存储器写脉冲和外部数据存储器读脉冲。它的第二功为P3.0是RXD串行输入口引脚口为10P3.1是TXD串行输出口引脚口为11P3.2是INT0外部中断0引脚12P3.3是INT1外部中断1引脚口为13P3.4是T0定时器0外部输入引脚14P3.5是T1定时器1外部输入引脚15P3.6是WR外部数据存储器写脉冲引脚16P3.7是RD外部数据存储器读脉冲引脚17[5]。
第四章 软件设计
如果说硬件设计像人的身体而软件设计就像是人的思想一样人的身体是由人的思维支配的而硬件到底要完成什么样的功能完全是由软件去支配的。软件便就是硬件的驱动程序每一个硬件都有它的时序图只有完全配合它的时序图才能把一个硬件驱动起来才能让它产生作用。而写程序得有它相应的流程图下面4-1图就是系统总的控制流程图。它的流程就是先是开始就是打开电源打开开关让系统进入初始化阶段而初始化就是检查各个部分是不是都是好如果都是好的就是打开中断然后开始显示当前的温度状况和水位情况首先要去根据水位传感器传出来的信息就行计算和转换来判断水位是不是到了最低的底线如果是到了最低的底线那么就由处理器发出控制上水信号然后经过光电耦合器再到电池阀控制器来控制小型的抽水泵给太阳能热水器的水箱加水然后又开始检查水位到没有如果到了就再由主机发出一个停止上水的信号同样的经过光电耦合器到继电器来断开小型的抽水泵让其停止给太阳能热水器的水箱加热然后开始检查温度是不是到达了设定的温度如果是没有到达的从处理器就发出一个加热的信号进过光电耦合器然后经过电池阀来控制加热器给热水器的水加热然后再去检查到达设定的温度没有如果没有到就重复上述的过程如果到了就由主机发出一个停止加热的信号经过光电耦合器再由电池阀来控制加热器的断开让其停止给太阳能热水器加热然后再返回去显示温度和水位重复上述所有过程。这样就是实现了当太阳能不能及时给热水器加热的时候用电来给水加热实现了双加热系统的控制更能满足用户对当今太阳能热水器的需求。
图4.1 系统总控制流程图4.1 DS18B20的调试与驱动 4.1.1 DS18B20的驱动程序 DS18B20是一个有九位的二进制的温度读数的数字温度计测量了元件的温度测得的温度信息通过一条通讯线DQ传给处理器或者从处理器进过DQ传指令给DS18B20让其完成相关的工作而它只有三个引脚一个DQ一个VCC一个GND。VCC是提供电源的GND是接地的但是它是可以不接外部电源的直接通过DQ来进行供电。它可以测量温度55度125度。其测量精度为0.5度。 它有2个存储器RAM是0号和1号1号存储器放的符号如果全为0就是正反之全为1就是负。0号放的是温度值的补码最低位表明的是0.5度它是用9位存的[1]存储表如下
表4.1 DS18B20温度存储 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 LSB Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 MSB S S S S S S S S
4.1.2 DS18B20的工作协议
初始化 单片机总线上的所有处理均从初始化开始。ROM操作指令 当主机检测到DS18B20的存在的时候就可以发出ROM操作命令之一这些命令如 指令 代码 Read ROM(读ROM) [33H] Match ROM(匹配ROM) [55H] Skip ROM(跳过ROM] [CCH] Search ROM(搜索ROM) [F0H] Alarm search(告警搜索) [ECH]存储器操作命令 指令 代码 Write Scratchpad(写暂存存储器) [4EH] Read Scratchpad(读暂存存储器) [BEH] Copy Scratchpad(复制暂存存储器) [48H] Convert Temperature(温度变换) [44H] Recall EPROM(重新调出) [B8H] Read Power supply(读电源) [B4H] 4.1.3 DS18B20的图时序 处理器用时间间歇来读写它的数据和命令 1初始化 处理器在T0的时候发出了一个复位的信号脉冲然后再T1的时候释放总线开始进行接收状态当它检测总线上的上升沿的时候它有一个低电平脉冲信号的持续60us到240us后15us到60us如图所示
图4.2初始化时序图
(2)写时间隙 当处理器总线从T0的高电平变成低电平是产生了些时间隙在15us的时间间隔中从T0开始就开始计时在其时间时间间隔中就将所有需要的位传送到总线上它在T后的15us到60us中对总线的采样写入的时低电平见图4.2-2,如果写入的是高电平位写的位是1见图4.2-3 图4.3 写0时序图 图4.4 写1时序图3处理器的总线从高电平变到低电平的时候保持了17us然后总线由低电平变成高电平就产生读时间隙如读时序图所示当在T1后和T3前的这段时间里都是有效的而T2与T0的时间长度为15us在T2前处理器就必须把位给读完而且要在一定的时间间隔里释放总线这个时间间隔为60us到120us
图4.5 读时序图
4.2 按键电路模块的程序设计 在这控制系统中按键就是人机交流的通道也是一种手段。按键分为触摸式的和有弹簧的而本设计就是用的是有弹片的选他主要还是从成本上考虑的触摸式的价格相对于它来说是比较高的。按键完成动作的整个过程为 从按键没有按下然后按键按下最后到释放按键。而这个过程是重复的。当一个按键按下时cpu是不能识别出到底是误按还是真的有按下因此有时就产生误按也是被识别了为了解决这种情况的发生所以就用延迟来消除来消除这种情况从而让cpu识别按键的效率变高。而解决种情况的有两种方法一种是硬件另一种是软件而硬件的设计就增加了电路的复杂度从而增加了成本而用软件就可以避免这些问题但是同样也能达到预想到的效果但是在给编程带来了一些困难不过相对来说这种方法是比较好的所以本设计是采用软件来消除抖动。在实际和理想的按键波形图如下
图4.6 理想图 图4.7 实际图 在两个图中就能看出在实际图中它有一些抖动这是因为按键都机械的在按键的中间它有个弹簧这个弹簧的作用是当你按下去后还能自动的弹回来但是同时它有带来了一个问题那就是当按键被按下时不能立即进行良好的接触而是在不停来回的抖动的所以就会产生抖动的波形。关键字先检查一下是不是按下一个按钮如果不返回检测如果要延迟抖动的消除和延迟时间为10ms然后确定键是不是还压如果没有说明就是误按如果有说明是真的有按键按下那就开始进行按键处理然后就是等着按键的释放先判断按键是不是真的断开了如果没有那就在进入等待如果有那就按键被断开了但是怕是抖动还不是真的断开了所以还是要延迟10ms然后再进行判断按键是不是真的被释放了如是那就是按键真的被释放了就完成了一次按键的工作。
图4.8 按键工作程序图 下面是按键的处理程序 void delay(uchar z) //延时程序 { uchar x,y; for(xz;x0;x–) for(y110;y0;y–); void main() { if(up_key0) //有按键按下吗 { delay(10); //延时10ms if(up_key0) //确认键按下它 temptemp10; //执行操作 while(!up_key); //按键放开了吗 delay(10); //延时10ms while(!up_key); //确认按键放开 } else if(down_key0) { delay(10); if(down_key0) temp–; while(!down_key); delay(10); while(!down_key); }
4.3 LED显示模块程序 LED有分为两种一种是共阳一种是共阴共阳就是把所有段的一端都接到电源端共阴就是把所有段的一端都接在一起然后接地。数码管显示就是要把数据信号通过LED来进行表达出来而显示出东西来就得与cpu的端口有一个对应的编码如下表所示就是10个数字0到9对应的相应的编码[7]。
表4.2 段LED的字型码 显示字符 共阳极字型码 显示字符 共阳极字型码 0 3FH 5 6DH 1 06H 6 7DH 2 5BH 7 07H 3 4FH 8 7FH 4 66H 9 6FH P0口是来控制数码管的亮哪些段的而P2口是用来选择数码管的来选择哪一个数码管来进行工作。开始就要进行端口的定义 1定义字位和字型口 #define sled_dm_port P0 /定义LED段码的控制脚/ #define sled_wm_port P2 /定义LED位码的控制脚/ 2定义字型编码表数字09 uchar code du_char[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; 3显示当字体的地址和字地址得到的显示功能实现了对不同LED数据 4动态扫描动态扫描就是不停的扫描字位从而选择不同的数码管当选择一个数码管时就把数据输入到这个数码管进行显示然后就扫下一个数码管把下一个所要显示的数据进行显示然后就是重复这个动作实现动态扫描显示。 图4.9 3.3-2 LED显示流程图 5数码管显示主程序 /1MS为单位的延时程序/ void delay_1ms(uchar z) { uchar x,y; for(xz;x0;x–) for(y110;y0;y–); } main() { uint temp_buff; uchar i; sled_dm_port0; while(1) { temp_buffReadTemperature(); /**/读取当前温度 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(i0;i8;i) { sled_wm_port 0x00; /关闭显示/ sled_dm_port sled_data[i]; /输出段码数据到数码管/ if(i6) sled_dm_port sled_dm_port0x7f; /显示小数点/ sled_wm_port we_table[i]; /输出位码数据到数码管/ delay_1ms(1); } } }
第五章 系统的仿真
每一个系统的设计都是要经过仿真后才开始后做实物的而系统的仿真是设计中不可缺少的一部分只有硬件与软件的集合才能最大限度地模拟出在实际中出现的情况本设计的仿真软件是用的是proteus. 5.1 仿真软件的介绍 Proteus是一种EAD仿真的软件是由英国的Labcenter electronics公司进行推出的软件但是它不光有着仿真的功能它有着能布原理图、调试代码、单片机与外围器件的同步仿真、一键式的进行PCB排版它在中国的推广的时间比较迟所以在中国用的还不是很流行但是已经受到了电子相关工作者的强烈喜爱proteus相对于其他的仿真软件比如protel和其他的软件而言在操作的风格上是有些微妙的不同的如打开proteus点击保存就可以把它默认的电路原理图进行保存但在其他仿真软件无论是建立一个项目或文件才能开始进行画原理图和其他的后面设计。又比如它在放置元件的时候它都是先把要得元件找出来用一个列表进行列出来的然后再进行连线的时候只要选中列表中的元件然后单击左键就能拖出元件来这个操作就和其他的不一样了。 如果要用proteus那就得对它先进行安装它的安装那就得先有它的安装包由于现在网路的发展在网上都是能找到它的安装包的但是版本较多但是它们的安装过程都是差不多的。把安装包下载到自己的电脑上后先进行对其解压一般都是选解压到当前文件夹这样做的好处就是解压好后能好找到安装的程序然后点击安装程序进行安装选择路径路径的选择要注意这个安装路径就是把它安装在哪里建议不要安装在系统盘如果选择在系统盘的话可能到时候会引起系统的崩溃然后点击下一步直到完成但是在运行的时候是运行的isis这是仿真软件。 Proteus的功能变形的特点它可以绘制图表SPICE电路仿真PCB自动或手动布线。它的特点有电路仿真的互动就是用户能够随时地采用其它的部件比如电机、键盘、AD/DA、LCD、PIC、LED、ROM、RAM、以及部分器件、IIC部件仿真处理器和外围设备能够仿真AVR、ARM、51系列、等经常使用的主流单片机。它也可以直接根据原理图编程的虚拟模型然后匹配的显示和输出运行后可以看到输出的影响。虚拟逻辑分析仪和示波器所搭载的系统配置。它有很完整的电子设计环境。它的功能模块实用的PCB设计平台、完善的电路仿真功能、智能原理图设计和单片机协调仿真功能。 智能原理图设计1器件库是十分丰富的它的元器件远远地大于27000件而且是非常方面来创建新的元件来满足个人的需要器件搜索是非常的智能化的它能进行模糊的搜索当你对一个元器件的全称记得不是很清楚的时候这个功能就能帮助到你是十分的方便的它的器件引脚之间的连线也是十分的智能化这个功能他能自动的为你选择在那个地方有转折线会自动选择最佳的路线连接这样是很方便快捷的能十分的有效地减少布线的时间有总结结构用总线结构或总线器件能让你设计的电路图之间的连线就比较少不会让你的设计图纸上全部都是连线这样就能大大的简化了电路图的复杂程度让人能更加的阅读通过个性化的设置就能够输出高质量的图纸让其变成BMP图纸能够让word、ppt等文档使用2完美的电路仿真功能模拟和数字电路的混合仿真能够实现是因为ProSPICE混合仿真。27000模拟装置可以用来添加一些模拟装置如从SPIC文件内部原型或制造商设计的模拟装置。多样的激励源它包含了分段线性脉冲、音频、直流脉冲、等再有文件方式的信号输入。单频数字时钟和码流。虚拟仪器的丰富化它一共包含了13种虚拟仪器面板的真实度跟实物是一样的如数字图案发生器交流电压/电流表如示波器逻辑分析仪直流电压/电流表频率表/计数器逻辑探头虚拟终端SPI调试12C调试器。显示器的模拟非常逼真利用颜色来显示数字引脚水平线用不同的颜色来表示导线接地电压的大小并与动力装置的使用让模拟更加生动直观。电路的一些指标可以通过高级图形仿真功能来实现电路的指标包括传动噪声失真的特点傅里叶谱分析的操作点瞬态特性、频率特性也是可以是一致的分析。3单片机协同仿真功能它能够支持cpu的主流而且版本的升级cpu的类型还在不断的在增加通用外设模型的支持4非常有用的pcb设计环境原理图到PCB的快速通道当你的原理图设计号以后直接只要用一个键就能过进行pcb的设计从而实现了从概念设计到完成PCB自动布局和路由功能是非常方便和先进的3D可视化预览。它可以为多种文件格式输出可以让很多文档识别包括Gerber文件的导入或导出可以让等PCB设计工具相互转换的设计更加方便快捷[6]。 5.2 温度的仿真 在温度的仿真中只要先把原理图连好然后进行代码调试在温度传感器的设置中因为本设计用的是DS18B20它有两个按钮它能对它的温度值进行设置左边的是减右边的是加只要调这两个按钮就能对温度值进行设置如此来进行温度传感器模块的仿真这样就能最大程度地来模拟现实中情况让仿真能最大的接近现实。水的加热方式又两种方式一种是传统的只用电来加热方式这种加热主要是在太阳能来加热不能满足的情况下选择的另一种就是只用太阳能来加热这种加热的方式会受到天气和气候的巨大影响比如在阴天或者完全在下雨天它能得到大的太阳能可能就不是那么的充足不能来满足用户的需求又比如如果热水器在晚上要用的话那是就只能完全靠电加热的方式对它进行加热了还有就是受到地域的影响比如中国南方和中国北方在中国的南方可能它能吸收到的太阳能就要充足一些而在中国的北方它能吸收到的太阳能可能就没有那么的充足这时候就得选用电加热的方式。 当温度的设定值高于设定的值的时候单片机就会发出一个信号让信号通过继电器来控制加热棒停止加热当温度低于设定的温度时单片机就会发出一个控制信号通过继电器来控制加热棒进行加热从实现了水温自动加热的目的。下面是温度高于设定温度和水温低于设定温度的仿真截图
图5.1 温度高于设定时的仿真
图5.2温度低于设定温度时仿真 5.3 水位的仿真 水位的仿真是显示当前太阳能热水器中水箱的水量让人能知道当前的水箱里的水还有多少这个就会让用户进行判断水箱里的水是不是干了能最大程度上避免因为水量的少而把热水器给烧坏了。 当水到第二根导线的时候就说明了水量的不足就会显示19,当水位在第三根线的时候就说明水量是充足的就会显示92来实现对水位的显示能让人知道当前的水是少了还是多了下面的两幅图分别就是水量不足和水量充足的仿真图
图5.3 当水量不足时的仿真 图5.4 当水量充足时的仿真
总结
从我们开始选题的时候开始到了现在都过去了6个月了在这段时间经历了开始的迷茫然后才开始有思路回想起这6个月的点点滴滴须然觉得很辛苦但是也学到了很多的东西把以前的一些不懂的问题给想懂了同时也对以前学习的知识进行了巩固和再学习。这套基于单片机的太阳能控系统设计与仿真它主要是实现能显示太阳能热水器的温度和水位同时也能对它的温度进行设置而其这个控制系统还有声音来提示的那是里面包含了一个报警器它主要是由一个蜂鸣器和一个二极管来组成的当然为了增加蜂鸣器响的时间和二极管发光的时间在这模块还采用了一个RC积分电路在处理器本设计选择了AT89C52来控制和协调整个控制系统能让各个部件能完成其相关的工作由于这个单片机是需要外接晶振的所以就接了一个晶振来对整个系统来进行提供时序能让整个控制系统能动起来而一个系统要运行那它就必须要有个复位功能这样才能随时进行复位比如当系统要进行初始化时如果没有复位功能那么就只能把掉电源而直接把电源对控制系统和整个设备不好会造成不稳定性而人机要进行双向进行交流就得有系统对人输出信息而本设计就是用的显示模块显示模块用的是7段的LED显示为了对LED的保护在LED的各段a、b、c、d、e、f、g和dg都接一个电阻让其分压不让LED那么的容易损坏而LED是接在AT89C52的P0口端的按键那便是人对系统的输入通道按键用的是4个按键用按键来实现对温度的设定控制系统那么就得有对有对象进行控制而本设计的控制对象就是电加热棒和小型的抽水泵而对这两个的控制都是由主机发出有效电平通过光电耦合器来隔离它们电路对主机电路的影响经过耦合器后然后经过一个继电器而继电器就是一个自动的控制开关是实现对抽水泵和电加热棒的开和断的控制从而实现了对温度和水位的控制。 在这个设计的过程中遇到过很多的问题比如对软件的不会使用对单片机的指令系统不熟悉还有整个过程的构思都有着很大的艰难。不过都通过努力来克服了。
参考文献
[1]齐剑玲,曾玉红. 智能水位控制系统[J]. 海淀走读大学学报2003年第一期.2003:8791. [2]黄贤武郑筱霞.传感器原理与应用[M].电子科技大学出版社,20043). [3]孙德文.微型计算机技术[M].高等教育出版社20107). [4]刘乐善李畅刘学清.微型计算机接口技术及应用[M].华中科技大学出版社20128). [5]蔡美琴张为民何金儿毛敏陶正苏毛义梅.MCS—51系列单片机系统及其应[M].高 等教育出版社20046). [5]刘瑞星,胡健等.Protel DXP 实用教程[M].机械工业出版社2003(04). [7]潘晓贝…基于单片机的水温水位控制器的设计[D].河南:,三门峡职业技术学院,2010. [8]Yang. Y., Yi. J., Woo, Y.Y., and Kim. B.: ‘Optimum Design for Linearityand efficiency of Efficiency of Microwave Doherty Amplifier Using a New LoadmatchingTechnique’, Microw. J., 2001,44,(12),pp.20–36. [9]康华光.电子技术基础 模拟部分[M]. 高等教育出版社 1998(08). [10]于海生.计算机控制技术[M].机械工业出版社 2007(05). [11]谭浩强.C程序设计[M].清华大学出版社20106). [12]徐龙坤. 辅助加热式太阳能热水器[J] .家用电器. 1997: 910. [13]张景文王震宏.基于单片机的太阳能热水器智能控制系统[J]. 西华大学学报( 自然科学 版) 第27卷第5期.2008.2528. [14]杨新华郝晓弘邵辉基于89C51智能型太阳热水器的控制系统[J]甘肃科学学报.2001 98891. [15]殷为民.太阳能水温水位仪[J] .家用电子. 1999 : 372381. [16]陆子明.单片机设计与应用基础教程[M].北京国防工业出版社.2005206 210. [17]何立民单片机应用系统设计系统配置与接口技术[M]北京:北京航空航天大学出版 社.2001:3442. [18]王俊杰基于89C51单片机的太阳能热水器智能控制器的设计J郑州轻工业学院学报 ( 自然科学版) 第20卷第3期.20056768. [19]陈家胜,朱小松,单学明.太阳能热水器辅助电加热控制器的研制[J].电子技 术,2000.10. [20]鱼献荣.实用水位控制电路[J].家用电子,1998.5.
致谢
对于在这段时间对我提供帮助的人在这里表示深深的感谢感谢您们对我的无私的帮助在此我要特别的感谢我的指导老师感谢您对我提供了最大的无私的帮助您严谨的学习精神深深的让人敬服您时刻就在教导我学习态度但是在我的眼中那不只是学习那也是一种人生的道理。在此再次向您表示感谢。在这次的本科毕业论文中还有一位师兄对我提供了无私的帮助在此向师兄深深的感谢。还有还要感谢我们寝室的室友们对我提供的无私的帮助在这里我深深的向你们表示感谢。
附录1 DS18B20的控制程序 VOID DELAY(uint i) //延时函数 { while(i–); } Init_DS18B20(void) //初始化的函数 { uchar x0; DQ 1; //DQ复位 delay(8); //微做延时 DQ 0; //dq被 delay(80); //精确延时 延迟时间比480us大 DQ 1; // 把总线拉高 delay(14); xDQ; //微做延时后 如果x0则初始化成功 反之初始化失败 delay(20); } Read(void) //读一个字节 { uchar i0; uchar dat 0; for (i8;i0;i–) { DQ 0; // 给脉冲信号 dat1; DQ 1; // 给脉冲信号 if(DQ) dat|0x80; delay(4); } return(dat); } Write(uchar dat) //写一个字节 { uchar i0; for (i8; i0; i–) { DQ 0; DQ dat0x01; delay(5); DQ 1; dat1; } } ReadTemperature(void) //它的读取温度 { uchar a0; uchar b0; uint t0; float tt0; Init_DS18B20(); Write(0xCC); // 读编号列数操作跳过 Write(0x44); // 开动温度变换 Init_DS18B20(); Write(0xCC); //读编号列数操作跳过 Write(0xBE); //读取温度寄存器等共可读9个寄存器 前两个便是温度 aRead(); bRead(); tb; t8; tt|a; ttt0.0625; //高低温 t tt100.5; //结果是4至入加 return(t); }
附录2
总原理电路图