《2022年单片机水温自动控制系统设计 .pdf》由会员分享,可在线阅读,更多相关《2022年单片机水温自动控制系统设计 .pdf(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科生毕业论文(设计)题目单片机水温自动控制系统设计姓名王国亮学号2008145044 院系电气信息与自动化学院专业自动化指导教师闫绍敏职称讲师2012 年 5 月 15 日曲阜师范大学教务处制名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 24 页 -1目录摘要.2 关键词.2 Abstract.2 Keyword.2 引言.2 第 1 章 系统设计方案与要求.3 1.1 系统要求.3 1.2 系统组成.3 1.3 单片机选择.3 1.4 温度控制.3 1.5 系统方案选择.4 第 2 章 PID 控制算法 .5 2.1 PID 控制的发展 .5 2.2 PID 控制理论 .5
2、 2.3 PID 控制算法 .6 第 3 章 系统硬件设计.8 3.1 系统模块关系.8 3.2 主要单元电路的设计.9 3.2.1温度采集部分设计.9 3.2.2加热控制部分.10 3.2.3 报警电路部分.12 3.2.4 显示部分设计.12 3.2.5 按键部分设计.13 3.3 系统总电路图设计.14 第 4 章 软件设计部分.14 4.1 主程序方案设计.14 4.2 DS18B20温度处理方案.15 4.3 按键处理方案.16 4.4 报警处理方案.17 致谢.18 附录程序.18 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 24 页 -2单片机水温自动控制系统设
3、计自动化专业学生王国亮指导教师闫绍敏摘要:水温控制在工业及日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,本设计基于单片机控制的水温自动控制系统,介绍了系统在硬件和软件方面的设计思想,以 AT89C52 单片机为核心,采用了温度传感器DS18B20,以 PID 算法控制以及PID参数整定相结合的控制方法来实现的水温的自动控制系统,通过形成微型监控系统,使水温变化情况可以进行动态的显示,并能在一定的范围内由人工设定。关键词:AT89C52 DS18B20 温度传感器PID 算法Single-chip microcomputer temperature automatic co
4、ntrol system design Student majoring in automationGuoliang WangTutor Shaomin YanAbstract:The water temperature control applies widely used in the industry and the daily life,there are lots of classifications,so the control methods are different,this design the water temperature autocontrol system wh
5、ich controls based on the monolithic integrated circuit,introduced the system in the hardware and the software aspects design concept,take the AT89C52 monolithic integrated circuit as the core,has used temperature sensor DS18B20,the water temperature autocontrol system which by the PID algorithm con
6、trol as well as the PID parameter installation,unifies the control method which realizes.By making the constitution miniature supervisory system,enables the water temperature change situation to be possible to carry on the dynamic demonstration,and can by establish artificially in certain scope.Keyw
7、ord:AT89C52;DS18B20 temperature sensor;PID algorithm 引言:本系统的设计可以用于水温控制系统和电饭煲等各种电器电路中。它以单片机 AT89C52 为核心,通过数码管显示温度,使用温度转换芯片DS18B20实时采集温度并通过数码管显示,并提供各种运行指示灯用来指示系统现在所处状态,如:温度设置、加热、停止加热等,整个系统通过四个按键来设置加热温度和控制运行模式。传统的温度采集电路相当复杂,需要经过温度采集、信号放大、滤波、AD转换等一系列工作才能得到温度的数字量,并且这种方式不仅电路复杂,元器件个数多,而且线性度和准确度都不理想,抗干扰能力弱。
8、现在常用的温度传感器名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 24 页 -3芯片不但功率消耗低、准确率高,而且比传统的温度传感器有更好的线性表现,最重要的一点是使用起来方便。自动控制系统总的发展趋势是高性能、数字化、集成化、智能化和网络化。智能温度控制系统的设计是为了满足市场对成本低、性能稳定、可远程监测、控制现场温度的需求而做的课题,具有较为广阔的市场前景。第 1 章系统设计方案与要求1.1 系统要求(1)可按键设定控制温度值,并用数码管显示,分辨率为0.1;(2)可以测量并显示水的实际温度。温度测量误差在 0.5内;(3)水温控制系统应具有全量程(1070)内的升温、降
9、温。(4)在全量程内任意设定一个温度值(例如起始温度+15内),控制系统可以实现该给定温度的恒值自动控制。(5)温度控制的静态误差 0.2(在最小稳态时间内)。1.2 系统组成随着计算机与超大规模集成电路的迅速发展,以现代控制理论和计算机为基础,采用数字控制、显示、配额后执行器与控制阀构成的计算机控制系统,在过程控制过程中得到越来越广泛的应用。由于本例是一个典型的检测、控制型应用系统,它要求系统完成从水温检测、信号处理、输入、运算到输出控制电炉加热功率以实现水温控制的全过程。因此,应以单片机为核心组成一个专用计算机控制系统,以满足检测、控制应用类型的功能要求。另外,单片机的使用也为实现水温的自
10、动化控制以及提供完善的人机交互界面及多机通讯接口提供了可能,而这些功能在常规数字逻辑道路中往往是难以实现或无法实现的。所以,本例采用以单片机为核心的直接数字控制系统(DDC)。1.3 单片机选择AT89C52 单片机是最常用的单片机,是一种低损耗、高性能、CMOS 八位微处理器。AT89C52 与 MCS-51 系列的单片机在指令系统和引脚上完全兼容,而且能使系统具有许多MCS-51 系列产品没有的功能,功能强、灵活性高而且价格低廉。AT89C52 可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低了系统成本。只要程序长度小于4K,四个 I/O 口全部提供给用户。系统运行中需
11、要存放的中间变量较少,不必再扩充外部RAM。1.4 温度控制方案一:用热敏电阻:通过电阻的变化来获得电压的变化,起价格虽然便宜但是精度不是很高。对于一个精度要求高的系统不宜采用。方案二:用DS18B20:通过DS18B20温度传感器采集温度,价格较高精度高。(一)DS18B20 芯片特点DS18B20 是 DALLAS半导体公司生产的,是一种单总线温度传感器,属于新一代适配微处理器的智能温度传感器,有两种封装形式分别为3 脚 PR-35 封装和 16 脚 SSOP封装。本文采用的是3 脚 PR-35 封装,其具有以下特点:(1)采用了单总线技术,传感器直接以二进制输出被测温度,可通过串行口线,
12、也可与单片机通过I/O 口连接;(2)测量温度范围为:-55+125,测量精度高达+0.5;(3)内含寄生电源,在两线方式下可通过数据线提供寄生电源,而不需要再名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 24 页 -4单独供电(4)转换时间在分辨率为12 位(即 0.0625)时最大为 750ms;(5)用户可分别对每个器件设定温度上下限;(6)DS18B20在使用时不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;(7)电源极性接反时,芯片不会因发热而烧毁,但不能正常工作;(8)每个 DSl8B20 器件对应一个唯一的64 位长的序号,该序号值存放
13、ROM中,可通过序号匹配实现多点测温。如图 1 所示,DQ 是数据线,用于和CPU 连接传送串行数据,不需要外部件,不需要备份电源、可用数据线供电;GND 是地线;Voo 是 3055V 电源。由于 DSl8820 具有寄生电源的特性,所以在实际应用中,Vno 常接地。图 1 DS18B20外形及引脚1.5 系统方案选择方案 1:此方案是采用传统的二位模拟控制方法,选用模拟电路,用电位器设定给定值,采用上下限比较电路将反馈的温度值与给定的温度值比较后,决定加热或者不加热。由于采用模拟控制方式,系统受环境的影响大,不能实现复杂的控制算法使控制精度做得较高,而且不能用液晶显示和键盘设定,如图2。图
14、 2 模拟控制框图方案 2:采用单片机 AT89C52为核心。使用温度传感器DS18B20采集温度变化信号,通过单片机处理后去控制温度,使其达到稳定。使用单片机具有编程灵活,控制简单的优点,使系统能简单的实现温度的控制及显示,并且通过软件编程能实现各种控制算法使系统还具有控制精度高的特点,如图3,因此选择方案 2。数据采集信号放大温度预置比较器信号放大控制开关名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 24 页 -5图 3 单片机控制框图第 2 章 PID 控制算法2.1 PID 控制的发展PID 控制是最早发展起来的控制策略之一,现今使用的 PID 控制器产生并发展于 19
15、15-1940 年期间。尽管自1940 年以来,许多先进的控制方法不断推出,但由于 PID 控制方法具有结构简单、鲁棒性好、可靠性高、参数易于整定,P、I、D 控制规律各自成独立环节,可根据工业过程进行组合,而且其应用时期较长,控制工程师们已经积累了大量的PID 控制器参数的调节经验。因此,PID 控制器在工业控制中仍然得到广泛应用。据统计,有 90%以上的工业控制器采用 PID 控制器。PID 控制器的发展经历了液动式、气动式、电动式几个阶段,目前正由模拟控制器向着数字化、智能化控制器的方向发展。2.2 PID 控制理论PID 控制器是一种线性控制器,它根据给定值厂 r(t)与实际输出值 y
16、(t)构成控制偏差 e(t):()()()e tr ty t(2.1)将偏差()e t 的比例(Proportional)、积分(Integral)和微分(Derivative)通过线性组合构成控制量,对被控对象进行控制,因此称为PID 控制。PID 控制系统原理如图 4 所示。其控制规律:电源单片机 AT89C52数码管显示继电器温度传感器DS18B20 报警按键指示灯名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 24 页 -6011()()()()tPDde tu tKe te t dtTTdt(2.2)或者写成传递函数的形式为:11()(1)PDG sKT sT s(2.
17、3)式中:PK:比例系数1T:积分时间常数DT:微分时间常数图 4 PID 控制系统原理图PID 控制器各校正环节的作用如下:1)比例环节即时成比例地反映控制系统的偏差信号()e t,偏差一旦产生,控制器立即产生控制作用,以减少偏差;2)积分环节主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,1T 越大,积分作用越弱,反之则越强;3)微分环节能够反映偏差信号的变化趋势(变化速率),并且能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。2.3 PID 控制算法由于计算机控制是一种采样控制系统,它只能根据采样时刻的偏差值计算
18、控制量。因此,(2.2)式中的积分和微分项不能直接使用,需要进行离散化处理。现令T为采样周期,以一系列的采样时刻点kT代表连续时间t,以累加求和近似代替积分,以一阶后向差分近似代替微分,做如下的近似变换:tk T(2.4)000()()()kktjje tTe jTTe j(2.5)比例微分积分被控对象y(t)r(t)e(t)_+名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 24 页 -7()1()()(1)e k TekTd e te ke kd tTT(2.6)其中,T为采样周期,()e k为系统第 k 次采样时刻的偏差值,e(1k)为系统第(1k)次采样时刻的偏差值,k
19、为采样序号,k=0,1,2,。将上面的(2.5)式和(2.6)式代入(2.2)式,则可以得到离散的PID 表达式:01()()()()(1)kDPjTTu kKe keje ke kTT(2.7)如果采样周期T足够小,该算式可以很好的逼近模拟PID 算式,因而使被控过程与连续控制过程十分接近。通常把式(2.7)称为 PID 的位置式控制算法。若在(2.7)式中,令:11PK TKT(称为积分系数)PDDK TKT(称为微分系数)则10()()()()(1)kPDju kK e kKe jKe ke k(2.8)式(2.8)即为离散化的位置式PID 控制算法的编程表达式。可以看出,每次输出与过去
20、的所有状态都有关,要想计算()u k,不仅涉及()e k和(1)e k,且须将历次()e j相加,计算复杂,浪费内存。下面,推导计算较为简单的递推算式。为此,对(2.8)式作如下的变动:考虑到第(1)k次采样时有101(1)(1)()(1)(2)kDPjTTu kKe keje ke kTT(2.9)使(2.8)式两边对应减去(2.9)式,得1()(1)()(1)()()2(1)(2)DPTTu ku kKe ke ke ke ke ke kTT整理后得11012()(1)()(1)()()2(1)(2)2(1)(1)()(1)(1)(2)(1)()(1)(2)DPDDDPPPTTu ku k
21、Ke ke ke ke ke ke kTTTTTTu kKe kKe kKe kTTTTu ka e ka e ka e k名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 24 页 -8(2.10)其中,01(1)DPTTaKTT,12(1)DPTaKT,2DPTaKT,(2.10)式就是PID 位置式得递推形式。如果令()()(1)u ku ku k则012()()(1)(2)u ka e ka e ka e k式中的0a、1a、2a 同(2.10)式中的一样。在计算机控制中,0a、1a、2a 都可以事先求出,实际控制时只须获得()e k、(1)e k、(2)e k三个有限的偏
22、差值就可以求出控制增量。由于其控制输出对应执行机构的位置的增量,故(2.11)式通常被称为 PID 控制的增量式算式。增量式 PID 控制算法与位置式控制算法比较,有如下的一些优点:1)位置式算法每次输出与整个过去状态有关,算式中要用到过去偏差的累加值()e j,容易产生较大的累计误差。而增量式中只须计算增量,算式中不需要累加,控制增量的确定仅与最近几次偏差采样值有关,当存在计算误差或者精度不足时,对控制量的影响小,容易通过加权处理获得较好的控制效果;2)由于计算机只输出控制增量,所以误动作影响小,而且必要时可以用逻辑判断的方法去掉,对系统安全运行有利;3)容易实现手动一自动无扰动切换。图 5
23、 增量式 PID 控制算法程序流程图鉴于以上优点,本系统的控制算法即采用增量式的PID 控制算法。第 3 章 系统硬件设计入口输入并采样r(k),y(k)计算偏差e(k)=r(k)y(k)计算012()()(1)(2)u ka e ka e ka e k存()u k以备输出参数序号调整e(k-1)e(k-2)e(k)e(k-1)返回名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 24 页 -93.1 系统模块关系本系统通过循环查询执行,按键扫描也是用循环查询执行,由于本系统对实时性要求不是很高,所以没有用中断方式来处理。各模块关系图如图6 所示。3.2主要单元电路的设计3.2.1
24、温度采集部分设计本系统采用半导体温度传感器作为敏感元件。传感器我们采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机进行通讯,大大简化了电路的复杂度。DS18B20 应用广泛,性能可以满足题目的设计要求。DS18B20 的测温电路如图7 所示。测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC 校验码,具有极强的抗干扰纠错能力,该部分的温度采集电路流程如图6 所示:图 6 系统硬件模块关系图图 7 DS18B20 接线图(1)DSI8B20 的测温功能的实现:测温电路的实现是依靠单片机软件的编程上。当 DSI8B2
25、0 接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16 位带符号扩展的二进制补单片机初始话模块执行器模块按键检测(是否有电平转换)DS18B20及 PID 初始化DS18B20处理温度值,换算成BCD 码接收并经数码管显示温度名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 24 页 -10 码形式存储在高速暂存存储器的0,1 字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5LSB 形式表示。温度值格式如表 1 所示,其中“S”为标志位,对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1 时,先将补码变换为原码
26、,再计算十进制值。DSI8B20 完成温度转换后,就把测得的温度值与TH 做比较,若 TTH 或 T RoM 操作命令-存储器操作命令-处理数据初始化单总线上的所有处理均从初始化开始ROM 操作命令总线主机检测到DSl8B20 的存在便可以发出ROM 操作命令之一这些命令如表2 所示表 2 ROM 操作命令表指令代码Read ROM(读 ROM)33H Match ROM(匹配 ROM)55H Skip ROM(跳过 ROM CCH Search ROM(搜索 ROM)F0H Alarm search(告警搜索)ECH 存储器操作命令如表3 所示表 3 存储器操作命令表指令代码Write Sc
27、ratchpad(写暂存存储器)4EH Read Scratchpad(读暂存存储器)BEH Copy Scratchpad(复制暂存存储器)48H Convert Temperature(温度变换)44H Recall EPROM(重新调出)B8H Read Power supply(读电源)B4H(3)温度转换算法及分析由于 DS18B20 转换后的代码并不是实际的温度值,所以要进行计算转换。温度高字节(MS Byte)高 5 位是用来保存温度的正负(标志为 S的 bit11bit15),高字节(MS Byte)低 3 位和低字节来保存温度值(bit0 bit10)。其中低字节(LS By
28、te)的低 4 位来保存温度的小数位(bit0 bit 3)。由于本程序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。也就说,本系统的温度精确到了0.1 度。算法核心:首先程序判断温度是否是零下,如果是,则DS18B20保存的是温度的补码值,需要对其低8 位(LS Byte)取反加一变成原码。处理过后把DS18B20 的温度 Copy 到单片机的 RAM 中,里面已经是温度值的Hex 码了,然LS Byte 3222120212223242MS Byte S S S S S 625
29、242名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 24 页 -11 后转换 Hex 码到 BCD 码,分别把小数位,个位,十位的BCD 码存入 RAM 中。3.2.2加热控制部分由于本系统要控制电热丝进行加热,所以功率较大,因此要借助功率驱动电路。在器件选择上留足余量,增加安全性。加热部分采用继电器控制,电路简单可靠。其中,D2 4001二极管用于电感线圈的功率释放,电路如图8 所示。当实测温度低于设定值时,由单片机输出高电平信号。三极管9014导通,继电器开始工作,继电器可以起到隔离高低电压的作用,继电器使交流部分导通对水加温。图 8 继电器控制当设定温度低于实测温度时,
30、为了加快系统动态响应速度,我们在系统原基础上添加了设置了一个冷却电扇,加速对水温的降低,从而使系统整体性能得以提善。其中,D2 4001 二极管用于继电器电感线圈的功率释放,Q2 9014 三极管作为开关使用,当三极管导通,使继电器工作,继电器使交流部分导通,风扇开始工作降温,其原理图如图9 所示:继电器线圈DC 5V D2 4001Q1 9014 K1 220v L N R6 3.6K 加热电阻名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 24 页 -12 图 9 风扇控制3.2.3 报警电路部分由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动的如图
31、10,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以。图 10 报警器接线图3.2.4 显示部分设计显示部分使用四位七段数码管显示,由于采用共阳极显示,所以要加上拉电阻,采用 74LS373进行数据锁存,如图11。共阳极码表 TABLE:0 xc0,0 xf9,0 xa4,0 xb0 0 x99,0 x92,0 x82,0 xf8 0 x80,0 x90,0 x88,0 x83 0 xc6,0 xa1,0 x86,0 x8e74LS373 的输出端O0O7 可直接与总线相连。当三态允许控制端OE 为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,Q0Q7
32、 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻继电器线圈DC 5V D2 4001 Q1 9014 K1 220v L N R6 3.6K 冷却风扇名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 24 页 -13 辑操作不受影响。当锁存允许端LE 为高电平时,Q 随数据 D 而变。当 LE 为低电平时,D 被锁存在已建立的数据电平。当LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。引出端符号:D0D7 数据输入端OE 三态允许控制端(低电平有效)LE 锁存允许端Q0Q7 输出端图 11 数码管接线图3.2.5 按键部分设计此部分共使用四
33、个按键,其中一个是复位键另外三个是温度(T0)设置按键。可以任意设置T0 的值,数码管为温度显示部分显示T0、T1 的值。通过软件控制可以预先设定温度值T0,此温度值为我们理想的温度值,使用延时程序消除抖动。若采集的实际水温T1 小于此值则控制烧水器继续加温,且绿色指示灯亮红色指示灯灭。若T1 达到 T0 则控制烧水器停止加温并且红色指示灯亮绿色指示灯灭蜂鸣器报警。由此而构成一个简单的水温测量与控制系统,如图12。名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 24 页 -14 图 12 按键设计3.3 系统总体线路设计系统总的设计思想是提高静态控温精度,减小调节时间和超调量。
34、整个系统综合有如下几个特点:1.通过 DS18B20 集成温度传感器减少了A/D 转换电路,简化了电路结构。2.在采集水温方面采用在DS18B20表面涂硅胶的办法,实现了把DS18B20 放入水中采集温度。3.在电路设计中充分考虑了系统的可靠性和安全性。通过调试达到基本功能指标,动态性能也达到较好的要求。4.通过继电器实现运用小电流控制大电流。电路如图 13 所示:第 4 章 软件设计部分本系统采用的是循环查询方式,来显示和控制温度的。主要包括四段程序的设计:DS18B20读温度程序,数码管的驱动程序,按键处理程序,以及越限报警。4.1 主程序方案设计系统的主程序流程图如图14 所示,当有信号
35、输入时,主程序启动,根据内部设定的条件逐步运行,达到设计目的。名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 24 页 -15 图 13 总体线路设计图 14 主程序流程图4.2 DS18B20温度处理方案图 15 为 DS18B20 实现温度转换和温度数值读取流程图,用于系统的温度转换和温度数值的读取。DS18B2 的读时序:(1)对于 DS18B20的读时序分为读0 时序和读 1 时序两个过程。(2)对于 DS18B20 的读时隙是从主机把单总线拉低之后,在15 秒之内就得释放单总线,以让 DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要 6
36、0us才能完成。DS18B20 的写时序:(1)对于 DS18B20的写时序仍然分为写0 时序和写 1 时序两个过程。(2)对于 DS18B20 写 0 时序和写 1 时序的要求不同,当要写0 时序时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15us到 45us之间能够正确地采样IO总线上的“0”电平,当要写 1 时序时,单总线被拉低之后,在15us之内就得释放单元总线。主程序(main)PID 初始化DS18B20的初始化按键设置目标温度DS18B20 温度转换读取温度数码管显示信号传送及处理温度比较是否小控制继电器加热温度比较是否大控制风扇降温连 续 温 度 采样 PI
37、D 控制继电器间断控制加热,减少功率和Y N Y N 名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 24 页 -16 图 15 温度采集转换流程图4.3 按键处理方案此流程为按键处理模块,CPU通过检测数据线的状态(0或1)就能知道是否有按键闭合,按键管理程序的功能是检测是否有按键闭合,如果有按键闭合,消除抖动,根据电平转到相应的处理程序,按键流程图如图16所示。开始开始初始化DS18B20存在?ROM 操作命令存储操作命令读取温度值返回是否名师资料总结-精品资料欢迎下载-名师精心整理-第 17 页,共 24 页 -17 4.4 报警处理方案运行程序后,温度传感器 DS18B
38、20即可对环境进行温度采集,并送 LED 数码管显示。我们可以在程序里设定温度上限值,当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警。其程序流程如图 17 所示:图 17 报警子程序流程图Y N 进行温度比较超过上限?P1.3 取反,启动蜂鸣器不启动蜂鸣器,正常显示温度开始扫描代码段开始引脚电平是否为0 延时引脚电平是否为0 引脚电平是否为1 扫描代码段结束执行相应操作图 16 按键处理流程图Yes No No Yes No 名师资料总结-精品资料欢迎下载-名师精心整理-第 18 页,共 24 页 -18 致谢首先,感谢闫绍敏老师的指导建议,对我的论文
39、改进起到很大的帮助。通过本次应用系统设计,在很大程度上提高了我们的独立思考能力和单片机的专业知识,也深刻了解写一篇应用系统的步骤和格式,我所设计的该系统主要根据目前节省能源的发展趋势,采用了自动化的结构形式,实现对水温的自动检测和控制。系统以 AT89C52 单片机为核心部件,单片机系统完成对水温信号的采集、处理、显示等功能;并采用了 PID 算法,因而提高了控制的准确度。参考文献:1 胡寿松.自动控制原理.科学出版社,2001 2 顾德英.计算机控制技术.北京邮电大学出版社,2006 3 谭浩强.C 语言程序设计教程.高等教育出版社,2006 4 林立.单片机原理及应用-基于 proteus
40、 和 Keil C.电子工业出版社,2009 5 马建伟.PID 控制设计理论与方法.科学出版社,2008 6 徐科军传感器与检测技术电子工业出版社,2008 7 康华光.电子技术基础-模拟部分.高等教育出版社,2006 8 阎石.数字电子技术基础.高等教育出版社,2009 9 邱关源.电路.高等教育出版社,2005 10 周润景 基于 PROTEUS 的电路及单片机系统设计与仿真航空航天大学出版社,2006 附录程序#include#include#include sbit DQ=P14;/定义 DS18B20 的数据口sbit SET=P10;/定义报警值的控制开关sbit BEEP=P1
41、3;unsigned char TAP10=/共阳极,不带点 0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,;unsigned char TAP210=/共阳极,带点 0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10,;/定义一个存放转换后温度值的数组,温度值为字符型(ASCII 码),小数点后保留2 位unsigned char str10;unsigned char data con=0 x00;/延时子程序,延时(10*D+3)us void d
42、elay_10us(unsigned char D)unsigned char i;for(i=0;iD;i+)名师资料总结-精品资料欢迎下载-名师精心整理-第 19 页,共 24 页 -19 _nop_();/空操作,一个指令周期_nop_();/1ms 延时函数delay1ms(int t)int i,j;for(i=0;it;i+)for(j=0;j120;j+);/DS18B20 初始化void INIT(void)DQ=0;delay_10us(50);/等待 500 s DQ=1;/释放 18B20 数据线。delay_10us(9);/等待 90 s while(!DQ);/等待
43、 18B20 准备好/读 DS18B20 的程序unsigned char READ(void)unsigned char i,j;unsigned char D=0;for(i=0;i1;/先读数据低位DQ=0;_nop_();DQ=1;/释放 18B20 数据线for(j=1;j9;j+)_nop_();if(DQ)D+=0 x80;/如果数据线上是1,D 最高位为1,否则为 0 delay_10us(6);return D;/返回值为 D,即读出的一个字节数据。/写 DS18B20 的程序void WRITE(unsigned char D)unsigned char i;for(i=0
44、;i1;/右移一位,准备写下一位 /显示程序(str 数组内元素是 ASCII 码,所以要减去 48)void display(void)unsigned char i;unsigned char j=100;while(j-)for(i=0;i255;i+)P0=TAPstr0-48;P2=0 x01;P2=0 x00;for(i=0;i255;i+)P0=TAP2str1-48;P2=0 x02;P2=0 x00;for(i=0;i255;i+)P0=TAPstr3-48;P2=0 x04;P2=0 x00;for(i=0;i255;i+)P0=TAPstr4-48;P2=0 x08;P2
45、=0 x00;/蜂鸣器控制void Alarm(unsigned char t)unsigned char i,j;for(i=0;i200;i+)BEEP=BEEP;for(j=0;j=2)con=0;if(con)/报警值确定 if(P1_1=0)/delay1ms(10);/按键去抖/while(P1_1=0);warning+;/增加上限 else if(P1_2=0)/delay1ms(10);/按键去抖/while(P1_2=0);warning-;/减小上限 else warning+=0;str 0=warning/10+48;str 1=warning%10+48;str 3
46、=48;str 4=48;display();delay_10us(5);名师资料总结-精品资料欢迎下载-名师精心整理-第 22 页,共 24 页 -22 INIT();/初始化 DS18B20 WRITE(0 xCC);/跳过 ROM 配置WRITE(0 x44);/开始转换温度display();/默认至少等待 750 ms,用于温度转换INIT();/初始化 DS18B20 WRITE(0 xCC);/跳过 ROM 配置WRITE(0 xBE);/准备读取温度值TMP_L=READ();/读取温度值的低 8 位TMP_H=READ();/读取温度值的高 4 位TMP=TMP_H;TMP=
47、(TMP=warning)P1_5=0;P1_6=1;P1_7=1;Alarm(90);Alarm(120);/如果温度值大于等于报警值,报警else P1_5=1;P1_6=0;P1_7=0;/PID 控制部分#define FiltA 0.1;/PID 输出的滤波系数(0.0-1.0)#define FiltB 0.9/PID 输出的滤波系数(1-FilterA)#define Kp 1.75/PID 控制器的比例系数#define Ki 0.00125/PID 控制器的积分系数#define Kd 3.0/PID 控制器的微分系数#define Emax 0.1/误差积分上限float
48、Err4 2;float InteR4 2;float OnMs4 2;/*名师资料总结-精品资料欢迎下载-名师精心整理-第 23 页,共 24 页 -23 function:unsigned char pid(unsigned char i,unsigned char j,unsigned char k,unsigned char l)description:this function for pid control parameter:i:-channel j:-time k:-set temprature l:-actual temprature return:adjust_time-a
49、djust time*/void pid(unsigned char ch,float refval)Float DiscE,Tmpr;Errch1=refval-GetTmp(GetData7705(ch+l);/e(k)If(Errch 1=Emax)InteEch 1=InteEch 1=InteEch 0+Errch 1;else InteEch l=InteEch 0;DiscE=Err ch 1-Errch 0;Tmpr=Kp*Errch 1+Ki*InteEch 1+Kd*DiscE;OnMsch 1=GetOnMs(FiltA*OnMsch 0+FiltB*Tmpr);Errch 0=Err ch 1;InteEch 0=InteEch 1;OnMsch 0=OnMsch 1;/*function:float GetOnMs(float OnTime)description:output control time parameter:none return:ftmp*/float GetOnMs(float OnTime)float ftmp;if(OnTime=100)ftmp=100;else ftmp=OnTime;return(ftmp);名师资料总结-精品资料欢迎下载-名师精心整理-第 24 页,共 24 页 -