實驗二 紅外測距傳感器實驗_第1頁
實驗二 紅外測距傳感器實驗_第2頁
實驗二 紅外測距傳感器實驗_第3頁
實驗二 紅外測距傳感器實驗_第4頁
實驗二 紅外測距傳感器實驗_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 信息工程學院實驗報告成 績:指導老師(簽名):課程名稱: 傳感器原理及應用 實驗項目名稱: 實驗二  紅外測距傳感器實驗 實驗時間: 班級: 姓名: 學號: 一、實 驗 目 的1. 學習 CC2530 單片機 ADC 模塊的使用。2. 學習紅外測距傳感器的使用。二、實 驗 原 理 1. CC2530 節(jié)點與紅外測距傳感器的硬件接口紅外線測距傳感器模塊GP2Y0A21YK0F(1). 紅外測距傳感器模塊(GP2Y0A21YK0F)引腳OUT:模擬量輸出接口(AD 模塊)GND:外接 GNDVCC:數(shù)字量輸出接口(0 和 1) 外接 5V 電源(2) . 傳感器模塊與 CC2530 模

2、塊之間的連接2. ADC(1). 簡介CC2530單片機的ADC支持多達14位的模擬數(shù)字轉(zhuǎn)換,具有多達12位的ENOB(有效數(shù)字位)。它包括一個模擬多路轉(zhuǎn)換器,具有多達8個各自可配置的通道;以及一個參考電壓發(fā)生器。轉(zhuǎn)換結(jié)果通過DMA寫入存儲器。還具有若干運行模式。ADC模塊的方框圖如下所示:ADC的主要特性如下: 可選的抽取率,這也設置了分辨率(7到12位) 8個獨立的輸入通道,可接受單端或差分信號 參考電壓可選為內(nèi)部單端、外部單端、外部差分或AVDD5 產(chǎn)生中斷請求 轉(zhuǎn)換結(jié)束時的DMA觸發(fā) 溫度傳感器輸入 電池測量功能(2). 寄存器簡介本次實驗中主要涉及到ADC模塊的寄存器:數(shù)據(jù)的換算:例

3、如:在 CC2530 中配置 ADC 的參考電壓為 AVDD5(3.3V),抽取率為 512(12 位有效數(shù)據(jù)),由于在實驗中采用單端轉(zhuǎn)換方式,所以實際數(shù)據(jù)只有 11 位。這時,ADC 采集到的數(shù)據(jù)記為 x,則ADC采集數(shù)據(jù)轉(zhuǎn)換為電壓(單位:V):V = x * 3.3 / 20483. GP2Y0A21YK0F 紅外測距傳感器(1). 概述夏普 GP2Y0A21YK0F 測距傳感器是基于 PSD 的微距傳感器,其有效的測量距離在 80cm 內(nèi),有效的測量角度大于 40 度,輸出信號為模擬電壓,在 0 到 8cm 左右的范圍內(nèi)與距離成正比非線性關系,在 10-80cm 的距離范內(nèi)成反比非線性關

4、系,平均功耗為 30mA,反應時間約為 5ms,并且對背景光及溫度的適應性較強。GP2Y0A21YK0F 傳感器的默認的測距分辨率為 1mm。由于 GP2Y0A21YK0F 傳感器采用的是 PSD 光信號調(diào)制法,因此其輸出的信號電壓并不是標準的直流電壓,而是 疊加了波幅約為 0.2V,頻率 1KHz 的方波,由于波幅達到 0.2V,這就影響了分辨率。如果不進行信號處理,分辨率的精度僅能達到 1mm。而如果經(jīng)過有效處理,在正常情況下可以達到 0.1mm以上的精度,完全可以滿足一般工程定距等方面的需求。Sharp 的紅外傳感器都是基于一個原理,三角測量原理。紅外發(fā)射器按照一定的角度發(fā)射紅外光束,當

5、遇到物體以后,光束會反射回來,反射回來的紅外光線被 CCD 檢測器檢測到以后,會獲得一個偏移值L,利用三角關系,在知道了發(fā)射角度 a,偏移距 L,中心矩 X,以及濾鏡的焦距 f 以后,傳感器到物體的距離 D 就可以通過幾何關系計算出來了。傳感器特點: 基本不受背景光及溫度的影響,能滿足大部分工程應用的性能要求,有很高的性價比,具有很好的工程應用價值。(2). 使用方法本實驗利用 CC2530 的 ADC 模塊采集紅外測距傳感器輸出的模擬電壓數(shù)據(jù),然后換算成電壓值,在根據(jù)數(shù)據(jù)手冊上的特性曲線,如下圖所示:將特性曲線通過 MATLAB 可以擬合出計算公式,直接根據(jù)電壓值計算出距離,假設測量出的電壓

6、為 voltage(V),待測距離為 distance(cm),則 distance = 26.757 * voltage-1.236。三、實 驗 內(nèi) 容 與 步 驟 1. 將仿真器的一端 JTAG 接口與一個 CC2530 模塊相連,并打開CC2530節(jié)點的電源,再將仿真器的另一端用 USB 接口與 PC 計算機相連。2. 用 MiniUSB 線將 CC2530 節(jié)點與計算機的 USB 口連接起來后,打開串口調(diào)試器軟件,設置波特率 57600,校驗位 None,數(shù)據(jù)位 8,停止位 1,然后點擊打開串口按鈕,如下圖所示:說明:串口號可以在設備管理器看到,具體方法如下圖所示:3. 用 IAR E

7、mbedded Workbench for 8051 8.10 打開配套傳感器實中的“SerialPort.Edition18.IRDMSMain.eww”工程文件。4. 點擊 IAR 功能菜單上的綠色下載按鈕 ,進入程序下載頁面,如下圖所示:5. 程序下載完成后,點擊 IAR 開發(fā)環(huán)境中的運行程序按鈕運行程序,如下圖所示:此外,也可以通過點擊其它按鈕實現(xiàn)對當前程序的調(diào)試(單步、斷點、暫停、步入等功能)。6. 擴展實驗為了能夠更加直觀地觀察到傳感器工作的狀況,在實驗過程中可以利用光盤中配套的上位機軟件 CurveDisplay 來觀察傳感器的數(shù)據(jù)曲線。操作步驟(1). 將仿真器的一端 JTAG

8、 接口與一個 CC2530 模塊相連,并打開 CC2530 節(jié)點的電源,再將仿真器的另一端用 USB 接口與 PC 計算機相連。(2). 用 MiniUSB 線將 CC2530 節(jié)點與計算機的 USB 口連接起來后,打開配套傳感器實驗中的“CurveDisplayCurveDisplay.exe”上位機軟件,選擇正確的串口號后,再設置波特率 57600,校驗位 None,數(shù)據(jù)位 8,停止位 1,最后點擊打開連接按鈕,如下所示:(3). 用 IAR Embedded Workbench for 8051 8.10 打開配套傳感器實驗中的“Curve.Edition18.IRDMSMain.eww

9、”工程文件,然后通過 IAR 將程序下載到 CC2530 模塊中。程序下載完成后,點擊 IAR 開發(fā)環(huán)境中的運行程序按鈕運行程序。四、實 驗 結(jié) 果 及 分 析:1. 程序正常運行后,每采集一次傳感器數(shù)據(jù),紅色 LED 閃爍一下,與此同時串口調(diào)試器顯示信息(功能擴展,實現(xiàn)按鍵按一下傳感器采樣一次)如下圖所示:2. 在實驗過程中,將傳感器水平正對著墻壁或障礙物遠離移動,可以在串口調(diào)試軟件上看到相應ADC 采集到的電壓數(shù)據(jù)也發(fā)生相應的變化,其數(shù)值越小說明兩者之間的距離越大。3. 擴展實驗現(xiàn)象(1). 程序正常運行后,在 CurveDisplay 軟件中可以觀察到傳感器的數(shù)據(jù)曲線,如下圖所示:(2)

10、 . 在實驗過程中,將傳感器水平正對著墻壁或障礙物遠離移動,可以在 CurveDisplay 軟件上的傳感器數(shù)據(jù)曲線也發(fā)生相應的變化,如下圖所示:五、實 驗 總 結(jié):通過這次學習和操作,我學到了對CC2530 單片機 ADC 模塊的使用,并懂的了紅外測距傳感器的使用。以及通過自己對其功能擴展,實現(xiàn)按鍵控制傳感器的采樣。這次的實驗操作讓我受益匪淺。六、源 程 序 清 單 (加上必要的注釋)主要代碼如下:#include <ioCC2530.h>#include <math.h>/GPIO_LED定義(1:點亮,0:熄滅)#define GPIO_GLED P1_0#def

11、ine GPIO_RLED P1_1/GPIO_KEY定義(0:被按下,1:未按下)#define GPIO_SW1 P1_2#define GPIO_SW2 P1_3void InitClock(void) /初始化時鐘 unsigned int i; /turn on 16MHz RC and 32MHz XOSC SLEEPCMD &= 0x04; /wait for 32MHz XOSC stable while(!(SLEEPSTA & 0x40); /chip bug workaround asm("nop"); /延時63us for(i =

12、0; i < 504; i+) asm("nop"); /Select 32MHz XOSC and the source for 32K clock CLKCONCMD = 0x00; /Wait for the change to be effective while(CLKCONSTA != 0x00); /turn off 16MHz RC SLEEPCMD = 0x80;void InitGPIO(void) /初始化GPIO /GPIO_RLED引腳(P1_0,通用IO,輸出) P1SEL &= 0x01; P1DIR |= 0x01; /GPIO

13、_GLED引腳(P1_1,通用IO,輸出) P1SEL &= 0x02; P1DIR |= 0x02; /GPIO_SW1引腳(P1_2,通用IO,輸入) P1SEL &= 0x04; P1DIR &= 0x04; /GPIO_SW2引腳(P1_3,通用IO,輸入) P1SEL &= 0x08; P1DIR &= 0x08;void InitUART(void) /初始化串口USART0 /P05.2配置為外設IO P0SEL |= 0x3C; /USART 0 I/O location: Alternative 2 location PERCFG &a

14、mp;= 0x01; /UART mode U0CSR |= 0x80; /無流控制,無校驗,1位停止位,8位數(shù)據(jù)位,起始位為低電平,停止位為高電平 U0UCR = 0x02; /波特率57600 U0GCR |= 0x0A; U0BAUD = 216; /使能串口接收器 U0CSR |= 0x40;void UART_SendStr(const unsigned char *str) /通過串口發(fā)送字符串 while(*str) /發(fā)送一個字符 U0DBUF = *str+; /等待發(fā)送完畢 while(!UTX0IF); /清除發(fā)送中斷標志 UTX0IF = 0; void Float2S

15、tr(void *str, float Num, unsigned char FractLen) /將float型數(shù)據(jù)轉(zhuǎn)換為字符串(FractLen:小數(shù)位數(shù)1-6) unsigned char *ptr = (unsigned char *)str); unsigned char FractCache6 = '0' unsigned char i = FractLen, j; unsigned char tmp; unsigned char sign = (unsigned char)(Num < 0); unsigned long trunc; /整數(shù)部分 unsig

16、ned long fract; /小數(shù)部分(4位) if (sign) Num *= -1; trunc = (unsigned long)Num; fract = (unsigned long)(Num-(unsigned long)Num)*1000000); /處理小數(shù)部分 if (fract = 0) ptri+ = '0' else for(j=0; j<6; j+) FractCachej = (unsigned char)(fract % 10) + '0'); fract /= 10; /調(diào)整小數(shù)位數(shù) for(j=0; j<Fract

17、Len; j+) ptrFractLen - 1 - j = FractCache6 - 1 - j; /添加小數(shù)點 ptri+ = '.' /處理整數(shù)部分 if (trunc = 0) ptri+ = '0' while (trunc > 0) ptri+ = (unsigned char)(trunc % 10) + '0'); trunc /= 10; /添加符號位 if (sign) ptri+ = '-' /字符串逆序輸出 for(j=0; j<(i/2); j+) tmp = ptrj; ptrj = pt

18、r(i-j)-1; ptr(i-j)-1 = tmp; /添加字符串結(jié)束符 ptri = '0'void DelayXus(unsigned int Xus) /延時Xus while(Xus-) asm("nop"); asm("nop"); asm("nop"); void DelayXms(unsigned int X) /延時Xms while (X-) /延時1ms DelayXus(1000); void InitADC(void) /初始化ADC /P0.1配置為外設IO P0SEL |= 0x02; /

19、P0.1配置為模擬IO APCFG |= 0x02;unsigned int ADC_ReadVal(void) /通過ADC讀取P0.1的電壓數(shù)據(jù) int val; /ADC參考電壓: AVDD5 Pin ADCCON3 |= 0x80; /512 decimation rate (12 bits ENOB) ADCCON3 |= 0x30; /Single channel: AIN1 ADCCON3 &= 0x0F; ADCCON3 |= 0x01; /Wait for the conversion to be done while(!(ADCCON1 & 0x80); /

20、Read the result(最高位為符號位) val = (unsigned int)ADCL; val |= (unsigned int)(ADCH << 8); /Treat small negative as 0 val = val < 0 ? 0 : val; /12位有效數(shù)據(jù)(由于單端轉(zhuǎn)換,所以實際數(shù)據(jù)11位) val = val >> 4; return val;void main(void) unsigned char cache16; unsigned int val; float voltage; /初始化時鐘 InitClock(); /初始化IO InitGPIO(); /初始化串口USART0 InitUART()

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論