智能控制實驗指導(dǎo)書(自編)_第1頁
智能控制實驗指導(dǎo)書(自編)_第2頁
智能控制實驗指導(dǎo)書(自編)_第3頁
智能控制實驗指導(dǎo)書(自編)_第4頁
智能控制實驗指導(dǎo)書(自編)_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、智能控制技術(shù)實驗指導(dǎo)書文哲雄 編華南師范大學(xué)增城學(xué)院2013年 9 月 1 前 言本實驗課程是與智能控制技術(shù)課程的理論教學(xué)內(nèi)容相配套而開設(shè)的。智能控制技術(shù)是一門實踐性很強的專業(yè)課程,它對培養(yǎng)學(xué)生實踐動手能力,提高綜合素質(zhì)和開發(fā)創(chuàng)新思維有著重要的作用。智能控制技術(shù)實驗在工程和教學(xué)中都有非常重要的作用,具有自身的特點和很強的實踐性。智能控制方法和手段很多,本實驗指導(dǎo)書介紹的是最常見的智能控制技術(shù),最常用系統(tǒng)設(shè)計方法和系統(tǒng)調(diào)試技術(shù)。主要培養(yǎng)學(xué)生具有智能控制系統(tǒng)設(shè)計和調(diào)試技術(shù)、以及應(yīng)用能力;開拓學(xué)生思路,培養(yǎng)學(xué)生綜合應(yīng)用知識的能力和創(chuàng)新能力。培養(yǎng)學(xué)生嚴(yán)肅認(rèn)真,求實求真的科學(xué)作風(fēng),為后續(xù)畢業(yè)設(shè)計和今后從

2、事電子技術(shù)方面的工作打下基礎(chǔ)。在實驗項目中有一部分是設(shè)計性實驗,教師給出實驗項目的要求,學(xué)生自己選擇實驗方案和實驗電路,自己完成實驗步驟的內(nèi)容。要求學(xué)生寫出系統(tǒng)設(shè)計方案,硬件電路設(shè)計、軟件程序設(shè)計和現(xiàn)場調(diào)試。寫出實驗心得體會。實驗成績根據(jù)實際操作和實驗報告綜合評分標(biāo)。 由于編者水平有限,難免在本實驗指導(dǎo)書中出現(xiàn)錯誤或不妥之處,望讀者指正。目 錄實驗一 認(rèn)識 hl-1 實驗箱4實驗二 d/a轉(zhuǎn)換實驗6實驗三 a/d轉(zhuǎn)換實驗9實驗四 矩陣鍵盤接口設(shè)計實驗12實驗五 lcd顯示器接口實驗20實驗六 報警控制接口實驗 25實驗七 單片機溫度控制實驗 29實驗八 單片機轉(zhuǎn)速控制實驗 38 實驗九 計算機

3、溫度pid控制實驗 43 實驗十 單片機計算機轉(zhuǎn)速測量/控制實驗46 實驗一 認(rèn)知 hl-1 實驗箱一、實驗?zāi)康?、了解hl-1實驗箱的結(jié)構(gòu),功能和操作方法;2、掌握程序編輯、編譯、程序代碼下載的操作方法。二、實驗原理1、kiel軟件的安裝、程序編輯、程序編譯的操作步驟。2、stc-isp下載軟件的使用、接口驅(qū)動程序的安裝。3、hl-1實驗箱電路原理。三、實驗儀器材料 1、pc計算機2、hl-1實驗箱四、實驗內(nèi)容1、說明kiel軟件的安裝、程序編輯、程序編譯的操作步驟。 2、說明stc-isp下載軟件接口驅(qū)動程序的安裝方法,stc-isp下載程序代碼的操作步驟。3、說明hl-1實驗電路圖工作原

4、理。五、思考題1、tc-isp下載軟件驅(qū)動程序安裝中出現(xiàn)了什么問題?如何解決的?2、如何設(shè)置tc-isp的參數(shù)(操作界面)才能正確下載程序代碼?實驗二 d/a轉(zhuǎn)換實驗一、實驗?zāi)康?、了解芯片dac0832和pcf8591的工作原理;2、掌握pcf8591的硬件電路和程序設(shè)計方法;二、實驗原理 pcf8591是一個單片集成、單獨供電、低功耗、8-bit cmos數(shù)據(jù)獲取器件。pcf8591具有4個模擬輸入、1個模擬輸出和1個串行ic總線接口。pcf8591的3個地址引腳a0, a1和a2可用于硬件地址編程,允許在同個ic總線上接入8個pcf8591器件,而無需額外的硬件。在pcf8591器件上輸

5、入輸出的地址、控制和數(shù)據(jù)信號都是通過雙線雙向ic總線以串行的方式進行傳輸。pcf8591的功能包括多路模擬輸入、內(nèi)置跟蹤保持、8-bit模數(shù)轉(zhuǎn)換和8-bit數(shù)模轉(zhuǎn)換。pcf8591的最大轉(zhuǎn)化速率由ic總線的最大速率決定。ain0ain3:模擬信號輸入端。 a0a3:引腳地址端。 vdd、vss:電源端。 (2.56v) sda、scl:i2c 總線的數(shù)據(jù)線、 時鐘線。 osc:外部時鐘輸入端,內(nèi)部時鐘輸出端。 ext:內(nèi)部、外部時鐘選擇線,使用內(nèi)部時鐘時 ext 接地。 agnd:模擬信號地。 aout:d/a 轉(zhuǎn)換輸出端。 vref:基準(zhǔn)電源端。三、實驗儀器材料 1、pc計算機2、單片機實驗

6、板四、實驗內(nèi)容1、模擬輸出通道電路連接,本實驗設(shè)備內(nèi)部已經(jīng)連接到led,并且可以改變led的亮度。2、畫出單片機模擬輸出通道的電路圖。3、分析主程序,并畫出流程圖。4、程序調(diào)試。用示波器觀察輸出波形,并畫出波形圖。5、修改程序,改變輸出波形的形狀,畫出修改后的波形圖。/*- 主程序-*/void main() unsigned char num; /da數(shù)模輸出變量 unsigned char adtemp; /定義中間變量 initlcd(); mdelay(20); init_timer1(); cmg(); /數(shù)碼管鎖存 while(1) dac(num); /da輸出,可以用led模擬

7、電壓變化 num+; /累加,到256后溢出變?yōu)?,往復(fù)循環(huán)。顯示在led 上亮度逐漸變化 mdelay(20); /延時用于清晰看出變化 if(adflag) /定時采集輸入模擬量 adflag=0; adtemp=readadc(0);tempdata0=(readadc(0)/50;/處理0通道電壓顯示 tempdata1=(readadc(0)%50)/10; adtemp=readadc(1);tempdata2=(readadc(1)/50;/處理1通道電壓顯示 此通道暫時屏蔽,可以自行添加 tempdata3=(readadc(1)%50)/10; adtemp=readadc(

8、2);tempdata4=(readadc(2)/50;/處理1通道電壓顯示 此通道暫時屏蔽,可以自行添加 tempdata5=(readadc(2)%50)/10; adtemp=readadc(3);tempdata6=(readadc(3)/50;/處理1通道電壓顯示 此通道暫時屏蔽,可以自行添加 tempdata7=(readadc(4)%50)/10; disp(); 五、實驗注意事項1、實驗報告要畫出有關(guān)電路圖。2、要畫出主程序流程圖。3、要畫出有關(guān)波形圖,并進行分析。六、思考題1、請分析你修改的程序,為什么會出現(xiàn)這樣的波形圖?2、說明下載程序代碼的操作步驟。實驗三 a/d轉(zhuǎn)換實驗

9、一、實驗?zāi)康?、了解芯片adc0809和pcf8591的工作原理;2、掌握pcf8591的硬件電路和程序設(shè)計方法;二、實驗原理 pcf8591是一個單片集成、單獨供電、低功耗、8-bit cmos數(shù)據(jù)獲取器件。pcf8591具有4個模擬輸入、1個模擬輸出和1個串行ic總線接口。pcf8591的3個地址引腳a0, a1和a2可用于硬件地址編程,允許在同個ic總線上接入8個pcf8591器件,而無需額外的硬件。在pcf8591器件上輸入輸出的地址、控制和數(shù)據(jù)信號都是通過雙線雙向ic總線以串行的方式進行傳輸。pcf8591的功能包括多路模擬輸入、內(nèi)置跟蹤保持、8-bit模數(shù)轉(zhuǎn)換和8-bit數(shù)模轉(zhuǎn)換。

10、pcf8591的最大轉(zhuǎn)化速率由ic總線的最大速率決定。ain0ain3:模擬信號輸入端。 a0a3:引腳地址端。 vdd、vss:電源端。 (2.56v) sda、scl:i2c 總線的數(shù)據(jù)線、 時鐘線。 osc:外部時鐘輸入端,內(nèi)部時鐘輸出端。 ext:內(nèi)部、外部時鐘選擇線,使用內(nèi)部時鐘時 ext 接地。 agnd:模擬信號地。 aout:d/a 轉(zhuǎn)換輸出端。 vref:基準(zhǔn)電源端。三、實驗儀器材料 1、pc計算機2、單片機實驗板四、實驗內(nèi)容1、模擬輸入通道電路連接,本實驗設(shè)備內(nèi)部已經(jīng)連接到兩路模擬通道ain0和ain1,并將a/d轉(zhuǎn)換的結(jié)果在顯示器上顯示。2、畫出lcd顯示器接口電路圖。3

11、、分析a/d轉(zhuǎn)換主程序,并畫出流程圖。4、程序調(diào)試。調(diào)整輸入電壓的大小,觀察顯示器電壓數(shù)字的變化,。5、修改程序,改變輸出數(shù)據(jù)的表示形式。 /*- 主程序(用lcd顯示器顯示)-*/void main() unsigned char num; /da數(shù)模輸出變量 unsigned char adtemp; /定義中間變量 initlcd(); mdelay(20); init_timer1(); cmg(); /數(shù)碼管鎖存 while(1) dac(num); /da輸出,可以用led模擬電壓變化 num+; /累加,到256后溢出變?yōu)?,往復(fù)循環(huán)。顯示在led上亮度逐漸變化 mdelay(2

12、0); /延時用于清晰看出變化 if(adflag) /定時采集輸入模擬量 adflag=0; adtemp=readadc(0);tempdata0=(readadc(0)/50;/處理0通道電壓顯示 tempdata1=(readadc(0)%50)/10; adtemp=readadc(1);tempdata2=(readadc(1)/50;/處理1通道電壓顯示 此通道暫時屏蔽,可以自行添加 tempdata3=(readadc(1)%50)/10; adtemp=readadc(2);tempdata4=(readadc(2)/50;/處理1通道電壓顯示 此通道暫時屏蔽,可以自行添加

13、tempdata5=(readadc(2)%50)/10; adtemp=readadc(3);tempdata6=(readadc(3)/50;/處理1通道電壓顯示 此通道暫時屏蔽,可以自行添加 tempdata7=(readadc(4)%50)/10; disp(); 五、實驗注意事項1、實驗報告要畫出有關(guān)電路圖。2、畫出主程序流程圖。3、說明調(diào)整輸入電壓后顯示電壓數(shù)字與輸入電壓大小的變化關(guān)系,并進行分析。六、思考題1、請分析你修改的程序,顯示數(shù)據(jù)有何變化?實驗四 矩陣鍵盤接口設(shè)計實驗一、實驗?zāi)康?、了解鍵盤設(shè)計的方法;2、掌握單鍵盤和矩陣鍵盤硬件和軟件設(shè)計方法;二、實驗原理1、本實驗電路

14、原理圖:2、單鍵識別當(dāng)每按一次獨立鍵盤的s2 鍵,與p1 口相連的八個發(fā)光二極管中點亮的一個往下移動一位。注意:關(guān)于按鍵去抖動的解釋,我們在手動按鍵的時候,由于機械抖動或是其它一些非人為的因素很有可能會造成誤識別,一般手動按下一次鍵然后接著釋放,按鍵兩片金屬膜接觸的時間大約為50ms 左右,在按下瞬間到穩(wěn)定的時間為5-10ms,在松開的瞬間到穩(wěn)定的時間也為5-10ms,如果我們再首次檢測到鍵被按下后延時10ms 左右再去檢測,這時如果是干擾信號將不會被檢測到,如果確實是有鍵被按下,則可確認(rèn),以上為按鍵識別去抖動的原理。3、矩陣鍵盤檢測當(dāng)依次按下4*4 矩陣鍵盤上從第1 到第20 個鍵,同時在六

15、位數(shù)碼管上依次顯示0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f。說明:本實驗板上數(shù)碼管為共陰極。共陰極數(shù)碼管顯示原理:一位數(shù)碼管內(nèi)一共有8 個發(fā)光二極管,對共陰極來說其8 個發(fā)光二極管的陰極在數(shù)碼管內(nèi)部全部接在一起,也就是“共陰”說法的來源,陽極是獨立的。一般的數(shù)碼管每一段亮至少需要10 個毫安的電流,而單片機的io 口送不出如此大的電流,所以我們需要加數(shù)碼管的驅(qū)動電路,可以用上拉電阻的方法,也可以使用專門的驅(qū)動芯片,本實驗板使用的74hc573,其輸出電流較大,足夠點亮數(shù)碼管。本實驗板上的六位數(shù)碼管中每個的相同段號(段a,b,c,d,e,f,g,h)全部是接在一起的,其中每

16、一個位(陰極)是獨立的,采用動態(tài)顯示的方法。三、實驗儀器材料 1、pc計算機2、hl-1實驗箱3、程序下載線四、實驗步驟1、分別畫出單鍵盤和矩陣鍵盤與單片機的接口電路,說明矩陣鍵盤的工作原理。2、畫出矩陣鍵盤參考程序的流程圖。4、下載程序代碼,運行程序。 5、修改程序,使其改變矩陣鍵盤的某些功能,說明程序運行的結(jié)果。矩陣鍵盤參考程序/4*4鍵盤檢測程序,按下鍵后相應(yīng)的代碼顯示在數(shù)碼管上#includesbit beep=p23;sbit dula=p26;sbit wela=p27; unsigned char i=100;unsigned char j,k,temp,key;void del

17、ay(unsigned char i) for(j=i;j0;j-) for(k=125;k0;k-);unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;display(unsigned char num) p0=tablenum; / p0=0xff; dula=1; dula=0; p0=0xc0; wela=1; wela=0;void main() dula=0; wela=0; while(1) p3=0xfe; temp=

18、p3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); / p0=tablekey; p1=0xfe; p3=0xfd; temp=p3; te

19、mp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); p3=0xfb; temp=p3; temp=temp&0xf0; if(temp!=0xf0) d

20、elay(10); if(temp!=0xf0) temp=p3; switch(temp) case 0xeb: key=8; break; case 0xdb: key=9; break; case 0xbb: key=10; break; case 0x7b: key=11; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); p3=0xf7; temp=p3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) tem

21、p=p3; switch(temp) case 0xe7: key=12; break; case 0xd7: key=13; break; case 0xb7: key=14; break; case 0x77: key=15; break; while(temp!=0xf0) temp=p3; temp=temp&0xf0; beep=0; beep=1; display(key); p1=0xf0; 五、實驗注意事項1、在程序設(shè)計過程中可以用keil進行仿真調(diào)試。2、注意鍵盤與單片機的接口地址。3、注意鍵盤設(shè)計中的去抖動問題。六、思考題1、為什么鍵盤程序中要有去抖動設(shè)計?2、說明單鍵盤和

22、矩陣鍵盤的優(yōu)缺點,適用于什么場合?實驗五 lcd顯示器接口實驗一、實驗?zāi)康?、了解芯led數(shù)碼管工作原理和lcd液晶顯示器的工作原理;2、掌握led數(shù)碼管硬件電路和程序設(shè)計方法;二、實驗原理 1、led數(shù)碼管硬件接口電路 采用動態(tài)顯示方式,六位數(shù)碼管的段顯碼和位顯碼分別由單片機p0口送出,經(jīng)兩片74hc573驅(qū)動送到led數(shù)碼管。led數(shù)碼管為共陰接法。 2、lcd顯示器硬件接口電路lcd1602字符型lcd簡介 字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式lcd,目前常用16*1,16*2,20*2和40*2行等的模塊。1602lcd的基本參數(shù)及引腳功能1602lcd分為帶背

23、光和不帶背光兩種,基控制器大部分為hd44780,帶背光的比不帶背光的厚,與帶背光在應(yīng)用中并無差別。三、實驗儀器材料 1、pc計算機2、hl-1實驗箱四、實驗內(nèi)容1、畫出led數(shù)碼管與單片機的接口電路,說明該電路采用的是什么顯示方式。2、 畫出lcd1602顯示器與單片機的接口電路,說明工作原理。3、 分析數(shù)碼管顯示主程序,給程序加上注釋,并畫出流程圖。4、程序調(diào)試:修改程序,改變顯示內(nèi)容,說明什么原理。參考程序:(數(shù)碼管秒表實驗程序)#include#define uint unsigned int#define uchar unsigned charuchar aa,shiwan,wan,

24、qian,bai,shi,ge;uint temp;sbit dula=p26;sbit wela=p27;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80;void display(uchar shiwan,uchar wan,uchar qian,uchar bai,uchar shi,uchar ge);void delay(uint z);void init();void main()init();/初始化子程序while(1)if(

25、aa=10) aa=0;temp+;if(temp=999999) temp=0; shiwan=temp/100000;wan=temp%100000/10000;qian=temp%10000/1000;bai=temp%1000/100;shi=temp%100/10;ge=temp%10; display(shiwan,wan,qian,bai,shi,ge);void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display(uchar shiwan,uchar wan,uchar qian,uchar bai

26、,uchar shi,uchar ge)dula=1;p0=tableshiwan;dula=0;p0=0xff;wela=1;p0=0xfe;wela=0;delay(1);dula=1;p0=tablewan;dula=0;p0=0xff;wela=1;p0=0xfd;wela=0;delay(1);dula=1;p0=tableqian;dula=0;p0=0xff;wela=1;p0=0xfb;wela=0;delay(1); dula=1;p0=tablebai;dula=0;p0=0xff;wela=1;p0=0xf7;wela=0;delay(1);dula=1;p0=table

27、shi;dula=0;p0=0xff;wela=1;p0=0xef;wela=0;delay(1);dula=1;p0=tablege;dula=0;p0=0xff;wela=1;p0=0xdf;wela=0;delay(1);void init()wela=0;dula=0;temp=0;tmod=0x01;th0=(65536-50000)/256;tl0=(65536-50000)%256;ea=1;et0=1;tr0=1;void timer0() interrupt 1th0=(65536-50000)/256;tl0=(65536-50000)%256;aa+;五、實驗注意事項1、

28、實驗報告要畫出有關(guān)電路圖。2、要畫出主程序流程圖。3、程序調(diào)試:修改程序,改變顯示內(nèi)容,說明什么原理。六、思考題1、請分析你修改的程序,會出現(xiàn)什么顯示效果?2、動態(tài)顯示的原理是什么?實驗六 報警控制接口實驗一、實驗?zāi)康?、了解;報警控制接口工作原理2、掌握:報警控制接口設(shè)計方法二、實驗原理 1、上限報警:若xk xh則發(fā)出上限報警,否則繼續(xù)執(zhí)行原定操作。下限報警:若xk xl ,則下限報警,否則繼續(xù)執(zhí)行原定操作。上下限報警:若xk xh,則上限報警,否則判斷xk xl否?若是則下限報警,否則繼續(xù)執(zhí)行原定操作。2、具體設(shè)計報警程序時,為了避免測量值在極限值一點處來回擺動造成頻繁報警,一般應(yīng)在極限

29、值附近設(shè)置一個回差帶三、實驗儀器材料 1、pc計算機2、hl-1實驗箱四、實驗內(nèi)容1、下面程序為蜂鳴器報警程序,修改其報警喇叭發(fā)聲的時間循環(huán),可以改變發(fā)聲時間長短;改變有關(guān)參數(shù)可改變發(fā)聲頻率;喇叭停止工作,間歇的時間,也可更改。要求:修改程序,產(chǎn)生兩種不同報警聲的頻率和報警聲的長短,用以表示上、下限報警聲。#includesbit spk=p23;/定義蜂鳴器端口void delay(unsigned int cnt)/延時 while(-cnt);main()unsigned int i; while(1) for(i=0;i200;i+)/喇叭發(fā)聲的時間循環(huán),改變大小可以改變發(fā)聲時間長短

30、delay(80);/參數(shù)決定發(fā)聲的頻率,估算值 spk=!spk; spk=1; /喇叭停止工作,間歇的時間,可更改 delay(20000); 2、下面為單鍵識別程序,要求修改主函數(shù),能識別兩個鍵盤,用以表示表示發(fā)生上、下限報警的觸發(fā)事件。 #include sbit by1=p34; /定義按鍵的輸入端s2鍵unsigned char count; /按鍵計數(shù),每按一下,count加1unsigned char temp;unsigned char a,b;void delay10ms(void) /延時程序unsigned char i,j;for(i=20;i0;i-)for(j=2

31、48;j0;j-);key() /按鍵判斷程序if(by1=0) /判斷是否按下鍵盤 delay10ms(); /延時,軟件去干擾 if(by1=0) /確認(rèn)按鍵按下 count+; /按鍵計數(shù)加1 if(count=8) /計8次重新計數(shù) count=0; /將count清零 while(by1=0);/按鍵鎖定,每按一次count只加1. move() /廣告燈向左移動移動函數(shù)a=temp(8-count);p1=a|b;main() count=0; /初始華參數(shù)設(shè)置 temp=0xfe; p1=0xff; p1=temp; while(1) /永遠(yuǎn)循環(huán),掃描判斷按鍵是否按下 key()

32、; /調(diào)用按鍵識別函數(shù) move(); /調(diào)用廣告燈移動函數(shù) 3、參考實驗三a/d轉(zhuǎn)換程序,將上述三個程序組合為一個程序,設(shè)置兩個模擬電壓(,4v和1v),表示上下限報警值,調(diào)節(jié)模擬電壓信號的大小,當(dāng)發(fā)生上下越限時,可以發(fā)出不同的報警聲。五、實驗要求 1、畫出單片機報警的硬件電路圖(只畫出單片機最小系統(tǒng)和有關(guān)的外部元器件)。2、編寫一個完整的上下限報警程序(用模擬電壓表示上下限報警值)。實驗七 單片機溫度控制實驗一、實驗?zāi)康?、了解;ds18b20溫度傳感器的工作原理2、掌握:溫度控制系統(tǒng)設(shè)計方法二、實驗原理1、ds18b20內(nèi)部結(jié)構(gòu):主要由4部分組成:64 位rom、溫度傳感器、非揮發(fā)的溫度

33、報警觸發(fā)器th和tl、配置寄存器。rom中的64位序列號是出廠前被光刻好的,它可以看作是該ds18b20的地址序列碼,每個ds18b20的64位序列號均不相同。64位rom的排的循環(huán)冗余校驗碼(crc=x8+x5+x4+1)。 rom的作用是使每一個ds18b20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個ds18b20的目的。ds18b20管腳排列:1. gnd為電源地;2. dq為數(shù)字信號輸入/輸出端;3. vdd為外接供電電源輸入端(在寄生電源接線方式時接地)2、ds18b20內(nèi)部構(gòu)成:高速暫存存儲器由9個字節(jié)組成,當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存

34、儲器的第0和第1個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,對應(yīng)的溫度計算:當(dāng)符號位s=0時,直接將二進制位轉(zhuǎn)換為十進制;當(dāng)s=1時,先將補碼變?yōu)樵a,再計算十進制值。溫度的低八位數(shù)據(jù) 0,溫度的高八位數(shù)據(jù) 1,高溫閥值 2,低溫閥值 3,保留 4,保留 5,計數(shù)剩余值 6,每度計數(shù)值 7,crc 校驗 8ds18b20中的溫度傳感器完成對溫度的測量,用16位二進制形式提供,形式表達,其中s為符號位。例如:+125的數(shù)字輸出07d0h(正溫度直接把16進制數(shù)轉(zhuǎn)成10進制即得到溫度值 ).-55的數(shù)字輸出為 fc90h(負(fù)溫度把得到的16進制數(shù)取反后加1 再轉(zhuǎn)成10進制數(shù))

35、ds18b20 單線通信:ds18b20 單線通信功能是分時完成的,他有嚴(yán)格的時隙概念,如果出現(xiàn)序列混亂, 1-wire 器件將不響應(yīng)主機,因此讀寫時序很重要。系統(tǒng)對 ds18b20 的各種操作必須按協(xié)議進行。根據(jù) ds18b20 的協(xié)議規(guī)定,微控制器控制 ds18b20 完成溫度的轉(zhuǎn)換必須經(jīng)過以下 3個步驟 :(1)每次讀寫前對 ds18b20 進行復(fù)位初始化。復(fù)位要求主 cpu 將數(shù)據(jù)線下拉 500us ,然后釋放, ds18b20 收到信號后等待 16us60us 左右,然后發(fā)出60us240us 的存在低脈沖,主 cpu 收到此信號后表示復(fù)位成功。(2)發(fā)送一條 rom 指令(3)發(fā)送

36、存儲器指令具體操作舉例:現(xiàn)在我們要做的是讓ds18b20進行一次溫度的轉(zhuǎn)換,那具體的操作就是:1、主機先作個復(fù)位操作,2、主機再寫跳過rom的操作(cch)命令,3、然后主機接著寫個轉(zhuǎn)換溫度的操作命令,后面釋放總線至少一秒,讓ds18b20完成轉(zhuǎn)換的操作。在這里要注意的是每個命令字節(jié)在寫的時候都是低字節(jié)先寫,例如cch的二進制為11001100,在寫到總線上時要從低位開始寫,寫的順序是“零、零、壹、壹、零、零、壹、壹”。整個操作的總線狀態(tài)如下圖。讀取ram內(nèi)的溫度數(shù)據(jù)。同樣,這個操作也要接照三個步驟。1、主機發(fā)出復(fù)位操作并接收ds18b20的應(yīng)答(存在)脈沖。2、主機發(fā)出跳過對rom操作的命令

37、(cch)。3、主機發(fā)出讀取ram的命令(beh),隨后主機依次讀取ds18b20發(fā)出的從第0一第8,共九個字節(jié)的數(shù)據(jù)。如果只想讀取溫度數(shù)據(jù),那在讀完第0和第1個數(shù)據(jù)后就不再理會后面ds18b20發(fā)出的數(shù)據(jù)即可。同樣讀取數(shù)據(jù)也是低位在前的。整個操作的總線狀態(tài)如下圖:三、實驗儀器材料 1、pc計算機2、hl-1實驗箱3、溫度傳感器四、實驗內(nèi)容1、參考程序:接上18b20溫度傳感器后,數(shù)碼管顯示出當(dāng)前溫度。2、修改程序:設(shè)置溫度上限溫度(30),當(dāng)溫度超過上限時,發(fā)出報警聲音,同時led燈閃。#include #define uchar unsigned char#define uint unsi

38、gned intsbit ds=p22; /define interface 定義接口(ds18b20數(shù)據(jù)位)uint temp; / variable of temperature 溫度變量uchar flag1; / sign of the result positive or negativesbit dula=p26;sbit wela=p27;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, /數(shù)碼管段顯示碼 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigne

39、d char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, / 0x87,0xff,0xef;void delay(uint count) /delay 延時 uint i; while(count) i=200; while(i0) i-; count-; void init_com(void) /功能:串口初始化,波特率9600,方式1 tmod = 0x20; pcon = 0x00; scon = 0x50; th1 = 0xfd; tl1 = 0xfd; tr1 = 1;void dsreset(void) /send reset a

40、nd initialization command 發(fā)送初始化命令 uint i; ds=0; i=103; while(i0)i-; ds=1; i=4; while(i0)i-;bit tmpreadbit(void) /read a bit 讀一個位的數(shù)據(jù) uint i; bit dat; ds=0;i+; /i+ for delay ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return (dat);uchar tmpread(void) /read a byte date 讀一個字節(jié)數(shù)據(jù) uchar i,j,dat; dat=0; for(i=1;i=

41、8;i+) j=tmpreadbit(); dat=(j1); /讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里 return(dat);void tmpwritebyte(uchar dat) /write a byte to ds18b20 寫一個字節(jié)數(shù)據(jù) uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 ds=0; i+;i+; ds=1; i=8;while(i0)i-; else ds=0; /write 0 i=8;while(i0)i-; ds=1; i+;i+; void tmpchange(void)

42、/ds18b20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus 發(fā)送跳過rom命令 tmpwritebyte(0x44); / initiates a single temperature conversion 啟動溫度轉(zhuǎn)換命令uint tmp() /get the temperature 讀取溫度 float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp0;a-) for(b=60;b0;b-); void display(uint temp)/顯示程序 uchar a1,a2,a2t,a3,ser;

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論