傳感器技術(shù)課程設(shè)計(jì)基于BH1750的光照度檢測_第1頁
傳感器技術(shù)課程設(shè)計(jì)基于BH1750的光照度檢測_第2頁
傳感器技術(shù)課程設(shè)計(jì)基于BH1750的光照度檢測_第3頁
傳感器技術(shù)課程設(shè)計(jì)基于BH1750的光照度檢測_第4頁
傳感器技術(shù)課程設(shè)計(jì)基于BH1750的光照度檢測_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 成績評定: 傳感器技術(shù) 課程設(shè)計(jì) 題 目 基于bh1750光照度檢測 摘要傳統(tǒng)的光照傳感器主要采用光敏電阻,光敏電阻的光電流與光照度之間的關(guān)系稱為光電特性。光敏電阻的光電特性呈非線性,因此不適宜作檢測元件,在自動控制中它常被用作丌關(guān)式光電傳感器。光敏電阻需要用ad轉(zhuǎn)換器將其信號轉(zhuǎn)換為數(shù)字信號,電路復(fù)雜,費(fèi)用高。而且,光敏電阻進(jìn)行光強(qiáng)度采集不夠理想。針對光敏電阻的諸多缺點(diǎn),提出了一種利用16位高精度數(shù)字光強(qiáng)度傳感器bh1750fvi進(jìn)行光強(qiáng)度檢測儀的設(shè)計(jì)方案,利用i2c總線接口數(shù)字型光強(qiáng)度傳感器,可以避免ad轉(zhuǎn)換系統(tǒng)帶來的誤差,可在nokia5110液晶顯示器上進(jìn)行測量數(shù)值的顯示。該系統(tǒng)具有光

2、強(qiáng)度采集精度較高、實(shí)時(shí)性較強(qiáng)等優(yōu)點(diǎn),并且電路設(shè)汁較為簡單,容易實(shí)現(xiàn)與集成。關(guān)鍵詞:微控制器 液晶顯示器 i2c總線 目 錄一 、設(shè)計(jì)目的二、設(shè)計(jì)任務(wù)與要求2.1設(shè)計(jì)任務(wù)2.2設(shè)計(jì)要求三、設(shè)計(jì)步驟及原理分析3.1設(shè)計(jì)方法3.2設(shè)計(jì)步驟3.3設(shè)計(jì)原理分析四、課程設(shè)計(jì)小結(jié)與體會五、參考文獻(xiàn) 一 、設(shè)計(jì)目的設(shè)計(jì)一種基于光強(qiáng)度傳感器bh1750fvi的光照度檢測儀,采用低成本的微控制器進(jìn)行控制,利用i2c總線接口進(jìn)行數(shù)據(jù)傳輸,可在普通的nokia5110液晶顯示器上進(jìn)行光強(qiáng)度測量值的實(shí)時(shí)顯示。二、設(shè)計(jì)任務(wù)與要求2.1設(shè)計(jì)任務(wù)針對傳統(tǒng)測光系統(tǒng)結(jié)構(gòu)復(fù)雜、容易受到紅外、紫外等干擾光線的影響等弊端,改選新型單片

3、測光芯片bh1750作為光強(qiáng)采集器,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)測光系統(tǒng).2.2設(shè)計(jì)要求能夠快速檢測環(huán)境的光照強(qiáng)度且能夠在nokia5110液晶顯示器上進(jìn)行數(shù)值顯示。三、設(shè)計(jì)步驟及原理分析3.1設(shè)計(jì)方法bh1750是半導(dǎo)體制造商rohm為適應(yīng)以移動電話手機(jī)為首的便攜式機(jī)器和液晶電視等的要求而開發(fā)出的具有優(yōu)良光譜靈敏度特性、16bit串行輸出的單片數(shù)字照度傳感器.由于其面世不久,關(guān)于它的資料十分稀少,目前有關(guān)bh1750的實(shí)用資料僅有一份其官方網(wǎng)站發(fā)布的英文版芯片手冊.在參考該手冊基礎(chǔ)上,結(jié)合實(shí)際測試經(jīng)驗(yàn),和事例程序進(jìn)行設(shè)計(jì)。3.2設(shè)計(jì)步驟1先了解光強(qiáng)度傳感器bh1750fvi。2. 設(shè)計(jì)檢測液晶數(shù)據(jù)的設(shè)計(jì)

4、方案3. 監(jiān)測系統(tǒng)結(jié)構(gòu)設(shè)計(jì)4系統(tǒng)軟件驅(qū)動設(shè)計(jì)3.3設(shè)計(jì)原理分析1. 不區(qū)分光源數(shù)字型環(huán)境光強(qiáng)度傳感器bh1750fvi是日本rhom株式會社近些年推出的一種兩線式串行總線接口的集成電路,可以根據(jù)收集的光線強(qiáng)度數(shù)據(jù)來進(jìn)行環(huán)境監(jiān)測,其具有165 535 lx的高分辨率,可支持較大范圍的光照強(qiáng)度變化。bh1750fvi結(jié)構(gòu)框圖如圖1所示。 從結(jié)構(gòu)框圖可容易看出,外部光照被接近人眼反應(yīng)的高精度光敏二極管pd探測到后,通過集成運(yùn)算放大器將pd電流轉(zhuǎn)換為pd電壓,由模數(shù)轉(zhuǎn)換器獲取16位數(shù)字?jǐn)?shù)據(jù),然后被邏輯和ic界面進(jìn)行數(shù)據(jù)處理與存儲。osc為內(nèi)部的振蕩器提供內(nèi)部邏輯時(shí)鐘,通過相應(yīng)的指令操作即可讀取出內(nèi)部存

5、儲的光照數(shù)據(jù)。數(shù)據(jù)傳輸使用標(biāo)準(zhǔn)的i2c總線,按照時(shí)序要求操作起來也非常方便。2. nokia5110是一款價(jià)廉的液晶顯示器,該顯示器可以顯示15個(gè)漢字、30個(gè)字符,僅僅需要4根io數(shù)據(jù)線,其工作電壓為33 v。它采用nxp公司的pcd8544顯不驅(qū)動芯片,nokia5110可以使用沒有miso只有mosi的spi協(xié)議,可以利用硬件spi,但通常只需要軟件程序模擬即可,數(shù)據(jù)傳輸需要嚴(yán)格按照手冊中串行接口時(shí)序圖編寫。其運(yùn)行速度十分理想,是lcd12864顯示器的20倍,lcd1602顯示器的40倍,適用于對反應(yīng)靈敏度有要求的場合。21 nokia5110液晶顯示器的初始化 接通電源后,nokia5

6、110液晶顯示器的內(nèi)部寄存器和ram的內(nèi)容是不確定的,這時(shí)需要一個(gè)res低電平脈沖進(jìn)行復(fù)位。當(dāng)vdd變?yōu)楦唠娖?,達(dá)到或高于vdd的最小值之后,給nokia5110顯示模塊的復(fù)位端rst引腳輸入低電平(要求復(fù)位電平03vdd),便進(jìn)行了nokia5110液晶顯示器的復(fù)位。圖2為nokia5110液晶顯示器的復(fù)位時(shí)序圖。22 設(shè)置nokia5110液晶顯示器的坐標(biāo) 通過查詢nokia5110液晶顯示器的指令集與手冊可以知道其功能設(shè)置命令的h和v。其中:h=0使用基本指令集命令,h=1使用擴(kuò)展指令集命令,v=0水平尋址,v=1垂直尋址。數(shù)據(jù)以字節(jié)8位為單位下載到pcd8544的4884位顯示數(shù)據(jù)ra

7、m矩陣。列通過地址指針尋址,地址范圍為x:083(1010011);y:05(101)。 在垂直尋址模式時(shí)(v=1),y地址在每個(gè)字節(jié)之后遞增,經(jīng)最后的y地址(y=5)之后,y繞回0,x遞增到下一列的地址。存水平尋址模式時(shí)(v=0),x地址在每個(gè)字節(jié)之后遞增,經(jīng)最后的x地址(x=83)之后,x繞回0,y遞增到下一行的地址。經(jīng)每一個(gè)最后地址之后(x=83,y=5),地址指針繞回地址(x=0,y=0)。23 顯示方式 顯示漢字可以采用兩種點(diǎn)陣方式,一種是1212點(diǎn)陣,一種是1616點(diǎn)陣。采用1212點(diǎn)陣漢字時(shí),由于不是8的整數(shù)倍數(shù),因此行與行之間只能隔開,這樣才能完整顯示一個(gè)漢字。英文字符占用68

8、個(gè)點(diǎn)陣,可以通過建立一個(gè)ascii的數(shù)組來進(jìn)行尋址。3利用bh1750fvi和nokia5110液晶顯示器進(jìn)行系統(tǒng)結(jié)構(gòu)的設(shè)計(jì),其中nokia5110需要使用5個(gè)io口,rst復(fù)位端、sce芯片使能端、dc模式選擇端、din數(shù)據(jù)線、clk時(shí)鐘線分別接到單片機(jī)的p21p25口。由于bh1750fvi使用低電壓33 v,而傳統(tǒng)單片機(jī)使用的是5 v電壓,故需要一個(gè)33 v電源芯片662k輸出穩(wěn)定的33 v電壓,bh1750fvi光強(qiáng)度傳感器的addr端口接地,測量儀電路圖如圖3所示。4. #include #include /keil library #include /keil library#in

9、clude #define uchar unsigned char#define uint unsigned int#define dataport p0 /lcd1602數(shù)據(jù)端口sbit scl=p10; /iic時(shí)鐘引腳定義sbit sda=p11; /iic數(shù)據(jù)引腳定義sbit lcm_rs=p20; /lcd1602命令端口sbit lcm_rw=p21; /lcd1602命令端口sbit lcm_en=p22; /lcd1602命令端口 #define slaveaddress 0x46 /定義器件在iic總線中的從地址,根據(jù)alt address地址引腳不同修改 /alt addr

10、ess引腳接地時(shí)地址為0x46,接電源時(shí)地址為0xb8typedef unsigned char byte;typedef unsigned short word;byte buf8; /接收數(shù)據(jù)緩存區(qū) uchar ge,shi,bai,qian,wan; /顯示變量int dis_data; /變量void delay_nms(unsigned int k);void initlcd();void init_bh1750(void);void writedatalcm(uchar dataw);void writecommandlcm(uchar cmd,uchar attribc);voi

11、d displayonechar(uchar x,uchar y,uchar ddata);void conversion(uint temp_data);void single_write_bh1750(uchar reg_address); /單個(gè)寫入數(shù)據(jù)uchar single_read_bh1750(uchar reg_address); /單個(gè)讀取內(nèi)部寄存器數(shù)據(jù)void multiple_read_bh1750(); /連續(xù)的讀取內(nèi)部寄存器數(shù)據(jù)/-void delay5us();void delay5ms();void bh1750_start(); /起始信號void bh1750

12、_stop(); /停止信號void bh1750_sendack(bit ack); /應(yīng)答ackbit bh1750_recvack(); /讀ackvoid bh1750_sendbyte(byte dat); /iic單個(gè)字節(jié)寫byte bh1750_recvbyte(); /iic單個(gè)字節(jié)讀/-/*void conversion(uint temp_data) / 數(shù)據(jù)轉(zhuǎn)換出 個(gè),十,百,千,萬 wan=temp_data/10000+0x30 ; temp_data=temp_data%10000; /取余運(yùn)算qian=temp_data/1000+0x30 ; temp_data

13、=temp_data%1000; /取余運(yùn)算 bai=temp_data/100+0x30 ; temp_data=temp_data%100; /取余運(yùn)算 shi=temp_data/10+0x30 ; temp_data=temp_data%10; /取余運(yùn)算 ge=temp_data+0x30; /毫秒延時(shí)*void delay_nms(unsigned int k)unsigned int i,j;for(i=0;ik;i+)for(j=0;j121;j+);/*/void waitforenable(void)dataport=0xff;lcm_rs=0;lcm_rw=1;_nop_

14、();lcm_en=1;_nop_();_nop_();while(dataport&0x80);lcm_en=0;/*/void writecommandlcm(uchar cmd,uchar attribc)if(attribc)waitforenable();lcm_rs=0;lcm_rw=0;_nop_();dataport=cmd;_nop_();lcm_en=1;_nop_();_nop_();lcm_en=0;/*/void writedatalcm(uchar dataw)waitforenable();lcm_rs=1;lcm_rw=0;_nop_();dataport=da

15、taw;_nop_();lcm_en=1;_nop_();_nop_();lcm_en=0;/*/void initlcd()writecommandlcm(0x38,1);writecommandlcm(0x08,1);writecommandlcm(0x01,1);writecommandlcm(0x06,1);writecommandlcm(0x0c,1);/*/void displayonechar(uchar x,uchar y,uchar ddata)y&=1;x&=15;if(y)x|=0x40;x|=0x80;writecommandlcm(x,0);writedatalcm(

16、ddata);/*延時(shí)5微秒(stc90c52rc12m)不同的工作環(huán)境,需要調(diào)整此函數(shù),注意時(shí)鐘過快時(shí)需要修改當(dāng)改用1t的mcu時(shí),請調(diào)整此延時(shí)函數(shù)*/void delay5us() _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*延時(shí)5毫秒(stc90c52rc12m)不同的工作環(huán)境,需要調(diào)整此函數(shù)當(dāng)改用1t的mcu時(shí),請調(diào)整此延時(shí)函數(shù)*/void delay5ms() word

17、 n = 560; while (n-);/*起始信號*/void bh1750_start() sda = 1; /拉高數(shù)據(jù)線 scl = 1; /拉高時(shí)鐘線 delay5us(); /延時(shí) sda = 0; /產(chǎn)生下降沿 delay5us(); /延時(shí) scl = 0; /拉低時(shí)鐘線/*停止信號*/void bh1750_stop() sda = 0; /拉低數(shù)據(jù)線 scl = 1; /拉高時(shí)鐘線 delay5us(); /延時(shí) sda = 1; /產(chǎn)生上升沿 delay5us(); /延時(shí)/*發(fā)送應(yīng)答信號入口參數(shù):ack (0:ack 1:nak)*/void bh1750_sendac

18、k(bit ack) sda = ack; /寫應(yīng)答信號 scl = 1; /拉高時(shí)鐘線 delay5us(); /延時(shí) scl = 0; /拉低時(shí)鐘線 delay5us(); /延時(shí)/*接收應(yīng)答信號*/bit bh1750_recvack() scl = 1; /拉高時(shí)鐘線 delay5us(); /延時(shí) cy = sda; /讀應(yīng)答信號 scl = 0; /拉低時(shí)鐘線 delay5us(); /延時(shí) return cy;/*向iic總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)*/void bh1750_sendbyte(byte dat) byte i; for (i=0; i8; i+) /8位計(jì)數(shù)器 dat

19、= 1; /移出數(shù)據(jù)的最高位 sda = cy; /送數(shù)據(jù)口 scl = 1; /拉高時(shí)鐘線 delay5us(); /延時(shí) scl = 0; /拉低時(shí)鐘線 delay5us(); /延時(shí) bh1750_recvack();/*從iic總線接收一個(gè)字節(jié)數(shù)據(jù)*/byte bh1750_recvbyte() byte i; byte dat = 0; sda = 1; /使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù), for (i=0; i8; i+) /8位計(jì)數(shù)器 dat = 1; scl = 1; /拉高時(shí)鐘線 delay5us(); /延時(shí) dat |= sda; /讀數(shù)據(jù) scl = 0; /拉低時(shí)鐘線 d

20、elay5us(); /延時(shí) return dat;/*void single_write_bh1750(uchar reg_address) bh1750_start(); /起始信號 bh1750_sendbyte(slaveaddress); /發(fā)送設(shè)備地址+寫信號 bh1750_sendbyte(reg_address); /內(nèi)部寄存器地址, / bh1750_sendbyte(reg_data); /內(nèi)部寄存器數(shù)據(jù), bh1750_stop(); /發(fā)送停止信號/*單字節(jié)讀取*/*uchar single_read_bh1750(uchar reg_address) uchar re

21、g_data; bh1750_start(); /起始信號 bh1750_sendbyte(slaveaddress); /發(fā)送設(shè)備地址+寫信號 bh1750_sendbyte(reg_address); /發(fā)送存儲單元地址,從0開始 bh1750_start(); /起始信號 bh1750_sendbyte(slaveaddress+1); /發(fā)送設(shè)備地址+讀信號 reg_data=bh1750_recvbyte(); /讀出寄存器數(shù)據(jù)bh1750_sendack(1); bh1750_stop(); /停止信號 return reg_data; */*/連續(xù)讀出bh1750內(nèi)部數(shù)據(jù)/*vo

22、id multiple_read_bh1750(void) uchar i; bh1750_start(); /起始信號 bh1750_sendbyte(slaveaddress+1); /發(fā)送設(shè)備地址+讀信號 for (i=0; i3; i+) /連續(xù)讀取2個(gè)地址數(shù)據(jù),存儲中buf bufi = bh1750_recvbyte(); /buf0存儲0x32地址中的數(shù)據(jù) if (i = 3) bh1750_sendack(1); /最后一個(gè)數(shù)據(jù)需要回noack else bh1750_sendack(0); /回應(yīng)ack bh1750_stop(); /停止信號 delay5ms();/初始化bh1750,根據(jù)需要請參考pdf進(jìn)行修改*void init_bh1750() single_write_bh1750(0x01); /*/主程序*/*void main() float temp; delay_nms(100); /延時(shí)100ms initlcd(); /初始化lcd init_bh1750(); /初始化bh1750 while(1) /循環(huán) single_write_bh1750(0x01); / power on single_write_bh1750(0x10); / h- resolution mode delay_nms(180

溫馨提示

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

評論

0/150

提交評論