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感測器相比,可顯著減少維護。氧氣的光學感測基於用調製藍光照亮的染料 指示器的紅色螢光的測量。與調...