快热式家用电热水器精编版.docx
- 文档编号:7816461
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:23
- 大小:330.08KB
快热式家用电热水器精编版.docx
《快热式家用电热水器精编版.docx》由会员分享,可在线阅读,更多相关《快热式家用电热水器精编版.docx(23页珍藏版)》请在冰豆网上搜索。
快热式家用电热水器精编版
快热式家用电热水器
1功能要求
当前,热水器已成为日常生活中不可缺少的家用电器,设计制造更实用、更方便、更安全、更节能的热水器是产品设计师和生产厂家不断追求的目标。
快热式电热水器与普通电热水器最大的区别在于它取消了储水罐,热水随开随用,无须预热,减少了电能浪费。
另外,它还具有体积小,使用安全,安装方便等优点。
其设计要求如下:
用2位数码管显示出水温度,能显示设定功率档位。
温度检测显示范围为00~99℃,精确度为±1℃。
设置3个功率档位指示灯,1~4档1个灯亮,5~8档2个灯亮,9档3个灯全亮。
O档无功率输出,档位灯不亮。
设置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数码管及指示灯电路、报警电路和加热控制电路。
图1快热式电热水器系统组成框图
快热式电热水器为了达到“快热”的效果,取消了储水罐,使冷水在进入加热管后立即被加热,这就要求加热管有较大的功率。
家用电热水器一般采用方便、可靠的电热丝加热方法。
根据热学及流体力学原理,结合实际实验室测试,可以得到水温与流量、加热功率之间的关系如表1所列。
表1中所列水温值和流量值可以满足大多数家庭用户使用要求。
当最大的加热功率为7.5kW时,按220V供电计算,电流约为34A,所以要求专线供电。
表14.1水温与流量、加热功率的关系
温度℃水流量
L.min-1
功率kW
2
2.5
3
3.5
4
4.5
47
42
36
34
32
S.5
54
48
41
38
35
6.5
62
54
46
42
38
7.5
70
60
51
46
41
注:
进水温度为15℃,输入电压为AC220V。
对于加热功率的控制,最简单的方法是由若干不同功率的电热丝组合得到几种加热功率.但由于快热式热水器的加热功率较普通的大,且档位设置较多,用电热丝组合的方法需要几组电热丝和继电器,成本增高且工作可靠性降低,所以比较理想的是采用可控硅控制功率,电路简单又控制方便。
温度检测的方法较多,最经典的方法就是用热敏电阻(或热敏传感器)组成电桥来采集信号,再经放大、A/D转换后送单片机。
目前比较先进的方法是采用专门的集成测温传感器(如DS18B20),直接将温度转换成数字信号传送给单片机。
为了简化电路,降低成本,本文采用了温度/频率转换测温法,直接将温度信息转换成频率信号,用单片机测出频率大小,从而间接测出温度值,温度/频率转换电路简单可靠,成本低廉。
3系统硬件电路的设计
快热式热水器控制系统电路如图2所示。
它由7部分电路组成:
单片机系统及外围电路、电源电路、按键输入电路、LED数码管及指示灯电路、报警电路、加热控制电路和温度检测电路。
控制器采用成本低廉且工作可靠的89C51或其兼容系列的单片机,采用12MHz的晶振。
89C51对电源要求不甚严格,电源电路采用普通的市电降压整流,然后经集成稳压器(7805)稳压输出+5V电压。
按键采用轻触小按钮。
显示电路采用两位共阳数码管,由两个三极管9012驱动。
3个LED指示灯用于指示加热功率。
报警电路采用5V的自鸣式蜂鸣器。
3.1加热控制电路
图3所示为加热控制电路原理图,电热丝的加热功率由双向可控硅控制,单片机通过光耦给可控硅触发信号,控制可控硅的导通角,从而控制电热丝的有效加热功率。
为了在关机和超温保护的状态下能可靠地关断加热电源,电路中加入了继电器来控制加热电源。
其中串联在继电器线圈回路的熔丝为105℃的热保险丝,当温度超过105℃时,热保险丝会熔断,防止加热管干烧。
与电热丝并联的LED发光管用来指示电热丝的工作状态。
可控硅触发信号中需要对市电进行过零检测,以实现触发脉冲的相位延时。
本电路中是利用三极管8050和一个“非”门实现过零检测的,电路如图4所示。
图3加热控制电路图
图4过零检测电路图
3.2温度检测电路
温度检测电路如图14.5所示,温度/频率变换电路是利用反相器组成的RC多谐振荡器,其中的R24是一个热敏电阻,当温度变化时引起热敏电阻的阻值变化,从而改变了振荡器输出的方波频率。
该频率的估算可用如下公式:
f≈1.1RC
图5温度检测电路图
4系统程序的设计
按快热式热水器的功能,系统程序必须实现显示扫描、按键扫描处理、加热控制和温度检测(包括超温报警)4项任务。
51系列单片机实现多任务运行的方法就是分时复用,在程序设计时要相应地分配好各任务的CPU占用时间。
对于以上几个任务稍加分析可以看出,显示扫描、按键扫描和加热控制任务相对而言有实时要求,而温度检测任务则可用定时(0.5~1s)实现。
4.1主程序
系统在上电复位后,先对温度寄存器、档位寄存器赋默认值,并进行清除超温标志,设置定时器及中断系统的工作方式等初始化工作。
由于51系列单片机没有停机指令,所以可以利用主程序设置死循环反复运行各个任务。
把有实时要求的子程序(显示扫描、按键扫描、加热控制)放在最内层的循环中,计算其运行一次占用的CPU时间,然后根据温度检测定时的间隔时间,计算出该循环的循环次数。
本例中每运行一次有实时要求的子程序(即显示扫描、按键扫描、加热控制)约占用5msCPU时间,运行测温子程序的时间间隔为0.5s,那么循环次数应为100次。
图6所示为主程序流程图。
4.2显示扫描子程序
显示扫描子程序完成两位共阳数码管的扫描显示任务。
图7所示为显示扫描子程序流程图。
4.3按键扫描处理子程序
按键扫描子程序负责逐个扫描档位“+”键、档位“一”键和开关键是否被按下,若有键被按下,则作出相应处理。
图8所示为按键扫描子程序程序流程图。
图8按键扫描子程序流程图
4.4加热控制程序
加热控制程序根据用户设定的加热档位和系统当前的状态,决定是否加热和控制加热的功率并点亮相应的指示灯。
若有超温标志,还应打开蜂鸣器报警。
图9所示为加热控制程序流程图。
加热控制程序通过控制继电器的通断来决定是否给电热丝通电加热,而加热的功率大小则由双向可控硅的导通角决定。
系统程序利用外中断INT1检测市电的过零点,检测到过零点后,立即根据设定的加热档位给定时器T1赋一个延时参数,并打开定时器T1,允许其中断。
当定时器T1计满溢出后触发中断,T1中断程序就会给可控硅发一个触发信号,使其导通。
图10和图11所示分别为过零检测程序流程图和可控硅触发信号控制程序流程图。
图9加热控制程序流程图
图10过零检测程序流程图
图11可控硅触发信号控制程序流程图
4.5温度检测程序
温度检测程序的基本原理就是将温度/频率转换电路测得的频率与事先建立好的温度/频率表进行比较,查找出与该频率相应的温度值。
在实验测试后建立的温度/频率表是O~100℃温度所对应的频率值。
它是一个频率对应于温度递减的非线性函数,在C语言中用一个一维数组Tab[101]来表示,下标为温度,数组元素为频率值。
计算温度的方法采用高效、准确的二分法查表,查表的过程如下:
①先给定查找的温度最大值Tmax和最小值Tmin,即确定查找的范围,根据已有的温度表默认最大值Tmax=100,最小值Tmin=0。
②假定测得温度Temp为最大值与最小值的中间值,即Temp=(Tmax+Tmin)/2。
③将实际测得的频率值TOrig与假定温度Temp在表格中对应的频率Tab[temp]相比较,如果相等,那么假定温度就是当前实际温度,即完成查找。
④若TOrig>Tab[temp],说明实际温度应该在Tmin与Temp之间(因为递减函数特性),则修改查找范围,令Tmax=Temp;同理,若TOrig ⑤检查查找范围,若Tmax一Tmin≤1,则判断TOrig更接近最大值对应的频率Tab[Tmax]还是最小值对应的频率Tab[Tmin],实际温度值取频率更接近的那个值即完成查找。 ⑥若Tmax-Tmin>l,则重复第②、③、④、⑤步骤、直到完成查找。 温度检测程序完成温度计算后,便刷新系统当前温度寄存器,并判断有无超温、置位或清除相应的标志位。 图12所示为温度检测程序流程图。 图12温度检测程序流程图 单片机使用外中断INTO和计时器TO检测输入频率的大小。 为了减少测量的系统误差相对值和随机误差对测量精度的影响,程序中取100个方波周期的和作为测量结果。 程序中使用静态变量pxOcount进行外中断的计数,在测量开始时,给pxOcount赋值2是为了让频率测量有准确的起点。 另外,为了区分测频的开始和结束,还使用了测频开始标志位TOtst和测频完成标志位Testok。 图13所示为频率测试程序流程图。 图13频率测试程序流程图 5调试及性能分析 快热式热水器硬件电路不包含任何可调节元件,因此只要器件质量可靠,引脚焊接正确,硬件电路无须调试。 该电路中测温部分的振荡电路对电容Cl的容量比较敏感,若此电路要批量化生产,可在热敏电阻R24上再串一个可变电阻,以补偿C1的容量变化。 在初次试做本电路或关键硬件参数有调整时,应对系统软件中控制加热功率的可控硅导通角延时参数表和温度/频率转换表这两部分进行调试。 可控硅导通角延时参数主要由市电的频率和过零检测电路的脉冲宽度决定,可以先根据市电频率,按等功率的要求计算理论值,再根据过零检测电路的脉冲宽度加以调整。 温度/频率转换表可以用对照标准温度计实测的办法进行测试。 图14.14所示为用实际电路在实验室测得的温度/频率曲线图。 用这个方案设计的快热式家用电热水器,电路简单,成本较低,经试验运行证明工作稳定,可靠,在无须改变硬件的条件下,如加入PID等自动控制程序还可以升级成自动控温的电热水器。 图14温度/频率曲线图 6控制源程序清单 以下是快热式电热水器控制源程序清单,采用C51编写,在KeilC51环境下调试通过,并下载到AT89C51测试运行成功。 /*-------------------------------------- 快热式热水器程序 MCUAT89C51XAL12MHz BuildbyGavinHu,2005.3.18 --------------------------------------*/ //#pragmasrc #include #include #include voiddelay(unsignedint);//延时函数 voiddisplay(void);//显示函数 unsignedcharkeyscan(void);//按键扫描处理函数 voidheatctrl(void);//加热控制函数 voidtemptest(void);//测温函数 sbitswkey=P1^0;//开关键 sbitupkey=P1^1;//加热档位“+”键 sbitdownkey=P1^2;//加热档位“-”键 sbitbuzz=P1^05;//蜂鸣器输出端 sbittriac=P1^6;//可控硅触发信号输出端 sbitrelay=P1^7;//继电器控制信号输出端 sbitled1=P2^5;//加热档位指示灯1 sbitled2=P2^6;//加热档位指示灯2 sbitled3=P2^7;//加热档位指示灯3 signedchardatactemp;//当前测得水温寄存器 unsignedchardatadispram[2]={0x10,0x10};//显示区缓存 unsignedchardataheatpower,px0count;//加热档位寄存器、外中断0计数器 bittempov,t0tst,testok;//超温标志、测温开始标志、测温完成标志 /*---------------------------------------------- 主函数voidmain(void) 无参数,无返回值 循环调用显示、键扫描、温度检测、加热控制函数 ----------------------------------------------*/ voidmain(void) { unsignedchari,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;//如果有键按下,显示当前档位3s display();//调用显示函数一次约4ms heatctrl();//调用加热控制函数 }//endfor(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;//送显示(带灭零) }//endwhile (1) } /*-------------------------------------- 延时函数voiddelay(unsignedintdt) 参数: dt,无返回值 延时时间=dt*500机器周期 --------------------------------------*/ voiddelay(unsignedintdt) { registerunsignedcharbt;//定义寄存器变量 for(;dt;dt--) for(bt=250;--bt;);//此句编译时以“DJNZ”实现,250*2=500机器周期 } /*-------------------------------------- 显示函数voiddisplay(void) 无参数,无返回值 两位共阳数码管扫描显示 --------------------------------------*/ voiddisplay(void) { unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,\ 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff}; unsignedchari,a; a=0xfe;//位选赋初值 for(i=0;i<2;i++)//循环扫描两位数码管 { P2|=0x1f;//清除位选 P0=table[dispram[i]];//送显示段码 P2&=a;//选通一位 delay(4);//延时2ms a=_crol_(a,1);//改变位选字 P0=0xff;//消影 } } /*---------------------------------------------------------- 按键扫描处理函数unsignedcharkeyscan(void) 无参数,返回值: 无符号字符型,无键按下为0,有键按下为其它 影响全局变量: heatpower ----------------------------------------------------------*/ unsignedcharkeyscan(void) { unsignedchari,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);//返回有键按下 } elseif(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);//返回有键按下 } elseif(swkey==0)//开关键 { buzz=0;//打开蜂鸣器(发出按键音) for(i=0;i<30;i++)display();//延时消抖 buzz=1;//关闭蜂鸣器 swkey=1;//置位开关键 while(swkey==0)display();//等待键释放 ch=IE;//暂存中断控制字IE IE=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;//还原中断控制字IE return(0);//返回无键按下 } elsereturn(0);//无任何键按下时由此返回 } /*-------------------------------------- 加热控制函数voidheatctrl(void) 无参数,无返回值 判断是否加热、加热功率及档位指示灯处理 --------------------------------------*/ voidheatctrl(void) { if(! tempov)//当没有超温标志时 { relay=0;//接通继电器 buzz=1;//关闭蜂鸣器 switch(heatpower)//判断加热档位 { case0: {EX1=0;ET1=0;triac=1;led1=1;led2=1;led3=1;break;}//0档不加热,指示灯不亮 case1: case2: case3: case4: {led1=0;led2=1;led3=1;EX1=1;break;}//1~4档1号指示等亮 case5: case6: case7: case8: {led1=0;led2=0;led3=1;EX1=1;break;}//5~8档1号、2号指示灯亮 case9: {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;//蜂鸣报警 } } /*-------------------------------------- 测温函数voidtemptest(void) 无参数,无返回值, 影响全局变量: ctemp,tempov 测量并查表计算温度,判断是否超温 --------------------------------------*/ voidtemptest(void) { signedchartemp,tempmin,tempmax; unsignedintt0rig; unsignedintcodetemptab[]={0x6262,0x61eb,0x6171,0x60f7,0x6047,0x5ff7,0x5f6e,0x5eef,0x5e53,0x5dbe,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,\
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 快热式 家用 电热水器 精编