单片机的家用太阳能加热控温沐浴系统



基于 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. 引言

简述系统设计的背景、目的、和所要解决的问题。 随着进入节能时代,较好地利用各种的再生资源是我们设计产品的一个重要因素。太阳 能,作为最容易获得的能量,渐渐开始成为各种绿色能源的首选。基于这个立场,我们基于 太阳能加热的方案来设计出水温度的系统, 利用电机控制冷水和热水的混合来达到控制出水 温度的目的。再则考虑到晚上太阳能水箱热能散失导致温度下降热水供给不足的问题,我们 可以需要给予系统加热的功能,解决晚上用户舒适洗澡的问题。 在用户使用这个模块, 考虑到用户在使用的时候因为浴室的原因, 用液晶显示可能模糊, 所以我们选用的是数码管显示输出。为了便于用户的操作使用,我们采用红外控制,同时作

系统的总体构造思想是: 用户可以在任意时候设定需要的目标值, 例如水位, 热水箱的温度, 以及出水时候的温度。而对于系统,我们的做法是:水位超过的时候不给予进水,低于最低 水位的时候为了保护系统必须关闭出水强行进水同时关闭加热控制。 加热控制和水位控制并 行操作,可以为用户节约时间。在超低水位时进行过热保护等措施。 为了让洗澡时候的供水温度稳定,只有水位和热水温度到了设定的参数才准许用户开水洗 澡。

在出水控制这一模块,为了更好地获得稳定快速的输出,我们会采用现在较为成熟的 PID 算 法对在出水控制这一块电机输出进行控制。 最后,为了方便用户控制,我们同时采用红外和按钮键盘的方式给系统设定参数。用红外的 方式可以更好的让用户进行控制。 而按钮键盘则为了更容易对系统进行调试以及在应急情况 下对系统进行控制。

2. 系统硬件设计

以下是对系统的各个子系统的硬件设计进行简要说明: 水位控制模块: 水位控制框图:

用户设定参数

水位检测

水位超出?
N

Y

关闭热 水阀

超低水位?
N

进水

水位控制模块思想比较简单,只关心水位是否达到设定要求。没有的时候就进水,有的时候 就停止进水,节省用水。 设计这一块的时候为了防止因为水位过低而引起的热水箱损坏, 设计时候我们设计了超低水 位,用来对水箱进行保护。当水位过低的时候,强行关闭热水阀,没有热水供出。同时加水, 烧水,到了安全情况的时候才可以继续正常使用。 热水加热模块: 加热模块框图:

用户参数设定

热水水温检测
N

水温比较低?
Y

(要快速加热吗)

N

快速加热模式

Y

水温小于设 定水温?

慢速加热模式
加热模块设计思想是: 为了可以快速地达到设定的水温同时可以稳定的控制水温, 我们设定两种 加热模式:快速加热模式和慢速加热模式。假设那个温度点我们设在设定温度的 70%那里,那 么在设定温度的 70%以下的时候,我们把加热模式设置为快速加热模式;在超过的时候,我们 设置在慢速加热模式。当温度小于设定温度,则用慢速加热。

淋浴供水输出模块框图:

冷水水 阀关闭

N

需要淋浴出而 且情况正常?

Y

冷水水阀打开

计算温度偏差(实际出 水温度-目标出水温度)

PID 计算输出电压

电压驱动输出

电机控制的主要思想是:首先判断是否用户是否需要淋浴且机器情况正常。机器不正 常或者用户不需要都会关闭冷水阀,禁止冷水流出。符合条件之后,电机控制冷水的 进出来控制输出的水温。 用这种方法的好处是当用户不需要进水的时候或者出现突发情况时候, 系统可以很及 时地做出相应,而且电机的寿命可以得到延长。同时,鉴于市面上的水阀控制,采用 PID 算法来控制可以得到更加平稳的调温效果和比较快捷的目标时间。 PID 控制模块: 采用位置式的 PID 算法,控制系统如下:

设定出水温度 + 淋浴水温输出 -

PID 控制算法

D/A

电机调节

温水输出

用户输入模块: 用户输入模块框图:

用户参数设定 (第一次是标准值)

红外扫描中断输入

键盘扫描中断输入

用户输入模块分为红外和键盘两部分。都采用中断的方式,可以及时对单片机内部的 参数赋值,然后让系统按照新的参数进行调节。 漏电保护模块: 如下图所示:作为一个沐浴系统所必需的安全保护系统中最重要的漏电保护系统。 一旦出现漏电现象,立即关闭所有工作(软件控制)并切断电源(硬件电路控制)。

3. 系统软件设计

详细介绍算法设计与算法流程图(不得大量复制源代码)

系统软件的设计上,在主程序开始之前,是参数的设定,有目标热水温度(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;i<123;i++); } } if( P2IN & 0xf0 == 0xf0) 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 检测出水水温的传递函数 vel -=1; use = 0; }

if(water_level >= aim_water_level ) { P4OUT &= ~BIT2; P4OUT |= BIT3; } else { P4OUT |= BIT2; P4OUT &= ~BIT3; }

//p42 = 1 是冷水阀门开

否则关闭

p43 = 1是热水阀开,否则关闭

else { P5OUT &= 0xf3; } if(hot_temp > aim_hot_temp - 3) //当热水温度低于目标热水温度3摄氏度的时候可以淋浴 { P4OUT |= BIT3; P4OUT |= BIT4; if(P4OUT & 0x04 == 0x04)//如果热水阀开了 { temp_distant = PID_Caculate(aim_temp - now_temp); temp_distant ); } } else { 控制电机

以下是while(1)的流程图:

延时程序

检测参数(当前水箱水 温,出水水温,水位)

目标水位-=1 use = 0
Y

用户正在使用 use=1?

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;i<10;i++) al+=Error; if ((Integral<0)&&(Error>0)) Integral+=Error; //两种有助于控制的情况例外 } else //较小偏差时才启动积分 { Integral+=Error; } if(Integral<-Set_Integral) Integral = -Set_Integral ; Integral = Set_Integral; //积分限幅 Prev_Error[i]=Error; //判断第一次上电

if(Integral> Set_Integral) if(OutPut>Set_Output) OutPut=Set_Output;

else if (OutPut<-Set_Output) OutPut=-Set_Output; return (OutPut); } //输出限幅,Set_Output表示的是输出的幅值

中断部分模块设计: 中断部分主要包括两个部分:控制信号输入中断、水位过低信号中断以及漏电保护系统。控 制信号中断每次修改参数的时候都会引发中断,待用户设定好参数之后恢复现场继续主程 序。而水位过低信号中断则是当水位过低的时候引发中断,系统进行保护措施,控制确保现 场安全,水位安全中断结束,系统继续运行。 中断模块流程图如下:

N

P1 中断源触发?

Y

键盘有输入?

Y

N N

红外有输入?
Y

用户参数设定

恢复现场

P2 中断模块流程图:

N

P2 中断源触发?
Y

关闭热水阀 水箱注水

恢复现场

4. 系统创新

对于我们的系统,在整体上说考虑到的因素比较多。例如水位的控制,安全的控制,以及一 些节能的思想。我们采用电压控制步进电机,利用 430 内有的资源 DAC 资源,可以得到精 度为 1/256 甚至更高的精度。与此同时,我们采用 PID 算法,让水温的控制的速度更敏捷, 而且更稳定。 系统的创新性, 更多会体现在系统总体的节能, 安全和控制的快捷和精确方面。 作为一个纯粹的智能家用淋浴系统,在节能上、功能上、安全保护上是一个不错的选择。

5. 评测与结论

采用 proteus 软件进行软件仿真,是可行的。但是在硬件上面,由于在热水阀模块上, 水阀采用的是螺丝丝锥进行的传动,水管接口保密性要求比较高,出现的问题比较严重。保 密垫圈的选择及其重要。第二个问题是,在电动机负载与实际力矩之间出现的误差比较大, 与 matlab 软件仿真以及 pro/e 仿真的结果误差比较大,完全延误了产品的最后设计。


相关文档

基于msp430的家用太阳能加热控温沐浴系统
太阳能热水器单片机温度控制系统设计
基于EM78P458单片机的家用加热器温控系统设计
单片机的电加热炉温度控制系统设计
基于单片机的对加热炉温度控制系统设计
基于单片机的电加热炉温度控制系统设计
2014毕业论文(电信系)基于MSP430的家用太阳能的加热控温沐浴系统
基于单片机的电加热炉温度控制系统设计47
毕业设计(论文)-基于单片机的太阳能供热工程智能控制系统设计
家用太阳能供热系统材料收集
电脑版