毕业设计(论文)_基于单片机的水温自动控制系统.doc
基于单片机的水温自动控制系统【摘要】本论文采用单片机以及PID算法进行水温的实时采集与控制,进行软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制,该水温控制系统主要由AT89C51单片机控制系统、前向通道温度采样转换电路、后向通道温度控制电路、键盘显示电路等四局部组成,水温设定范围为3595,最小区分度为0.1。所以系统具备较高的测量精度和控制精度。关键词:AT89C51 单片机 PID算法Abstract:This paper uses monolithic integrated circuits and pid algorithm to the real-time collection and control and conduct software programming, to realize the pid algorithm used to control pwm wave, and control of the electric heating of the implementation of the temperature control, the water temperature control system is mainly composed at89c51 monolithic integrated circuits to control systems and to channel the sampling transforming circuit and to channel temperature control circuit , the keyboard display circuits of four sections, the scope for 35 95 , the little difference between degrees 0.1 。Key words:Monolithic integrated circuits AT89C51 monolithic integrated circuits PID algorithm ;目录1引言1水温控制系统概述1本设计任务和主要内容12系统设计原理3水温控制系统总体框图3总体方案论证4各局部电路方案论证53硬件电路设计与计算6温度采样和转换电路6温度控制电路7单片机控制局部8键盘及数字显示局部84实验测试10循环显示“HELLO88810键盘及数字显示结合11温度设定和传送电路15电压输出电路22结束语24谢辞25参考文献261引言水温控制在工业及日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,其中以PID控制法最为常见。单片机控制局部采用AT89C51单片机为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。然而,单纯的PID算法无法适应不同的温度环境,在某个特定场合运行性能非常良好的温度控制器,到了新环境往往无法很好胜任,甚至使得系统变得不稳定,需要重新改变 PID 调节参数值以取得佳性能。本文首先用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。然后在模型参考自适应算法 MRAC根底上,用单片机实现了自适应控制,弥补了传统 PID控制结构在特定场合下性能下降的缺乏,设计了一套实用的温度测试系统,使它在不同时间常数下均可以到达技术指标。此外还有效减少了输出继电器的开关次数,适用于环境参数经常变化的小型水温控制系统。温度控制是无论是在工业生产过程中,还是在日常生活中都起着非常重要的作用,过低的温度或过高的温度都会使水资源失去应有的作用,从而造成水资源的巨大浪费。特别是在当前全球水资源极度缺乏的情况下,我们更应该掌握好对水温的控制,把身边的水资源好好地利用起来。在现代冶金、石油、化工及电力生产过程中,温度是极为重要而又普遍的热工参数之一。在环境恶劣或温度较高等场合下,为了保证生产过程正常平安地进行,提高产品的质量和数量,以及减轻工人的劳动强度、节约能源,要求对加热炉炉温进行测、显示、控制,使之到达工艺标准,以单片机为核心设计的炉温控制系统,可以同时采集多个数据,并将数据通过通讯口送至上位机进行显示和控制。那么无论是哪种控制,我们都希望水温控制系统能够有很高的精确度起码是在满足我们要求的范围内,帮助我们实现我们想要的控制,解决身边的问题。在计算机没有创造之前,这些控制都是我们难以想象的。而当今,随着电子行业的迅猛开展,计算机技术和传感器技术的不断改良,而且计算机和传感器的价格也日益降低,可靠性逐步提高,用信息技术来实现水温控制并提高控制的精确度不仅是可以到达的而且是容易实现的。用高新技术来解决工业生产问题,排除生活用水问题实施对水温的控制已成为我们电子行业的任务,以此来加强工业化建设,提高人民的生活水平。 一升水由1kW的电炉加热,要求水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动调整,以保持设定的温度根本不变。 温度设定范围 35-95,最小区分度为0.1。 控制精度:温度控制的静态误差。 用十进制数码显示实际水温。 具有通信能力,可接收其他数据设备发来的命令,或将结果传送到其他数据设备。 采用适当的控制方法实现当设定温度或环境温度突变时,减少系统的调节时间和超调量。 温度控制的静态误差。 2系统设计原理 该水温控制系统主要由AT89C51单片机控制系统、前向通道温度采样转换电路、后向通道温度控制电路、键盘显示电路等四局部组成,其总体设计框图如图2-1所示。AT89C51单片机温度控制电路温度采样转换电路键盘显示电路水温控制模块 图2-1总体设计框图图2-2 主程序流程图(1)方案论证与比拟此题目是设计制作一个水温控制系统,对象为一升净水,加热器为1KW的电炉。要求能在35-95范围内设定控制水温,并具有较好的快速性和较小的超调,以及十进制数码管显示等功能。(2)总体方案设计及论证根据题目的要求,我们提出了以下的两种方案:方案1:此方案是采用传统的二位模拟控制方法,选用模拟电路,用电位器设定给定值,采用上下限比拟电路将反响的温度值与给定的温度值比拟后,决定加热或者不加热。由于采用模拟控制方式,系统受环境的影响大,不能实现复杂的控制算法使控制精度做得教高,而且不能用数码显示和键盘设定。方案2:采用单片机AT89C51为核心。采用了温度传感器AD590采集温度变化信号,A/D采样芯片ADC0804将其转换成数字信号并通过单片机处理后去控制温度,使其到达稳定。使用单片机具有编程灵活,控制简单的优点,使系统能简单的实现温度的控制及显示,并且通过软件编程能实现各种控制算法使系统还具有控制精度高的特点。比拟上述两种方案,方案2明显的改善了方案1的缺乏及缺点,并具有控制简单、控制温度精度高的特点,因此本设计电路采用方案2。本电路以单片机为根底核心,系统由前向通道模块、后向控制模块、系统主模块及键盘显示摸块等四大模块组成。现将各局部主要元件及电路做以下论证:1温度采样局部方案1:采用热敏电阻,可满足35-95的测量范围,但热敏电阻精度、重复性和可靠性都比拟差,对于检测精度小于1的温度信号是不适用的。方案2:采用温度传感器AD590。:AD590具有体积小、质量轻、线形度好、性能稳定等优点。其测量范围在-50- +150,满刻度范围误差为±,当电源电压在510V之间,稳定度为1时,误差只有±,其各方面特性都满足次系统的设计要求。此外AD590是温度-电流传感器,对于提高系统抗干扰能力有很大的帮助。经上述比拟,方案2明显优于方案1,应选用方案2。2键盘显示局部控制与显示电路是反映电路性能、外观的最直观局部,所以此局部电路设计的好坏直接影响到电路的好坏。方案1:采用可编程控制器8279与数码管及地址译码器74LS138组成,可编程/显示器件8279实现对按键的扫描、消除抖动、提供LED的显示信号,并对LED显示控制。用8279和键盘组成的人机控制平台,能够方便的进行控制单片机的输出。方案2:采用单片机AT2051与地址译码器74LS138组成控制和扫描系统,并用2051的串口对主电路的单片机进行通信,这种方案既能很好的控制键盘及显示,又为主单片机大大的减少了程序的复杂性,而且具有体积小,价格廉价的特点。比照两种方案可知,方案1虽然也能很好的实现电路的要求,但考虑到电路设计的本钱和电路整体的性能,我们采用方案2。3控制电路局部方案1:采用8031芯片,其内部没有程序存储器,需要进行外部扩展,这给电路增加了复杂度。方案2:本方案的CPU模块采用2051芯片,其内部有2KB单元的程序存储器,不需外部扩展程序存储器。但由于系统用到较多的I/O口,因此此芯片资源不够用。方案3:采用AT89C51单片机,其内部有8KB单元的程序存储器,不需外部扩展程序存储器,而且它的I/O口也足够本次设计的要求。比拟这3种方案,综合考虑单片机的各局部资源,因此此次设计选用方案3。3硬件电路设计与计算本电路总体设计包括四局部:主机控制局部89C51、前向通道温度采样和转换电路、后向通道温度控制电路、键盘显示局部。系统的信号采样和转换电路主要由温度传感器AD590、基准电压7812、运算放大器OP-07及A/D转换电路ADC0804四局部组成。设计电路图如图3-1所示: 图3-1 温度采样和转换电路原理设:P为当前温度下的功率,为电热器功率500W,1 AD590性能描述测量范围在-50-+150,满刻度范围误差为±,当电源电压在510V之间,稳定度为1时,误差只有± 。AD590为电流型传感器温度每变化1其电流变化1uA在35和95 和368.2uA。2基准电压7812提供12V标准电压,它与运算放大器OP-07和电阻组成信号转换与放大电路,将35-95的温度转换为05V的电压信号。3ADC0804性能描述ADC0804为8位逐次逼近型A/D转换器,其输入电压范围在0,对应误差为。满足系统的要求。4电路原理及参数计算温度采样电路的根本原理是采用电流型温度传感器AD590将温度的变化量转换成电流量,再通过OP-07将电流量转换成电压量,通过A/D转换器ADC0804将其转换成数值量交由单片机处理。三端稳压7812作为基准电压,由运放虚短虚断可知运放OP-07的反向输入端2脚的电压为零伏。当输出电压为零伏时(即U0=Uv),令7812的输出电压为U=12V,OP-07的2脚处为A点。由于系统控制的水温范围为35-95,所以当输出电压为零伏时AD590的输出电流为308.2uA,因此为了使Ui的电位为零,就必须使电流等于308.2uA,三端稳压7812的输出电压为12v所以为38.94k。取电阻R1=30k,R2=20k的电位器。又由于ADC0804的输入电压范围为05v,为了提高精度所以令水温为95时ADC0804的输入电压为5v即Uo=5v。当水温为95。由方程式得为R1=81k,R2=5k的电位器。此局部电路主要由光电耦合器MOC3041和双向可控硅BTA12组成。采用脉宽调制输出控制电炉与电源的接通和断开比例,以通断控制调压法控制电炉的输入功率。MOC3041光电耦合器的耐压值为400v,它的输出级由过零触发的双向可控硅构成。它控制着主电路双向可控硅的导通和关闭。100电容组成双向可硅保护电路。此局部是电路的核心局部,系统的控制采用了单片机AT89C51。单片机AT89C51内部有8KB单元的程序存储器及256字节的数据存储器。因此系统不必扩展外部程序存储器和数据存储器这样大大的减少了系统硬件局部。在设计键盘/显示电路时,我们使用单片机2051作为电路控制的核心,单片机2051具有一个全双工的串行口采用串口,利用此串行口能够方便的实现系统的控制和显示功能。键盘电路如图3-2所示 图3-2键盘电路图图3-274L138,译码器的输出端直接接八个数码管的控制端和键盘,键盘扫描和显示器扫描同用端口这样能大大的减少单片机的I/O,减少硬件的花费。键盘的接法的差异直接影响到硬件和软件的设计,考虑到单片机2051的端口资源有限,所以我们在设计中将传统的4*4的键盘接成8*2的形式如图3-2,键盘的扫描除了和显示共用的8个端外,另外的两个端直接和2051的P3.2和P3.7相连。4实验测试“HELLO888”编一小程序,实现数码管循环显示“HELLO888。源程序如下:RG 0000HHL:MOV P1,#89HMOV P3,#00HACALL DELAYMOV P1,#86HMOV P3,#08HACALL DELAYMOV P1,#0C7HMOV P3,#10HACALL DELAYMOV P1,#0C7HMOV P3,#18HACALL DELAYMOV P1,#0C0HMOV P3,#20HACALL DELAYMOV P1,#80HMOV P3,#28HACALL DELAYMOV P1,#80HMOV P3,#30HACALL DELAYMOV P1,#80HMOV P3,#38HACALL DELAYLJMP HLDELAY: MOV R0,#0DFHD1: MOV R1,#0FFHDJNZ R1,$DJNZ R0,D1RET 编一小程序,实现键盘及数字显示结合按键盘1数码管显示1,按键盘2数码管显示3,按键盘3数码管显示3,按键盘4数码管显示4,按键盘5数码管显示5,按键盘6数码管显示6,按键盘7数码管显示7,按键盘8数码管显示8,按键盘9数码管显示9,按键盘10数码管显示A,按键盘11数码管显示b,按键盘12数码管显示C,按键盘13数码管显示d,按键盘14数码管显示E,按键盘15数码管显示F。源程序如下所示:ORG 0000HLL:ACALL HHACALL L0ACALL L2ACALL L3ACALL L4ACALL L5ACALL L7SJMP LLH0:JB P3.2,Y0SJMP H0Y0:MOV P1,#88HACALL HHSJMP LLE0:JB P3.7,F0SJMP E0ACALL HHSJMP LLJNB P3.7,E1RETH1:JB P3.2,Y1SJMP H1Y1:MOV P1,#83HACALL HHLJMP LLE1:JB P3.7,F1SJMP E1ACALL HHSJMP LLJNB P3.2,H2JNB P3.7,E2RETH2:JB P3.2,Y2SJMP H2Y2:MOV P1,#0C6HACALL HHLJMP LLE2:JB P3.7,F2SJMP E2F2:MOV P1,#0B0HACALL HHLJMP LLJNB P3.2,H3JNB P3.7,E3RETH3:JB P3.2,Y3SJMP H3ACALL HHLJMP LLE3:JB P3.7,F3SJMP E3F3:MOV P1,#99HACALL HHLJMP LLJNB P3.7,E4RETH4:JB P3.2,Y4SJMP H4Y4:MOV P1,#86HACALL HHLJMP LLE4:JB P3.7,F4SJMP E4F4:MOV P1,#92HACALL HHLJMP LLJNB P3.2,H5JNB P3.7,E5RETH5:JB P3.2,Y5SJMP H5ACALL HHLJMP LLE5:JB P3.7,F5SJMP E5ACALL HHLJMP LLJNB P3.2,H6JNB P3.7,E6RETH6:JB P3.2,Y6SJMP H6Y6:MOV P1,#89HACALL HHLJMP LLSJMP E6F6:MOV P1,#0F8HACALL HHLJMP LLJNB P3.2,H7JNB P3.7,E7RETH7:JB P3.2,Y7SJMP H7Y7:MOV P1,#0C7HACALL HHLJMP LLE7:JB P3.7,F7SJMP E7F7:MOV P1,#80HACALL HHLJMP LLHH:MOV P3,#0FFHACALL DELAYMOV P3,#0F7HACALL DELAYMOV P3,#0EFHACALL DELAYMOV P3,#0E7HACALL DELAYMOV P3,#0DFHACALL DELAYMOV P3,#0D7HACALL DELAYMOV P3,#0CFHACALL DELAYMOV P3,#0C7HACALL DELAYRETDELAY:MOV R0,#01HDAl: MOV R1,#9FHDA2: NOPNOPNOPNOPDJNZ R1,DA1DJNZ R0,DA2RETEND 编一小程序,实现温度设定和传送电路程序1-方式2两位设定就不可的GUAN1 EQU 30HGUAN2 EQU 31HGUAN3 EQU 32H基于单片机水温控制系统的设计程序 :GUAN4 EQU 33HGUAN5 EQU 34HGUAN6 EQU 35HGUAN7 EQU 36HGUAN8 EQU 37HORG 00HLJMP starORG 23HLJMP CKT;-初始设定STAR: MOV SP,#60H MOV IE,#10010000B MOV SCON,#10010000B ANL PCON,#0111111B MOV TMOD, #20H MOV TH1, #0F2H MOV TL1, #0F2H SETB TR1 MOV GUAN2,#00H MOV GUAN3,#00H MOV GUAN6,#00H MOV GUAN7,#00H CLR FLAGB CLR FLAGA MOV DPTR,#TABLE;-主要执行总程序ZONGSAO:LCALL SHOWACALL AASJMP ZONGSAO;- -扫描按键是否按下子程序AA: S1:;- -0,5键 JNB FLAGB ,S2 CLR FLAG2 CLR FLAG1 CLR FLAG0 JB P3.2 ,NEXT1 ACALL DELAY JB P3.2 ,NEXT1 JNB P3.2 ,$ JB FLAGA ,WW1 MOV GUAN7,#00H SETB FLAGA LJMP NEXT1 WW1: MOV GUAN6 ,#00H CLR FLAGB NEXT1: JB P3.7 ,ONE1 ACALL DELAY JB P3.7 ,ONE1 JNB P3.7 ,$ JB FLAGA, MM1 MOV GUAN7,#05H SETB FLAGA LJMP ONE1 MM1: MOV GUAN6, #05H CLR FLAGB ONE1: LJMP S2S2:;- -1,6键 JNB FLAGB, S3 CLR FLAG2 CLR FLAG1 SETB FLAG0 JB P3.2 ,NEXT2 LCALL DELAY JB P3.2 ,NEXT2 JNB P3.2 ,$ JB FLAGA ,WW2 SETB FLAGA LJMP NEXT2 WW2: MOV GUAN6 ,#01H CLR FLAGB NEXT2: LCALL DELAY JB P3.7 ,ONE2 JNB P3.7 ,$ JB FLAGA ,MM2 MOV GUAN7,#06H SETB FLAGA LJMP ONE2 MM2: MOV GUAN6 ,#06H CLR FLAGB ONE2: LJMP S3S3:;- -2,7键 JNB FLAGB ,S4 CLR FLAG2 SETB FLAG1 CLR FLAG0 JB P3.2 ,NEXT3 LCALL DELAY JB P3.2 ,NEXT3 JNB P3.2 ,$ JB FLAGA ,WW3 MOV GUAN7 ,#02H SETB FLAGA LJMP NEXT3 WW3: MOV GUAN6 ,#02H CLR FLAGB NEXT3: JB P3.7 ,ONE3 LCALL DELAY JB P3.7 ,ONE3 JNB P3.7 ,$ JB FLAGA ,MM3 MOV GUAN7,#07H SETB FLAGB LJMP ONE3 MM3: MOV GUAN6 ,#07H CLR FLAGB ONE3: LJMP S4S4: ;- 3,8键 JNB FLAGB ,S5 CLR FLAG2 SETB FLAG1 SETB FLAG0 JB P3.2 ,NEXT4 LCALL DELAY JNB P3.2 ,$ JB FLAGA, WW4 MOV GUAN7 ,#03H SETB FLAGA LJMP NEXT4 WW4: MOV GUAN6,#03H CLR FLAGB NEXT4: JB P3.7 ,ONE4 LCALL DELAY JB P3.7 ,ONE4 JNB P3.7 ,$ JB FLAGA ,MM4 MOV GUAN7,#08H SETB FLAGA LJMP ONE4 MM4: LR FLAGB ONE4: LJMP S5S5:;- -4,9键 JNB FLAGB ,S6 SETB FLAG2 CLR FLAG1 CLR FLAG0 LCALL DELAY JB P3.2, NEXT5 JNB P3.2 ,$ JB FLAGA ,WW5 SETB FLAGA LJMP NEXT5 WW5: MOV GUAN6 ,#04H CLR FLAGB NEXT5: JB P3.7, ONE5 LCALL DELAY JB P3.7 ,ONE5 JNB P3.7 ,$ JB FLAGA ,MM5 SETB FLAGA SETB FLAGB LJMP ONE5 MM5: MOV GUAN6 ,#09H ONE5: LJMP S6S6:;- -设定键,去除(零)键 SETB FLAG2 CLR FLAG1 SETB FLAG0 JB P3.2 ,NEXT6 LCALL DELAY JB P3.2,NEXT6 JNB P3.2 ,$ NEXT6: JB P3.7 ,ONE6 LCALL DELAY JB P3.7 ,ONE6 JNB P3.7 ,$ MOV GUAN6,#00H CLR FLAGA SETB FLAGB ONE6: LJMP S7 SETB FLAG2 SETB FLAG1 CLR FLAG0 JB P3.2 ,NEXT7 LCALL DELAY JB P3.2,NEXT7 JNB P3.2 ,$ CLR FLAGB MOV B,#0AH MOV A,GUAN6 MUL AB ADD A,GUAN7 MOV SBUF,A JNB TI,$ CLR TI SETB ES RET;- -显示扫描子程序SHOW: ;-guan8 SETB FLAG0 SETB FLAG1 SETB FLAG2 MOV P1,#0CEH ACALL DELAY2 ;-guan7 SETB FLAG1 SETB FLAG2 MOV A ,GUAN7 MOVC A,A+DPTR MOV P1,A ACALL DELAY2 ;-guan6 CLR FLAG1 SETB FLAG2 MOV A ,GUAN6 MOVC A,A+DPTR MOV P1,A ACALL DELAY2 ;-guan5 CLR FLAG0 CLR FLAG1 SETB FLAG2 MOV P1,#0C6H ACALL DELAY2 ;-guan4 SETB FLAG0 SETB FLAG1 CLR FLAG2 MOV P1,#0CEH ACALL DELAY2 ;-guan3 CLR FLAG0 SETB FLAG1 CLR FLAG2 MOV A ,GUAN3 MOV P1,A ACALL DELAY2 ;-guan2 SETB FLAG0 CLR FLAG1 CLR FLAG2 MOV A ,GUAN2 MOVC A,A+DPTR MOV P1,A ACALL DELAY2 CLR FLAG1 CLR FLAG2 MOV P1,#0C6H ACALL DELAY2RET;- -中断子程序CKT: PUSH ACC PUSH PSW CLR RI MOV A,SBUF ; JNB RI,$ MOV B,#10 DIV AB MOV GUAN3,B POP PSW POP ACC RETIDELAY: ;- -消抖延时程序6MS DL2:MOV R1,#7DH DL1:NOP NOP DJNZ R1,DL1 DJNZ R0,DL2 RET delay2:;- -扫描延时程序 MOV r0,#01h dl4:MOV r1,#0a0h dl3:NOP NOP DJNZ r1,dl3 DJNZ r0,dl4 RET;- -数码管显示表TABLE: DB 92H,82H,0F8H,80H,90H 编一小程序,实现PWM 电压自动可调宽度脉冲波输出电路。 ORG 0000H AJMP MAIN ORG 000BH AJMP CTC_INT ORG 0030HMAIN: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 SETB EA SETB ET0WAIT: SJMP WAITCTC_INT: PUSH ACC PUSH PSW CLR TR0 SETB POUT CLR C SUBB A,0FFH MOV TL0,A MOV A,#0FFH SUBB A,#0FH MOV TH0,A CLR OUTBIT SJMP CTC_OUTOUT0: CLR POUT CLR C MOV A,#0FFH SUBB A,#0FFH MOV TL0,A MOV A,#0FFH SUBB A,#1FH MOV TH0,A MOV A,TL0 ADD A,#0FFH MOV TL0,A MOV A,TH0 ADDC A,#0FH MOV TH0,A SETB OUTBITCTC_OUT: SETB TR0 POP PSW POP ACC RETI结束语本次?基于单片机的水温控制系统系统?是以AT89C51为核心,采用软件编程,实现用PID算法来控制PWM波的产生,进而控制电炉的加热来实现温度控制。在系统的软硬件调试过程中,不断地有问题出现,如OP-07、ADC0804会发烫,串行通信,但是在老师和同学的指导和帮助下,通过电路检查、原理分析、程序修改等工作,这些问题都一一得到了解决,所以在这次调试过程中,我们学到了很多知识,同时也大大地提高了我们的实际动手能力,这对我们以后的系统设计会有很大的帮助。同时,该系统还存在着一些问题,如温度显示精度不高,没有采用小数局部;PID算法的参数不够精确,这影响水温到达稳定的时间。谢辞感谢孙老师的亲切关心和悉心指导。从设计的选题、开题到方案设计及最后的论文撰写、修改,老师在百忙之中仍抽出珍贵的时间