超聲波液位可控恒溫水浴系統(tǒng)
超聲波液位可控恒溫水浴系統(tǒng),超聲波,可控,恒溫,水浴,系統(tǒng)
超聲波液位可控恒溫水浴系統(tǒng)733和諧宿舍隊隊長:黃 姸隊員:譚映彤隊員:李美玲 二一四年五月0目錄一、設(shè)計要求21.1 基本要求21.2 擴展要求21.3 說明2二、整體設(shè)計與創(chuàng)新32.1 整體設(shè)計32.2 創(chuàng)新功能43、 方案比較53.1 硬件方案53.2 軟件方案74、 設(shè)計與論證10 電路圖及有關(guān)設(shè)計文件105、 測試數(shù)據(jù)及測試結(jié)果分析145.1 測試方法與儀器145.2 測試數(shù)據(jù)及測試結(jié)果分析14七、附錄15一、設(shè)計要求設(shè)計并制作出一個液位可調(diào),溫度可調(diào)的水浴系統(tǒng)。容器形狀、材質(zhì)不限,高度不高于35cm,長寬不長于10cm,容積大于等于500ml。在容器除頂面外的任意位置安裝半導(dǎo)體制冷器件(制冷片冷熱兩用),制冷片的外側(cè)面可加散熱片、小風(fēng)扇等加快熱交換的裝置。超聲波探頭安裝于容器底部,進水口、出水口安裝位置不做要求。1.1基本要求1) 系統(tǒng)穩(wěn)定,有明顯溫控表現(xiàn),溫度可調(diào)節(jié)范圍為1550(可寬于此范圍),最小設(shè)定分度為1。2) 有明顯液位調(diào)控現(xiàn)象,液位可調(diào)范圍為15cm30cm,最小設(shè)定分度為1cm。3) 當(dāng)溫度或液位達到某一設(shè)定值并穩(wěn)定后,水溫的波動控制在2以內(nèi),液位的波動控制在1cm以內(nèi)。要求溫度或液位調(diào)控達到穩(wěn)定狀態(tài)時,必須分別給出聲或光提示信號。4) 在超調(diào)量=10%的情況下,調(diào)節(jié)時間盡量短。1.2擴展要求1) 溫度可調(diào)節(jié)范圍盡量寬;當(dāng)水溫達到某一設(shè)定值并穩(wěn)定后,其波動控制在1內(nèi)2) 能記錄并實時顯示溫度和液位調(diào)節(jié)過程的曲線, 溫度顯示的誤差絕對值小于2,液位顯示的誤差絕對值小于1cm。3) 在不影響以上水浴功能的情況下,增加必要器件(如小水泵等),改裝成水冷循環(huán)系統(tǒng),給外部發(fā)熱器件散熱。1.3說明1)系統(tǒng)電源可使用市售開關(guān)電源或者主辦方提供的學(xué)生電源。參賽隊亦可使用自制電源。2)采用半導(dǎo)體致冷器件實現(xiàn)制冷或加熱(亦可通過向容器內(nèi)抽進冷水降溫),如果單片功率不夠允許多片串聯(lián),最多不能超過3片。3)測評時,此題參賽者以5隊為一小組同時測評,可自帶檢測工具。測評時,每隊注入相同體積熱水,測報當(dāng)前溫度后,先統(tǒng)一設(shè)定某一和較低溫度值制冷,同時向設(shè)定的某一較低液位調(diào)節(jié),再設(shè)定某一較高溫度值加熱,同時向設(shè)定的某一較高液位調(diào)節(jié)。4)當(dāng)溫度或液位達到穩(wěn)定狀態(tài)的提示信號出現(xiàn)后立即檢測并記錄調(diào)控的溫度值和液位值,檢測時間延續(xù)120s,以記錄溫度波動和液位波動的最大值;能實時顯示溫度曲線或液位曲線的可直接記錄曲線。5)超調(diào)量:輸出量的最大值減去穩(wěn)態(tài)值,所得之差與穩(wěn)態(tài)值之比的百分數(shù)。6)調(diào)節(jié)時間:響應(yīng)曲線達到并保持在偏離穩(wěn)態(tài)值5%(或2%)之內(nèi)所需要的最短時間。7)以上液位值為超聲波探頭傳感器位置到液面位置的距離。二、整體設(shè)計與創(chuàng)新2.1整體設(shè)計2.1.1超聲波液位可控恒溫水浴系統(tǒng)設(shè)計超聲波液位可控恒溫水浴系統(tǒng)結(jié)構(gòu)圖如下:提示部分:1602液晶顯示LED提示蜂鳴器提示Labview上位機監(jiān)控開關(guān)電源水冷循環(huán)系統(tǒng)后臺處理:DS18B20溫度傳感器超聲波模塊AT24C02掉電保護MAX232串口通信AT89C52最小系統(tǒng)繼電器控制:進水泵出水泵加熱片制冷片水箱:(長*寬*高)6cm*7cm*35cm控制部分:1*3鍵盤根據(jù)題目要求,1)水箱外形設(shè)計。水箱設(shè)計為長6cm,寬7cm,高35cm。2)溫度控制。使用冷熱兩用的制冷片,一塊用來加熱,一塊用來制冷。制冷片外側(cè)加水冷循環(huán)系統(tǒng),用以散熱。利用繼電器控制加熱片,制冷片的啟動與停止。使用DS18B20溫度傳感器測量當(dāng)前溫度。3)液位控制。在水箱靠上方安裝進水泵,靠下方安裝出水泵。利用繼電器控制進水泵,出水泵的啟動與停止。使用超聲波模塊測量液位高度。4)Labview上位機監(jiān)控。為了能記錄并實時顯示溫度和液位調(diào)節(jié)過程的曲線,采用Lab view上位機監(jiān)控。用芯片MAX232實現(xiàn)串口通信,使下位機單片機傳送數(shù)據(jù)給上位機Labview。5)1*3按鍵控制。按鍵1表示“確定”,按鍵2表示 “設(shè)定值加一”,按鍵3表示“設(shè)定值減一”。6)提示部分。1602液晶顯示當(dāng)前溫度temp,當(dāng)前液位S,期望溫度set_temp,期望液位set_S。提示當(dāng)前狀態(tài)HOT(加熱),COLD(降溫),ADD(加水),DRAW(出水),ON(確定),OFF(停止),OK(任務(wù)完成)。LED有四個,D2亮表示正在加熱,D3亮表示正在降溫,D4亮表示正在加水,D5亮表示正在出水。當(dāng)?shù)竭_溫度或者液位的期望值時,蜂鳴器會提示。7)AT24C02掉電保護。AT24C02實現(xiàn)掉電保護功能,當(dāng)溫度或液位調(diào)節(jié)過程中途停電,AT24C02會記錄掉電前所設(shè)定的期望值。待再次上電時,程序會接著掉電前的狀態(tài)繼續(xù)進行下去。2.1.2超聲波液位可控恒溫水浴系統(tǒng)程序設(shè)計程序設(shè)計結(jié)構(gòu)圖如下:開始測量當(dāng)前溫度temp測量當(dāng)前液位S設(shè)定期望溫度set_temp設(shè)定期望液位set_S NOset_S-0.5S set_S+0.5 液位控制YESNO恒溫控制set_temp-1temp0x19) /若到達字串尾則退出if (X 0) i-; ds = 1; i = 4; while(i0) i-;void dsWait() uint i; while(ds); while(ds); i = 4; while(i 0) i-;bit readBit()/讀一位數(shù)據(jù) uint i; bit b; ds = 0;i+; ds = 1; i+; i+; b = ds; i = 8; while(i0) i-; return b;uchar readByte() uint i; uchar j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); dat = (j 1); return dat;void writeByte(uchar dat) uint i; uchar j; bit b; for(j = 0; j = 1; if(b) /寫1 ds = 0;i+; i+; ds = 1; i = 8; while(i0) i-; else /寫0 ds = 0; i = 8; while(i0) i-; ds = 1; i+; i+; void sendChangeCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0x44);void sendReadCmd() dsInit(); dsWait(); delayMs(1); writeByte(0xcc); writeByte(0xbe); void getTmpValue() uint tmpvalue; /int value; float t; uchar low, high; sendReadCmd(); low = readByte(); /讀低八位 high = readByte();/讀高八位 tmpvalue = high; tmpvalue = 8; tmpvalue |= low; t = tmpvalue * 0.0625; tmpvalue = t*10+ 0.5; /大于0加0.5, 小于0減0.5 ES=0;TI=1; printf(%fn,t); while(!TI); TI=0;ES=1; temp=tmpvalue*0.1; DisplayListChar(0, 0, T:); DisplayListChar(6, 0, C); /if(jdq_hot=1&jdq_cold=1) disbuff3 = tmpvalue / 100; disbuff4 = tmpvalue %100/10; disbuff5 = tmpvalue%10; DisplayOneChar(2, 0, ASCIIdisbuff3); DisplayOneChar(3, 0, ASCIIdisbuff4); DisplayOneChar(4, 0, ASCII10); DisplayOneChar(5, 0, ASCIIdisbuff5); /* if(tmpvalue14)beep=1; else beep=0; /DisplayListChar(5, 0, -); */ void changeT(int p)if(p14)/調(diào)節(jié)范圍:15-50 setT2=p/10; setT3=p%10; /DisplayListChar(8, 0, +); DisplayOneChar(9, 0, ASCIIsetT2); DisplayOneChar(10, 0, ASCIIsetT3); else if(p50)set_temp=50;DisplayListChar(9, 0, 50);/*超聲波*/void Conut()int SS; time=TH0*256+TL0; TH0=0; TL0=0; ES=0;TI=1; /SS=(time*1.7)/10; /SS=325-SS; /1.7 ,算出來是CM S=33.0- (time*1.78)/100; SS=(int)(S*10.0); printf(%fn,S); while(!TI); TI=0;ES=1; /if(S30)beep=0; /elsebeep=1; /set_S=S; DisplayListChar(0, 1, H:); DisplayListChar(6, 1, CM); if(flag=1) /超出測量范圍顯示 flag=0; /printf(-n); /beep=0; else if(jdq_add=1&jdq_draw=1) disbuff0=SS/100; disbuff1=SS%100/10;/0/10; disbuff2=SS%10; DisplayOneChar(2, 1, ASCIIdisbuff0); DisplayOneChar(3, 1, ASCIIdisbuff1); DisplayOneChar(4, 1, ASCII10); DisplayOneChar(5, 1, ASCIIdisbuff2); void changeS(int p)if(p13)/調(diào)節(jié)范圍:14-30 setT0=p/10; setT1=p%10; DisplayOneChar(9, 1, ASCIIsetT0); DisplayOneChar(10, 1, ASCIIsetT1); else if(p30)set_S=30;DisplayListChar(9, 1, 30); void StartModule() /啟動模塊 TX=1; /啟動一次模塊 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; /*鍵盤control*/int keyscan(int goal)/鍵盤掃描 if(up=0) delayMs(10); if(up=0) goal+; while(!up); if(down=0) delayMs(10); if(down=0) goal-; while(!down); return goal;int stateT()/按鍵確定命令 int com=1; if(on=0) delayMs(10); if(on=0) com=0; while(!on); return com;/*check*/void checkT()sendChangeCmd(); delayMs(1000); /溫度轉(zhuǎn)換時間需要750ms以上 getTmpValue();void checkS()uint i; /ET0=1; /TR0=0; for(i=5;i0;i-) StartModule();/啟動模塊 while(!RX);/當(dāng)RX為零時等待 TR0=1; /開啟計數(shù) while(RX);/當(dāng)RX為1計數(shù)并等待 TR0=0;/關(guān)閉計數(shù) Conut();/計算 delayMs(80);/80MS/ET0=0; /TR0=0; void main() sendChangeCmd(); init(); /LCM初始化 TMOD=0x21; /設(shè)T0為方式1T1為方式2,GATE=1; / SCON=0x50;TH1=0xFD;/串口波特率9600TL1=0xFD;TH0=0;TL0=0; TR0=1; ET0=1; /允許T0中斷TR1=1; /開啟定時器SM0=0;SM1=1;REN=1;EA=1; /開啟總中斷 ES=1;while(1) /S=0; checkT(); set_temp=(int)(temp+0.5); checkS(); changeT(set_temp); /set_S=20; set_S=(int)(S+0.5); changeS(set_S); DisplayListChar(12, 0, OFF&); DisplayListChar(12, 1, OFF); do changeT(set_temp); set_temp=keyscan(set_temp); while(stateT(); DisplayListChar(12, 0, ON ); DisplayListChar(12, 1, OFF&); do changeS(set_S); set_S=keyscan(set_S); while(stateT(); DisplayListChar(12, 1, ON ); /checkS(); if(set_S-S1.0)|(S-set_S1.0) compareS(); checkS(); delayMs(1000); checkT(); while(1) float tmp = fabs(set_temp+0.0-temp); if(tmp0.7) compareT(); checkT(); 26
收藏