版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 學生姓名: 學 號: </p><p> 專業(yè)班級: 信息學院電信102 </p><p> 課程名稱: 傳感器課程設計 </p><p> 學年學期: 2 0
2、12 —2 013 學年第 1 學期 </p><p> 指導教師: </p><p> 2012年 12 月</p><p><b> 目錄</b></p><p> 概述--------------------------------------1</
3、p><p> 設計目的----------------------------------1</p><p> 基本要求----------------------------------1</p><p> 電路設計----------------------------------2</p><p> 程序設計原理圖---------
4、---------------------2</p><p> 硬件電路設計圖------------------------------2</p><p> 程序設計----------------------------------3</p><p> 主程序設計流程圖----------------------------3</p><
5、;p> 初始化程序流程圖----------------------------3</p><p> 讀取溫度子程序------------------------------3</p><p> 寫流程圖------------------------------------4</p><p> 讀流程圖-----------------------
6、-------------5</p><p> 程序--------------------------------------6</p><p> 七、結(jié)果驗證與仿真----------------------------11</p><p> 八、心得體會----------------------------------11</p><
7、;p> 九、參考文獻----------------------------------12</p><p> 十、焊接實物----------------------------------12</p><p> 孵化室控溫控制電路設計</p><p><b> 一、概述</b></p><p> 傳感
8、器技術與通信技術、計算機技術構(gòu)成了現(xiàn)代信息技術的三大支柱,傳感器技術已經(jīng)深入我們生活中各個方面,作為信息采集的主要手段,其應用非常廣泛,所以掌握傳感器的基本原理與使用是非重要。本設計選用51單片機作為主控制器件,DS18B20作為測溫傳感器,通過數(shù)碼管實現(xiàn)溫度顯示。通過DS18B20直接讀取被測溫度值,進行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學性能穩(wěn)定,在0℃~100℃最大線性偏差小于0.01℃。該器件可直接向單片機傳輸數(shù)字信號,便于單片機處理及控
9、制。</p><p><b> 二、設計目的</b></p><p> 1、了解溫度檢測和控制技術的基本知識以及單片機、傳感器等相關技術。 </p><p> 2、熟練使用相關的EDA軟件進行硬件電路的設計與仿真 </p><p> 3、具體掌握DS18B20溫度傳感器的使用方法。</p>
10、<p> 4、畫出電路原理圖,說明設計思想。</p><p> 5、按照電路原理圖在實驗板上安裝、試調(diào)電路。</p><p> 6、寫出設計實驗報告</p><p><b> 三、基本要求</b></p><p> 本學期自學了51系列單片機的部分相關內(nèi)容,但一直沒有機會進行實踐練習,希望利用傳感
11、器課程設計這個機會,去運用一下學習到的知識</p><p> 1、孵化室對溫度有一定要求,溫度是否合適直接影響孵化效果,為此需要對溫度進行嚴格控制,主要指標如下:</p><p> 孵化室溫控制在36.5±0.5℃,溫度低時啟動電熱器加熱,用紅燈報警;溫度高時,啟動空調(diào)冷卻,用綠燈報警。</p><p> 2、要求設計相關的硬件電路,選擇合適的傳感器
12、、控制系統(tǒng)和顯示系統(tǒng)。</p><p><b> 四、電路設計:</b></p><p> 4.1 系統(tǒng)設計原理框圖: </p><p> 圖1 DS18B20溫度測溫系統(tǒng)框圖</p><p> 通過單片機控制溫度傳感器,讀出DS18B20的溫度,并用數(shù)碼管顯示,當溫度超過37℃時,啟動空調(diào)冷卻,用綠燈報警,當溫
13、度低于36℃時,啟動電熱器加熱,用紅燈報警。所以根據(jù)設計要求確定了系統(tǒng)的總體方案,整個系統(tǒng)由控制模塊、濕度檢測模塊、顯示模塊、報警器等構(gòu)成。</p><p> 4.2 硬件電路設計圖</p><p> 圖2 硬件電路設計圖</p><p><b> 五、程序設計</b></p><p> 系統(tǒng)程序主要包括主程序、
14、讀取溫度子程序、數(shù)據(jù)轉(zhuǎn)換子程序、顯示數(shù)據(jù)子程序等。</p><p> 5.1 主程序設計流程圖</p><p><b> 圖3 主程序流程圖</b></p><p> 5.2 初始化程序流程圖</p><p><b> 圖4 初始化流程圖</b></p><p>
15、5.3 讀取溫度子程序</p><p> 讀取溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。主要包括以下三個命令:</p><p> ?。?)寫暫存器命令 【4EH】</p><p> 這個命令為由TH寄存器開始向DS18B20暫存器寫入數(shù)據(jù),4EH命令后的3字節(jié)數(shù)據(jù)將被保存到暫存器的地址2、3、4(TH
16、、TL、CONFIG)三個字節(jié)。所有數(shù)據(jù)必須在復位脈沖前寫完。即如果只想寫一個字節(jié)的數(shù)據(jù)到地址2,可按如下流程:</p><p><b> 初始化;</b></p><p> 寫0CCH,跳過ROM檢測;</p><p> 寫4EH; </p><p><b> 寫1字節(jié)數(shù)據(jù);</b&g
17、t;</p><p> 復位,即向DQ輸出480~960us低電平</p><p> ?。?)讀暫存命令【BEH】</p><p> 這個命令由字節(jié)0讀取9個暫存器內(nèi)容,如果不需要讀取所有暫存內(nèi)容,可隨時輸出復位脈沖終止讀取過程</p><p> ?。?)轉(zhuǎn)換溫度命令【44H】</p><p> 這個命令啟動溫度
18、轉(zhuǎn)換過程。轉(zhuǎn)換溫度時DS18B20保持空閑狀態(tài),此時如果單片機發(fā)出讀命令, DS18B20將輸出0直到轉(zhuǎn)換完成,轉(zhuǎn)換完成后將輸出1。</p><p> 圖5 讀取溫度子程序</p><p><b> 5.4 寫流程圖</b></p><p> 寫時隙:寫時隙由DQ引腳的下降沿引起。18B20有寫1和寫0兩種寫時隙。所有寫時隙必須持續(xù)至少6
19、0μs,兩個時隙之間至少有1μs的恢復時間。DS18B20在DQ下降沿后15μs~60μs間采樣DQ引腳,若此時DQ為高電平,則寫入一位1,若此時DQ為低電平,則寫入一位0,如圖9所示。所以,若想寫入1,則單片機應先將DQ置低電平,15us后再將DQ置高電平,持續(xù)45μs;若要寫入0,則將DQ置低電平,持續(xù)60μs。</p><p><b> 圖6 寫流程圖</b></p>
20、<p><b> 5.5讀流程圖</b></p><p> 讀時隙:讀時隙由DQ下降沿引起,持續(xù)至少1μs的低電平后釋放總線(DQ置1)DS18B20的輸出數(shù)據(jù)將在下降沿15μs后輸出,此時單片機可讀取1位數(shù)據(jù)。讀時隙結(jié)束時要將DQ置1。所有讀時隙必須持續(xù)至少60μs,兩個時隙之間至少有1μs的恢復時間。</p><p><b> 圖7讀流程
21、圖</b></p><p><b> 六、程序</b></p><p> #include <reg52.h></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p><p
22、> #define uint unsigned int</p><p> sbit DQ = P1^3; </p><p> sbit K1 = P1^0;</p><p> sbit K2 = P1^1; //數(shù)據(jù)口define interface</p><p> uint tem
23、p; //溫度值 variable of temperature</p><p><b> //不帶小數(shù)點</b></p><p> unsigned char code table[] = ~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,</p><p&g
24、t; ~0x07,~0x7f,~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71};</p><p> unsigned char code d[]={0x20,0x40,0x80};</p><p> /*************精確延時函數(shù)*****************/</p><p> void delay(uns
25、igned char i) </p><p> {while(--i); }</p><p> /******************************************</p><p> 此延時函數(shù)針對的是12Mhz的晶振</p><p> delay(0):延時518us 誤差:518-2*256=6</p>
26、;<p> delay(1):延時7us (原帖寫"5us"是錯的)</p><p> delay(10):延時25us 誤差:25-20=5</p><p> delay(20):延時45us 誤差:45-40=5</p><p> delay(100):延時205us 誤差:205-200=5</p
27、><p> delay(200):延時405us 誤差:405-400=5</p><p> ********************************************/</p><p> /*****************DS18B20******************/</p><p> void Init_Ds18
28、b20(void) //DS18B20初始化send reset and initialization command</p><p><b> {</b></p><p> DQ = 1; //DQ復位,不要也可行。</p><p> delay(1);
29、//稍做延時</p><p> DQ = 0; //單片機拉低總線</p><p> delay(250); //精確延時,維持至少480us</p><p> DQ = 1; //釋放總線,即拉高了總線</p><p> del
30、ay(100); //此處延時有足夠,確保能讓DS18B20發(fā)出存在脈沖。</p><p><b> }</b></p><p> uchar Read_One_Byte() //讀取一個字節(jié)的數(shù)據(jù)read a byte date</p><p> //讀數(shù)據(jù)時,數(shù)據(jù)以字節(jié)的最低有效位先從總線移出
31、</p><p><b> {</b></p><p> uchar i = 0;</p><p> uchar dat = 0;</p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p&
32、gt; DQ = 0; //將總線拉低,要在1us之后釋放總線</p><p> //單片機要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會有效。</p><p> _nop_(); //至少維持了1us,表示讀時序開始</p><p> dat >>= 1; //
33、讓從總線上讀到的位數(shù)據(jù),依次從高位移動到低位。</p><p> DQ = 1; //釋放總線,此后DS18B20會控制總線,把數(shù)據(jù)傳輸?shù)娇偩€上</p><p> delay(1); //延時7us,此處參照推薦的讀時序圖,盡量把控制器采樣時間放到讀時序后的15us內(nèi)的最后部分</p><p>
34、 if(DQ) //控制器進行采樣</p><p><b> {</b></p><p> dat |= 0x80; //若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進行處理,保持為0</p><p><b> } </b>&l
35、t;/p><p> delay(10); //此延時不能少,確保讀時序的長度60us。</p><p><b> }</b></p><p> return (dat);</p><p><b> }</b></p><p> void Wr
36、ite_One_Byte(uchar dat)</p><p><b> {</b></p><p> uchar i = 0;</p><p> for(i=8;i>0;i--)</p><p><b> {</b></p><p> DQ = 0;
37、 //拉低總線</p><p> _nop_(); //至少維持了1us,表示寫時序(包括寫0時序或?qū)?時序)開始</p><p> DQ = dat&0x01; //從字節(jié)的最低位開始傳輸</p><p> //指令dat的最低位賦予給總
38、線,必須在拉低總線后的15us內(nèi),</p><p> //因為15us后DS18B20會對總線采樣。</p><p> delay(10); //必須讓寫時序持續(xù)至少60us</p><p> DQ = 1; //寫完后,必須釋放總線,</p><p>
39、; dat >>= 1;</p><p><b> delay(1);</b></p><p><b> }</b></p><p><b> }</b></p><p> uint Get_Tmp() //獲取溫度ge
40、t the temperature</p><p><b> {</b></p><p><b> float tt;</b></p><p> uchar a,b;</p><p> Init_Ds18b20(); //初始化</p><p
41、> Write_One_Byte(0xcc); //忽略ROM指令</p><p> Write_One_Byte(0x44); //溫度轉(zhuǎn)換指令</p><p> Init_Ds18b20(); //初始化</p><p> Write_One_Byte(0xcc);
42、 //忽略ROM指令</p><p> Write_One_Byte(0xbe); //讀暫存器指令</p><p> a = Read_One_Byte(); //讀取到的第一個字節(jié)為溫度LSB</p><p> b = Read_One_Byte(); //讀取到的第一個字節(jié)為溫度MSB</
43、p><p> temp = b; //先把高八位有效數(shù)據(jù)賦于temp</p><p> temp <<= 8; //把以上8位數(shù)據(jù)從temp低八位移到高八位</p><p> temp = temp|a; //兩字節(jié)合成一個整型變量</p
44、><p> tt = temp*0.0625; //得到真實十進制溫度值</p><p> //因為DS18B20可以精確到0.0625度</p><p> //所以讀回數(shù)據(jù)的最低位代表的是0.0625度</p><p> temp = tt*10+0.5; //放大十倍</p&
45、gt;<p> //這樣做的目的將小數(shù)點后第一位也轉(zhuǎn)換為可顯示數(shù)字</p><p> //同時進行一個四舍五入操作。</p><p> return temp;</p><p><b> }</b></p><p> /****************數(shù)碼碼動態(tài)顯示函數(shù)**************
46、/</p><p> void Display(uint temp) //顯示程序</p><p><b> {</b></p><p> uint N[3],i,k;</p><p> N[0]=table[temp/100];</p><p> N[1]=table[temp%1
47、00/10]&0x7f;</p><p> N[2]=table[temp%10];</p><p> for(k=0;k<200;k++)</p><p><b> {</b></p><p> for( i=0; i<3; i++) </p><p><b&g
48、t; { </b></p><p> P0 = N[i];</p><p> P2 = d[i]; //使用查表法進行位選 </p><p> delay(3000); //掃描間隔時間太長數(shù)碼管會有閃爍感</p><p><b> }</b></p><
49、p><b> } }</b></p><p> void main()</p><p><b> {</b></p><p> K1=1;K2=1;</p><p><b> while(1)</b></p><p><b>
50、; {</b></p><p> Display(Get_Tmp());</p><p> if(Get_Tmp()<360)</p><p><b> {K1=0;</b></p><p><b> K2=1;</b></p><p><
51、b> }</b></p><p> if(Get_Tmp()>360&& Get_Tmp()<370)</p><p><b> {K1=1;</b></p><p><b> K2=1;</b></p><p><b> }<
52、;/b></p><p> if(Get_Tmp()>370)</p><p><b> {K2=0;</b></p><p><b> K1=1;</b></p><p><b> }</b></p><p><b>
53、 }</b></p><p><b> }</b></p><p><b> 七、結(jié)果驗證與仿真</b></p><p><b> 仿真如圖:</b></p><p><b> 圖8仿真圖</b></p><p>
54、;<b> 八、心得體會</b></p><p> 從一開始上傳感器的課,老師就通知有課程設計,我就開始想要做個什么出來,經(jīng)過兩個星期的查閱資料決定做溫度傳感器。</p><p> 這次課設不同于以往的課程設計,它需要自己規(guī)劃一切過程。自己買元器件,自己焊接和調(diào)試,全都是自己獨立完成。在這次的課程設計我懂得了如何去挑選自己需要的元器件,如何判斷元器件的好壞。這次
55、課設我用到了單片機,我也深深理解了單片機的強大,用C語言去編程序,真正知道了C語言在我們專業(yè)的作用,和他對于我們的重要性。</p><p> 從這次的設計中,我真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,這就是我在這次課程設計中的最大收獲。隨著電子技術的不斷發(fā)展,按著此思路設計的溫度傳感器的性能也一定會越來越好。</p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 傳感器與測控電路課程設計---自動調(diào)光臺燈控制電路設計
- 恒溫控制電路設計
- 課程設計---彩燈控制電路設計
- 恒溫控制課程設計---恒溫控制電路的設計
- 傳感器課程設計--稱重傳感器應用電路設計
- 傳感器課程設計---稱重傳感器應用電路設計
- 傳感器課程設計---稱重傳感器應用電路設計
- 舵機角度控制電路設計課程設計
- 電阻傳感器課程設計--電阻式傳感器應用電路設計
- CMOS圖像傳感器控制電路設計與實現(xiàn).pdf
- 課程設計---彩燈循環(huán)控制電路設計
- 傳感器課程設計--紫外線傳感器應用電路設計
- 橫梁自動升降控制電路設計課程設計
- 課程設計--- 洗衣機控制電路設計
- 課程設計--節(jié)日彩燈控制電路設計報告
- 傳感器課程設計--應變式荷重傳感器及轉(zhuǎn)換電路設計
- 課程設計---切削加工刀架控制電路設計
- 傳感器課程設計報告--光控照明電路
- CMOS圖像傳感器控制電路設計及曝光控制研究.pdf
- 熱敏電阻傳感器溫度檢測電路設計-課程設計
評論
0/150
提交評論