电子技术应用模块课程设计水温控制器.doc
上饶职业技术学院电子工程系课程设计课程名称:电子技术应用模块 题目名称: 水温控制器 年 级:06级 学生专业:应用电子技术学生学号:ZD06010040 54 指导教师: 学生姓名: 技术职称:高级工程师 2008年5月30日课程设计任务书1 课程名称 电子技术应用模块2 课程性质 必选专业课3 适用年级 06级4 适用专业 应用电子技术5 设计题目 水温控制器6 实验要求 选开7 选题要求 最多组数2组 每组最多人数2人8 指导老师 吴国辉 职称 高级工程师9 设计目的9.1 进一步掌握模拟电子技术,数字电子技术等课程的知识在本课程设计中的应用9.2 熟悉电路的设计过程及设计方法9.3 掌握课程设计的基本过程和课程设计报告的撰写方法10 设计要求10.1 设计一个水温控制器10.2 温度设定范围为40到90。最小区分度为110.3 环境温度降低时,温度控制的静态误差不超过111 课程设计的进度安排11.1 2008年5月9日到17日,完成初稿11.2 2008年5月18日到30日,上交课程设计报告及实验样品12 参考书目12.1 黄永定 主编 电子线路实验与课程设计 北京 机械工业出版社 2005.812.2 谢自美 电子线路设计、实验、测试 武汉 华中科技大学出版社 12.3 高吉祥 全国大学生电子设计竞赛培训系列教程 北京 电子工业出版社 2000年 13 任务书下达时间 2008年4月28日课程设计评分标准(选开实验)姓名: 年级:06 级 专业:应用电子技术 班级:06电子(1)班 总分:考核项目平 时 成 绩设 计 报 告总成绩考核内容态度、纪律(20%)设计报告书写和水平(80%)考核环节团结协作有钻研精神爱护公物文明卫生遵守纪律和制度摘要符合要求、语句通顺、内容充实、图表和曲线清晰符合规范、文字规范。方案选择、论证、设计、计算正确。分值66880100评分评分教师: 评分时间: 年月 日课程设计评分标准(选开实验)姓名: 年级:06 级 专业:应用电子技术 班级:06电子(1)班 总分:考核项目平 时 成 绩设 计 报 告总成绩考核内容态度、纪律(20%)设计报告书写和水平(80%)考核环节团结协作有钻研精神爱护公物文明卫生遵守纪律和制度摘要符合要求、语句通顺、内容充实、图表和曲线清晰符合规范、文字规范。方案选择、论证、设计、计算正确。分值66880100评分评分教师: 评分时间: 年月 日课程设计报告年级 06级 专业 应用电子技术 班级1班 姓名 温美军 王乐指导老师 吴国辉 职称 高级工程师课程名称 电子技术应用模块课程性质 必选专业课设计项目 水温控制器系统 实验要求 选开1 设计目的1.1 进一步掌握模拟电子技术、数字电子技术等课程的知识在本课程设计中的应用1.2 熟悉电路的设计过程及设计方法1.3 掌握课程设计的基本过程和课程设计报告的撰写方法2 设计要求2.1 设计一个水温控制器2.2 温度设定范围为40到90。最小区分度为12.3 环境温度降低时,温度控制的静态误差不超过13 课程设计的进度安排3.1 2008年五月9号到17号,完成初稿3.2 2008五月18号到30号,上交课程设计报告及实验样品水温控制系统摘要 本系统以AT89C51,AT89C2051单片机为核心,主要包括传感器温度采集,A/D模/数转换,按扭操作,单片机控制,数码管数字显示等部分。本系统采用PID算法实现温度控制功能,通过串行通信完成两片单片机信息的交互而实现温度设定、控制和显示。本设计还可以通过串口与上位机(电脑)连接,实现电脑控制。系统设计有体积小、交互性强等优点。为了实现高精度的水温控制,本单片机系统采用PID算法控制和PWM脉宽调制相结合的技术,通过控制双向可控硅改变电炉和电源的接通、断开,从而改变水温加热时间的方法来实现对水温的控制。本系统由键盘显示和温度控制两个模块组成,通过模块间的通信完成温度设定、实温显示、水温升降等功能。具有电路结构简单、程序简短、系统可靠性高、操作简便等特点。关键词 度传感器, 温度校准,温度控制 1 引言 随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决。本系统采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,大大简化了电路的复杂度,以及算法的要求。在一些温控系统电路中,广泛采用的是通过热电偶、热电阻或PN结测温电路经过相应的信号调理电路,转换成AD转换器能接收的模拟量,再经过采样保持电路进行AD转换,最终送入单片机及其相应的外围电路,完成监控。但是由于传统的信号调理电路实现复杂、易受干扰、不易控制且精度不高。本文介绍单片机结合DS18B20水温控制系统设计,因此,本系统用一种新型的可编程温度传感器(DS18B20),不需复杂的信号调理电路和AD转换电路能直接与单片机完成数据采集和处理,实现方便、精度高,可根据不同需要用于各种场合.2 DS18B20温度传感器实验2.1 工作原理DS18B20是DAllAS公司生产的一线式数字温度传感器。它将地址线、数据线和控制线合为一根双向串行传输数据的信号线,允许在这根信号线上挂接多个DS18B20;因此,单片机只需通过一根I/O线就可以多个DS18B20通信。每个芯片内外还有一个64位的ROM,其中存有各个器件自身的序列号,作为器件独有的ID号码。DS18B20简化了测量器件与计算机的接口电路,使得电路简单,使用更加方便。DS18B20的特性: 测温范围:-55+125 转换精度:912位二进制数(包括一位符号),可编程确定转换精度的位数。 测温分辨率:9位精度为:0.5,12位精度为0.0625。 转换时间:9位精度为93.75ms,10位精度为187.5ms,12位精度为750ms。 具有非易失性上、下限报警设定的功能。 DS18B20的硬件电路图如图2-1。DS18B20的温度值是以补码的形式表示的,在处理数据的时候要特别注意。下面列出了用12位精度测出的数字量,用十六位补码的形式表示。18B20引脚示表2-1 温度值与DS18B20输出的二进制值对照表温度值/ 数字输出(二进制)数字输出(十六进制)+850000 0101 0101 0000图2-1 DS意图055OH+25.06260000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H+0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06261111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90HDS18B20有严格的读写时序,读写数据都应按照此时序进行,否则读出的温度数值将产生错误。使用DS18B20时,主机应先向DS18B20送出复位信号,主机将数据线拉低并保持480960µS;然后再释放数据线,由上拉电阻拉高1560µS;然后再由DS18B20发出低电平60240µS,就完成了复位操作。在主机对DS18B20写数据时,应先将数据线拉低1µS以上,再写入数据(写1为高,写0为低)。待主机写入的数据变化1560µS后,DS18B20将对数据线采样。要求主机写入数据到DS18B20的保持时间为60120µS。2次写数据操作的间隙应大于1µS。读数据之前,主机应先将数据线拉低,再释放。DS18B20在数据线从高电平跳低后15µS内将数据送到数据线上。主机在15µS后读取数据线。如要了解有关DS18B20更多的知识,请查阅相关资料,此处不再叙述。2.2、电路原理图图2-2 DS18B20温度传感器实验23、元器件清单类别型号数量单位说明集成电路AT89C51 1片DS18B201片74LS2451片双向驱动器数码管5位5位3 温度校准实验3.1、工作原理对于精度要求不高的测量,DS18B20完全能够满足要求。但是对于精度要求较高的场合,由于DS18B20内部采用了模数转换器,并且其本身具有分散性,则经常通过校准程序来弥补偏差,运用校准程序的前提时要有比DS18B20更为精确的测温仪器,这里为了说明问题,我们使用点温计代替。例如:实际温度(DS18B20)理想温度(点温计)偏差值55.2+0.21010.6+0.62020.9+0.94039.2-0.86061.3+1.38081.9+1.99092.2+2.2图3-1 实际温度偏差温度曲线通过曲线,可以看出温度的偏差基本呈上升趋势,初步分三个阶段进行补偿,019.99,补偿值为+0.5;2069.99,补偿值为+1.1;7099.99,补偿值为+2.0。如要整个温度范围内更为精确的显示,可以将温度的范围划分为更多的段,进行更加细致的补偿。程序方面只需要在温读转换子程序后插入一温度补偿子程序即可,然后再分别测量以上温度值,与理想温度值比较,写出相对误差。3.2、参考程序;. ;表示省略 ;.JIAO_Z EQU 7EH ;校准数据的整数部分JIAO_X EQU 7DH ;校准数据的小数部分J1_Z EQU 00H ;第1段校准数据的整数部分J1_X EQU 80H ;第1段校准数据的小数部分J2_Z EQU 01H ;第2段校准数据的整数部分J2_X EQU 02H ;第2段校准数据的小数部分J3_Z EQU 02H ;第3段校准数据的整数部分J3_X EQU 00H ;第3段校准数据的小数部分 ;. ;表示省略 ;. MAIN_LOOP: LCALL GET_TEMPER ;读取温度值 LCALL DATA_CHANGE ;调用数据转换子程序 LCALL JIAOZHENG ;注意将校准子程序插入到此处 LCALL DATA_CHULI ;调用数据处理子程序 LCALL DISPLAY SJMP MAIN_LOOP ;. ;表示省略JIAOZHENG: ;校准子程序 MOV A , 28H CJNE A , #20 , JZ1JZ1: JC JZ4 CJNE A , #70 , JZ2JZ2: JC JZ3 MOV JIAO_Z , #J3_Z ;7099.99,补偿值为+2.0 MOV JIAO_X , #J3_X AJMP JZ5JZ3: MOV JIAO_Z , #J2_Z ; 2069.99,补偿值为+1.1 MOV JIAO_X , #J2_X AJMP JZ5JZ4: MOV JIAO_Z , #J1_Z ; 019.99,补偿值为+0.5 MOV JIAO_X , #J1_XJZ5: MOV A , 27H ADD A , #80H MOV 27H , A MOV A , 28H ADDC A , #01H MOV 28H , A RET ;. ;表示省略 ;.说明:加省略号的地方表示还有程序,与DS18B20传感器实验的程序有联系 4 温度控制过程实验4.1、工作原理用800W热得快代替加热装置,对一杯水进行加热;4.1.1、通过改变滑动变阻器,来调节热得快的功率;4.1.2、绘制出水温在不同功率加热情况下的温度随时间的上升曲线;4.1.3、绘制出水温在自然环境下温度随时间的下降曲线;4.1.4、根据绘制的曲线,在设定的温度基础上,选择出合适的功率来加热,以便得到最理想的动态平衡。4.2、工作原理要改变加热装置的功率,通过改变加在其两端的电压值实现,考虑到安全问题,这里使用固态继电器通过改变其通断时间来调节加热装置功率的大小,电路图如图3-4。图中控制部分是由555电路构成的占空比可调方波发生器,总时间为T=0.39S,约等于市交流电的40倍。通过调节滑动变阻器来改变方波的占空比,从而改变通过加热加热装置的平均电压获得不同的功率。如:占空比为1:2,则加热装置获得的平均电压约等于110V,则加热装置的功率变为原来的1:4。4.3、电路原理图图4-3 功率可调水温加热电路图4.4、元器件清单类别型号数量单位说明集成电路555 1片固态继电器1只电阻10K2只滑动变阻器100K1只二极管1N41482只电容4.7µ1只0.01µ1只5 水温控制系统的总体调试5.1、工作原理工作原理如下框图。 预 置 控 制温度采集 电路单片机数码显示工作指示控制电路超温报警电 源加热器其中恒温部分为动态控制过程。如人工设定温度80.5,如果当前温度小于人工设定的温度,如当前温度位25,则启动加热装置;当两者温度差小于0.000.99(此值可根据加热装置的功率来设定),则切断加热装置,利用余热继续加热,经过一段时间后,加热装置余热耗尽,水温开始下降,当下降到两者温差小于1.001.99再次接通加热装置,直至温差小于0.000.99的时候再次切断,周而复始,最终达到动态平衡。5.2、总电路原理图图4-5 水温控制系统总电路原理图说明:整个电路分为六大部分,DS18B20温度检测,51单片机数据处理及输出控制信号,独立式按键人工设定温度,功率调节电路、报警电路。搭接或制作的时候可以先将每一部分硬件电路调试好,然后进行整体连接调试。 6、水温控制系统总程序 ;堆栈区为30H40H ;显示缓冲区为4AH4EH ;读取后的温度值高4位存放在28H中,低8位在29H ;转换后的数据整数部分在28H中,小数部分在27H ;DS18B20温度转换子程序,6M晶振。ALAM BIT P2.6 ;当DS18B20不存在时的提示端口,为高电平。PT18B20 BIT P2.5 ;DS18B20的端口FLAG1 BIT 2FH.0 ;是否检测到DS18B20标志位FUHAO BIT 2FH.1 ;符号标志位,用于显示温度的符号。KEY BIT 2FH.2 ;是否按下人工设定温度按键,1是,0否TEMPH EQU 2AH ;温度转换高4位暂存区TEMPL EQU 2BH ;温度转换低8位暂存区STEMPH EQU 2CH ;暂存人工输入数据的高4位STEMPL EQU 2DH ;暂存人工输入温度的低8位DIS_FUHAO EQU 4AHDIS_SHI EQU 4BH ;显示的十位数缓冲区DIS_GE EQU 4CH ;显示的个位数缓冲区DIS_SHIF EQU 4DH ;显示的十分位数缓冲区DIS_BAIF EQU 4EH ;显示的百分位数缓冲区GET_SHI EQU 50H ;人工设定温度十位缓冲区GET_GE EQU 51H ;人工设定温度个位缓冲区GET_SHIF EQU 52H ;人工设定温度十分位缓冲区GET_BAIF EQU 53H ;人工设定温度百分位缓冲区JIAO_Z EQU 7EH ;校准数据的整数部分JIAO_X EQU 7DH ;校准数据的小数部分DELAY1 EQU 7CH ;用于控制人工设定温度时的延时时间XUHAO EQU 7BH ;用于控制人工设定温度输入数据时的位置 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV SP , #30H ;设置堆栈区 MOV 2FH , #00H ANL P2 , #0E0H ;屏蔽低五位,即初始化显示不亮 CLR P3.3 ;初始化时关闭加热装置 CLR P3.4 ;初始化时关闭报警装置 MOV R0 , #4AH MOV R7 , #0AHCLR0: ;清除显示缓冲区 MOV R0 , #00H INC R0 DJNZ R7 , CLR0MAIN_LOOP: JB P3.0 , DKEY1 LCALL DATA_GET ;调用人工设定温度获取子程序DKEY1: JB P3.2 , DKEY2 ;输入键取消人工温度设定 LCALL DISPLAY LCALL DISPLAY JB P3.2 , DKEY2 CLR P3.3 CLR P3.4 CLR KEY JNB P3.2 , $DKEY2: LCALL GET_TEMPER ;读取温度值 LCALL DATA_CHANGE ;调用数据转换子程序 LCALL JIAOZHENG ;调用校正子程序 LCALL DATA_CHULI ;调用数据处理子程序 LCALL DISPLAY ;响应时间大约为800ms JNB KEY , DEKY3 LCALL T_CONTROL ;调用温度控制子程序DEKY3: SJMP MAIN_LOOPDATA_CHANGE: ;数据转换子程序 JNB 28H.3 , CHA1 ;转换后的结果符号位由标志FUHAO确定 SETB FUHAO ;整数部分存放在28H中,小数部分存放在27H中 MOV A , 28H CPL A MOV 28H , A MOV A , 29H CPL A ADD A , #01H MOV 29H , A MOV A , 28H ADDC A , #00H MOV 28H , A AJMP CHA2CHA1: CLR FUHAOCHA2: MOV 27H , 29H MOV A , 27H ANL A , #0FH SWAP A MOV 27H , A MOV A , 29H ANL A , #0F0H SWAP A MOV 29H , A MOV A , 28H ANL A , #0FH SWAP A ORL A , 29H MOV 28H , A MOV TEMPH , 28H MOV TEMPL , 27H RETDATA_CHULI: ;数据处理子程序。 MOV R2 , 27H ;将最终转换得到的结果送入显示缓冲区 LCALL HBD2 ;注意,转换后均以BCD码表示 MOV A , R2 MOV 27H , A ANL A , #0FH MOV 4EH , A MOV A , R2 ANL A , #0F0H SWAP A MOV 4DH , A MOV A , 28H MOV C , F0 ADDC A , #00H MOV 28H , A MOV B , #10 DIV AB MOV 4BH , A MOV 4CH , B RET HBD2: MOV R4 , #3 ;获取三位十进制码HBD3: MOV A , R2 ;原小数扩大十倍 MOV B , #10 MUL AB MOV R2,A PUSH B ;保存溢出的一位十进制码 DJNZ R4 , HBD3 ;计算完四位十进制码 POP ACC ;取出千分位 MOV R3 , A POP ACC ;取出百分位 MOV R2 , A POP ACC ;取出十分位 SWAP A ORL A , R2 ;拼装成高字节码小数 MOV R2 , A CJNE R3 , #05 , HBD4 ;若千分位大于等于5,则向前进位,小于5则舍去HBD4: JC HBD5 ADD A , #01H DA A MOV R2 , A MOV F0 , CHBD5: RETDATA_GET: JNB P3.0 , $ MOV DIS_SHI , #00H MOV DIS_GE , #00H MOV DIS_SHIF , #00H MOV DIS_BAIF , #00HDATA_GET1: JB P3.0 , DGET1 MOV DELAY1 , #02H LCALL YSHE JB P3.0 , DGET1 SJMP RETD ;按下确定键后表示温度已经设定好,返回DGET1: JB P3.1 , DGET2 LCALL YSHE JB P3.1 , DGET2 INC XUHAO MOV A , XUHAO CJNE A , #04 , DGET2 MOV XUHAO , #00HDGET2: JB P3.2 , DGET3 LCALL YSHE JB P3.2 , DGET3 MOV R0 , #XUHAO CJNE R0 , #00H , DGET31 INC GET_SHI MOV A , GET_SHI CJNE A , #05H , DGET32 MOV GET_SHI , #00HDGET32: MOV DIS_SHI , GET_SHI SJMP DGET38DGET31: CJNE R0 , #01H , DGET33 INC GET_GE MOV A , GET_GE CJNE A , #0AH ,DGET34 MOV GET_GE , #00HDGET34: MOV DIS_GE , GET_GE SJMP DGET38DGET33: CJNE R0 , #02H ,DGET35 INC GET_SHIF MOV A , GET_SHIF CJNE A , #0AH , DGET36 MOV GET_SHIF , #00HDGET36: MOV DIS_SHIF , GET_SHIF SJMP DGET38DGET35: INC GET_BAIF MOV A , GET_BAIF CJNE A , #0AH , DGET37 MOV GET_BAIF , #00HDGET37: MOV DIS_BAIF , GET_BAIF SJMP DGET38DGET38: MOV DELAY1 , #25 LCALL YSHE SETB KEYDGET3: LCALL DISPLAY1 SJMP DATA_GET1RETD: JNB P3.0 , $ RETT_CONTROL: ;温度控制子程序 MOV A , GET_SHIF ANL A , #0FH SWAP A MOV R2 , A MOV A , GET_BAIF ANL A , #0FH ORL A , R2 MOV R2 , A LCALL BHD1 MOV A , R3 ANL A , #0F0H MOV STEMPL , A MOV A , GET_SHI MOV B , #10 MUL AB ADD A , GET_GE MOV STEMPH , A CLR C MOV A , STEMPL SUBB A , TEMPL MOV A , STEMPH SUBB A , TEMPH JC TCON1 CJNE A , #00H , TCON2 CLR P3.3 ;温差小于1,切断加热装置TCON2: SETB P3.3 ;温差大于1,启动加热装置 CJNE A , #02H , TCON3TCON3: JC TCON4 SETB P3.4 AJMP TCON1TCON4: CLR P3.4 AJMP RETTTCON1: CLR P3.3 CLR C MOV A , TEMPL SUBB A , STEMPL MOV A , TEMPH SUBB A , STEMPH CJNE A , #02H , TCON5TCON5: JC TCON6 SETB P3.4TCON6: CLR P3.4RETT: RET ;标号: 1 功能:单字节码小数转换成单字节十六进制小数 ;入口条件:待转换的双字节码小数在R2中。 ;出口信息:转换后的双字节十六进制小数在R3中。 ;影响资源:PSW、A、R2R6 堆栈需求: 字节BHD1: MOV R6 , #08H ;准备计算两个字节小数 MOV R3 , #00HBHD2: MOV A , R2 ;按十进制倍增 ADD A , R2 DA A MOV R2 , A MOV A , R3 ;将进位标志移入结果中 RLC A MOV R3 , A DJNZ R6 , BHD2 ;共计算8小数 RET ;以下是读取DS18B20温度的子程序 ;读出的温度低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)GET_TEMPER: ; 读出转换后的温度值 SETB PT18B20 LCALL INIT_1820 ;先复位DS18B20 JB FLAG1,TSS2 RET ; 判断DS1820是否存在?若DS18B20不存在则返回TSS2: ;DS18B20已经被检测到! MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 ;这里通过调用显示子程序实现延时一段时间, LCALL Y750MS ;等待AD转换结束,12位的话750毫秒 LCALL INIT_1820 ;准备读温度前先复位 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 ; 将读出的温度数据保存到28H/29H RETINIT_1820: SETB PT18B20