家用热水器计算机控制课程设计

上传人:h****M 文档编号:53471065 上传时间:2022-02-10 格式:DOCX 页数:27 大小:224.07KB
返回 下载 相关 举报
家用热水器计算机控制课程设计_第1页
第1页 / 共27页
家用热水器计算机控制课程设计_第2页
第2页 / 共27页
家用热水器计算机控制课程设计_第3页
第3页 / 共27页
点击查看更多>>
资源描述
1 引言现在热水器大部分都是快热式热水器,它给我们的生活带来了极大的便利,这使是它走进千家万户成为必然目前燃气式热水器因为它的安全隐患和越来越高的成本正在逐渐退出热水器市场。而太阳能热水器虽然环保无污染,但它寿诞天气。气候及安装条件的严格限制。很难占据更大的市场份额。目前主流的贮水式电热水器,体积庞大、预热时间长、热水储量有限,已经不适合现代生活的节奏。于是,快热式热水器小巧时尚的外观,安全可靠的性能让它有着广泛的发展和应用前景。普通电热水器有以下几个缺点:首先,因为电热水器长期通电,保持 60 度以上的高温,发热管容易结垢,内胆容易漏水,比较容易损坏。我们学校的电热水器经常因为结垢堵塞出水口水流越来越小,给师生的饮水带来不便;其次,管道及水箱本身热量损耗大,等候热水所用时间较长;再次,在热水流出前都必须浪费一定量的冷水,根据管道的长短,这样既不环保,又不经济。而快热式热水器克服了上述缺点。它安全、干净、环保、即开即热。3 5 秒出热水,无需等候,热水使用时间不受限制。2 系统总体方案功能要求用 2 位数码管显示出水温度,能显示设定功率档位。温度检测显示范围 0099,精确度 1。设置 3 个功率档位指示灯, 14 档一个灯亮, 58 档两个灯亮, 9 档 3 个灯全亮。 0 档无功率输出,档位灯不亮。设置 3 个轻触按钮,分别为电源开关键、 “+”键和“ -”键。加热功率分09 档,按“ +”键依次递增至 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 数码管及指示灯电路、报警电路和加热控制电路。温度检测单片机LED 显示按键输入蜂鸣报警电源加热控制图 2.1快热式电热水器系统组成框图快热式电热水器为了达到“快热”的效果,取消了储水罐,使冷水在在进入加热管后立即被加热,这就要求加热管有较大的功率,家用电热水器一般采用方便可靠的电热丝加热方法。根据热学及流体力学原理结合实际实验室测试,可以得到水温与流量、加热功率之间的关系如表 2.1。表 2.1 中所列水温值和流量值可以满足大多数家庭用户使用要求,当最大的加热功率为7.5KW 时,按 220V 供电计算电流约为34A,所以要求专线供电。表 2.1水温与流量、加热功率的关系温度 C水流量2升/分钟2.5 升/ 分钟3升/分钟3.5 升/ 分钟4升/分钟功率4.5KW47423634325.5KW54484138356.5KW62544642387.5KW7060514641注:进水温度15,输入电压AC220V对于加热功率的控制, 最简单的方法是由若干不同功率的电热丝组合得到几种加热功率, 但由于快热式热水器的加热功率较普通的大,且档位设置较多,用电热丝组合的方法需要几组电热丝和继电器,成本增高且工作可靠性降低,所以比较理想的是采用可控硅控制功率,电路简单又控制方便。温度检测的方法较多,最经典的方法就是用热敏电阻(或热敏传感器)组成电桥来采集信号,再经放大、AD 转换后送单片机。目前比较先进的方法是采用专门的集成测温传感器(如DS18B20),直接将温度转换成数字信号传送给单片机。为了简化电路又降低成本,本文采用了温度 /频率转换测温法,直接将温度信息转换成频率信号,用单片机测出频率大小,从而间接测出温度值,温度/频率转换电路简单可靠,成本低廉。3 系统硬件电路的设计快热式热水器控制系统电路如图3.1,由 7 个部分电路组成:单片机系统及外围电路、电源电路、按键输入电路、LED 数码管及指示灯电路、报警电路、加热控制电路、温度检测电路。控制器采用成本低廉且工作可靠的89C51 或其兼容系列的单片机,采用12M 的晶振。 89C51 对电源要求不甚严格,电源电路采用普通的市电降压整流,然后经集成稳压器(7805)稳压输出 +5V 电压。按键采用轻触小按钮。显示电路采用两位共阳数码管,由2 个三极管 9012 驱动, 3 个 LED 指示灯用于指示加热功率。报警电路采用5V 的自鸣式蜂鸣器。1234U3B+5VC3+5VU2DS1DS2200 *843C231391aDPY1aDPYEA/VPP0.0R1133P382a2aP0.1R12bb105Y1193733U3C74LS04U3AX1P0.2c fbcfb12M36R1344R24P0.3R14dgdg5612C43555P0.4R15e eceecD1834661KR4 100X2P0.5R16fdfdC1337dp7dp74LS0474LS04P0.6R17gg33P3288P0.7dpdpR59R18RESET共阳共阳0.056uF8.2K21P2.0C822Q3Q410uP2.1+5V1223INT0P2.2R9+5V1324INT1P2.31425T0P2.44.7K1526T1P2.52790129012R1P2.6128P1.0P2.7+5V10K2P1.1R10S1317U3DP1.2RD4164.7KP1.3WR98529P1.4PSEN630LED2P1.5ALE/PR19S271174LS04P1.6TXD+5V810510CR6P1.7RXDQ14.7K89C51R20LED3S3Q2510DC8050R21MR310KB1D2D5T142220V220/9V1N4007*43A19012R21LED4U4510R7510R23Q55V90124.7KD1+5VU5R251N4007U1MOC3023heaterK17805D6LED113R22Vin DVout20K/2W1N4007NGR82K/1W2F1C7C9FUSE470u/10VQ61000u/16VC5C60.1u0.1uBTA41TitleFast Water Heater circuit图 3.1快热式家用电热水器控制电路图SizeNumberRevisionA4Date:10-Apr-2005Sheet ofFile:出版物热水器heaterheater1.DDrawnB By: Gavin Hu234BA加热控制电路123图 3.2 为加热控制电路原理图,电热丝的加热功率由双向可控硅来控制,单片机通过光耦给可控硅触发信号, 控制可控硅的导通角, 从而控制电热丝的有效加热D功率。为了在关机和超温保护的状态下能可靠地关断加热电源,电路中设计了继电器来控制加热电源。其中串联在继电器线圈回路的熔丝为 105的热保险丝,当温度超过 105时,热保险丝会熔断,防止加热管干烧。与电热丝并联的 LED 发光管用来指示电热丝的工作状态。可控硅触发信号中需要对市电进行过零检测,以实现触发脉冲的相位延时。 本电C路中是利用三极管8050 和一个非门实现过零检测的,电路如图3.3。+5VQ5R7LED1R23P1.6P1.7510R224.7K20K/2W9012U5R8R252K/1WheaterK1D6+5VQ6BMOC3023BTA411N4007F1FUSE220V12图 3.2 加热控制电路图AD+5VU3D1R198D2D5INT110KT174LS04Q1R3142280503220V10K220/9VR21N4007*41M3C图 3.3过零检测电路图温度检测电路温度检测电路组成如图3.4 所示,温度 /频率变换电路是利用反相器组成的RC 多TitleSizeA4Date:File:B谐振荡器,其中的R24 是一个热敏电阻,当温度变化时引起热敏电阻的阻值变化,从而改变了1振荡器输出的方波频率。该频率的估算可用2如下公式:f1.1RC式 3.1U3BD43U3CR2474LS04U3A5612INT0C11KR4 10074LS0474LS040.056uF图 3.4 温度检测电路图4 系统软件程序的设计C3B按快热式热水器的功能, 系统程序必需实现以下任务: 显示扫描;按键扫描处理;加热控制;温度检测(包括超温报警) 。51 系列单片机实现多任务运行的方法就是分时复用,在程序设计的时候要相应地分配好各任务的 CPU 占用时间。对于以上几个任务稍加分析可以看出, 显示扫描、按键扫描和加热控制任务相对而言有实时要求,而温度检测任务则可用定时( 0.51s)实现。主函数系统在上电复位后, 先对温度寄存器、 档位寄存器赋默认值, 并进行清除超温标志,设置定时器及中断系统的工作方式等初始化工作。由于 51 系列单片机没有停机指令,我们可以利用主程序设置死循环反复运行各个任务。我们把有实时要求的子程序(显示扫描、按键扫描、加热控制)放在最内层的循环中,计算其运行一次占用的CPU 时间,然后根据温度检测定时的间A隔时间,计算出该循环的循环次数。本例中每运行一次有实时要求的子程序(即显示扫描、按键扫描、加热控制)约占用5ms CPU 时间,运行测温子程序的时12间间隔为 0.5s,那么循环次数应为100 次。图 4.1 为主函数程序流程图。显示扫描子函数显示子函数完成两位共阳数码管的扫描显示任务, 图 4.2 为显示扫描子函数程序流程图。3开始系统初始化开始i=1赋位选初值按键扫描清除位选若有键按下i=6显示扫描送显示段码加热控制选通并延时 2ms否完成 100次循环 ?是温度检测否-i = 0 ?是改变位选字消影否完成 2位扫描?是刷新显示温度结束图 4.1 主函数程序流程图图 4.2 显示扫描子函数程序流程图按键扫描处理子函数按键扫描子函数负责逐个扫描档位“+”键、档位“-”键和开关键是否被按下,若有键被按下则作出相应处理。图4.3 为按键扫描子函数程序流程图。开始否“ +”键按下 ?是否“ -”键按下 ?发按键音、消抖是否开关键按下 ?发按键音、消抖加热档位加 1是发按键音、消抖加热档位减 1返回值 1返回值关机,停止输出2等待开关键再次按下开机,恢复工作返回值 0结束图 4.3 按键扫描子函数程序流程图加热控制函数加热控制程序根据用户设定的加热档位和系统当前的状态,来决定是否加热和控制加热的功率并点亮相应的指示灯。如有超温标志还应打开蜂鸣器报警。图 4.4 为加热控制函数程序流程图。加热控制程序通过控制继电器的通断来决定是否给电热丝通电加热,而加热的功率大小则由双向可控硅的导通角决定。系统程序利用外中断 INT1 检测市电的过零点,检测到过零点后, 立即根据设定的加热档位给定时器 T1 赋一个延时参数,并打开定时器 T1,允许其中断。当定时器 T1 计满溢出后触发中断, T1 中断程序就会给可控硅发一个触发信号, 使其导通。图 12.10、12.11 分别是过零检测函数程序流程图和可控硅触发信号控制函数程序流程图。开始否有超温标志 ?是接通继电器断开继电器关闭蜂鸣器关闭可控硅加热档位蜂鸣报警0档14档58档9档不加热外中断控制加热外中断控制加热全功率加热指示灯不亮1#指示灯亮1#、2#指示灯亮指示灯全亮结束图 4.4 加热控制函数程序流程图开始( T1 中断)开始输出可控硅导通信号(过零信号 )关闭定时器 T1 中断根据设定档位给定时终止定时器运行器 T1 赋延时参数延时,保证导通信号允许定时器 T1 中断有足够的宽度打开定时器T1结束可控硅导通信号结束结束图 4.5 过零检测函数程序流程图图 4.6 可控硅触发信号控制程序流程图开始打开测频外中断等待测试完成Tmin=0,Tmax=100Temp=(Tmin+Tmax)/2否T0rig=Tabtemp?是否T0rigTabtemp?是Tmax=TempTmin=Temp否Tmax-Tmin65?是否Temp Tabtemp,说明实际温度应该在 Tmin 和 Temp 之间(因为递减函数特性),所以修改查找范围令 Tmax=Temp,同理如果 T0rig Tabtemp,说明实际温度应该在 Temp 和 Tmax 之间,则令 Tmin=Temp; 检查查找范围,如果 Tmax-Tmin1 ,那么重复第步骤直到完成查找。温度检测程序完成温度计算后便刷新系统当前温度寄存器, 并判断有无超温、 置位或清除相应的标志位。图 4.7 为温度检测函数程序流程图。单片机使用外中断INT0 和计时器 T0 检测输入的频率大小,为了减少测量的系统误差相对值和随机误差对测量精度的影响,程序中取 100 个方波周期的和作为测量结果。程序中使用静态变量px0count 进行外中断的计数,在测量开始时,我们给 px0count 赋值 2 是为了让频率测量有准确的起点。另外,为了区分测频的开始和结束, 还使用了测频开始标志位T0tst 和测频完成标志位Testok。图 4.8为频率测试函数程序流程图。开始( X0 中断)否-px0count=0?是是起点 ?否是清除测频起点标志停止计时器 T0px0count=100停止测频外中断计时器 T0 清零置位测频完成标志启动计时器T0结束图 4.8 频率测试函数程序流程图5 系统程序清单以下是快热式电热水器控制源程序清单,采用C51 编写,在 Keil uVision2 V2.30( C51.exe V7.0)环境下调试通过,并下载到AT89C51 测试运行成功。/*-快热式热水器程序MCU AT89C51XAL 12MHz-*/#include #include #include void delay(unsigned int);/ 延时函数void display(void);/显示函数unsigned char keyscan(void);/ 按键扫描处理函数void heatctrl(void);/加热控制函数void temptest(void);/测温函数sbit swkey=P10;/ 开关键sbit upkey=P11;/ 加热档位“ +”键sbit downkey=P12;/ 加热档位“ -”键sbit buzz=P105;/ 蜂鸣器输出端sbit triac=P16;/ 可控硅触发信号输出端sbit relay=P17;/ 继电器控制信号输出端sbit led1=P25;/加热档位指示灯 1sbit led2=P26;/加热档位指示灯 2sbit led3=P27;/加热档位指示灯 3signed char data ctemp;/当前测得水温寄存器unsigned char data dispram2=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;dofor (j=0;j100;j+)/ 循环100 次约0.5sif (keyscan() i=6;/如果有键按下,显示当前档位3sdisplay();/调用显示函数一次约4msheatctrl();/ 调用加热控制函数/end for (b=0;b100;b+)temptest();/每 0.5s 进行一次测温 while (-i);/通过改变循环次数i 的大小决定是否刷新显示j=abs(ctemp);/ 取温度绝对值dispram1=j%10;/ 取个位数送显示j/=10;/取十位数dispram0=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; i2; i+)/循环扫描两位数码管P2|=0x1f;/清除位选P0=tabledisprami;/ 送显示段码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;i5;i+) display();/延时消抖buzz=1;/ 关闭蜂鸣器if (heatpower9) heatpower+; /档位加一dispram0=0;dispram1=heatpower;/显示当前档位while (upkey=0) display();/等待键释放return (1);/返回有键按下else if (downkey=0)/“ -”键buzz=0;/ 打开蜂鸣器(发出按键音)for (i=0;i0) heatpower-; /档位减一dispram0=0;dispram1=heatpower;/显示当前档位while (downkey=0) display(); / 等待键释放return (2);/返回有键按下else if (swkey=0)/开关键buzz=0;/打开蜂鸣器(发出按键音)for (i=0;i30;i+) display(); /延时消抖buzz=1;/ 关闭蜂鸣器swkey=1;/ 置位开关键while (swkey=0) display();/等待键释放ch=IE;/ 暂存中断控制字IEIE=0x00;P0=0xff;P1=0xff;/禁止中断P2=0xff;/清除端口输出dispram0=0x10;dispram1=0x10;/ 显示“ -”display();while (1)while (swkey) display();/ 等待开关键按下buzz=0;/打开蜂鸣器(发出按键音)for (i=0;i10;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; /14 档 1 号指示等亮case 5:case 6:case 7:case 8: led1=0;led2=0;led3=1;EX1=1;break; /58 档 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,0x550e,0x5444,0x5396,0x52dd,0x5240,0x5189,0x50b0,0x5005,0x4f20,0x4e69,0x4db1,0x4cef,0x4c42,0x4b64,0x4aaa,0x49e1,0x48fc,0x4847,0x476c,0x46b1,0x4604,0x4503,0x4449,0x4356,0x4299,0x41c0,0x40ce,0x3ff0,0x3f2b,0x3e33,0x3d86,0x3ca6,0x3bd2,0x3b26,0x3a39,0x3973,0x38a6,0x37ef,0x373f,0x3687,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,0x2703,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)TH0temptabtemp) tempmax=temp;/若实际值大于假定值,减小查找范围的最大值else tempmin=temp;/若实际值小于假定值,增大查找范围的最小值if (tempmax-tempmin2*t0rig) temp=tempmax;/接近最大值取最大值else temp=tempmin;/接近最小值取最小值break;/结束查找ctemp=temp;/刷新当前温度寄存器if (temp65) tempov=1;/如果温度超过 65 度置位超温标志else if (temp45) tempov=0;/当温度回落到45 度以下时清除超温标志/*-测温频率测试函数void tempfrequency(void)使用外部 X0 中断,寄存器组1测出温度频率转换电路的频率-*/void tempfrequency(void) interrupt 0 using 1if (-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向可控硅送出触发信号-
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!