快热式家用电热水器课程设计
快热式家用电热水器的设计

快热式家用电热水器的设计[摘要] 本文主要介绍了快热式家用电热水器的系统设计,并对其原理与功能作了介绍。
单片机在现代智能家用电器自动控制中具有重要的作用。
本设计采用单片机89C51为控制核心,结合光耦、可控硅等外围控制元件,用C语言编程,实现对水温实时监控、显示;自动加热、保温;防干烧等自动控制功能。
本设计包括了单片机控制家用电热水器应用系统的设计、C语言编写软件两大部分。
软件调试采用专用的编译工具Keil C编写与调试,然后通过仿真器烧录入单片机内,运行来实现设计的功能。
[关键词] 单片机C语言快热式电热水器一、快热式家用电热水器的现状与发展随着人民物质文化生活的提高,热水器在中国早已走入寻常百姓家,成为必不可少的家用电器。
根据水流方式的不同,电热水器分为储水式和即热式(快速式)两种类型。
储水式电热水器的优点是不必分室安装、不会产生有害气体、调温方便。
但是储水式热水器在使用前需要预热,一次使用的量有限。
同时,储水式热水器的体积较大、点用空间较多,形粗笨不够美观、预热时间太长、耗能高等因素,不太适合卫生间面积小的家庭使用。
所以现在普遍使用的储水式电热水器让消费者难以青睐。
为了克服传统储水式电热水器加热慢、效率低的缺点,快热式电热水器应运而生,成为当前电热水器家族的新秀。
顾名思义,快热式电热水器就是利用电热管、电热棒、玻璃管或塑料管加热,即开即热,无需预热和保温。
从安全性方面看,即热式电热水器采用非金属加热体、水电隔离技术、漏电保护装置、接地保护等基本措施,使用安全系数比较高。
而在体积上由于没了水箱部分,外形可以设计得小巧精致,比较适合在小空间使用。
通过新加热材料的应用实现快速加热水,通过单片机的应用实现全自动控制。
快热式电热水器以其快速、小巧、安全、节能、环保等诸多特性适合了现代人们快节奏的生活需要,不受洗浴时间和人数影响,提高了人们的生活质量。
二、系统硬件组成框图快热式家用电热水器的系统组成框图如图2-1所示:图2-1快热式家用电热水器系统框图本系统主要分为五个模块:①单片机应用系统模块:该模块是整个系统的核心。
热水器温度控制系统课程设计

热水器温度控制系统课程设计1. 概述热水器温度控制系统是一种用于控制热水器的温度并确保热水器在安全范围内运行的系统。
该系统通过传感器监测热水器的温度,并根据设定的温度范围通过控制回路调节加热器的工作状态来实现温控。
本课程设计旨在通过理论学习和实践操作,帮助学生了解并掌握热水器温度控制系统的工作原理、电路设计、程序编写以及系统调试等知识和技能。
2. 课程设计内容2.1 系统结构设计首先,需要对热水器温度控制系统的结构进行设计和规划。
系统应包括以下组成部分:•温度传感器:负责感知热水器的温度,并将温度信息传递给控制器。
•控制器:根据温度传感器提供的信息,通过控制回路控制加热器的工作状态,以达到设定的温度范围。
•加热器:负责将电能转换为热能,实现热水器的加热功能。
•显示器:用于显示热水器的当前温度以及设定的温度范围。
•按钮和开关:用于设置温度范围和控制加热器的开关状态。
2.2 电路设计与连接热水器温度控制系统的电路设计是实现系统功能的重要环节。
学生需要根据给定的要求和元器件进行电路设计,并通过连接线将各个元器件进行连接。
电路设计的关键是理解温度传感器、控制器、加热器和显示器之间的电路连接方式,并正确连接相应的引脚。
2.3 程序编写为了实现热水器温度控制系统的自动化控制,学生需要编写相应的程序。
程序的编写可以采用常见的嵌入式系统开发语言,如C语言。
编写程序时,学生需要根据系统的要求,编写传感器数据采集、控制算法以及与控制器的通信等功能。
2.4 系统调试与功能测试完成系统的硬件连接和程序编写后,学生需要进行系统的调试以确保系统能够正确运行,并进行功能测试以验证系统的性能。
调试过程包括检查电路连接是否正确、检查程序逻辑是否正确、检查温度传感器和控制器之间的通信是否正常等。
功能测试的目的是验证系统是否能够按照设定的温度范围正确控制热水器的温度,并能够在温度超出设定范围时发出警报或采取其他保护措施。
3. 实验项目安排针对热水器温度控制系统的课程设计,我们安排以下实验项目:1.了解热水器温度控制系统的结构和工作原理。
电热水器课程设计

电热水器课程设计一、课程目标知识目标:1. 学生能理解电热水器的基本工作原理,掌握其主要部件的功能和作用。
2. 学生能掌握电热水器使用时的安全知识和节能措施。
3. 学生了解不同类型电热水器的特点及适用场景。
技能目标:1. 学生能够运用所学知识正确操作电热水器,排除简单的故障。
2. 学生能够分析电热水器的能效,提出合理的节能措施。
3. 学生能够运用比较、分析的方法,选择合适的电热水器。
情感态度价值观目标:1. 培养学生对电热水器技术的兴趣,激发学习热情。
2. 增强学生的安全意识,使其在使用电热水器时能够自觉遵循安全规定。
3. 培养学生的节能环保意识,使其在生活中能够关注能源消耗,倡导绿色生活。
课程性质:本课程属于科学实践活动课程,以实践操作和理论分析相结合的方式进行教学。
学生特点:学生为初中年级,具备一定的物理知识和动手能力,对新鲜事物充满好奇。
教学要求:结合学生的特点,注重实践与理论相结合,培养学生的动手能力和解决问题的能力,同时关注学生情感态度价值观的培养。
通过具体的学习成果分解,使学生在实践中掌握电热水器的相关知识,提高安全意识和节能意识。
二、教学内容1. 电热水器的基本原理:涉及电流的热效应、电阻加热的原理等,对应教材第四章第一节。
- 了解电热水器的工作原理;- 掌握电流热效应在电热水器中的应用。
2. 电热水器的结构与功能:分析电热水器的主要部件,如加热体、温控器、漏电保护器等,对应教材第四章第二节。
- 识别电热水器的主要部件;- 了解各部件的作用和功能。
3. 电热水器使用安全与节能:介绍安全使用电热水器的方法、节能措施和注意事项,对应教材第四章第三节。
- 掌握安全使用电热水器的方法;- 学习节能技巧和日常维护。
4. 电热水器类型及选择:介绍不同类型的电热水器,如储水式、即热式等,并学会如何选择合适的产品,对应教材第四章第四节。
- 了解各种类型电热水器的特点;- 学习选择电热水器的方法和依据。
电热水器控制器课程设计

电热水器控制器课程设计课程背景电热水器是现代家庭必备的家电之一,它能够提供热水供应,满足人们的生活需求。
电热水器控制器作为电热水器的核心部件,起到控制热水器运行的作用。
掌握电热水器控制器的工作原理和设计方法,对于电气工程专业的学生来说是非常重要的。
本门课程旨在通过设计一个完整的电热水器控制器,让学生掌握电热水器控制器的工作流程和相关电路的设计原则。
通过理论学习和实践操作,提高学生的专业能力和创新思维,为他们今后在相关领域的工作打下良好的基础。
课程目标本课程的主要目标是使学生能够: - 理解电热水器的基本工作原理和相关电路知识; - 掌握电热水器控制器的设计方法和流程; - 运用相关知识设计一个功能完善的电热水器控制器; - 深入理解电热水器控制器的各个模块的功能和相互作用;- 提高学生的团队合作能力和解决问题的能力。
课程大纲课程共分为以下几个模块:模块一:电热水器原理与电路设计•电热水器工作原理•电热水器的基本电路结构•电热水器控制器的功能和设计要求•控制器与电热水器之间的接口设计模块二:单片机的基础知识•单片机的基本原理和工作方式•单片机的编程语言和开发环境•单片机的GPIO口、定时器和中断等模块的应用模块三:电热水器控制器的软件设计•控制器的状态机设计•控制器的界面设计•控制器的温度控制算法设计模块四:电热水器控制器的硬件设计•控制器的电源电路设计•控制器的输入电路设计•控制器的输出电路设计•控制器的外设选型和连接方式模块五:电热水器控制器的调试与测试•控制器的功能测试•控制器的性能测试•控制器的稳定性和可靠性测试二级课程项目设计学生需要在课程结束后,以小组为单位完成一个电热水器控制器的设计项目。
项目要求包括以下内容:•电热水器控制器的硬件设计和制作•电热水器控制器的软件编程和调试•电热水器控制器的功能测试和性能评估评分方式•平时考勤、作业和课堂表现:30%•期中考试:20%•课程项目:50%参考书目•《电热水器原理与设计》•《单片机原理与应用》•《模拟电子技术基础》•《数字电路与逻辑设计》•《嵌入式系统设计与应用》总结通过本门课程的学习,学生将能够全面了解电热水器控制器的工作原理和设计方法,掌握电热水器控制器的软硬件设计技术,提升自己在相关领域的竞争力。
电热水器-教案

【课题】第五章电热水器第一节电热开水瓶新授课【教学目标】1.知识目标:熟悉电热开水瓶、电热饮水机的结构和主要部件的作用及原理,理解电热开水瓶、电热饮水机的电路。
2.能力目标:能够排除电热开水瓶、电热饮水机的常见故障。
3.情感目标:激发学生浓厚的学习兴趣,培养学生严谨的科学态度,锻炼实际分析能力。
【教学重点】电热开水瓶、电热饮水机的结构及电路原理。
【教学难点】电路原理。
【教学方法】读书指导法、分析法、演示法、练习法。
【课时安排】2课时(90分钟)。
【教学过程】〖导入〗(3分钟)电热水器是用电加热的方法获得饮、用水的电热器具。
常用电热水器主要有电热开水瓶、电热饮水机、电热淋浴器等。
〖新课〗第一节电热开水瓶一、类型和规格结构分:单层控温式、双层控温式、带气压吸水装置的、带有储水装置的自动加热开水瓶。
出水方式分:手动式、电动式。
温控方式分:可调式、不可调式。
功能分:带重煮功能、不带重煮功能。
规格是按内胆容量分的。
功率400 ~ 1 000 W。
二、结构外壳:两块马口铁,表面喷防锈漆。
内胆:不锈钢,底部有动断型快动温控器。
电动出水装置:电磁泵、出水管、出水嘴。
显示系统:内胆与外胆之间,水位尺和连通管。
磁力插头:上、下盖、触片及簧片、铁氧体磁钢和导磁片等。
电热器:主加热器、保温加热器,如图。
安装在内胆下部,并紧贴内胆外表面安装。
如图电路图。
加热时接通220 V电源,经FU 和ST、HL1、EH1通电加热。
达到预定的温度后,ST 触点断开,切断EH1、HL1,HL2 亮。
电源经整流二极管VD,向EH2 通入脉动直流电,水温保持在95℃左右。
饮用开水时,按下微动开关,由出水嘴中流流出。
四、常见故障及检修(一)主加热器不发热原因:1. 电源进线松动或超温熔断器与温控器、温控器与电加热器的接头脱落2. 温控器触点接触不良3. 主加热器损坏检修:1. 检查接线连接情况,如松脱则予以重新接好2. 用万用电表R ⨯ 1挡测温控器动断触点阻值应为零,如为无穷大,则已损坏,应更换同型号的温控器3. 用万用电表R ⨯ 1挡测主加热器,正常直流电阻应为68 ~ 79 Ω之间如相差很大,则应更换(二)保温加热器不发热原因:1. 超温熔断器与整流二极管、整流二极管与保温加热器之间的接头松动2. 整流二极管断路3. 保温加热器损坏检修:1. 检查各接头连接情况,如松动,则重新接好2. 用万用电表电阻挡测二极管正反向电阻,如都为无穷大,则损坏,应更换耐压400 V 上、电流在1 A以上的整流二极管3. 用万用电表R1挡测保温加热器,正常直流应为726 ~ 847 Ω之间,如相差很大,则应更换。
快热式家用电热水器课程设计

1引言现在热水器大部分都是快热式热水器,它给我们的生活带来了极大的便利,这使是它走进千家万户成为必然目前燃气式热水器因为它的安全隐患和越来越高的成本正在逐渐退出热水器市场。
而太阳能热水器虽然环保无污染,但它寿诞天气。
气候及安装条件的严格限制。
很难占据更大的市场份额。
目前主流的贮水式电热水器,体积庞大、预热时间长、热水储量有限,已经不适合现代生活的节奏。
于是,快热式热水器小巧时尚的外观,安全可靠的性能让它有着广泛的发展和应用前景。
普通电热水器有以下几个缺点:首先,因为电热水器长期通电,保持60度以上的高温,发热管容易结垢,内胆容易漏水,比较容易损坏。
我们学校的电热水器经常因为结垢堵塞出水口水流越来越小,给师生的饮水带来不便;其次,管道及水箱本身热量损耗大,等候热水所用时间较长;再次,在热水流出前都必须浪费一定量的冷水,根据管道的长短,这样既不环保,又不经济。
而快热式热水器克服了上述缺点。
它安全、干净、环保、即开即热。
3—5秒出热水,无需等候,热水使用时间不受限制。
2系统总体方案功能要求用2位数码管显示出水温度,能显示设定功率档位。
温度检测显示范围00~99℃,精确度±1℃。
设置3个功率档位指示灯,1~4档一个灯亮,5~8档两个灯亮,9档3个灯全亮。
0档无功率输出,档位灯不亮。
设置3个轻触按钮,分别为电源开关键、“+”键和“-”键。
加热功率分0~9档,按“+”键依次递增至9档,按“-”键依次递减至0。
0-9档功率依次为0、1/9P、2/9P、3/9P、4/9P、5/9P、6/9P、7/9P、8/9P、P。
出水温度超过65℃时停止加热,并蜂鸣报警,温度降到45℃以下时恢复。
内胆温度超过105℃时停止加热,防止干烧。
方案论证按快热式电热水器的功能要求,决定采用如图2.1所示的模块组成系统,即电源电路、单片机控制器、温度检测电路、按键输入电路、LED数码管及指示灯电路、报警电路和加热控制电路。
图2.1 快热式电热水器系统组成框图快热式电热水器为了达到“快热”的效果,取消了储水罐,使冷水在在进入加热管后立即被加热,这就要求加热管有较大的功率,家用电热水器一般采用方便可靠的电热丝加热方法。
基于单片机的模拟快热式家用电热水器的设计

河南城建学院微机原理与接口技术课程设计敷陈模拟快热式家用电热水器的设计姓名:学号:*******专业班级:0924131指导教师:所在院系:电气与信息工程学院2021年12月30 日一、评语〔按照学生辩论情况及其敷陈质量综合评定〕。
二、评分指导教师签字:年月日目录第一章背景意义和功能介绍 (6)1.1 背景意义 (6)1.2 功能要求 (6)第二章方案论证 (7)第三章系统硬件设计 (9)3.1 单片机的选择 (9)3.2温度检测传感器的选择 (10)3.21 DS18B20简介 (11)3.22 DS18B20测温原理 (11)3.3 电源电路的选择 (12)3.4 键盘的选择 (12)3.5 显示器的选择 (13)3.51 概述 (14)3.6 报警系统 (15)3.7 加热系统 (15)4.1 主轨范 (17)4.2 按键扫描处理子轨范 (19)4.3 加热控制轨范 (20)4.4 温度检测 (21)第五章源轨范代码 (22)第六章课程设计体会 (32)第七章参考文献 (34)附录一快热式电热水器硬件原理图 (35)附录二快热式电热水器仿真图 (37)附录三快热式电热水器PCB图 (38)摘要热水器已成为日常生活中弗成缺少的家用电器,设计制造更实用、更便当、更平安、更节能的热水器是产品设计师和生产厂家不断追求的方针。
快热式电热水器与普通电热水器最大的区别在于它取消了储水罐,热水随开随用,无须预热,减少了电能浪费。
另外,它还具有体积小,使用平安,安装便当等优点。
本文首先介绍了系统的总体组成,硬件中先描述了整体构造和各模块的彼此关系。
本软件采用模块化设计。
在主轨范模块下分成假设干彼此独立的分模块,本系统可以实现对热水器水温的实时控制,轨范的可移植性强,有很好的推广、应用价值。
性能到达目前国内的同类设备水平,且价格低廉。
关键字: 51系列单片机控制 1602液晶显示单片机温度传感器第一章背景意义和功能介绍1.1 背景意义目前热水器已成为日常生活中弗成缺少的家用电器,设计制造更实用、更便当、更平安、更节能的热水器是产品设计师和生产厂商不断追求的方针。
电热水器课程设计报告

西安邮电学院测控仪器课程设计报告书题目:电热水器的设计系部名称:信息与控制系学生姓名:刘志伟(01)王宇(07)付国伟(13)李航(35)专业名称:测控技术与仪器班级:测控0504班时间:2007年12月10日至12月 21日电热水器的设计一、设计目的:用热电式传感器(热敏电阻)设计一个电热水器。
当热水器内的水温低于950 C时,控制电路给出信号使电热水器电源接通,给水加热,加热时红色指示灯亮;当热水器内的水温达到950 C使,控制电路自动切断热水器电源,停止给水加热,使其处于保温状态,停止加热时,黄色指示灯亮。
二、设计要求:(1)可控制电热水器电源接通或断开。
(2)可显示相应的控制状态。
三、设计器材:四、设计方案及分析(包含设计电路图)1、LM324的功能及引脚:LM324 是四运放集成电路,它采用14脚双列直插塑料封装,它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运放相互独立。
如图1所示:图1其内部的四个运算放大器, A, B, C, D 以及引脚功能如下:LM324中的每一组运算放大器可用图2所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。
两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的相位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。
图22、继电器的继电特性:电器的输入信号x从零连续增加达到衔铁开始吸合时的动作值xx,继电器的输出信号立刻从y=0跳跃到y=ym,即常开触点从断到通。
一旦触点闭合,输入量x继续增大,输出信号y将不再起变化。
当输入量x从某一大于xx值下降到xf,继电器开始释放,常开触点断开。
我们把继电器的这种特性叫做继电特性,也叫继电器的输入-输出特性(参考图3)。
释放值xf与动作值xx的比值叫做反馈系数,即 Kf= xf /xx触点上输出的控制功率Pc与线圈吸收的最小功率P0之比叫做继电器的控制系数,即Kc=PC/P0图33、负温度系数热敏电阻(NTC)极其特性:NTC具有很高的负温度系数,特别实用于-100——3000 C之间测温。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1引言现在热水器大部分都是快热式热水器,它给我们的生活带来了极大的便利,这使是它走进千家万户成为必然目前燃气式热水器因为它的安全隐患和越来越高的成本正在逐渐退出热水器市场。
而太阳能热水器虽然环保无污染,但它寿诞天气。
气候及安装条件的严格限制。
很难占据更大的市场份额。
目前主流的贮水式电热水器,体积庞大、预热时间长、热水储量有限,已经不适合现代生活的节奏。
于是,快热式热水器小巧时尚的外观,安全可靠的性能让它有着广泛的发展和应用前景。
普通电热水器有以下几个缺点:首先,因为电热水器长期通电,保持60度以上的高温,发热管容易结垢,内胆容易漏水,比较容易损坏。
我们学校的电热水器经常因为结垢堵塞出水口水流越来越小,给师生的饮水带来不便;其次,管道及水箱本身热量损耗大,等候热水所用时间较长;再次,在热水流出前都必须浪费一定量的冷水,根据管道的长短,这样既不环保,又不经济。
而快热式热水器克服了上述缺点。
它安全、干净、环保、即开即热。
3—5秒出热水,无需等候,热水使用时间不受限制。
2系统总体方案功能要求用2位数码管显示出水温度,能显示设定功率档位。
温度检测显示范围00~99℃,精确度±1℃。
设置3个功率档位指示灯,1~4档一个灯亮,5~8档两个灯亮,9档3个灯全亮。
0档无功率输出,档位灯不亮。
设置3个轻触按钮,分别为电源开关键、“+”键和“-”键。
加热功率分0~9档,按“+”键依次递增至9档,按“-”键依次递减至0。
0-9档功率依次为0、1/9P、2/9P、3/9P、4/9P、5/9P、6/9P、7/9P、8/9P、P。
出水温度超过65℃时停止加热,并蜂鸣报警,温度降到45℃以下时恢复。
内胆温度超过105℃时停止加热,防止干烧。
方案论证按快热式电热水器的功能要求,决定采用如图2.1所示的模块组成系统,即电源电路、单片机控制器、温度检测电路、按键输入电路、LED数码管及指示灯电路、报警电路和加热控制电路。
图2.1 快热式电热水器系统组成框图快热式电热水器为了达到“快热”的效果,取消了储水罐,使冷水在在进入加热管后立即被加热,这就要求加热管有较大的功率,家用电热水器一般采用方便可靠的电热丝加热方法。
根据热学及流体力学原理结合实际实验室测试,可以得到水温与流量、加热功率之间的关系如表2.1。
表2.1中所列水温值和流量值可以满足大多数家庭用户使用要求,当最大的加热功率为7.5KW时,按220V供电计算电流约为34A,所以要求专线供电。
表2.1 水温与流量、加热功率的关系对于加热功率的控制,最简单的方法是由若干不同功率的电热丝组合得到几种加热功率,但由于快热式热水器的加热功率较普通的大,且档位设置较多,用电热丝组合的方法需要几组电热丝和继电器,成本增高且工作可靠性降低,所以比较理想的是采用可控硅控制功率,电路简单又控制方便。
温度检测的方法较多,最经典的方法就是用热敏电阻(或热敏传感器)组成电桥来采集信号,再经放大、AD转换后送单片机。
目前比较先进的方法是采用专门的集成测温传感器(如DS18B20),直接将温度转换成数字信号传送给单片机。
为了简化电路又降低成本,本文采用了温度/频率转换测温法,直接将温度信息转换成频率信号,用单片机测出频率大小,从而间接测出温度值,温度/频率转换电路简单可靠,成本低廉。
3系统硬件电路的设计快热式热水器控制系统电路如图3.1,由7个部分电路组成:单片机系统及外围电路、电源电路、按键输入电路、LED数码管及指示灯电路、报警电路、加热控制电路、温度检测电路。
控制器采用成本低廉且工作可靠的89C51或其兼容系列的单片机,采用12M的晶振。
89C51对电源要求不甚严格,电源电路采用普通的市电降压整流,然后经集成稳压器(7805)稳压输出+5V电压。
按键采用轻触小按钮。
显示电路采用两位共阳数码管,由2个三极管9012驱动,3个LED指示灯用于指示加热功率。
报警电路采用5V的自鸣式蜂鸣器。
谐振荡器,其中的R24是一个热敏电阻,当温度变化时引起热敏电阻的阻值变显示扫描子函数显示子函数完成两位共阳数码管的扫描显示任务,图4.2为显示扫描子函数程序流程图。
图4.1主函数程序流程图图4.2显示扫描子函数程序流程图按键扫描处理子函数按键扫描子函数负责逐个扫描档位“+”键、档位“-”键和开关键是否被按下,若有键被按下则作出相应处理。
图4.3为按键扫描子函数程序流程图。
图4.3按键扫描子函数程序流程图加热控制函数加热控制程序根据用户设定的加热档位和系统当前的状态,来决定是否加热和控制加热的功率并点亮相应的指示灯。
如有超温标志还应打开蜂鸣器报警。
图4.4为加热控制函数程序流程图。
加热控制程序通过控制继电器的通断来决定是否给电热丝通电加热,而加热的功率大小则由双向可控硅的导通角决定。
系统程序利用外中断INT1检测市电的过零点,检测到过零点后,立即根据设定的加热档位给定时器T1赋一个延时参数,并打开定时器T1,允许其中断。
当定时器T1计满溢出后触发中断,T1中断程序就会给可控硅发一个触发信号,使其导通。
图12.10、12.11分别是过零检测函数程序流程图和可控硅触发信号控制函数程序流程图。
图4.4加热控制函数程序流程图图4.5过零检测函数程序流程图图4.6可控硅触发信号控制程序流程图图4.7温度检测函数程序流程图温度检测函数温度检测函数的基本原理就是将温度/频率转换电路测得的频率与事先建立好的温度/频率表进行比较,查找出与该频率相应的温度值。
事先在实验测试后建立的温度/频率表是0~100℃温度所对应的频率值,它是一个频率对应于温度递减的非线性函数,我们在C语言中用一个一维数组Tab[101] 来表示,下标为温度,数组元素为频率值。
计算温度的方法采用高效准确的二分法查表,查表的过程如下:①先给定查找的温度的最大值Tmax和最小值Tmin,即确定查找的范围,我们根据已有的温度表默认最大值Tmax=100,最小值Tmin=0;②假定测得温度Temp为最大值和最小值之中间值即Temp=(Tmax+Tmin)/2;③将实际测得的频率值T0rig与假定温度Temp在表格中对应的频率Tab[temp]相比较,如果相等,那么假定温度就是当前实际温度,即完成查找;④如果T0rig> Tab[temp],说明实际温度应该在Tmin和Temp之间(因为递减函数特性),所以修改查找范围令Tmax=Temp,同理如果T0rig< Tab[temp],说明实际温度应该在Temp和Tmax之间,则令Tmin=Temp;⑤检查查找范围,如果Tmax-Tmin<=1,判断T0rig更接近最大值对应的频率Tab[Tmax]还是最小值对应的频率Tab[Tmin],实际温度值取频率更接近的那个值即完成查找,⑥如果Tmax-Tmin>1,那么重复第②③④⑤步骤直到完成查找。
温度检测程序完成温度计算后便刷新系统当前温度寄存器,并判断有无超温、置位或清除相应的标志位。
图4.7为温度检测函数程序流程图。
单片机使用外中断INT0和计时器T0检测输入的频率大小,为了减少测量的系统误差相对值和随机误差对测量精度的影响,程序中取100个方波周期的和作为测量结果。
程序中使用静态变量px0count进行外中断的计数,在测量开始时,我们给px0count赋值2是为了让频率测量有准确的起点。
另外,为了区分测频的开始和结束,还使用了测频开始标志位T0tst和测频完成标志位Testok。
图4.8为频率测试函数程序流程图。
图4.8频率测试函数程序流程图5系统程序清单以下是快热式电热水器控制源程序清单,采用C51编写,在Keil uVision2 V2.30(C51.exe V7.0)环境下调试通过,并下载到AT89C51测试运行成功。
/*--------------------------------------快热式热水器程序MCU AT89C51 XAL 12MHzBuild by Gavin Hu, 2005.3.18--------------------------------------*/#include <reg51.h>#include <intrins.h>#include <math.h>void delay(unsigned int); //延时函数void display(void); //显示函数unsigned char keyscan(void); //按键扫描处理函数void heatctrl(void); //加热控制函数void temptest(void); //测温函数sbit swkey=P1^0; //开关键sbit upkey=P1^1; //加热档位“+”键sbit downkey=P1^2; //加热档位“-”键sbit buzz=P1^05; //蜂鸣器输出端sbit triac=P1^6; //可控硅触发信号输出端sbit relay=P1^7; //继电器控制信号输出端sbit led1=P2^5; //加热档位指示灯1sbit led2=P2^6; //加热档位指示灯2sbit led3=P2^7; //加热档位指示灯3signed char data ctemp; //当前测得水温寄存器unsigned char data dispram[2]={0x10,0x10}; //显示区缓存unsigned char data heatpower,px0count; //加热档位寄存器、外中断0计数器bit tempov,t0tst,testok; //超温标志、测温开始标志、测温完成标志/*----------------------------------------------主函数void main(void)无参数,无返回值循环调用显示、键扫描、温度检测、加热控制函数----------------------------------------------*/void main(void){unsigned char i,j;ctemp=15; //初始化水温寄存器heatpower=5; //初始化加热档位为5档tempov=0; //清除超温标志swkey=0; //默认开关键被按下,进入待机状态TMOD=0x11; //设定T0和T1工作方式为16位定时器TCON=0x05; //设置外中断0和1为下降沿触发IP=0x01; //设置外中断0优先IE=0x80; //打开总中断while (1){i=1;do{for (j=0;j<100;j++) //循环100次约0.5s{if (keyscan()) i=6; //如果有键按下,显示当前档位3sdisplay(); //调用显示函数一次约4msheatctrl(); //调用加热控制函数}//end for (b=0;b<100;b++)temptest(); //每0.5s进行一次测温} while (--i); //通过改变循环次数i的大小决定是否刷新显示j=abs(ctemp); //取温度绝对值dispram[1]=j%10; //取个位数送显示j/=10; //取十位数dispram[0]=j?j:0x11; //送显示(带灭零)}//end while (1)}/*--------------------------------------延时函数void delay(unsigned int dt)参数:dt,无返回值延时时间=dt*500机器周期--------------------------------------*/void delay(unsigned int dt){register unsigned char bt; //定义寄存器变量for (; dt; dt--)for (bt=250; --bt; ); //此句编译时以“DJNZ”实现,250*2=500机器周期}/*--------------------------------------显示函数void display(void)无参数,无返回值两位共阳数码管扫描显示--------------------------------------*/void display(void){unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff}; unsigned char i,a;a=0xfe; //位选赋初值for (i=0; i<2; i++) //循环扫描两位数码管{P2|=0x1f; //清除位选P0=table[dispram[i]]; //送显示段码P2&=a; //选通一位delay(4); //延时2msa=_crol_(a,1); //改变位选字P0=0xff; //消影}}/*----------------------------------------------------------按键扫描处理函数unsigned char keyscan(void)无参数,返回值:无符号字符型,无键按下为0,有键按下为其它影响全局变量:heatpower----------------------------------------------------------*/unsigned char keyscan(void){unsigned char i,ch;if (upkey==0) //“+”键{buzz=0; //打开蜂鸣器(发出按键音)for (i=0;i<5;i++) display(); //延时消抖buzz=1; //关闭蜂鸣器if (heatpower<9) heatpower++; //档位加一dispram[0]=0;dispram[1]=heatpower; //显示当前档位while (upkey==0) display(); //等待键释放return (1); //返回有键按下}else if (downkey==0) //“-”键{buzz=0; //打开蜂鸣器(发出按键音)for (i=0;i<5;i++) display(); //延时消抖buzz=1; //关闭蜂鸣器if (heatpower>0) heatpower--; //档位减一dispram[0]=0;dispram[1]=heatpower; //显示当前档位while (downkey==0) display(); //等待键释放return (2); //返回有键按下}else if (swkey==0) //开关键{buzz=0; //打开蜂鸣器(发出按键音)for (i=0;i<30;i++) display(); //延时消抖buzz=1; //关闭蜂鸣器swkey=1; //置位开关键while (swkey==0) display(); //等待键释放ch=IE; //暂存中断控制字IEIE=0x00; //禁止中断P0=0xff;P1=0xff;P2=0xff; //清除端口输出dispram[0]=0x10;dispram[1]=0x10; //显示“--”display();while (1){while (swkey) display(); //等待开关键按下buzz=0; //打开蜂鸣器(发出按键音)for (i=0;i<10;i++) display();//延时消抖buzz=1; //关闭蜂鸣器if (swkey==0) break; //确认开关键被按下}while (swkey==0) display(); //等待键释放IE=ch; //还原中断控制字IEreturn (0); //返回无键按下}else return (0); //无任何键按下时由此返回}/*--------------------------------------加热控制函数void heatctrl(void)无参数,无返回值判断是否加热、加热功率及档位指示灯处理--------------------------------------*/void heatctrl(void){if (!tempov) //当没有超温标志时{relay=0; //接通继电器buzz=1; //关闭蜂鸣器switch (heatpower) //判断加热档位{case 0: {EX1=0;ET1=0;triac=1;led1=1;led2=1;led3=1;break;}//0档不加热,指示灯不亮case 1:case 2:case 3:case 4: {led1=0;led2=1;led3=1;EX1=1;break;} //1~4档1号指示等亮case 5:case 6:case 7:case 8: {led1=0;led2=0;led3=1;EX1=1;break;} //5~8档1号、2号指示灯亮case 9: {EX1=0;ET1=0;led1=0;led2=0;led3=0;triac=0;break;} //9档全功率,指示灯全亮}}else //当有超温标志时{relay=1; //断开继电器EX1=0; ET1=0; triac=1; //关闭可控硅buzz=0; //蜂鸣报警}}/*--------------------------------------测温函数void temptest(void)无参数,无返回值,影响全局变量:ctemp,tempov测量并查表计算温度,判断是否超温--------------------------------------*/void temptest(void){signed char temp,tempmin,tempmax;unsigned int t0rig;unsigned int code temptab[]={0x6262,0x61eb,0x6171,0x60f7,0x6047,0x5ff7,0x5f6e,0x5eef,0x5e53,0x5 dbe,0x5d4b,0x5ca5,0x5c17,\0x5b6b,0x5ada,0x5a5c,0x599b,0x58ff,0x5869,0x57b0,0x570d,0x5663,0x55c6,0x550 e,0x5444,0x5396,\0x52dd,0x5240,0x5189,0x50b0,0x5005,0x4f20,0x4e69,0x4db1,0x4cef,0x4c42,0x4b6 4,0x4aaa,0x49e1,\0x48fc,0x4847,0x476c,0x46b1,0x4604,0x4503,0x4449,0x4356,0x4299,0x41c0,0x40 ce,0x3ff0,0x3f2b,\0x3e33,0x3d86,0x3ca6,0x3bd2,0x3b26,0x3a39,0x3973,0x38a6,0x37ef,0x373f,0x368 7,0x35c3,0x3507,\0x3487,0x33bc,0x32ed,0x324f,0x319e,0x3106,0x3053,0x2fa6,0x2f2a,0x2e88,0x2e00 ,0x2d63,0x2cd6,\0x2c65,0x2bae,0x2b28,0x2a97,0x2a07,0x298e,0x2914,0x287a,0x280d,0x278a,0x270 3,0x2687,0x2626,\0x25e5,0x256d,0x24ee,0x2489,0x2414,0x23bc,0x2356,0x22d9,0x2278,0x2203}; //温度频率表px0count=2; //测频中断函数参数t0tst=1; //置测频程序开始标志EX0=1; //打开测频外中断testok=0; //清除测频程序完成标志while (!testok) display(); //等待测试完成t0rig=(unsigned int)TH0<<8|TL0; //字节合成字tempmin=0; //以下是二分查表法计算温度值tempmax=100; //tempmin和tempmax为温度表的范围while (1){temp=(tempmax+tempmin)/2; //假定当前温度为最大值与最小值之中点值if (t0rig==temptab[temp]) break; //若实际值等于假定值结束查找else if (t0rig>temptab[temp]) tempmax=temp;//若实际值大于假定值,减小查找范围的最大值else tempmin=temp; //若实际值小于假定值,增大查找范围的最小值if (tempmax-tempmin<=1) //若查找范围已缩小到1度之间,{ //判断实际值更接近哪个端点if (temptab[tempmax]+temptab[tempmin]>2*t0rig) temp=tempmax;//接近最大值取最大值else temp=tempmin; //接近最小值取最小值break; //结束查找}}ctemp=temp; //刷新当前温度寄存器if (temp>65) tempov=1; //如果温度超过65度置位超温标志else if (temp<45) tempov=0; //当温度回落到45度以下时清除超温标志}/*------------------------------------------测温频率测试函数void tempfrequency(void)使用外部X0中断,寄存器组1测出温度——频率转换电路的频率------------------------------------------*/void tempfrequency(void) interrupt 0 using 1{if (--px0count) return; //找齐起点或计数if (t0tst) //如果是起点{t0tst=0; //清除测频开始标志px0count=100; //取100个方波为一次测频TH0=0;TL0=0; //清除计时器T0TR0=1; //开始计时}else //如果是终点{TR0=0; //停止计时EX0=0; //停止测频外中断testok=1; //置位测频完成标志}}/*------------------------------------------可控硅触发信号控制函数void triacctrl(void)使用定时器T1中断,寄存器组3向可控硅送出触发信号------------------------------------------*/void triacctrl(void) interrupt 3 using 3{register unsigned char i;triac=0; //输出可控硅导通信号ET1=0; //关闭定时器T1中断TR1=0; //终止定时器运行for (i=0;i<2;i++); //延时,保证导通信号有足够的宽度triac=1; //完成可控硅导通信号}课程设计体会通过两周的课程设计,对Keil uVision3和Protel有了进一步的认识,对Protel 绘制原理图的过程有了一定的了解,并基本掌握了其应用。