基于msp430的家用太阳能加热控温沐浴系统

点击:    作者:博狗app    来源:博狗bodog    时间:2020-06-19 16:10

  2014毕业论文(电信系)基于MSP430的家用太阳能的加热控温沐浴系统

  内容提示:题 目:基于 msp430 的家用太阳能加热控温沐浴系统摘要(中英文) 针对现在的太阳能加热, 我们的系统分为三部分: 信号输入部分, 加热控制控制部分以及电机控制出水温度部分。 信号输入部分我们采用便于现场控制的键盘输入和便于用户控制的红外输入,加热部分采用的是温度和容量可调的加热系统, 而电机控制采用的是发展较为成熟的 PID 控制以及定位准确的步进电机控制。 三个系统相互联系, 总体上达到淋浴控温和加热目的。 The water heating bath system is designed based on the solar energy water heating The system can be divided into three parts : ...

  题 目:基于 msp430 的家用太阳能加热控温沐浴系统摘要(中英文) 针对现在的太阳能加热, 我们的系统分为三部分: 信号输入部分, 加热控制控制部分以及电机控制出水温度部分。 信号输入部分我们采用便于现场控制的键盘输入和便于用户控制的红外输入,加热部分采用的是温度和容量可调的加热系统, 而电机控制采用的是发展较为成熟的 PID 控制以及定位准确的步进电机控制。 三个系统相互联系, 总体上达到淋浴控温和加热目的。 The water heating bath system is designed based on the solar energy water heating The system can be divided into three parts : definition part , heating and heat preservation part , and stepping motor temperature controlling part 。 For easy control , we use infrared controlling and keypad input method 。 For quickly heating , we defined two modes for heating and heat preservation 。 For quickly and stably temperature controlling in water outlet , we use PID method in running stepping motor 。 1. 引言 简述系统设计的背景、 目的、 和所要解决的问题。 随着进入节能时代, 较好地利用各种的再生资源是我们设计产品的一个重要因素。 太阳能, 作为最容易获得的能量, 渐渐开始成为各种绿色能源的首选。 基于这个立场, 我们基于太阳能加热的方案来设计出水温度的系统, 利用电机控制冷水和热水的混合来达到控制出水温度的目的。 再则考虑到晚上太阳能水箱热能散失导致温度下降热水供给不足的问题, 我们可以需要给予系统加热的功能, 解决晚上用户舒适洗澡的问题。 在用户使用这个模块, 考虑到用户在使用的时候因为浴室的原因, 用液晶显示可能模糊,所以我们选用的是数码管显示输出。 为了便于用户的操作使用, 我们采用红外控制, 同时作为硬件调试和用户必要时的使用, 我们增加用键盘对系统进行直接的控制值设置模块。 考虑到现在的家庭一般都是 3 人家庭, 在水位的设置上面, 我们让用户可以对水位进行设定,分别是超低水位, 一人, 二人和三人水位。 这样既可以节约到加热的时间, 同时也可以节约到在晚上的时候热水洗澡而需要的加热热水的电费。 至于电机控制模块, 为了达到快, 准, 稳的要求, 我们采用了现在比较成熟度 PID 模块来解决电机控制。 我们利用 msp43016x 系列内部的 DAC 模块, 用利用数字 PID 方法算出输出电压, 对步进电机来进行速度和方向的控制。 从而达到了用户出水水温的快, 准, 稳。 2. 系统方案 系统总框图: 系统的总体构造思想是: 用户可以在任意时候设定需要的目标值, 例如水位, 热水箱的温度,以及出水时候的温度。 而对于系统, 我们的做法是: 水位超过的时候不给予进水, 低于最低水位的时候为了保护系统必须关闭出水强行进水同时关闭加热控制。 加热控制和水位控制并行操作, 可以为用户节约时间。 在超低水位时进行过热保护等措施。 为了让洗澡时候的供水温度稳定, 只有水位和热水温度到了设定的参数才准许用户开水洗澡。 在出水控制这一模块, 为了更好地获得稳定快速的输出, 我们会采用现在较为成熟的 PID 算法对在出水控制这一块电机输出进行控制。 最后, 为了方便用户控制, 我们同时采用红外和按钮键盘的方式给系统设定参数。 用红外的方式可以更好的让用户进行控制。 而按钮键盘则为了更容易对系统进行调试以及在应急情况下对系统进行控制。 用户设定 水位控制 加热控制 出水控制 3. 系统硬件设计 以下是对系统的各个子系统的硬件设计进行简要说明: 水位控制模块: 水位控制框图: Y N N 水位控制模块思想比较简单, 只关心水位是否达到设定要求。 没有的时候就进水, 有的时候就停止进水, 节省用水。 设计这一块的时候为了防止因为水位过低而引起的热水箱损坏, 设计时候我们设计了超低水位, 用来对水箱进行保护。 当水位过低的时候, 强行关闭热水阀, 没有热水供出。 同时加水,烧水, 到了安全情况的时候才可以继续正常使用。 水位检测 水位超出? 进水 用户设定参数 超低水位? 关闭热水阀 热水加热模块: 加热模块框图: N Y N Y 加热模块设计思想是: 为了可以快速地达到设定的水温同时可以稳定的控制水温, 我们设定两种加热模式: 快速加热模式和慢速加热模式。 假设那个温度点我们设在设定温度的 70%那里, 那热水水温检测 水温比较低? (要快速加热快速加热模式 水温小于设 定水温? 慢速加热模式 用户参数设定 么在设定温度的 70%以下的时候, 我们把加热模式设置为快速加热模式; 在超过的时候, 我们设置在慢速加热模式。 当温度小于设定温度, 则用慢速加热。 淋浴供水输出模块框图: N Y 电机控制的主要思想是: 首先判断是否用户是否需要淋浴且机器情况正常。 机器不正常或者用户不需要都会关闭冷水阀, 禁止冷水流出。 符合条件之后, 电机控制冷水的进出来控制输出的水温。 PI D 计算输出电压 计算温度偏差(实际出水温度-目标出水温度) 电压驱动输出 需要淋浴出而且情况正常? 冷水水阀关闭 冷水水阀打开 用这种方法的好处是当用户不需要进水的时候或者出现突发情况时候, 系统可以很及时地做出相应, 而且电机的寿命可以得到延长。 同时, 鉴于市面上的水阀控制, 采用PID 算法来控制可以得到更加平稳的调温效果和比较快捷的目标时间。 PID 控制模块: 采用位置式的 PID 算法, 控制系统如下: 设定出水温度 + 淋浴水温输出 - 用户输入模块: PI D 控制算法 D/A 电机调节 温水输出 用户输入模块框图: 用户输入模块分为红外和键盘两部分。 都采用中断的方式, 可以及时对单片机内部的参数赋值, 然后让系统按照新的参数进行调节。 漏电保护模块: 如下图所示: 作为一个沐浴系统所必需的安全保护系统中最重要的漏电保护系统。 一旦出现漏电现象, 立即关闭所有工作(软件控制) 并切断电源(硬件电路控制) 。 键盘扫描中断输入 红外扫描中断输入 用户参数设定 (第一次是标准值) 4. 系统软件设计 详细介绍算法设计与算法流程图(不得大量复制源代码) 系统软件的设计上, 在主程序开始之前, 是参数的设定, 有目标热水温度(aim_hot_temp),目标出水温度(aim_temp), 目标水位设置(aim_water_level), 用户是否使用(use)。 主程序开始部分是对各个端口的设定, 以及关闭 watch dog, 开启各个中断模块的标识。 对单片机的资源分配如下: P1.0~P1.6 键盘输入 P1.7 红外输入 P2.0~P2.3 水位检测 P3.0, P3.1 数码管显示 P4.0 DAC 步进电机电机电压控制输出 P4.1 步进电机电机转向控制输出 P4.2 冷水紧热水箱阀门 P4.3 淋浴热水放出阀门 P4.4 淋浴冷水放出阀门 P5.3 P5.4 热水加热模块(低速高速) P6.0 P6.1 接 ds18b20 温度检测模块接收温度 以下是主程序的 while(1) 模块: while(1) { int Time = 40; //延时部分 { int i; for(; Time!=0; Time--) { for(i=0; i123; i++) ; } } if( P2IN & 0xf0 == 0xf0) { water_level = 0; //这里是水位监测部分。 高八位=1111时候是超低水位 } else if( P2IN & 0xf0 == 0xe0 ) { water_level = 1; //1是低水位 } else if( P2IN & 0xf0 == 0xc0 ) { water_level = 2; //2是一人水位 } else if( P2IN & 0xf0 == 0x80 ) { water_level = 3; //3是二人水位 } else if( P2IN & 0xf0 == 0x00 ) { water_level = 4; } else water_level = 8; //(异常处理) now_temp = Do1Convert() ; //Do1Convert() 是ds18b20 检测出水水温的传递函数 hot_temp = Do2Convert() ; //Do2Convert() 是ds18b20 检测水箱热水水温的传递函数 initdisplay() ; //对显示模块初始 display( now_temp ) ; //显示现在的出水温度 if (use) { aim_water_level -=1; use = 0; } if(water_level = aim_water_level ) //p42 = 1 是冷水阀门开 否则关闭 p43 = 1是热水阀开, 否则关闭 { P4OUT P4OUT = BIT3; } else { P4OUT = BIT2; P4OUT } if(hot_temp = 0. 7 * aim_hot_temp) //加热判断, 符合上述框图的条件就开启或者关闭热水加热. { P5OUT = 0x0c; } else if(hot_temp aim_hot_temp) { P5OUT = 0x04; //p53=1 P5OUT //p54=0 } else { P5OUT } if(hot_temp aim_hot_temp - 3) //当热水温度低于目标热水温度3摄氏度的时候可以淋浴 { P4OUT = BIT3; P4OUT = BIT4; if(P4OUT & 0x04 == 0x04) //如果热水阀开了 控制电机 { temp_distant = PID_Caculate(aim_temp - now_temp) ; if(temp_distant = 0 ) //电机部分 { P4OUT = 0x02; //正向 DAC12_Set0( (int) temp_distant ) ; //电压控制转动, 下面亦然 } else { P4OUT //反方向 DAC12_Set0( (int) -temp_distant ) ; } } else { P4OUT P4OUT } } } 以下是while(1) 的流程图: 延时程序 检测参数(当前水箱水温, 出水水温, 水位) 用户正在使用use=1? 目标水位-=1 use = 0 Y N N 打开相应 Y N Y 电机控制的部分我们采用 PID 算法。 PID 算法的控制如下: PID 控制算法框图如下: 输入 水位到了吗?阀门进水 水箱温度符合要求吗? 电机控制调节出水温度 温度误差 比例放大 P 积分环节 误差记录队列 + + + 输出结果 输出 输出结果会直接反馈到 DAC 环节里里面, 用电压开控制步进电机驱动来达到控制步进电机的目的。 为了防止在水温变化环境异常, 比如热水箱收到破坏而造成温度骤降, 以及让温度控制系统调节的时候超调量幅值较小, 在这个环节里面, 我们在积分环节和输出环节都采用限幅环节。 有限幅环节的 PID 算法会更加平稳, 安全性更高, 在工业现场的应用也相对广泛。 PID 算法代码如下: int PID_Caculate(int Error) { int i; float OutPut; if(FirstFlag) //判断第一次上电 { FirstFlag=0; //以后再也不执行 for(i=0; i10; i++) Prev_Error[i]=Error; } //上电第一次测量时填满队列, 以免微分计算错误 for(i=0; i9; i++) Prev_Error[i+1]=Prev_Error[i]; //FIFO队列 Prev_Error[0]=Error; //记录前10次 Ek=Error-Prev_Error[Diff_Order] ; //相邻N个数取差分Delta E=Ek; P=P_Coefficient*Error; //计算比例分量 I=I_Coefficient*Integral; //计算积分分量 //D=D_Coefficient*(Error-Prev_Error[Diff_Order]) ; //计算微分分量(传统算法) D=D_Coefficient*E; //计算微分分量 (带一阶低通的微分) OutPut=P+I+D; if((OutPut2700) (Error300) (Error-300) ) //饱和或偏差大不积分(效果不太好) { if ((Integral0) &&(Error0) ) Integral+=Error; if ((Integral0) &&(Error0) ) Integral+=Error; //两种有助于控制的情况例外 } else //较小偏差时才启动积分 { Integral+=Error; } if(Integral-Set_Integral) Integral = -Set_Integral ; //积分限幅 if(Integral Set_Integral) Integral = Set_Integral; if(OutPutSet_Output) OutPut=Set_Output; else if (OutPut-Set_Output) OutPut=-Set_Output; //输出限幅, Set_Output表示的是输出的幅值 return (OutPut) ; } 中断部分模块设计: 中断部分主要包括两个部分: 控制信号输入中断、 水位过低信号中断以及漏电保护系统。 控制信号中断每次修改参数的时候都会引发中断, 待用户设定好参数之后恢复现场继续主程序。 而水位过低信号中断则是当水位过低的时候引发中断, 系统进行保护措施, 控制确保现场安全, 水位安全中断结束, 系统继续运行。 中断模块流程图如下: N P1 中断源触发? Y Y N N Y P2 中断模块流程图: N Y 键盘有输入? 用户参数设定恢复现场 红外有输入? P2 中断源触发? 关闭热水阀 水箱注水 5. 系统创新 对于我们的系统, 在整体上说考虑到的因素比较多。 例如水位的控制, 安全的控制, 以及一些节能的思想。 我们采用电压控制步进电机, 利用 430 内有的资源 DAC 资源, 可以得到精度为 1/256 甚至更高的精度。 与此同时, 我们采用 PID 算法, 让水温的控制的速度更敏捷,而且更稳定。 系统的创新性, 更多会体现在系统总体的节能, 安全和控制的快捷和精确方面。作为一个纯粹的智能家用淋浴系统, 在节能上、 功能上、 安全保护上是一个不错的选择。 6. 评测与结论 采用 proteus 软件进行软件仿真, 是可行的。 但是在硬件上面, 由于在热水阀模块上,水阀采用的是螺丝丝锥进行的传动, 水管接口保密性要求比较高, 出现的问题比较严重。 保密垫圈的选择及其重要。 第二个问题是, 在电动机负载与实际力矩之间出现的误差比较大,与 matlab 软件仿真以及 pro/e 仿真的结果误差比较大, 完全延误了产品的最后设计。 附录 参考文献: 1.《MSP430 单片机原理与应用实例》 洪利 章扬 李世宝 编 北京航空航天大学出版社 2.《MSP430 系列单片机系统工程设计与实践》 谢楷 赵建 编 机械工业出版社 3.《智能型浴室混水阀控制器的设计》 李双喜 安徽技术师范学院 4.《智能家用电热水器控制器》 第四届MOTOROLA 杯 嵌入式处理器设计大赛参赛作品 恢复现场

博狗app
上一篇:东莞市宏浩五金制品有限公司
下一篇:淋浴屏怎么选青海_约克智能电器