在寫此博客之前已經看了幾遍數據手冊了,現在已經調試成功了,可以讀出來數據,還有不如意的地方,寫此博客整理下思路。
1、BH1750fvi介紹。
這是一個16bit的數字傳感器,使用I2C作為通信接口,照度的測量范圍是1~65535lx。其實從這里就已經能預見最終讀出來的照度原數據是2byte的。
這里具體介紹這款傳感器的一些特點,例如接近人眼感測的靈敏度,我的畢業設計是要做一個台燈的調光裝置,這款傳感器的靈敏特性真好適合。此外這里還提到最小分表率0.11lx,最大感測100000lx。
2、電氣特性
我在使用時接的電壓值是看的賣家的參考資料選擇的(3~5V),這里也講到這個芯片供電電壓Vcc值范圍是2.4~3.6V。賣家說的電壓值是電路板的供電電壓值,這里要注意數據手冊上說的這個值是我們在設計芯片外圍電路是要參考的電壓供電值。
3、工作模式
數據測量的流程圖,模塊上電,傳感器是處於掉電狀態(PowerOff),需要寫入命令讓傳感器切換到上電狀態(PowerOff),再發送數據測量命令,有單次測量模式和連續測量模式。單次測量模式是測量一次后,傳感器切換到掉電狀態,要再測量需要重新上電。這個圖很容易讀懂,虛線代表我們用I2c寫入的命令(OpeCode),實現是芯片電路自動切換狀態過程。
4、指令/命令
這里建議在編程的時候,用宏定義有規律有條理的組織在一起,模塊化封裝起來,方便開發。注意不同測量模式的測量時間和分辨率,根據需要合理選取。
上面這個表示總結的各種模式的特點。在手冊的這個表的小面有一段問題提及了在H測量模式會抑制噪聲,分辨率1lx,可以在黑暗場景測量。
5、驅動電路
這是在某淘寶店鋪找的資料,這里重點關注芯片的DVL腳是怎么連的。這個DVI腳是I2C總線的參考電壓端口,也是異步重置端口,在給VCC供電之后必須拉低至少1us,在其低電平時,芯片處於掉電狀態(PowerDown)。至於原因我不理解,電路板上這個腳串一個0.1uf的電容和1kΩ的電阻,時間常數i=RC=1e-3,對應時間1us,所以在給VCC供電后,DVI在大於1us后才會拉高,和上面的時序圖相似。
6、從機地址
在ADR腳拉低時:BHWriteAddr:0x46
BHReadAddr:0x47
另外注意:在一次I2C通訊(一個I2C_Start和一個I2C_Stop)中最多只能發一次命令。
7、讀數據格式
這是16位數字傳感器,測量的數據是兩個字節,讀取數據無須發送寄存器地址(regaddr),測量完成直接讀取即可。
不過在手冊的后半部分講到了可以通過修改Mtreg寄存器,修改傳感器的靈敏度,隨之照度和測量數據的對應公式也會發生變化,具體詳查手冊。
最后貼一些關鍵的函數: