Arduino 開源代碼——BMP180 程序(二)寄存器介紹

1.項目描述:

使用硬 IIC 口,從 BMP180 中獲取溫度、氣壓以及海拔高度值。

2.項目準備

Arduino nano 板、BMP180 模組、Arduino IDE。
Arduino 是我非常喜歡的一款 IDE,C++ 語法特性讓我在設計以及使用的時候非常方便。同時在工作中,如果需要快速開發做演示,我也很喜歡使用 Arduino。走量產項目的話,還是不推薦它。

3.數據手冊解讀

http://read.pudn.com/downloads707/sourcecode/others/2839579/GY68BMP180/相關數據手冊/BST-BMP180-DS000-07.pdf

BMP180 寄存器

在上一篇我們講解了 BMP180 的工作環境和電氣性能。我們知曉 BMP180 是通過 IIC 進行操作的,那麼這章我們就可以開始介紹 BMP180 的寄存器。
Arduino 開源代碼——BMP180 程序(一)器件選型須知

寄存器表

在這裏插入圖片描述
分析表圖,大致的感覺是。
out_xlsb、out_lsb、out_msb(只讀): 存放數據的寄存器。
ctrl_meas(讀寫): 功能比較多。
soft_reset(讀寫): 復位用的。
id(只讀): 存放設備ID信息的。
calib21 downto calib0(只讀): 存放某某信息的。

寄存器功能

在這裏插入圖片描述
進一步瞭解寄存器。
ctrl_meas<0xF4h 7:6>(讀寫) ,配置模式
在這裏插入圖片描述
ctrl_meas<0xF4h 5>(讀寫) ,轉換狀態,這個位的值在轉換期間保持爲 1,並且爲轉換完成後重置爲 0。

Soft_reset<0xE0h >(讀寫),軟復位寄存器,如果設置爲 0xB6,則將復位。

id<0xD0h >(只讀),存放id信息,BMP180 值爲 0x55。

calib21 downto calib0<0xBFh:0xAAh >(只讀),存放了 AC1 到 MD 信息的值。這些值的作用暫時不明。帶着疑惑往下看。
在這裏插入圖片描述

操作流程分析

在這裏插入圖片描述
第一步:從 0xAA 到 0xBF 寄存器中獲取 AC1-MD 的值。
第二步:寫 0x2E 到 0xF4 中(配置爲溫度模式),並等待4.5ms。再讀取 0xF6(out_msb) 與 0xF7(out_lsb) 寄存器,拼接二者數據得到 UT 值(UT = MSB << 8 + LSB)。
第三步:寫 0x34+(oss<<6) 到 0xF4 中(配置爲對應oss的功耗模式),並等待XX(根據功耗模式選)ms。再讀取 0xF6(out_msb) 與 0xF7(out_lsb) 與 0xF8(out_xlsb)寄存器,拼接三者數據得到 UP 值( UP = (MSB<<16 + LSB<<8 + XLSB) >> (8-oss) )。
第四步:通過 UT 值和 AC1-MD 值計算溫度T(℃)。
X1 = (UT - AC6) * AC5 / 2^15
X2 = MC * 211 / (X1 + MD)
B5 = X1 + X2
T = (B5 + 8) / 24/10
第五步:通過UP值和 AC1-MD 值計算氣壓p(Pa)。
B6 = B5 - 4000
X1 = (B2 * (B6 * B6 / 2^12 )) / 2^11
X2 = AC2 * B6 / 2^11
X3 = X1 + X2
B3 = ((AC1*4+X3) << oss + 2) / 4
X1 = AC3 * B6 / 2^13
X2 = (B1 * (B6 * B6 / 212 )) / 2^16
X3 = ((X1 + X2) + 2) / 2^2
B4 = AC4 * (unsigend long)(X3 + 32768) / 2^15
B7 = ((unsigned long)UP - B3) * (50000 >> oss)
if (B7 < 0x80000000) { p = (B7 * 2) / B4 }
else { p = (B7 / B4) * 2 }
X1 = (p / 2^8 ) * (p / 2^8 )
X1 = (X1 * 3038) / 2^16
X2 = (-7357 * p) / 2^16
p = p + (X1 + X2 + 3791) / 2^4
第六步:得到數據回到第二步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章