BH1570光照強度感測器STM32驅動

2021-10-06 04:26:56 字數 3563 閱讀 8386

bh1570fvi是一款常用的光照強度感測器,通過iic介面協議和晶元通訊,具有16位的轉換精度,光照強度範圍為(1-65535lx)。

圖1 晶元引腳介紹

關於晶元的引腳如上圖所示:晶元供電電壓為2.0-3.6v,其中dvi引腳是晶元的復位引腳,scl為iic時鐘引腳,sda為iic資料引腳,addr為晶元的位址引腳,當接低電平時晶元的位址為0x46,當接低電平時晶元位址為0xb8,addr懸空時位址為0x46。

bh1570fvi具有三種測量模式

測量模式

測量時間

解析度高解析度模式2

120ms

0.5lx

高解析度模式

120ms

1lx低解析度模式

16ms

4lx其中高解析度模式,適合在黑暗環境下的測試,光照強度小於10lx的時候。對於每種測量模式又分為單次測量和連續測量模式,單次測量模式和連續測量模組之間的區別是,使用單次測量模式測量會在測量後將bh1570設為掉電模式,以減小功耗。

圖2 資料讀取順序

如圖2所示:在讀資料時需要先傳送起始訊號(st),等待應答訊號(ack)然後是位址,再傳送命令,然後再傳送停止訊號(st);第二步是等待一段測量時間。第三步是傳送測量資料讀取命令,然後再讀出兩位元組的資料,最後傳送停止訊號。需要注意的是在連續測量模式下只需要傳送一次命令就行了,在單次測量模式下每測量一次都要傳送一次測量模式命令。

bh1570.h

#ifndef __bh1570_h_

#define __bh1570_h_

#include

"sys.h"

/*********************命令定義*******************/

#define bhaddr 0x46

//從機位址

#define bhaddwrite bhaddr

//寫資料指令

#define bhaddread bhaddr+1

//讀資料指令

#define bhpowdown 0x00

//關閉模組

#define bhpowon 0x01

//開啟模組等待測量指令

#define bhreset 0x07

//重置資料暫存器值在poweron模式下有效

#define bhmodeh1 0x10

//高解析度 單位1lx 測量時間120ms

#define bhmodeh2 0x11

//高解析度模式2 單位0.5lx 測量時間120ms

#define bhmodel 0x13

//低解析度 單位4lx 測量時間16ms

#define bhsigmodeh 0x20

//一次高解析度 測量 測量後模組轉到 powerdown模式

#define bhsigmodeh2 0x21

//一次高解析度 測量 測量後模組轉到 powerdown模式

#define bhsigmodel 0x23

// 低解析度 測量後模組轉到 powerdown模式

/******************外部函式宣告*******************/

void

bh1570_init

(u8 mode)

;void

bhsendcommand

(u8 command)

;u8 checkbh

(void);

u16 bhsigread

(u8 mode)

;u16 bhread

(void);

#endif

bh1570.c

在這裡插入**片#include "bh1570.h"

#include

"myiic.h"

#include

"delay.h"

/*brief bh1570初始化函式

param mode 設定讀的模式

連續讀(bhmodeh1/bhmodeh2/bhmodel) 單次讀(bhsigmodeh/bhsigmodeh2/bhsigmodel)

return none

**/void

bh1570_init

(u8 mode)

/*brief 檢查bh1570是否存在

param none

return 存在返回0,否者返回1

**/u8 checkbh()

/*brief bh1570傳送命令

param command 需要傳送的命令

return 存在返回0,否者返回1

**/void

bhsendcommand

(u8 command)

/*brief bh1570讀光照強度原始資料

param none

return 讀出的光照資料

**/u16 bhreaddata

(void)/*

brief bh1570連續讀光照強度原始資料

param mode單次讀的模式

return 讀出的光照資料

注意:需要根據設定的讀模式來延時獲取資料

**/u16 bhread()

/*brief bh1570單次讀光照強度原始資料

param mode單次讀的模式

return 讀出的光照資料

注意:需要根據設定的讀模式來延時獲取資料

**/u16 bhsigread

(u8 mode)

在這裡我介紹下這幾個函式:

void bh1570_init(u8 mode); //bh1570初始化函式

u8 checkbh(void);;//bh1570; //bh1570檢測函式

u16 bhsigread(u8 mode); //bh1570單次讀

u16 bhread(void); //bh1570連續讀

bh1570_init(u8 mode)是bh1570初始化函式,mode的選擇值為:連續讀(bhmodeh1/bhmodeh2/bhmodel) ,單次讀(bhsigmodeh/bhsigmodeh2/bhsigmodel)。當我們需要單次讀時在函式中呼叫bhsigread(u8 mode)函式,當我們需要連續讀時呼叫bhread()這個函式,是不是簡單方便。

圖3 測量效果展示

stm32碼盤感測器 STM32編碼器介面模式

1.編碼器 圖1 編碼器示意圖 圖1為編碼器的示意圖,中間是乙個帶光柵的碼盤,光通過光柵,接收管接收到高電平,沒通過,接收到低電平。電機旋轉一圈,碼盤上有多少光柵,接受管就會接收多少個高電平。2.stm32編碼器介面模式 暫存器 stm32的編碼器介面模式在stm32中文參考手冊中有詳細的說明。圖2...

STM32與感測器串列埠通訊問題

stm32f407zgt6使用串列埠通訊傳送指令給感測器,讓感測器返回測得的資料。大家看我這個程式,在main函式前面我定義了乙個read instruction陣列,存放讀取感測器的指令,在while迴圈中有乙個按鍵檢測,當按下key0的時候,微控制器傳送這個指令給感測器,理論上感測器接收到指令會...

stm32氣壓感測器 帶探頭的 溶解氧感測器

與極譜探頭相比,原電池探頭更穩定 更精確,溶解氧水平較低,通常執行數月,無需電解質或膜更換,從而降低維護成本。另一方面,極譜法電極需要每隔幾周進行一次充電。最近,一種光學 發光 溶解氧感測器 與電化學do感測器相比,可顯著減少維護。氧氣的光學感測基於用調製藍光照亮的染料 指示器的紅色螢光的測量。與調...