找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6094|回复: 2
收起左侧

单片机DS18B20温度控制系统研制论文

[复制链接]
ID:306390 发表于 2018-4-12 09:51 | 显示全部楼层 |阅读模式
设计(论文)题目   单片机温度控制系统研制                                    
学生姓名      张*             专业   机电一体化  
第五章 结果分析
5.1 PROTEUS仿真
总体电路原理图设计好后,在KEIL3里用C语言编出相应的程序,程序调试在没有问题后,接着就对程序进行仿真,总体思路是:由局部到整体。首先进行键盘设定温度值并用数码管显示的仿真,再进行DS18B20采集温度并用数码管显示的仿真,这两个关键部分完成后,就进行总体程序的仿真。
5.1.1 键盘设定温度仿真
将4×4键盘的扫描程序编好后,在PROTEUS里进行仿真,发现当我按下某个按键时,数码管的百位,十位,各位显示的都是那个键的值,比如我按下3的时候,这三个位的数码管都是3,思考了许久,我初步判断原因可能是是按键按下后,因为键盘一直处于按下的状态,而按键扫描程序扫描按键的速度非常快,以至于我按下一次,键盘扫描了好些次,如此想后,我就设定一个标志位,按键按下置1,键抬起置0,但效果依旧不佳;最后,我在扫描每行键的最后都加上一个判断按键是否释放的程序,如释放,再读取键值,如此之后,就能正确输入按键的值,比如,我要输入123,就只需要依次按下1、2、3。
如图5-1所示,键盘设定初值32℃并用数码管显示
图5-1 键盘设定温度32℃仿真
5.1.2 温度采集仿真
根据DS18B20的时序图编好程序并在KEIL3里检查好语法没有错误后,链接到PROTEUS里进行仿真。开始在PROTEUS里设定改变温度的步长为1℃,在软件里也就相应的将采集到的温度设置为整数,上下限与这个整数相差为一度。这样会使误差加大,之后将仿真的步长改为0.1℃,程序也做出相应的的修改,使实际温度保留一位小数。仿真能够获取实际温度,这个实际温度可从DS18B20的仿真模型中设置。如图5-2所示,PROTEUS仿真温度采集,获取当前的环境温度为28.7℃。

图5-2 温度采集仿真
5.1.3 整体仿真
因为实际温度保留一位小数,在仿真的时候,就出现了一个错误,比如,我设定的温度为28摄氏度时,在正确的情况下,蜂鸣器会在实际温度小于27℃和大于29℃报警,但是仿真出来的结果是小于27℃时,蜂鸣器报警,但是当温度大于29℃时蜂鸣器并未报警,直至实际大于30℃时蜂鸣器才会报警。仔细检查程序后,我发现在读温度子程序模块中,我读取的是实际温度的10倍并取整,然后在我将其与实际值比较之前,又让其除以10,所得值赋给一个整形数,这样就出现了这样种情况,比如,我最初测得的实际值是27.8℃,10倍变为278℃,这是为了方便显示,为了判断是否报警,我要将其与设定值比较,又设定值是个整形数,因此,将此数缩小10倍,赋给一个整形数后实际温度就变为27℃。如此实际温度就当于自减了1℃,故要到实际值为30℃时才能报警。实际温度比设定小1℃能报警,又是因为,只有实际值比设定值小1℃才会报警,实际温度等于设定的下限并不会报警,因此,(27.0-27.9)℃赋值给整形数始终是27℃,只有当实际温度小于27℃时,实际值才会小于下限(设定值28-1),蜂鸣器才会警报。找出问题的所在后,我将设定值扩大10倍,再与实际值的10倍比较,这样就很好的解决了这个问题。仿真总体完毕。
由上可知,在仿真调试过程中,我遇到了很大的麻烦。在仿真的过程中,有时会感觉程序和硬件都没有一点问题,但是就是不能实现系统所要实现的功能,因为它不允许软件和硬件有一点问题,哪怕是细小的一点问题都不允许。举一个最简单的例子,就拿数码管显示程序的调试仿真来说,PROTEUS 里单片机的I/O口可以直接驱动动态显示的数码管,但在实际中却是不可以的。
因为在PROTEUS中加热装置和实际出入大,所以在PROTEUS里进行加热仿真就是成功也没有太大的实际意义,所以我只进行了系统中两个重要部分的软件仿真,以及这两部分合起来的一个总体仿真。
5.2实际运行结果
仿真结果符合预期后,我就着手实物的制作,将所用到的元件焊接在电路板后,就开始测试系统性能。第一次因为焊接技术不过关,数码管显示时好时坏,为了求得个良好的结果,我又重新将元件焊接在另一块板子上,积累了上次焊接的经验后,第二次的焊接效果比之前好了很多,数码管显示正常。由于是动态显示,数码管的亮度不是很高。
加热装置我选择的是PTC加热器,其功率为120W,很小,只能在比较小的空间内才能进行温度控制。在实际的试验中,DS18B20在以此加热器为圆心,以半径20CM为圆,高度不超过15CM圆柱范围内,控制效果良好,误差较小。以下简述实际试验的一些情况。
首先,给单片机上电后,设定温度为29℃,这个值就是我的期望值了,与此同时,软件中相应的把系统能容忍的温度上下限分别定为30℃和28℃,按下温度的切换键,显示当前温度为27.6℃,低于温控系统要求的下限,产生报警。因为实际温度小于设定温度,PTC加热,一小段时间后,警报解除,说明温度已进入温度控制系统的上下限之间,又过了一段时间(时间长短由DS18B20离PTC加热器的距离而变,但当系统稳定后,时间的差异性变小),实际温度达到29℃,PTC关断,其余温使温度继续上升,但没有触发警报,一段时间后,温度又降到29度,比29℃稍低一点,PTC就会加热,因为PTC的加热很快,冷却较慢,实际温度在PTC关断后,下降超过设定值的幅度很小,即使再小,PTC也会进行加热,如此循环,经过多次长时间的试验,实际温度28.8℃<T<29.8℃,误差为1℃左右,又由于DS18B20的误差为±0.5℃,累计的最大误差为2℃,这个误差在本系统中是可以容忍的。故本次毕业设计总体来说是成功的。
图5-3,为本次毕业设计的实物显示设定温度



图5-3 系统运行显示设定温度

图5-4 系统运行显示实际温度


第六章 总结与展望6.1总结
无论仿真还是在实际试验中,本系统都达到了预期的要求。本次毕业设计主要完成的工作有:硬件电路图设计、软件编程与仿真调试、硬件制作等。以下是具体的总结:
(1)以AT89C51单片机为核心进行系统设计,输入通道采用DS18B20芯片,完成温度的采集以及输出数字量;输出通道采用光电耦合器控制双向可控硅作为开关管理PTC加热器的通断。通过双位控制调节可实现对温度的自动控制。由于输入端与输出端有光电隔离,能够有效地抑制干扰;
(2)在温度控制系统中采用双位控制算法,将单片机的某个口线作为双位控制器,通过置“0”或置“1”控制输出通道的通断。
(3)采用C51进行编程,通用性强。在原理图设计过程中使用了PROTEUS仿真,这些都节约了设计的时间,而且便于编写、调试、修改和增删,系统软件的编制采用了模块化的设计方法。
(4)制作硬件的时候采用双面的焊接板,辅于焊锡膏,焊接可靠,在完成时,用万用表对焊接件进行“虚焊”与短路测试。减少硬件调试不成功寻找因素的麻烦。
(5)根据温控空间的大小选择加热装置功率的大小。
(6)使用温度计对18B20所测得的温度进行校正,可使结果更接近真实情况。
6.2展望
本系统使用的AT89C51属于与C51系列兼容的8位单片机,这种单片机共4个I/O口,32根口线,资源较少,运用于较复杂的系统中需要扩展,而且扩展的空间也极为有限。随着工业的发展,对象的复杂程度不断加深,双位控制的缺陷也逐渐暴露出来,而另一方面随着智能控制如模糊控制、神经网络控制等先进控制技术的迅速发展,它们与常规PID控制相结合,扬长避短,发挥各自的优势,形成所谓的智能PID控制。
结合上面的论述,今后还需要做进一步的研究和解决的问题有:
(1)硬件方面,采用性能更优良的单片机对系统的硬件进行重新设计;
(2)控制算法方面,如要用于精确控制,双位控制不是好的选择,尝试采用现在得到快速发展的智能控制方法,如模糊控制、神经网络控制和模糊PID控制等等;
(3)在按键方面,采用4×4键盘,占用了I/O口的十二根口线,对于资源本身就少的89C51单片机来说,不是很经济,在复杂的系统中,按键应尽可能少占用I/O口。

致 谢
本次毕业设计是在导师荣瑞芳老师的细心指导下完成的。在论文的总体方案的设计、元件的选择、程序的编写和论文的撰写过程中,荣老师都给予了大力支持和细心指导。荣老师治学严谨,知识渊博、为人谦虚,每次在毕业设计遇到难题找他答疑的时候,他都会耐心地给我解答,提出了很多建设性的意见。更重要的是,荣老师在帮助我的时候,都是给我一个大概的方向,然后让我自己去探索,培养了我独立完成任务的能力。朴实无华的人格魅力,扎实的学术和理论水平使我受益匪浅。借此之际,祝荣老师身体健康,工作顺利。同时也特别感谢我的班主任在中期答辩期间给我指出了许多不足,才促使我很快找到设计方向。
除了老师的帮助,我们班的同学也给了我很多帮助。侯悦同学在温度传感器上的选择给了我一些启示,并在程序编写时给了我很多的指导;李凯奇同学在我画原理图过程中教我如何使用PROTEUS仿真软件;曹天昊同学在我焊接电路板时告诉了我一些重要的焊接技巧,才使我在实物制作上顺利完成。在此,一并向这三位同学表示真诚的感谢

第四章 控制系统软件设计

    为了实现系统的温度检测和控制,并能够实时显示,整个系统由如下几个主要模块组成,主程序模块、温度采集模块、温度设定模块、温度显示模块,报警模块,温度控制模块等几个模块组成。本章将对如上所叙述的几个模块分别进行介绍,并阐述程序的编写思路和所实现的功能。

4.1 主程序模块设计
主程序的主要设计思想是围绕题目基本要求而展开的,系统按键设定温度产生外部中断0,转入中断服务程序,在中断服务程序中获取设定的温度值,之后在主程序进行数据存储、调用数码管显示、报警控制、温度控制等子程序模块。所以主程序主要是对系统的初始化和调用各子程序模块。
4.1.1主程序流程图

图4-1为主程序流程图

图4-1 主程序流程图
4.2温度采集模块程序设计
温度的采集是数字温度计DS18B20通过单片机进行严格的时序控制来完成的,在空间不是很大的范围内,采用一片DS18B20进行单点测温即可实现对温度的较为精确的控制。
4.2.1 DS18B20的时序
DS18B20的时序可分为三个部分:初始化时序、写时序和读时序。只有遵守严格的时序,DS18B20才能进行温度的采集。
4.2.2.1 初始化时序
DS18B20的所有通信都是由复位脉冲组成的初始化序列开始。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。图4-2阐述了这一点,当发出应答复位脉冲的存在脉冲后,DS18B20通知主机它在总线上并且准备好操作了。在初始化步骤中,总线上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收模式。当总线释放后,5kΩ的上拉电阻把单总线上的低电平拉回高电平。当DS18B20检测到上升沿后等待15到60μs,然后以拉低总线60-240μS的方式发出存在脉冲,主机将总线拉低最短480μS,之后释放总线。由于5kΩ上拉电阻的作用,总线恢复到高电平。至此,初始化和存在时序完毕。
4.2.2.2写时序
如图4-3所示,所有的写时隙必须至少有60μs的持续时间。相邻两个写时隙必须要有最少1μs的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。为产生写1时隙,在拉低总线后主机必须在15μs内释放总线(拉低的电平要持续至少1us)。由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。为产生写0时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放总线(持续时间60-120μs)。写时隙产生后,DS18B20会在产生后的15到60μs的时间内采样总线,以此来确定写0还是写1。
4.2.2.3读时序
如图4-4所示,DS18B20只有在主机发出读时隙时才能发送数据到主机。因此,主机必须在BE(读存储器) 命令,B4(读电源)命令后立即产生读时隙以使DS18B20提供相应的数据。另外,在44(温度转换)命令,B8(recall)命令后也要产生读时隙。 所有的读时隙必须至少有60μs的持续时间。相邻两个读时隙必须要有最少1μs的恢复时间。所有的读时隙都由拉低总线,持续至少1μs后再释放总线(由于上拉电阻的作用,总线恢复为高电平)产生。DS18B20输出的数据在下降沿产生1后5μs内有效。因此,释放总线和主机采样总线等动作要在15μs内完成。

图4-2 DS18B20复位时序图

图4-3 DS18B20写时序图

图4-4 DS18B20读时序图
4.2.3 读温度子程序流程图         
读温度子程序是在单片机的控制下,形成严格的时序,完成温度的转换并作数据的相应处理。温度转换命令子程序主要是发温度转换开始命令,本次毕业设计采用12位分辨率,转换所需的时间约为750ms。因为是单点测温,不需要CRC校验。
图4-5为读温度子程序流程图

图4-5 读温度子程序流程图

4.3温度设定模块程序设计
温度设定模块是用来设定温度的,通过4X4键盘输入想要控制的温度值。本次毕业设计通过中断进行扫描。
4.3.1中断服务子程序

    系统中中断采用的是外部中断0,外部中断0的初始化子程序在主程序开始时即被调用,当键盘上有键按下时,即产生一个外部中断0,执行中断子程序,获取输入的设定值,之后中断回。

图4-6为中断服务子程序的流程图


   

图4-6 中断服务子程序流程图

4.3.2 键盘扫描子程序
键盘的扫描是中断扫描,若有键按下,则从第一行开始扫描,直到确定按键的行与列,确定键值,并返回键值。
图4-7为键盘扫描子程序流程图

图4-7 键盘扫描子程序流程图
4.4温度显示模块设计
温度显示模块要显示的温度有设定值与实际值,通过P3.5的电平的高低来控制,而P3.5电平的高低由与其相连的开关的通断来控制。
4.4.1设定值显示子程序
设定的数值范围为自然状态下室温-125℃且为整数,所以四位七段的数码管的左数第一位的位选信号始终被置零,P0口进行段选,P2口的低四位依次进行千、百、十、个位的数码管的位选。
图4-8为设定值显示子程序的流程图

图4-8 设定值显示子程序
4.4.2 实际值显示子程序
实际值是一个温室自然状态下的室温-125℃之间的数,其带有一位小数,四位八段的数码管从左至右依次是百位、十位、个位、十分位。数码管的段选口还是P0口,P2口的低四位依次是百位、十位、各位、十分位数码管的位选口线。
图4-9为实际值显示子程序的流程图。

图4-9 实际值显示子程序流程图

4.5温度控制模块设计
温度控制模块简单的说就是要实现温度的控制,实际温度高于设定值,降温;实际温度低于设定值,加热。系统中加热的装置为PTC加热器。
4.5.1双位控制算法设计
温室环境是一个复杂分布式参数系统,由于其本身的复杂性和外界大气候较强的影响,要使自控系统将其控制到一定的指标上存在一定的难度,但由于温室内作物对于各种参数变化不是很敏感,因此,没有必要将各种参数进行精确控制,只要控制在一段适宜的范围内即可,又考虑到本智能终端的通用性,本次毕业设计采用实现起来比较简单的双位控制算法。双位控制又称为继电器接触控制,理想的双位控制规律的数学表达式为:

双位控制规律是测量值大于(或小于)给定值时,控制器的输出为最大(或最小)值,即系统只有两个输出值,在此系统中,P3.0就相当于一个双位控制器。其只有“1”和“0”这两种状态。执行机构也只有“开"和“关"两个极限工作位置。给定温度的设定值,当被控温室的温度低于设定值时,P3.0置1,PTC加热器工作,而当温室内的温度高于设定值时,P3.0置0,关闭PTC加热器,从而实现温度的控制。双位控制对象特性好、负荷变化较小、过程滞后小、允许被控制参数在一定的范围内波动,可以适用于温室系统的控制。
4.5.2温度控制子程序流程图
图4-10为温度控制子程序流程图

图4-10 温度控制子程序流程图

4.6报警模块程序设计
报警模块的工作很简单,就是判断实际温度超上限或低下限报警。
图4-11为报警控制子程序流程图

图4-11报警控制子程序流程图

完整的Word格式文档51黑下载地址(含源码):
基于单片机的温度控制系统设计毕业论文.docx (1.19 MB, 下载次数: 94)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:192893 发表于 2018-4-14 20:20 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:736861 发表于 2020-4-24 12:00 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表