基于NTC熱敏電阻的溫度測量與控制系統的設計_第1頁
基于NTC熱敏電阻的溫度測量與控制系統的設計_第2頁
基于NTC熱敏電阻的溫度測量與控制系統的設計_第3頁
基于NTC熱敏電阻的溫度測量與控制系統的設計_第4頁
基于NTC熱敏電阻的溫度測量與控制系統的設計_第5頁
已閱讀5頁,還剩27頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

圖表SEQ圖表\*ARABIC4在這次試驗中可以先通過試驗得到AD轉換的值和對應的溫度然后以AD值為橫坐標,溫度值為縱坐標。將每個AD值和對應的溫度制成表格,當采集到AD值時便可以通過查表將對應的溫度查詢出來從而實現了線性化處理。系統流程圖主程序AD轉換程序溫度報警程序SEQ溫度報警程序\*ARABIC1濾波程序顯示程序系統性能測試與分析測試測試儀器與設備測試器件:水銀溫度計 直流穩壓電源 萬用表測試方案與結果測試環境與結果:將系統分別在20攝氏度的冷水中,室溫下,50—60設施度得溫水中,和80攝氏度的熱水中進行測試,測試結果如下。 結論本文主要論述了基于NTC熱敏電阻的溫度測量和控制系統的設計。對整個系統的核心做了介紹。對系統的各個模塊做了比較深入的研究,主要包括以下幾個方面。1.對系統進行了方案的論證,進行了方案的討論,并最終確定了系統=方案。2.查找了系統上相關的芯片資料并仔細的閱讀,并查閱了大量的相關文獻資料。理解各個芯片的工作原理,完成各個模塊電路的設計,完成開題報告。3.對系統的原理進行了討論,對硬件部分各個模塊進行充分的說明。4.用protel完成了系統各個模塊的原理圖設計和PCB制作。5.完成電路板的焊接,并排查焊接錯誤,檢查系統電路。6.通過軟件多核心板的各個模塊進行了測試。7.對整個設計的過程,擬出簡要的大綱,并完成詳細的論文報告。修改論文,完成最終定稿。致謝本論文是在實驗室老師的指導下完成的,實驗室在參加比賽過程中給了我們極大的幫助和支持,并在我們共同努力下取得了一定的成績。至此,我們要非常感謝老師對我的幫助。本次課題的完成也離不開實驗室老師的指導,在這些過程中老師給了我們極大的幫助,他們的認真負責的態度和孜孜不倦的精神使我受益匪淺,從老師身上學習到了很多專業知識,這對我們以后的工作有很大的幫助,在此,向實驗室老師表示深深的敬意,感謝他對我們的指導和幫助。參考文獻黃賢武,鄭筱霞.傳感器原理與應用.電子科技大學出版社,1995年五月。譚浩強.C語言程序設計.清華大學出版社,2005年七月。白駒荇,雷曉平.電子科技大學出版社,2005年九月。附錄系統PCB電路圖圖表SEQ圖表\*ARABIC5實驗程序#include<reg52.h>#defineuintunsignedint#defineucharunsignedchar/**********************變量定義*************************************/sbitheat=P2^2;//水泥電阻驅動使能sbitbeep=P2^3;//蜂鳴器使能sbitdioLE=P2^5;//八位LED鎖存器開關使能sbitdula=P2^6;//LED段選sbitwela=P2^7;//LED位選sbitadcs=P2^4;//AD片選sbitadd=P3^5;//加鍵sbitsub=P3^4;//減鍵sbitadrd=P3^7;//AD讀sbitadwr=P3^6;//AD寫ucharcodeLED_Segment[]={//0-9和攝氏度單位的段碼0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58};ucharcodeLED_Segment1[]={//0-9含小數點的段碼0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};ucharcodetemdata[75]={11,17,34,41,52,61,69,79,90,100,111,117,126,132,138,145,149,154,160,165,169,173,178,182,186,188,193,196,199,203,205,207,208,209,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253};//AD轉換值floatcodetemtest[75]={5.5,6.0,7.3,8.1,9.0,10.0,11.0,12.0,14.1,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,36.3,36.9,37.5,39.1,39.4,39.8,40.1,40.6,41.0,41.4,41.7,42.5,42.8,43.0,43.2,44.8,44.9,45.0,45.3,46.1,46.8,47.3,47.8,48.9,49.5,50.3,51.0,51.7,52.3,52.9,53.5,54.1,54.8,55.6,56.0,58.3,59.0,59.8,60.6,62.4,63.8,65.1,66.3,67.6};//測試點溫度值/*floatcodeslop[20]={2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5};*///斜率uintidatarecord[48];uintTH=30*10,TL=20*10;//溫度上下限報警設定初值ucharLPFdata;uinttemperature,max,min,average,dif;ucharflag;/**********************函數聲明*************************************/ucharAD();//AD轉換子程序voidDelay(ucharz);//延時子程序voidDisplay(uinta);//數碼管驅動顯示子程序voidLPF();//數據濾波voidData_temperature();//AD采樣數據轉換為溫度值voidAlarm();//溫度報警voidSet_hitemperature();//設定最高報警溫度voidSet_lotemperature();//設定最低報警溫度voidSet_function(uchara);//按鍵功能判定voidDisp_record();//顯示記錄溫度值voidSet_tempreature();//溫度控制設定voidDriveled(ucharwei,ucharduan);/**********************主函數*************************************/voidmain(){// ucharflag=0; TMOD=0X11; TH0=0X4C; TL0=0; TH1=0XDC; TL1=0; EA=1; ET0=1; ET1=1; TR0=1; while(1) { //P1=0XFF; //dioLE=0; LPF();//將采集到的數據進行濾波 Data_temperature();//將濾波后的數據轉換成溫度值 Set_function(flag);//按鍵功能判定 //Data_temperature();//將濾波后的數據轉換成溫度值 Alarm();//調用報警程序當溫度超過設定上下限時變報警 if(adwr==0)//按功能鍵切換工作狀態 { Delay(5); if(adwr==0) { flag++; if(flag>5) { flag=0; } while(adwr==0); } } if(adrd==0)//OK鍵 { Delay(5); if(adrd==0) { flag=0; while(adrd==0); } } if(flag==5)//當進入溫度控制模式時啟動定時器,PWM控制加熱 TR1=1; else TR1=0; }}/**********************延時函數*************************************/voidDelay(ucharz){ ucharx,y; for(y=10;y>0;y--) for(x=z;x>0;x--); }/**********************AD采樣函數*************************************/ucharAD() { ucharvalue; adcs=0; //選通AD轉換器片選adwr=0; //AD寫入(主要是為了啟動AD轉換)Delay(1);adwr=1; P1=0xff;//讀取P1口之前先給其寫全1adrd=0;//AD讀使能 value=P1; //AD數據讀取賦給P1口adrd=1; adcs=1; P1=0xff; return(value);}/**********************數碼管驅動顯示函數*************************************/voidDisplay(uinta){ dula=0; //送溫度值十位 P0=0xff; wela=1; P0=0xfe;// wela=0; P0=0; dula=1; P0=LED_Segment[a/100]; dula=0; Delay(10); dula=0;//送溫度值個位,含小數點 P0=0xff; wela=1; P0=0xfd;// wela=0; P0=0; dula=1; P0=LED_Segment1[a/10%10]; dula=0; Delay(10); dula=0;//送溫度值小數點位 P0=0xff; wela=1; P0=0xfb;// wela=0; P0=0; dula=1; P0=LED_Segment[a%10]; dula=0; Delay(10); dula=0;//送攝氏度單位 P0=0xff; wela=1; P0=0xf7;// wela=0; P0=0; dula=1; P0=LED_Segment[10]; dula=0; Delay(10);}/**********************數據濾波動函數*************************************/voidLPF(){ uchartemp[7],a; uchari,j,k; for(i=0;i<=6;i++)//數據采集存儲 { temp[i]=AD(); Delay(5); } for(j=0;j<=6;j++)//按小到大排序 { for(k=j;k<=6;k++) { if(temp[j]>=temp[k]) { a=temp[j]; temp[j]=temp[k]; temp[k]=a; } } } temp[0]=temp[6]=0;//去掉最大最小值 LPFdata=(temp[1]+temp[2]+temp[3]+temp[4]+temp[5])/5;//求平均值}/**********************AD轉換值轉溫度值函數*************************************/voidData_temperature(){ floatb; uchari; for(i=0;i<=74;i++) { if((LPFdata>=temdata[i])&(LPFdata<temdata[i+1])) { b=temtest[i]+(LPFdata-temdata[i])*((temtest[i+1]-temtest[i])/(temdata[i+1]-temdata[i])); break; } } temperature=b*10;//強制轉化為整形}/**********************溫度報警函數*************************************/voidAlarm(){ if((temperature>=TH)|(temperature<=TL)) { //dioLE=1; P1=0; beep=0; } else { if((temperature<(TH-10))&(temperature>TL+10)) //回差 { P1=0xff; beep=1; } } }/*****************************設定最高報警溫度**********************************/voidSet_H(){ Display(TH); if(add==0) { Delay(10); if(add==0) { TH=TH+10; } while(add==0);//防止按鍵重入 } if(sub==0) { Delay(10); if(sub==0) { TH=TH-10; } while(sub==0);//防止按鍵重入 } Driveled(0xef,0x76);//顯示H標志}/*********************************************設定最低報警溫度*****************************************/voidSet_L(){ Display(TL); if(add==0) { Delay(10); if(add==0) { TL=TL+10; if(TL+30>=TH) { TL=TH-40;//最低報警溫度應小于最高報警溫度-4 } } while(add==0);//防止按鍵重入 } if(sub==0) Delay(10); if(sub==0) { TL=TL-10; } while(sub==0);//防止按鍵重入 Driveled(0xef,0x38);//顯示“L”標志}ucharp;//占空比控制/*********************************設定控制溫度*****************************************/uintset_value=400;//溫度設定初值40攝氏度voidSet_tempreature(){ if(add==0) { Delay(10); if(add==0) { set_value=set_value+10; } while(add==0);//防止按鍵重入 } if(sub==0) { Delay(10); if(sub==0) { set_value=set_value-10; } while(sub==0);//防止按鍵重入 }/* if((set_value-temperature)>100) { p=100; } else { if((set_value-temperature)>50) p=50; else { if(set_value>temperature) p++; else p--; } } */ /* if(set_value>temperature) { if((set_value-temperature)>100) { p=100; } else { if((set_value-temperature)>50) { p=50; } else { p++; } } } else { p=0; }*/ if(set_value>temperature) { if((set_value-temperature)>=100) { p=200; } elseif((set_value-temperature)>=80) { p=160; } elseif((set_value-temperature)>=60) { p=120; } elseif((set_value-temperature)>=40) { p=80; } elseif((set_value-temperature)>=20) { p=40; } elseif((set_value-temperature)>=10) { p=10; } else { p++; if(p>200) { p=200; } } } else p=0; Display(temperature);//顯示測定溫度 dula=0; //顯示設定溫度 P0=0xff; wela=1; P0=0xef; wela=0; P0=0; dula=1; P0=LED_Segment[set_value/100]; dula=0; Delay(10); dula=0;//送溫度值個位,含小數點 P0=0xff; wela=1; P0=0xdf; wela=0; P0=0; dula=1; P0=LED_Segment1[set_value/10%10]; dula=0; Delay(10); dula=0; //送溫度值小數位 P0=0xff; wela=1; P0=0xbf;// wela=0; P0=0; dula=1; P0=LED_Segment[set_value%10]; dula=0; Delay(10); dula=0;//送攝氏度單位 P0=0xff; wela=1; P0=0x7f; wela=0; P0=0; dula=1; P0=LED_Segment[10]; dula=0; Delay(10); }voidDriveled(ucharwei,ucharduan){ dula=0; P0=0xff; wela=1; P0=wei; wela=0; P0=0; dula=1; P0=duan; dula=0; Delay(10);}uchari;voidDisp_record(){ Display(record[i]);//顯示記錄值 Driveled(0xef,0x40);//顯示- Driveled(0xdf,LED_Segment[(i+1)/10]);//顯示第i個值 Driveled(0xbf,LED_Segment[(i+1)%10]); if(add==0) Delay(5); if(add==0) { i++; if(i>47) i=0; } while(add==0); if(sub==0) Delay(5); if(sub==0) { i--; if(i==255) i=47; } while(sub==0);}/*************************顯示平均溫度,最大最小溫度,最大溫差******************************/ucharii;voidDisp_cal(){ if(add==0)//進入后按加鍵切換顯示查看平均、最大最小、最大溫差值 Delay(40); if(add==0) { ii++; if(ii>3) ii=0; }while(add==0); switch(ii) { case0:Display(average); Driveled(0xef,0x40); Driveled(0xdf,0x40); Driveled(0xbf,0x40); break; case1:Display(max); Driveled(0xef,0x1); Driveled(0xdf,0x1); Driveled(0xbf,0x1); break; case2:Display(min); Driveled(0xef,0x8); Driveled(0xdf,0x8); Driveled(0xbf,0x8); break; case3:Display(dif); Driveled(0xef,0x5e); Driveled(0xdf,0x06); Driveled(0xbf,0x71); break; } }/**********************************按鍵功能判斷*****************************************/voidSet_function(uchara){ switch(a) { case0:Display(te

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論