電熱水器作為一種非常普及的家用電器,使用率非常高。市場上傳統的電熱水器控制精度低、可靠性差。隨著人們生活質量的提高,人們對電熱水器的要求越來越趨向于智能化和數字化。目前市場上出售的電熱水器以貯水式為主,它具有自動恒溫、安全可靠、操作簡單等優點,深受廣大用戶的青睞。但是電熱水器也普遍存在著這樣一對矛盾:小容量電熱水器的熱水連續供應能力不足,難以滿足用戶沐浴等需求;大容量電熱水器冷態使用時預熱時間過長(往往要幾個小時),而且當用戶只要少量使用熱水時,大量的冷水也被加熱,能量浪費多。為此,我們提出一個新的設計思路:采用半分隔水箱,結合單片機智能控制技術利用對少量冷水優先快速局部加熱,滿足在首次使用時快速供應熱水的要求;利用對冷水的預加熱技術,滿足正常使用后實現連續大量供應熱水的要求,有效地解決傳統電熱水器存在的上述矛盾。
(一)水箱設計
儲熱式電熱水器又分為敞開式和封閉式兩類。早期的儲熱式電熱水器多為敞開式或開口式的,其結構簡單,體積不大,靠吊在高處的壓力噴淋,水流量較小,但價格較低,適合于人口少,僅做洗浴使用的家庭購買。敞開式電熱水器由于沒有對內膽設計承壓性能,故不能向其他管路多處供水,功能有限。封閉式電熱水器的內膽是密封的,水箱內水壓很大,其內膽可耐壓,故可多路供水。儲熱式電熱水器可自動恒溫保溫,停電時可照樣供應熱水。目前國內市場上的電熱水器主要是封閉儲熱式電熱水器,它不必分室安裝,不產生有害氣體,干凈衛生,且可方便地調溫。封閉儲熱式電熱水器的工作原理非常簡單,它們使用一根電加熱管,通電之后給水提供熱量。內膽儲存熱水并承載壓力0.6MPa(約6kg/cm2),外殼保溫。產品間的區別首先體現在加熱管上,有浸沒型的,即直接與要加熱的水接觸,也有隔離型的。加熱管由一個溫控器來控制,能設定所需溫度并保持內膽中的水溫恒定,且在50~70℃范圍內可調。鑒于封閉式電熱水器種種優點,我們決定選擇封閉式的熱水器。
我們設計的熱水器原理圖如圖1所示。熱水器由上下兩個桶組成,容量各40L,總共80L,其中下桶為主桶,上桶為儲水桶,兩個桶外部填塞保溫材料。當熱水器加滿水后,下桶的加熱管對冷水進行加熱,加熱的溫度由使用者通過外部的按鈕控制,可設定的溫度范圍是40~80℃。儲水桶加熱的溫度為固定值,當達到90℃后,自動切換到保溫狀態。整個熱水器有四個水管,1號管為出水管,2號和4號管為進水管,3號管為主桶和儲水桶的連接管。2、3、4號管均由電磁閥控制其打開和關閉。在熱水器使用時,1號出水管和2號進水管打開,3號和4號管關閉。當溫度傳感器檢測到主桶中的水溫降到50℃的時候,由單片機控制2號進水管關閉,3號管和4號進水管打開,從而使儲水桶中高溫度的水進入主桶中,延長熱水器可使用的時間。在夏天的時候,由于外界溫度較高,不需要使用很多的熱水,這時可以將儲水桶的加熱管電源斷開,通過控制外部電路將主桶和儲水桶隔離開。此時主桶成為一個獨立的熱水器,達到節能的效果。2號、3號和4號管的端部經過特殊設計,可使得冷水與熱水充分混合。
圖1 熱水器原理圖
圖2 進水零件剖面圖
(二)軟硬件設計
首先,我們通過分析可知這個電路包括電源電路、加熱控制電路、液位控制電路、電磁閥進水控制電路、按鍵輸入電路、液晶顯示電路、蜂鳴報警電路和單片機控制電路等。
圖3 系統設計框圖
1、電源電路
電源電路采用普通的220V交流電經過降壓整流,然后經過集成穩壓器(7824)穩壓輸出+24V電壓。同時該系統還用到12V,5V的電壓,通過分壓即可得到。電路原理圖C5、C6為輸入穩定電容,其作用是減少紋波、消振、抑制高頻和脈沖干擾。C7、C8為輸出穩定電容,其作用是改善負載的瞬態響應。由于熱水器周圍環境溫度過高,使用三端穩壓器時要根據輸出電流的大小選擇散熱器,否則會由于過熱而無法工作到額定電流。
圖4 電源電路原理圖
2、加熱控制電路
加熱絲的加熱功率由雙向晶閘管來控制,一開始我們選擇的是MOC3023,單片機通過光耦合器給晶閘管觸發信號,通過控制晶閘管的導通角來控制加熱絲的有效加熱功率。但是由于在電路中添加過零檢測電路,來實現觸發脈沖的相位延遲,同時在程序編程中加入中斷控制程序,既增加了硬件的復雜性,也給軟件編程帶來了困難。
經過分析,我們選擇用內部帶有過零檢測電路的光電耦合器MOC3041作為晶閘管的驅動器,同時能實現強、弱電的隔離。傳統的加熱電路都采用移相觸發晶閘管,控制晶閘管的導通角來控制輸出功率,不僅同步檢測電路復雜,而且在晶閘管導通瞬間會產生高次諧波干擾,造成電網電壓波形畸變,影響其他用電設備和通訊系統的正常工作,本系統中采用過零觸發晶閘管導通與關斷的時間比值來調節加熱絲的功率,由于過零觸發不改變電壓的波形而只改變電壓全波通過的次數,不會對電網造成污染。
同時,本系統采用過零觸發方式,MOC3041內部含有過零檢測電路,當輸入引腳1輸入15mA的電流,輸出端6引腳、4引腳之間的電壓稍過零時,內部雙向晶閘管導通,觸發外部晶閘管導通,當MOC3041輸入引腳輸入電流為0時,內部雙向晶閘管關斷,從而外部晶閘管也關斷。另外R7、C2組成浪涌吸收電路,防止浪涌電壓損壞雙向可控硅。R6是雙向可控硅的門極電阻,當可控硅靈敏度較高時,門極阻抗也高,并上R6可提高抗干擾的能力。R8是觸發功率雙向可控硅的限流電阻。
繼電器接成常閉開關方式,開始處于加熱狀態,當溫度過高時關掉加熱電源,以達到過溫保護的目的。繼電器的兩端必須反接二極管,因為斷電瞬間會產生強大的反向電動勢,損壞其他器件。繼電器通過光耦電路(TLP521-1芯片)來驅動,因為繼電器在開關迅速閉合斷開的瞬間,會產生很大的電流,極有可能影響到驅動電路部分,從而進一步影響到主板上的其他電路。如果要使光耦系統隔離,就要保證光耦兩側電路的電源必須是各自獨立的,從圖5中可看到,光耦左側是單片機系統,電源為5V,右側為12V。如果右側系統出現了問題,即使將光耦內部的三極管燒壞,光耦左側的系統也不會受影響而能夠繼續正常工作,這就是光耦隔離系統的好處所在。光耦左側用Q7、R13、R14三個元件來驅動光耦,用三極管的主要目的是提供給光耦開啟所需的足夠電流。
圖5 加熱控制電路原理圖
3、電磁閥進水控制電路
在電磁閥進水控制電路中,光耦驅動電路部分和加熱控制電路部分一樣,不另加分析。P1插針兩端接電磁閥,光耦右側電路部分是MOS管來控制的,當P2.1輸入低電平時,Q1導通,光耦右側電路處于導通狀態,這時穩壓管的上端達到10V左右,Q2MOS管導通,漏極端為低電平,電磁閥工作,反之不工作。該電路用MOS管也達到弱電、強電分離的效果。因為電磁閥是大感抗器件,在斷電瞬間產生很大的電流,影響到驅動電路正常工作。
圖6 電磁閥進水控制電路原理圖
4、液位控制電路
ADC0804的VIN+管腳接壓力傳感器的輸出引腳,壓力傳感器將水位的高度轉換成一定的壓力,然后轉化成模擬電壓輸出,通過AD轉換成數字信號,輸入到單片機中。單片機經過處理得到具體的液位,從而進一步控制電磁閥的通斷。
圖7 液位控制電路原理圖
5、溫度檢測電路
溫度傳感器的選擇:經比較,我們選擇DS18B20溫度傳感器。它具有微型化、低功耗、高性能、抗干擾能力強、易配微處理器等優點,可直接將溫度轉化成串行數字信號供處理器處理。
DS18B20溫度傳感器的特性:
①適應電壓范圍寬,電壓范圍在3.0~5.5V。
②測溫范圍-55 ~ +125℃,在-10~+85℃時精度為±0.5℃。
③可編程分辨率為9~12位,對應的可分辨溫度分別為0.5℃,0.25℃,0.125℃和0.0625℃,可實現高精度測溫.
④在9位分辨率時,最多在93.75ms內把溫度轉化成數字;12位分辨率時,最多在750ms內把溫度值轉化成數字。
⑤測量結果直接輸出數字溫度信號,以“一線總線”串行傳送給CPU,同時可傳送CRC校驗碼,具有極強的抗干擾糾錯能力。
6、液晶顯示電路
在該系統中將12864與單片機并行連接,將12864的第5引腳直接接低電平,第15引腳直接接高電平,以便節省單片機的I/O口。
圖8 12864并行寫操作時序圖
7、充電電路
在熱水器中使用過程中,我們為了充分利用水的動能,我們在閥門的地方安裝一個葉輪,同時加一個小功率直流發電機,可以將水的動能轉化成電能,儲存在電池中。并且發電機電路要用穩壓電路,將發出的電壓恒定在某一個固定值。即使斷電,單片機也可以使用電池的電能,使得一些功能仍然可以實現,比如日期,水位,溫度的顯示等。當然這個也可以通過單片機實現智能充電器的功能,要實現充電器的智能化,需要應用單片機的處理和控制功能。充電的實現,是在基本的充電電壓的基礎上,要控制充電過程。
實現的功能模塊如下:
(a)實現充電器智能化控制的單片機模塊;
(b)采用專用的電池充電芯片實現充電過程控制模塊;
(c)采用電壓轉換芯片提供充電電壓模塊。
常用的充電電池有鎳鎘、鎳氫及鋰離子充電電池三種。鎳鎘、鎳氫充電電池在沒有完全放電之后就進行充電,幾次之后電池的容量便會減少,這種現象稱為記憶效應,鋰電池則沒有記憶效應,所以鋰電池即使在沒有放電完全之后就放電,也不會影響電池的容量。
為單片機選擇一款合適的充電芯片是非常重要的,需要依照電池類型、電流值、充電方式等幾個標準。
(1)MAX1898芯片
經過比較我們選擇了MAX1898作為電池的芯片,實現鋰離子的充電器,充電快速并且具有較強的電池保護能力。MAX1898配合外部PNP或PMOS三極管可以組成完整的單節電池的充電。MAX1898提供精確地恒流/恒壓充電,電池電壓調節精度為±0.75%,提高了電池性能,延長了使用壽命。
MAX1898的主要功能特性如下:
使用低成本的PNP或PMOS調整元件;簡單、安全的線性充電方式;內置檢流電阻,可編程的充電電流;LED充電狀態指示;可編程的安全定時器;可選/可調節自動重啟;4.5~12V的輸入電壓范圍,輸入電源自動監測。
(2)LM7805芯片
該芯片將電壓轉換成固定的+5V電壓提供給相關電路。
(3)6N137芯片
為了降低電源的干擾,保持電路的穩定,完成電壓轉化之后,需要經過一次光耦模塊的處理,通過單片機對光耦模塊的控制,可以及時關斷充電電源。這里采用的光耦模塊為6N137光耦合器。
6N137光耦器工作時,信號從引腳2和引腳3輸入,發光二極管發光,經片內光通道傳到光敏二極管,反向偏置的光敏管光照后導通,經電流-電壓轉換后送到與門的一個輸入端,與門的另外一個輸入端為使能端,當使能端為高電平時與門輸出高電平,經輸出三極管反向后光電隔離器輸出低電平。當輸入電流小于觸發閾值或使能端為低時,輸出高電平,但這個邏輯高電平時集電極開路的,可針對接收電路加上拉電阻或電壓調整電路。
8、多機通信電路
現在的問題是如何使用兩個桶使得兩個桶的效率大于兩個單筒效率的總和。由于單個桶的功能已經很清楚,現在著手實現兩個桶就比較簡單。我們將兩個桶上下放置,下桶記為1桶,上桶記為2桶。首先兩個桶自動上水,1桶加接近滿,然后關閉電磁閥b;2桶加滿,然后關閉c;在加水的過程中,中間的電磁閥a一直處于關閉的狀態。2桶的加熱功率是1桶的兩倍多,但是容量只有1桶的一半。當上水完畢后,1桶加熱到50℃,2桶加熱到70℃,然后處于保溫的狀態。當1桶水位下降,根據出水管流量的大小,調節中間電磁閥a的閥門大小,將2桶的熱水源源不斷注入1桶中,同時調節2桶的加熱功率,而1桶的加熱功率功率只要達到輔熱的效果就可以了。當然要用兩個單片機使得兩個桶達到協和,這樣既可以增加控制I/O口,使得控制方便,同時也可以使得運行效率提高,要實現這個功能就要用到單片機的多機通信。
單片機構成的多機系統常采用總線型主從式結構,所謂主從式,即在數個單片機中,有一個是主機,其余都是從機,從機要服從主機的調度、支配。51單片機的串行口方式2和方式3適合于這種主從式通信結構。當然,采用不同的通信標準時,還需要進行相應的電平轉換,有時還要對信號進行光電隔離。在實際的多機應用系統中,常采用RS-485串行標準。
多機通信時,通信協議要遵守以下原則:
⑴ 所有從機的SM2位置1,處于接收地址幀狀態。
⑵ 主機發送一地址幀,其中8位是地址,第9位為地址/數據分區標志,該位置1表示該幀為地址幀。所有從機收到地址幀后,都將接收的地址與本機的地址比較。對于地址相符的從機,使自己的SM2位置0(以接收主機隨機后發來的數據幀),并把本機地址發回主機作為應答;對于地址不符的從機,仍保持SM2=1,對主機隨后發來的數據幀不予理睬。
⑶ 從機發送數據結束后,要發送一幀效應和,并置第9為(TB8)為1,作為從機數據結束的標志。
⑷主機接收數據時先判斷數據的接收標志(RB8),若RB8=1,表示數據傳送結束,并比較此幀效應和,若正確則回送正確信號00H,命令該從機復位(即重新等待地址幀);若效應和出錯,則發送信號0FFH,命令該從機重發數據。若接收幀的RB8=0,則將數據存到緩沖區,并準備接收下一幀信息。
⑸主機收到從機應答地址后,確認地址是否相符,如果地址不符,則發復位信號(數據幀中TB8=1);如果地址相符,則TB8清0,開始發送數據。從機收到復位命令后回到監聽地址狀態(SM2=1),否則開始接收數據和命令。
主要代碼如下:
//////#include"BoardConfig.h"
/*液晶接口定義*/
/////#define RS BIT1
/////#define RW BIT2
/////#define LCDEN BIT3
/*溫度傳感器接口操作宏定義*/
#define DQ1 P2OUT |= BIT7
#define DQ0 P2OUT &= ~BIT7
#define DQ_in P2DIR &= ~BIT7
#define DQ_out P2DIR |= BIT7
#define DQ_val (P2IN & BIT7)
/*按鍵定義*/
#define KEY_SEL P1SEL
#define KEY_IN P1IN
#define KEY_OUT P1OUT
#define KEY_DIR P1DIR
/***********/
#define beep_baojing P6OUT^=BIT4
/*定義數組*/
unsigned char table0[]="當前水溫: 度";
unsigned char du[]="度";
unsigned char table1[]="設定水溫: 度";
unsigned char table2[]="水位";
unsigned char nRes=30;
unsigned char temprature[2]={0x00,0x00};//用于暫時存放從溫度傳感器中讀出的兩個字節數據
/////unsigned char dot_data[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,//存放小數位的編碼
///// 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
unsigned char temprature_dis[3]={0,0,0};//最終溫度處理結果
unsigned char temprature1[2]={0,0};
///////unsigned char mytab[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};//顯示溫度單位的度(圈)
void delay(unsigned int z)//普通延時
{
unsigned int x,y;
for(x=z;--x;)
for(y=200;--y;);
}
void delay2(unsigned int a)
{
while(a--);
}
/*下面是溫度傳感器的操作程序*/
unsigned char ds18b20_init(void)
{
unsigned char flag;
// DQ_out;
_DINT();
DQ0;
delay2(500);
DQ1;
delay2(50);
// DQ_in;
_NOP();
if(DQ_val)
{
flag = 1; //初始化失敗
}
else
{
flag = 0; //初始化成功
}
//DQ_out;
DQ1;
_EINT();
delay2(400);
return flag;
}
unsigned char read8(void)
{
unsigned char i;
unsigned char temp = 0;
_DINT();
for(i = 0;i < 8;i++)
{
temp > >= 1;
DQ0;
delay2(5);; //延時5us
DQ1;
delay2(10); //延時10us
DQ_in;
_NOP();
if(DQ_val)temp |= 0x80;
delay2(45);; //延時45us
DQ_out;
DQ1;
}
_EINT();
return temp;
}
void write8(unsigned char datt)
{
char i,nBit;
for (i=8; i >0; i--)
{
// DQ_out;// 設定管腳為輸出方向
DQ0;// 將DQ管腳拉低
nBit = datt & 0x01;// 輸出數據
if (nBit)
{
DQ1;
}
else
{
DQ0;
}
delay2(50);// 延時50微妙
DQ1;// 將DQ管腳拉高
datt > >= 1;
}
}
void read_temp()
{
ds18b20_init();
write8(0xcc);
write8(0x44);
//delay(500);
ds18b20_init();
write8(0xcc);
write8(0xbe);
temprature[0]=read8();
temprature[1]=read8();
}
void deal_int()
{
///// temprature_dis[2]=(((temprature[1]&0x0f)< 4)|((temprature[0]&0xf0) >>4))/100+0x30;
temprature_dis[1]=(((temprature[1]&0x0f)< 4)|((temprature[0]&0xf0) >>4))%100/10+0x30;
temprature_dis[0]=(((temprature[1]&0x0f)< 4)|((temprature[0]&0xf0) >>4))%100%10/1+0x30;
/////if(temprature_dis[2]==0x30)temprature_dis[2]=0x20;
if(temprature_dis[1]==0x30)temprature_dis[1]=0x20;
}
/*void deal_dot()
{
temprature_dis[0]=dot_data[temprature[0]&0x0f]+0x30;
}*/
/*以下是12864液晶程序*/
void lcd12864_write(unsigned char flag,unsigned char dat)
{
if(flag==1)
{
P3OUT |=BIT1;
}
else if(flag==0)
{
P3OUT&=~BIT1;
}
P3OUT&=~BIT2;
P4OUT=dat;
delay(2);
P3OUT |=BIT3;
delay(2);
P3OUT&=~BIT3;
}
void lcd_init()
{
lcd12864_write(0,0x0f);
delay(1);
lcd12864_write(0,0x30);
delay(1);
lcd12864_write(0,0x0c);
delay(1);
lcd12864_write(0,0x01);
delay(1);
}
void keyPress(void)
{
int nP10;
KEY_SEL&=0Xf0;//設置P1.0-P1.3為普通IO
KEY_DIR&=0Xf0;//P1.0到p1.3為輸入
KEY_OUT=0X0f;//P1.0到P1.3都輸出高電平
nP10 = KEY_IN & 0x0f ;//讀入P1.0到P1.3的狀態
/////if (nP10 == 0x0e && nRes < 80) nRes=nRes+1;//P1.0口按鍵按下
/////if (nP10 == 0x0d && nRes >40) nRes=nRes-1;//P1.1口按鍵按下
/////if (nP10 == 0x0b) nRes = 3;//p1.2口按鍵按下
/////if (nP10 == 0x07) nRes = 4;//p1.3口按鍵按下
if(nP10 != 0x0f) //如果有鍵被按下
{
delay(1200); //延時消抖
if(nP10 != 0x0f) //再次檢測按鍵狀態
{
if (nP10 == 0x0e && nRes < 80) nRes=nRes+1;//P1.0口按鍵按下
if (nP10 == 0x0d && nRes >20) nRes=nRes-1;//P1.1口按鍵按下
}
delay(2400);
}
}
void lcd12864_dis()
{
unsigned char tem;
tem=nRes;
temprature1[0]=tem/10+0x30;
temprature1[1]=tem%10+0x30;
lcd12864_write(0,0x95);
lcd12864_write(1,temprature1[0]);
lcd12864_write(1,temprature1[1]);
lcd12864_write(0,0x85);
/////lcd12864_write(1,temprature_dis[2]);
lcd12864_write(1,temprature_dis[1]);
lcd12864_write(1,temprature_dis[0]);
}
/*報警*/
void baojing()
{ unsigned int n=0;
unsigned int t1;
t1=(temprature_dis[1]-'0')*10+(temprature_dis[0]-'0');
if(t1 >=nRes)
{
for(n=21;--n;)
{
beep_baojing;
delay(22);
}
}
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD;
// BoardConfig(0xbe);
//***********配置時鐘*************//
unsigned int i;
BCSCTL1 &= ~XT2OFF; //打開XT2高頻晶體振蕩器
do
{
IFG1 &= ~OFIFG; //清除晶振失敗標志
for (i = 0xff; i > 0; i--); //等待8MHz晶體起振
}
while ((IFG1 & OFIFG)); //晶振失效標志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK選擇高頻晶振
TACTL |= TASSEL_2 + ID_3; //計數時鐘選擇SMLK=8MHz,1/8分頻后為1MHz
//***初始化液晶和溫度傳感器的端口***//
P2DIR|=BIT7;/****************************/
/*初始化溫度數據端輸出低電平*/
P2OUT|=BIT7;/****************************/
P3DIR|= (BIT1+BIT2+BIT3);/****************************/
/*初始化液晶命令端輸出低電平*/
P3OUT&=~(BIT1+BIT2+BIT3);/****************************/
P4DIR|=0XFF; /****************************/
/*初始化液晶數據端輸出低電平*/
P4OUT&=~0XFF;/****************************/
P6DIR|=BIT4;//初始化蜂鳴器輸出
P6OUT|=BIT4;
lcd_init();//初始化液晶
read_temp();//第一次讀取溫度
delay(5000);
/*12864的第一行顯示“Current Temp is:”*/
lcd12864_write(0,0x80);
i=0;
while(table0[i]!='?')
{
lcd12864_write(1,table0[i]);
i++;
}
lcd12864_write(0,0x90);
i=0;
while(table1[i]!='?')
{
lcd12864_write(1,table1[i]);
i++;
}
lcd12864_write(0,0x89);
i=0;
while(table2[i]!='?')
{
lcd12864_write(1,table2[i]);
i++;
}
while(1)
{
keyPress();
read_temp();//read the temprature
deal_int();//deal the integer
/////deal_dot();//deal the dot
baojing();
lcd12864_dis();
delay(200);
}
}
(三)結論與展望
從原理樣機來看,我們設計的產品性能更高,在相同的時間里能夠產生更多熱量,所以本產品更適用于集體住宿人群,比如高校學生公寓、公司職員宿舍以及公共洗浴場所等。
當然由于時間有限,設計過程中仍存在一些問題。比如,在上水時,需要排去桶內的空氣,并且需要兩個桶中的水一直處于滿的狀態,這就需要設計排氣孔,另外還需要水位檢測裝置;對于兩個桶的比例,需要建立數學模型或者通過實驗,確定最佳比例,以此能獲得最佳節能效果,后續我們將進一步完善。
-
單片機
+關注
關注
6039文章
44579瀏覽量
636457 -
mcu
+關注
關注
146文章
17178瀏覽量
351681 -
電源電路
+關注
關注
48文章
998瀏覽量
65229 -
家用電器
+關注
關注
2文章
265瀏覽量
29473 -
熱水器
+關注
關注
5文章
217瀏覽量
27102
發布評論請先 登錄
相關推薦
評論