资源描述
基于单片机的恒温控制系统摘要本设计的温度测量及加热控制系统以AT89S52单片机为核心部件,外加温度采集电路、键盘及显示电路、加热控制电路和越限报警等电路。采用单总线型数字式的温度传感器DS18B20,及行列式键盘和动态显示的方式,以容易控制的固态继电器作加热控制的开关器件。本作品既可以对当前温度进行实时显示又可以对温度进行控制,以使达到用户需要的温度,并使其恒定在这一温度。人性化的行列式键盘设计使设置温度简单快速,两位整数一位小数的显示方式具有更高的显示精度。建立在模糊控制理论上的控制算法,使控制精度完全能满足一般社会生产的要求。通过对系统软件和硬件设计的合理规划,发挥单片机自身集成众多系统级功能单元的优势,在不减少功能的前提下有效降低了硬件成本,系统操控简便。实验证明该温控系统能达到0.2的静态误差,0.45的控制精度,以及只有0.83%的超调量,因而本设计具有很高的可靠性和稳定性。关键词:单片机 恒温控制模糊控制引言温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是非常有价值的。硬件系统的设计1、 电路总体原理框图温度测量及加热系统控制的总体结构如图1所示。系统主要包括现场温度采集、实时温度显示、加热控制参数设置、加热电路控制输出、与报警装置和系统核心AT89S52单片机作为微处理器。图1:系统总体原理框图 温度采集电路以数字量形式将现场温度传至单片机。单片机结合现场温度与用户设定的目标温度,按照已经编程固化的模糊控制算法计算出实时控制量。以此控制量控制固态继电器开通和关断,决定加热电路的工作状态,使水温逐步稳定于用户设定的目标值。在水温到达设定的目标温度后,由于自然冷却而使其温度下降时,单片机通过采样回的温度与设置的目标温度比较,作出相应的控制,开启加热器。当用户需要比实时温度低的温度时,此电路可以利用风扇降温。系统运行过程中的各种状态参量均可由数码管实时显示。 2、 温度采集电路的设计温度采集电路模块如图2示。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。其中DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端。图2:温度采集电路DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。3、键盘和显示的设计键盘采用行列式和外部中断相结合的方法,图3中各按键的功能定义如下表1。其中设置键与单片机的脚相连,、YES、NO用四行三列接单片机P0口,REST键为硬件复位键,与R、C构成复位电路。模块电路如下图3:表1:按键功能按键键名功能REST复位键使系统复位RET设置键使系统产生中断,进入设置状态数字键设置用户需要的温度YES确认键用户设定目标温度后进行确认NO清除键用户设定温度错误或误按了YES键后使用图3 键盘接口电路显示采用3位共阳LED动态显示方式,显示内容有温度值的十位、个位及小数点后一位。用P2口作为段控码输出,并用74HC244作驱动。P1.0P1.2作为位控码输出,用PNP型三极管做驱动。模块电路如下图4:图4 显示接口电路4、加热控制电路的设计用于在闭环控制系统中对被控对象实施控制,被控对象为电热杯,采用对加在电热杯两端的电压进行通断的方法进行控制,以实现对水加热功率的调整,从而达到对水温控制的目的。对电炉丝通断的控制采用SSR-40DA固态继电器。它的使用非常简单,只要在控制端TTL电平,即可实现对继电器的开关,使用时完全可以用 NPN型三极管接成电压跟随器的形式驱动。当单片机的P1.3为高点平时,三极管驱动固态继电器工作接通加热器工作,当单片机的P1.3为低电平时固态继电器关断,加热器不工作。控制电路图如下图5:图5 加热控制电路5、报警及指示灯电路的设计当用户设定的目标温度达到时需用声音的形式提醒用户,此时蜂鸣器为三声断续的滴答滴答的叫声。在本系统中我们为用户设计了越限报警,当温度低于用户设置的目标温度10度或高于10度时蜂鸣器为连续不断的滴答滴答叫声。当单片机P1.7输出高电平时,三极管导通,蜂鸣器工作发出报警声。P1.7为低电平时三极管关断,蜂鸣器不工作。D1为电热杯加热指示灯,P1.5低电平有效;D0为检测到DS18B20的指示,高电平有效;D10为降温指示灯,低电平有效。报警及指示灯电路如下图6示: 图6 报警及指示灯电路软件系统的设计系统的软件由三大模块组成:主程序模块、功能实现模块和运算控制模块。1、 主程序模块主程序主要完成加热控制系统各部件的初始化和实现各功能子程序的调用,以及实际测量中各个功能模块的协调在无外部中断申请时,单片机通过循环对外部温度进行实时显示。把设置键作为外部中断0,以便能对数字按键进行相应处理。主程序流程图如下图7:图7 主程序流程图2、 功能实现模块以用来执行对固态继电器及电热杯的控制。功能实现模块主要由中断处理子程序、温度比较处理子程序、键盘处理子程序、显示子程序、报警子程序等部分组成。键盘显示及中断程序流程图如下图8:图8 键盘、显示、中断 子程序流程图3、运算控制模块该模块由标度转换、模糊控制算法,及其中用到的乘法子程序。3.1标度转换式中为二进制的温度值,为DS18B20的数字信号线送回来的温度数据。单片机在处理标度转换时是通过把DS18B20的信号线送回的16位数据右移4位得到二进制的温度值。其小数部分通过查小数表的形式获取。程序流程图如下图9:图9 标度转换子程序流程图3.2模糊控制算法子程序该系统为一温度控制系统,由于无法确切确定电炉的物理模型,因而无法建立其数学模型和传递函数。加热器为一惯性系统,我们采用模糊控制的方法,通过多次温度测量模糊计算当用户设定目标温度时需提前关断加热器的温度,利用加热器自身的热惯性使温度上升到其设定温度。每隔5摄氏度我们进行一次温度测量,并当达到其温度时关断加热器记录下因加热器的热惯性而上升的温度值。从而可以建立热惯性的温度差值表,在程序中利用查表法,查出相应设定温度对应的关断温度。通过实验数据我们可以看出,当水温从0加热到50这段温度区域,其温度惯性曲线可近似成线性的直线,水温从50加热到100这段温度惯性曲线可近似成另一条线性的直线段。通过对设置的目标温度与温控系统监测温度进行差值处理就可近似的求出单片机的提前关断温度。程序流程图如图10:图10 模糊控制算法子程序流程图4源程序见附录2设计总结我们的温度控制系统是基于AT89S52单片机的设计方案,她能实时显示当前温度,并能根据用户的要求作出相应的控制。此系统为闭环系统,工作稳定稳定性高,控制精度高,利用模糊控制算法使超调量大大降低。软件采用模块化结构,提高了通用性。本设计的目的不仅仅是温度控制本身,主要提供了单片机外围电路及软件包括控制算法设计的思想,应该说,这种思想比控制系统本身更为重要。1、 设计所达到的性能指标1.1 温控系统的标度误差 我们将标准温度计和温控系统探头放人同一容器中,选定若干不同的温度点,记录下标准温度计显示的温度和温控系统显示的温度进行比较。测量数据如下表2所示:表2 标准温度计测量的温度和温控系统显示的温度标准温度计和温控系统显示的温度()标准温度计16.947.757.863.072.885.190.9温控系统16.548.058.362.973.085.590.5差值比较-0.40.30.50.10.20.4-0.4标度误差1.5%1.2温控系统的静态误差通过测量在不同的温度点同标准温度的温度差来确定温控系统的静态误差。其测量数据如下表3:表3 标准温度和温控系统显示的温度标准温度和温控系统显示的温度()标准温度26.037.046.060.070.083.0系统显示值25.736.446.159.670.083.3差值-0.3-0.6-0.1-0.400.3静态误差0.181.3温控系统的控制精度通过设定不同的温度值,使加热器加热,待温度稳定时记录各温度点的温度计数据和温控系统的显示值。其记录数据如下表4:温度计读数和温控系统显示的温度()设定温度值20.028.035.045.055.075.087.091.0系统显示值20.527.734.445.154.174.986.191.2差值0.5-0.3-0.60.1-0.9-0.1-0.90.2控制精度0.45超调量0.83%2、结果分析论述我们的系统完全满足设计要求,静态误差方面可以达到0.18的误差,在读数正确方面与标准温度计的读数误差为1.5,对一般的工业生产完全可以采用我们的设计。该系统具有较小的超调值,超调值大约为 0.83%左右。虽然超调为不利结果,但另一方面却减小了系统的调节时间。从其数据表可以看出该系统为稳定系统。3、设计方案评价3.1优点在硬件方面:本设计方案采用了单总线型数字式的温度传感器,提高了温度的采集精度,节约了单片机的口线资源。方案还使用仅一跟口线就可控制的美国生产的固态继电器SSR40DA作加热控制器件,使设计简单化,且可靠性强。在控制精度方面,本设计在不能确定执行机构的数学模型的情况下,大胆的假设小心的求证,利用模糊控制的算法来提高控制精度。 在软件方面:我们采用模块化编程,思路清晰,使程序简洁、可移植性强。3.2缺点本设计方案虽然采用了当前市场最先进的电子器件,使电路设计简单,但设计方案造价高。本系统虽然具有较小的超调量,但加大了调节时间。如果需要更高的控制精度,则我们的模糊控制将不适应,需修改程序。3.3方案的改进在不改变加热器容量的情况下,为减小调节时间,可以实行在加热快达到设定温度时开启风扇来减小热惯性对温度的影响的措施。在控制精度上可采用先进的数字PID控制算法,对加热时间进行控制,提高控制精度。可以改进控制系统使能同PC联机通信,以利用PC的图形处理功能打印显示温度曲线。AT89S52串行口为 TTL电平,PC 串行口为 RS232 电平,使用一片 MAX232 作为电平转换驱动。参考文献1 李广弟 单片机基础 北京:北京航空航天大学出版社,20012 王福瑞 单片微机测控系统设计大全 北京:北京航空航天大学出版社,19973 赵茂泰 智能仪器原理及应用(第2版) 北京:电子工业出版社,20044 赖寿涛 微型计算机控制技术 北京:机械工业出版社,2000 5 沙占友 模拟与数字万用表检测及应用技术 北京:电子工业出版社 1999附录附录1使用说明书按键功能说明数字键:按SET键后,按相应的数字键(09)可对温度进行设置,所设置的温度将实时显示在LED显示器上;SET键:按SET键可对温度的十位、个位以及小数部分进行设置;YES键:设置好温度后按YES键,系统将据你所设置的温度(须大于当前实际温度)对水进行加热;NO 键:若误按了SET键,或对输入有误,可按NO键进行取消;RST键:对系统进行复位。指示灯及报警器说明红 灯:加热状态标志;绿 灯:温度传感器正常工作标志;蓝 灯:保温状态标志;报警器:功能当水温达到预设值时报警提醒; 功能当水温达到或超越上、下限时报警提示。附录2设计总电路附录3程序清单TEMPER_L EQU 29H ;用于保存读出温度的低8位TEMPER_H EQU 28H ;用于保存读出温度的高8位FLAG EQU 38H ;是否检测到DS18B20标志位DAYU EQU 44H ;设温实温XIYU EQU 45H ;设温实温DEYU EQU 46H ;设温=实温GAOLE EQU 47H ;水温高于最高温度DILE EQU 48H ;水温低于最低温度A_bit EQU 79h ;数码管个位数存放内存位置B_bit EQU 7Ah ;数码管十位数存放内存位置C_BIT EQU 78H ;数码管小数存放内存位置 ORG 0000H AJMP START ORG 0003H AJMP PITO ORG 0030H START: CLR P1.7 CLR P1.3 CLR P1.5 SETB P1.6 MOV R4, #00H MOV SP, #60H ;确立堆栈区 MOV PSW, #00H ; MOV R0, #20H ;RAM区首地址 MOV R7, #60H ;RAM区单元个数 ML: MOV R0, #00H INC R0 DJNZ R7, ML CLR IT0 MAIN:LCALL GET_TEMPER ;调用读温度子程序进行温度显示,这里我们考;虑用网站提供的两位数码管来显示温度 ;显示范围00到99度,显示精度为1度 ;因为12位转化时每一位的精度为0.0625度, ;我们不要求显示小数所以可以抛弃29H的低4;位将28H中的低4位移入29H中的高4位,这;样获得一个新字节,这个字节就是实际测量获;得的温度 LCALL DISPLAY ;调用数码管显示子程序 JNB 00H, MAIN CLR 00H MOV A, 38H CJNE A, #00H, SS AJMP MAIN SS: LCALL GET_TEMPER LCALL DISPLAY;调用数码管显示子程序 LCALL BIJIAO LCALL XIAOYU LCALL JIXIAN JNB DEYU ,LOOP CLR P1.3 ;关加热器 SETB P1.6 ;关蓝灯 SETB P0.7 ;关风扇 CLR DEYU LCALL GET_TEMPER LCALL DISPLAY AJMP TT2 LOOP:JNB DAYU ,TT CLR DAYU SETB P1.3 SETB P1.6 SETB P0.7 CLR P1.7 LCALL GET_TEMPER LCALL DISPLAY AJMP TT2 TT:JNB XIYU, TT2 CLR XIYU CLR P0.7 CLR P1.6 CLR P1.3 CLR P1.7 LCALL GET_TEMPER LCALL DISPLAY TT2:MOV A, 29H CLR C CJNE A, 50H, JX MOV A , 30H CLR C CJNE A, 51H, JIA1 AJMP YS2 JIA1:JC JX MOV A, 51H MOV 52H, A ADD A, #2 MOV 52H, A CLR C MOV A, 30H CJNE A, 52H, JIA2 JIA2:JNC JX YS2:SETB P1.7 CLR P1.6 MOV R5, #20H YS:LCALL GET_TEMPER LCALL DISPLAY DJNZ R5, YS CLR P1.7 SETB P1.6 MOV R5, #20H YS1:LCALL GET_TEMPER LCALL DISPLAY DJNZ R5, YS1 YS3:SETB P1.7 CLR P1.6 MOV R5, #20H YS0:LCALL GET_TEMPER LCALL DISPLAY DJNZ R5, YS0 CLR P1.7 SETB P1.6 MOV R5, #20H YS01:LCALL GET_TEMPER LCALL DISPLAY DJNZ R5, YS01 YS4:SETB P1.7 CLR P1.6 MOV R5, #20H YS02:LCALL GET_TEMPER LCALL DISPLAY DJNZ R5, YS02 CLR P1.7 SETB P1.6 MOV R5, #20H YS03:LCALL GET_TEMPER LCALL DISPLAY DJNZ R5, YS03 JX: MOVA, 29H CJNEA, 31H,JX00 JX01:SETBP1.7CLR C AJMPLAST JX00:JC JX01 CLR P1.7 CJNEA, 32H,JX03 JX02:SETBP1.7 CLR C AJMPLAST JX03:JNC JX02 CLR P1.7 LAST:LCALL GET_TEMPER LCALL DISPLAY AJMP SS;*常数表格区* TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-8 DB 90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH ;9,A,B,C,D,E,F,灭,p. TAB1:DB40H,79H,24H,30H,19H,12H,02H,78H,00H,10H, ;0.-9. TAB2:DB 0, 0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, ;小数点;*1ms延时程序*;*中断服务程序* ; 完成按键识别,键值求取,按键实时显示等功能;*PITO: PUSH ACC PUSH PSW SETB RS0 CLR RS1SETB00H MAIN1: MOV R7 , #03H ;显示位数为2位 MOV R0, #7AH MOV 78H, #00H MOV 79H, #00H MOV 7AH, #00H KK: LCALL DIR LCALL KEY1 LOOP1:CJNE A, #11, LOOP2 AJMP LAST0 LOOP2:CJNEA,#12, LOOP3 LJMP LAST3 LOOP3: CJNE A, #10, L4 MOVA,#00H L4: MOV R0, A LCALLDIR DEC R0 DJNZR7,KK SETB 01H LAST0:JNB 01H, KK LOOP4:LCALL KEY1 CJNE A, #12, LOOP5 AJMP LAST3 LOOP5:CJNE A, #11, LOOP4 LAST1:LCALL DIR LCALL MUN LCALL JDLCALLBIJIAO LAST3:POP PSW POP ACC RETI ;*精度控制子程序* JD: PUSH ACC PUSH PSW CLR C MOV A, 38H MOV 50H, AMOV A, 39H MOV 51H, A CJNE A, 29H, L001 L001:JC LAST02 ;设温实温,则跳出 MOV A, 29H MOV 41H, A MOV A, 38H CJNE A, #25, L002 L003:CLR C ;0T25 SUBB A, 41H CJNE A, #3, L004 L005:MOV A, 30H ADD A, #5 ;0T25, 差值小于3度 DA A JNB ACC.4, L0051 ANL A, #0FH SETB C L0051:MOV 39H, A MOV A, 29H ADDC A, #1 MOV 38H, A AJMP LAST2LAST02: AJMP LAST2 L004:JC L005 MOV A, 39H SUBB A, #0 DA A MOV 39H, A JNC L0041 DEC 38H L0041:MOV A, 38H SUBB A, #2 ;0T25, 差值大于3度 MOV 38H, A AJMP LAST2 L002:JC L003 CJNE A, #50, L006 L007:CLR C ;25T实际温度? MOV A, 39H CJNE A, 30H, L1 SETB DEYU SJMP L2 L1: JC L2 SETB DAYU ;设温实温, SJMP L2 L2:RET ;*极限值求取子程序* ;完成上下极限值的求取,并置相应的标志位 ;*JIXIAN: PUSH ACC PUSHPSW CLR C MOV A, 50H SUBB A, #10 MOV 31H, A MOV A, 50H ADD A, #10 MOV 32H, A POP PSW POP ACC RET;* *DS18B20复位初始化子程序*INIT_1820: SETB P1.4 NOP CLR P1.4 ;主机发出延时537微秒的复位低脉冲 MOV R1, #3 TSR1:MOV R0, #107 DJNZ R0, $ DJNZ R1, TSR1 SETB P1.4 ;然后拉高数据线 NOP NOP NOP MOV R0, #25H TSR2:JNB P1.4, TSR3 ;等待DS18B20回应 DJNZ R0, TSR2 LJMP TSR4 ; 延时 TSR3: SETB FLAG ; 置标志位,表示DS1820存在 SETB P1.5 ;检查到DS18B20就点亮P1.5LED LJMP TSR5 TSR4:CLR FLAG ; 清标志位,表示DS1820不存在 CLR P1.5 LJMP TSR7 TSR5:MOV R0, #117 TSR6:DJNZ R0, TSR6 ; 时序要求延时一段时间 TSR7:SETB P1.4 RET; *读出转换后的温度值*GET_TEMPER:SETB P1.4 LCALL INIT_1820 ;先复位DS18B20 JB FLAG, TSS2 RET ;判断DS1820是否存在?若DS18B20不存在则返回 TSS2: SETB P1.5 ;DS18B20已经被检测到 MOV A, #0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A, #44H ;发出温度转换命令 LCALL WRITE_1820 LCALL DISPLAY ;调用显示子程序实现延时一段时间,等待AD转换结束,12位750微秒 LCALL INIT_1820 ;准备读温度前先复位 MOV A, #0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A, #0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 ; 将读出的温度数据保存到35H/36H SETB P1.5 RET;*写DS18B20的子程*WRITE_1820:MOV R2, #8 ;一共8位数据 CLR C WR1:CLR P1.4 MOV R3, #6 DJNZ R3, $ RRC A MOV P1.4, C MOV R3, #23 DJNZ R3, $ SETB P1.4 NOP DJNZ R2, WR1 SETB P1.4 RET;*读DS18B20的程序,从DS18B20中读出两个字节的温度数据*READ_18200:MOV R4, #2 ; 将温度高位和低位从DS18B20中读出 MOV R1, #29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H) RE00:MOV R2, #8 ;数据一共有8位 RE01:CLR C SETB P1.4 NOP NOP CLR P1.4 NOP NOP NOP SETB P1.4 MOV R3, #9 RE10:DJNZ R3, RE10 MOV C, P1.4 MOV R3, #23 RE20:DJNZ R3, RE20 RRC A
展开阅读全文