傳感器課程設(shè)計1_第1頁
傳感器課程設(shè)計1_第2頁
傳感器課程設(shè)計1_第3頁
傳感器課程設(shè)計1_第4頁
傳感器課程設(shè)計1_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、.課程設(shè)計(大作業(yè))報告課程名稱:傳感器原理及應(yīng)用設(shè)計題目:利用 DS18B20 采集溫度;.摘要利用 DS18B20采集溫度,本次傳感器原理及應(yīng)用課程設(shè)計,就是用KL25 芯片實現(xiàn)溫度控制, 傳統(tǒng)的溫度檢測大多以熱敏電阻為溫度傳感器,但熱敏電阻的可靠性差,測量溫度準(zhǔn)確率低, 而且必須經(jīng)過專門的接口電路轉(zhuǎn)換成數(shù)字信號才能由單片機進行處理。本次采用DS18B20數(shù)字溫度傳感器來實現(xiàn)溫度計的設(shè)計。顯示傳感器 DS18B20開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接,軟件編程以及各模塊系統(tǒng)流程進行了詳盡分析,特別是溫度傳感DS18B20的數(shù)據(jù)采集過程。本文主要是運用 DS18B20來完成實

2、驗, KL25微秒級延時,編寫程序代碼并進行修改,程序代碼主要 0 是低電平, 1 是高電平,每次讀要復(fù)位,讀設(shè)置為輸入,寫設(shè)置為輸出。關(guān)鍵詞:DS18B20傳感器、 KL25微妙延時、數(shù)據(jù)采集。;.目錄課程設(shè)計(大作業(yè))報告1一、 題目分析1二、 基本理論1三、 總體設(shè)計及分析11、 總體內(nèi)容12、 仿真圖及原理圖23、 工作原理34、 串口測試結(jié)果4四、 實驗器材51、器件52、 DS18B20的特點5五、 程序代碼及分析5六、 總結(jié)9七、 參考文獻9;.課程設(shè)計(大作業(yè))報告一、題目分析利用 DS18B20采集溫度,本次傳感器原理及應(yīng)用課程設(shè)計,就是用 KL25 芯片實現(xiàn)溫度控制, 傳統(tǒng)

3、的溫度檢測大多以熱敏電阻為溫度傳感器, 但熱敏電阻的可靠性差,測量溫度準(zhǔn)確率低, 而且必須經(jīng)過專門的接口電路轉(zhuǎn)換成數(shù)字信號才能由單片機進行處理。本次采用 DS18B20數(shù)字溫度傳感器來實現(xiàn)溫度計的設(shè)計。利用 DS18B20采集溫度,顯示傳感器 DS18B20開發(fā)測溫系統(tǒng)的過程,重點對傳感器在單片機下的硬件連接, 軟件編程以及各模塊系統(tǒng)流程進行了詳盡分析, 特別是溫度傳感器 DS18B20的數(shù)據(jù)采集過程。溫度傳感器 DS18B20的數(shù)據(jù)采集,把程序代碼燒到KL25芯片,連接面包板上的電路,與芯片相連接,通過串口采集,顯示十進制,把環(huán)境溫度采集到串口上顯示出來。 KL25芯片自身就有溫度傳感器,可

4、以通過引腳配置,采集傳感器監(jiān)測到的溫度, 但是此時監(jiān)測到的溫度并不能用攝氏度進行顯示,得到的數(shù)據(jù)只是原始數(shù)據(jù), 無法與真實的溫度聯(lián)系在一起,因此我們需要采用回歸的方法,將采集到的數(shù)據(jù)轉(zhuǎn)換為我們所廣泛認知的攝氏溫度,從而顯示在PC界面中。二、基本理論對于 DS18B20的讀時隙是從主機把單總線拉低之后,在15 秒之內(nèi)就得釋放單總線,以讓 DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。 DS18B20在完成一個讀時序過程,至少需要 60us 才能完成,每完成一次都需要復(fù)位。DS18B20的寫時序,對于 DS18B20的寫時序仍然分為寫 0 時序和寫 1 時序兩個過程,對于 DS18B20寫 0 時序和寫 1

5、 時序的要求不同, 當(dāng)要寫 0 時序時,單總線要被拉低至少 60us,保證 DS18B20能夠在 15us 到 45us 之間能夠正確地采樣 IO 總線上的“ 0”電平,當(dāng)要寫 1 時序時,單總線被拉低之后,在 15us 之內(nèi)就得釋放單線。初始化端口 A 的 1 號引腳,定義為輸出一個高電平, 設(shè)置 A 端口的 1 號引腳狀態(tài)為低,進行復(fù)位,發(fā)送讀數(shù)據(jù)。三、總體設(shè)計及分析1、總體內(nèi)容;.DS18B20有三只引腳: DQ數(shù)字信號輸入 / 輸出端,和 VDD電源輸入端, GND 接地。提及到溫度的檢測, 我們首先會考慮傳統(tǒng)的測溫元件有熱電偶和熱電阻, 而熱電偶和熱電阻測出的一般都是電壓, 再轉(zhuǎn)換成

6、對應(yīng)的溫度, 需要比較多的外部硬件支持,硬件電路復(fù)雜,軟件調(diào)試也復(fù)雜,制作成本高。因此,本數(shù)字溫度計設(shè)計采用智能溫度傳感器 DS18B20作為檢測元件, 測溫范圍為 -55 C 至+125C,最大分辨率可達 0.0625 C。 DS18B20可以直接讀出被測量的溫度值, 而采用三線制與單片機相連, 減少了外部的硬件電路, 具有低成本和易使用的特點。通過 KL25 芯片,面包板,溫度傳感器 DS18B20,導(dǎo)線等將電路連接起來,溫度傳感器 DS18B20采集到的溫度通過 PC機界面顯示出來。2、仿真圖及原理圖圖 1DS18B20仿真圖;.DS18B20有三只引腳: DQ數(shù)字信號輸入 / 輸出端,

7、和 VDD電源輸入端, GND接地。圖 2 DS18B20 的讀寫時序圖1) DS18B20寫邏輯的步驟 : 寫邏輯 0,單片機拉低電平大約 10-15us ,單片機持續(xù)拉低電平大約 20-45us 的時間,釋放總線;寫邏輯 1,單片機拉低電平大約10-15us ,單片機拉高電平大約 20-45us 的時間,釋放總線。2) DS18B20讀邏輯的步驟:讀邏輯 0,在讀取的時候單片機拉低電平大約 1us,單片機釋放總線,然后讀取總線電平,這時候 DS18B20會拉低電平,讀取電平過后,延遲大約 40-45 微妙;讀邏輯 1,在讀取的時候單片機拉低電平大約 1us,單片機釋放總線, 然后讀取總線電

8、平, 這時候 DS18B20會拉高電平, 讀取電平過后,延遲大約 40-45 微妙。DS18B20的寫時序,對于 DS18B20的寫時序仍然分為寫 0 時序和寫 1 時序兩個過程,對于 DS18B20寫 0 時序和寫 1 時序的要求不同, 當(dāng)要寫 0 時序時,單總線要被拉低至少 60us,保證 DS18B20能夠在 15us 到 45us 之間能夠正確地采樣IO 總線上的“ 0”電平,當(dāng)要寫1 時序時,單總線被拉低之后,在15us 之內(nèi)就得釋放單線。3、工作原理;.我們使用單點,單線總線上僅有一個DS18B20存在,不需要刻意讀取ROM里面的序列號來, 然后在匹配 DS18B20而是更直接的跳

9、過 ROM指令,然后直接執(zhí)行DS18B20功能指令。 DS18B20復(fù)位,在,某種意義上就是一次訪問 DS18B20的開始,也就是開始信號。 ROM指令,就是訪問,搜索匹配, DS18B20的 64 位序列號的動作。 使能 Systick 定時器(即向控制及狀態(tài)寄存器的第0 位寫 1),開始延時。監(jiān)控控制及狀態(tài)寄存器的16 位,如該位為1,失能 Systick 定時器(即向控制及狀態(tài)寄存器的第0 位寫 0),完成延時。DS18B20的寫時序,對于 DS18B20的寫時序仍然分為寫 0 時序和寫 1 時序兩個過程,對于 DS18B20寫 0 時序和寫 1 時序的要求不同, 當(dāng)要寫 0 時序時,單

10、總線要被拉低至少 60us,保證 DS18B20能夠在 15us 到 45us 之間能夠正確地采樣IO 總線上的“ 0”電平,當(dāng)要寫 1 時序時,單總線被拉低之后,在 15us 之內(nèi)就得釋放單線。 初始化端口 A 的 1 號引腳,定義為輸出一個高電平, 設(shè)置 A 端口的 1 號引腳狀態(tài)為低,進行復(fù)位,發(fā)送讀數(shù)據(jù)。4、串口測試結(jié)果圖 3串口測試圖;.PC機界面顯示:步驟一、將芯片串口引腳與電腦連接,給芯片通電,然后選擇串口,波特率后按打開串口按鈕。步驟二、按下采集溫度按鈕之后開始采集芯片溫度。步驟三、顯示十進制溫度四、實驗器材1、器件: 傳感器 DS18B20、電阻、面包板、 KL25 芯片、若

11、干導(dǎo)線。2、DS18B20的特點:DS18B20是單線數(shù)字溫度傳感器,它的體積更小,適用電壓更寬,更經(jīng)濟。DS18B20的性能特點如下:(1)獨特的單線接口僅需要一個端口引腳進行通信;(2)多個 DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;(3)無須外部器件;(4)可通過數(shù)據(jù)線供電,電壓范圍為3.0-5.5 ;(5)零待機功耗;(6)溫度以 9 或 12 位數(shù)字;(7)用戶可定義報警設(shè)置。五、程序代碼及分析main.c#includeincludes.h/包含總頭文件intmain ( void )unsignedinti=0;unsignedintt=0;unsignedinte

12、=0;DISABLE_INTERRUPTS;uart_init(UART_1,BUSCLK, 9600);Uart_enable_re_i(UART_1);/enable_pit_int();ENABLE_INTERRUPTS;主循環(huán)開始for (;)/一個死循環(huán);.i=getTmpValue(); /獲取溫度函數(shù)調(diào)用t=i/10;/表示整數(shù)e=i%10;/表示小數(shù)/ i=(float)t+0.1*e;uart_send1(UART_1,t);uart_send1(UART_1,e);/sprintf(UART_1,%d.%d t,t, e);/主循環(huán) end_for主循環(huán)結(jié)束=return0

13、;ds18b20.c#includeds18b20.h#includedelay.hvoidDS18B20_Rset ()/復(fù)位gpio_init(PORTA|(1),OUT, High);/初始化端口A 的 1 號引腳,定義為輸出一個高電平gpio_set(PORTA|(1),Low);Delay_750us(); / gpio_set(PORTA|(1),High);Delay_15us();/設(shè)置 A 端口的1 號引腳的狀態(tài)為低延時 750us/設(shè)置 A 端口的1 號引腳的狀態(tài)為高延時 15usunsignedcharreadBit()/讀取一個位unsignedcharb;gpio_i

14、nit(PORTA|(1),OUT, High);/初始化端口A 的 1 號引腳定義為輸出一個高電平gpio_set(PORTA|(1),Low);/設(shè)置 A 端口的1 號引腳的狀態(tài)為低Delay_2us();/延時 2usgpio_set(PORTA|(1),High);/設(shè)置 A 端口的1 號引腳的狀態(tài)為高gpio_init(PORTA|(1), IN, High);/初始化端口A 的 1 號引腳,定義為輸出一個高電平Delay_12us();/延時 12sb = gpio_get(PORTA|(1);/獲取 A 端口的 1 號引腳的狀態(tài)賦值給bDelay_50us();/延時 50usr

15、eturnb;/返回獲取的狀態(tài)bunsignedcharreadByte()/讀取一個字節(jié);.unsignedinti;unsignedcharj, dat;dat = 0;for (i=0; i8; i+)j = readBit();dat = (j 1);returndat;void writeByte ( unsigned char dat)/ 寫一個字節(jié) dat unsignedcharj;unsignedcharb;gpio_init(PORTA|(1), OUT, High); /初始化端口A 的 1 號引腳,定義為輸出一個高電平for (j = 0; j = 1;/dat右移 1

16、 位后賦給datif (b)/如果 b=1 寫入 1, 否則寫 0gpio_set(PORTA|(1),Low); /設(shè)置 A 端口的 1 號引腳的狀態(tài)為低Delay_2us();/延時 2usgpio_set(PORTA|(1),High); /設(shè)置 A 端口的 1 號引腳的狀態(tài)為高Delay_60us();/延時 60uselsegpio_set(PORTA|(1),Low); /設(shè)置 A 端口的 1 號引腳的狀態(tài)為低Delay_60us();/延時 60usgpio_set(PORTA|(1),High);/設(shè)置 A 端口的1 號引腳的狀態(tài)為高Delay_2us();/延時 2usvoi

17、dsendChangeCmd () /開始溫度轉(zhuǎn)換DS18B20_Rset(); /復(fù)位Delay_ms(1);/延時 1mswriteByte(0 xcc); /跳過 ROM,直接向 DS18B20 發(fā)溫度轉(zhuǎn)換命令writeByte(0 x44); /啟動 DS18B20 進行溫度轉(zhuǎn)換;.voidsendReadCmd ()DS18B20_Rset();Delay_ms(1);writeByte(0 xcc); /跳過 ROM,直接向DS18B20 發(fā)溫度轉(zhuǎn)換命令writeByte(0 xbe); /讀內(nèi)部數(shù)據(jù)shortgetTmpValue()unsignedinttmpvalue;int

18、value=0;unsignedcharlow, high;sendChangeCmd();/開始轉(zhuǎn)換指令Delay_ms(1000);/溫度轉(zhuǎn)換時間需要750ms 以上sendReadCmd(); /發(fā)送讀數(shù)據(jù)low = readByte();high = readByte();tmpvalue = high;tmpvalue = 8;/左移八位tmpvalue |= low;value = (float)tmpvalue* 0.625;returnvalue;ds18b20.h#ifndefSOURCE_DS18B20_H_#defineSOURCE_DS18B20_H_#includei

19、ncludes.h/包含總頭文件#includegpio.h#defineHigh 1#defineLow 0#defineOUT 1#defineIN 0voidDS18B20_Rset();/復(fù)位unsignedcharreadBit ();/讀取一個位unsignedcharreadByte();/讀取一個字節(jié)voidwriteByte( unsignedchar dat);/寫一個字節(jié) datvoidsendChangeCmd (); /開始溫度轉(zhuǎn)換voidsendReadCmd ();shortgetTmpValue();voidDelay_50us();.#endif/* 08_SOURCE_DS18B20_H_ */初始化端口 A 的 1 號引腳,定義為輸出一個高電平, 設(shè)置 A 端口的 1 號引腳狀態(tài)為低,初始化端口A 的 1 號引腳,定義狀態(tài)為低,賦值后進行復(fù)位,跳過ROM直接向 DS18B20發(fā)送轉(zhuǎn)換命令,讀內(nèi)部數(shù)據(jù),再次復(fù)位,開始溫度轉(zhuǎn)換

溫馨提示

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

最新文檔

評論

0/150

提交評論