91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

程序員小哈
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
作者動態(tài)
自動洗碗機綜合實例第二講 - 最小系統(tǒng)核心板PCB繪制
2024-07-18 09:21
自動洗碗機綜合實例第一講 - 最小系統(tǒng)核心板原理圖繪制
2024-07-16 09:40
線路板焊接的干貨都在這里呢
2024-07-14 12:08
基于單片機的智能風(fēng)扇DIY總結(jié)
2024-07-13 14:42
基于HAL庫實現(xiàn)按鍵(外部中斷)翻轉(zhuǎn)一個LED
2024-06-30 14:02

可以計算海拔高度的BMP180氣壓傳感器,你會使用嗎?

需要測量大氣壓力和溫度的朋友可以玩玩BMP180這個傳感器。

這款傳感器出自博世,應(yīng)用非常廣泛!

實現(xiàn)目標(biāo)

  • 使用普通IO口模擬IIC總線驅(qū)動BMP180傳感器
  • 利用核心板的串口1打印輸出當(dāng)前溫度、氣壓和海拔高度

所需工具及環(huán)境

  • 所用模塊

  • Keil 5
  • STM32F103RET6核心板PCB工程文件(本平臺自制專用核心板)
  • 面包板及少許杜邦線

傳感器簡介

BMP180是Bosch(博世) Sensortec的一種高精度數(shù)字氣壓和溫度傳感器,使用BMP180可以測量環(huán)境溫度、壓力和高度的測量。BMP180的超低功耗,低電壓電子元件經(jīng)過優(yōu)化,具有高精度和穩(wěn)定性,適用于移動電話,PDA,GPS導(dǎo)航設(shè)備和戶外設(shè)備。

它由壓阻傳感器、模數(shù)轉(zhuǎn)換器,帶E2PROM和串行I2C接口的控制單元組成。

BMP180傳感器對壓力和溫度的原始數(shù)據(jù)測量必須使用校準(zhǔn)數(shù)據(jù)補償溫度影響和其他參數(shù)保存到EEPROM中。

BMP180提供未補償?shù)脑級毫χ岛蜏囟戎担贓2PROM中存儲了176位的校準(zhǔn)參數(shù),使用這些參數(shù)可以補償傳感器的偏移量、溫度依賴性等參數(shù)。

傳感器特點

BOSCH BMP180是測量壓力和海拔高度最常用的傳感器之一。該模塊的特點如下:

  • 壓力測量范圍為300至1100hPa(海拔9000米 ~ -500米)
  • 芯片電壓1.8V3.6V(VDDA),1.62V3.6V(VDD),模塊的VIN輸入5V(3.3V亦可)
  • 高精度:低功耗模式下,分辨率為0.06hPa(0.5米),高線性模式下,分辨率為0.03hPa(0.25米)
  • 低功耗(標(biāo)準(zhǔn)模式下為5μA)
  • 內(nèi)部溫度傳感器,精度為0.5°C
  • 支持I2C協(xié)議進(jìn)行通信
  • 溫度補償,完全校準(zhǔn)

注意:1Pa=0.01hPa=0.01mbar 。

應(yīng)用場景

  • GPS精準(zhǔn)導(dǎo)航(航位推算,上下橋檢測等)
  • 航模等一些需要高度數(shù)據(jù)的場合
  • 天氣預(yù)報
  • 垂直速度指示(上升/下沉速度)

接線圖

實物圖

具體接線圖

myiic.h文件中,具體引腳定義如下:

#define IIC_SCL PAout(6) //SCL 
#define IIC_SDA PAout(7) //輸出SDA 
#define READ_SDA PAin(7) //輸入SDA

測量流程

UT =溫度數(shù)據(jù)(16位)

UP =壓力數(shù)據(jù)(16到19位)

具體實現(xiàn)

基礎(chǔ)源碼

寫入數(shù)據(jù)

寫入數(shù)據(jù)時序

開始測量溫度值UT和壓力值UP的時序圖如下所示。在啟動后,主機發(fā)送器件地址寫入,寄存器地址和控制寄存器數(shù)據(jù)。當(dāng)接收到數(shù)據(jù)時,BMP180每8個數(shù)據(jù)位發(fā)送一個確認(rèn)(ACKS)。主機在最后一次ACKS后發(fā)送停止條件。

設(shè)備地址

寫操作對應(yīng)地址0XEE(write)讀操作對應(yīng)地址0XEF(read)

相關(guān)寄存器

開始溫度和壓力測量的寄存器地址為:0xF4

寄存器0xF4bit5Sco,開始測量位,當(dāng)該位為“1”的時候,數(shù)據(jù)正在轉(zhuǎn)換,當(dāng)轉(zhuǎn)換結(jié)束的時候該位為“0”;

寄存器0xF4bit6~bit7Oss,用于控制壓力測量的過采樣率, (00b: single,01b: 2 times, 10b: 4 times, 11b: 8 times).

軟件復(fù)位寄存器為:0xE0,如果該寄存器寫入0xB6,則完成BMP180的軟件復(fù)位;

芯片ID寄存器為:0xD0,該值固定位0x55,讀出該值可以用于判斷I2C總線通訊是否正常。

多個字節(jié)的讀取

測量溫度和壓力

啟動溫度和壓力測量的寄存器:0xF4,可以寫入如下值:

測量溫度

由上表我們可以知道,要想測量溫度,需要往0xF4寄存器,寫入值0x2E,即開啟溫度測量,延時之后,讀取0xF6寄存器的值即可求得溫度值。

//從BMP180讀取未修正的溫度
long BMP_Read_UT(void)
{
	long temp = 0;
	BMP_WriteOneByte(0xF4,0x2E);
	
	delay_ms(5);
	temp = (long)BMP_ReadTwoByte(0xF6);
	return temp;
}
測量壓力

由上表我們可以知道,要想測量壓力,需要往0xF4寄存器,寫入值0x34(oss值不同此值不同),即開啟壓力測量過程,延時之后,讀取0xF6寄存器的值即可求得壓力值。

//從BMP180讀取未修正的大氣壓
long BMP_Read_UP(void)
{
	long pressure = 0;
	
	BMP_WriteOneByte(0xF4,0x34);
	delay_ms(5);
	
	pressure = (long)BMP_ReadTwoByte(0xF6);
	pressure &= 0x0000FFFF;
	
	return pressure;
}

校準(zhǔn)系數(shù) Calibration coefficients

上面得到的溫度值和壓力值是未經(jīng)過校準(zhǔn)的值,如果要想得到相對準(zhǔn)確的值,需要經(jīng)過校準(zhǔn),校準(zhǔn)系數(shù)保存在E2PROM中。

BMP180中有一個176位的E2PROM,它被劃分為11個字(WORD),每個字16位,對應(yīng)11個校準(zhǔn)系數(shù),每個傳感器模塊都有單獨的系數(shù),在第一次計算溫度和壓力時,主機讀取E2PROM數(shù)據(jù),通過讀取的值,看是否存在值為0x0000或者0XFFFF的字,判斷數(shù)據(jù)通訊是否正常。

根據(jù)上圖中寄存器的值,獲取校準(zhǔn)系數(shù)的函數(shù)如下,獲得的校準(zhǔn)系數(shù)保存至變量中待用:

//從BMP180的獲取校準(zhǔn)系數(shù)
void BMP_ReadCalibrationData(void)
{
	bmp180.AC1 = BMP_ReadTwoByte(0xAA);
	bmp180.AC2 = BMP_ReadTwoByte(0xAC);
	bmp180.AC3 = BMP_ReadTwoByte(0xAE);
	bmp180.AC4 = BMP_ReadTwoByte(0xB0);
	bmp180.AC5 = BMP_ReadTwoByte(0xB2);
	bmp180.AC6 = BMP_ReadTwoByte(0xB4);
	bmp180.B1  = BMP_ReadTwoByte(0xB6);
	bmp180.B2  = BMP_ReadTwoByte(0xB8);
	bmp180.MB  = BMP_ReadTwoByte(0xBA);
	bmp180.MC  = BMP_ReadTwoByte(0xBC);
	bmp180.MD  = BMP_ReadTwoByte(0xBE);
}

壓力和溫度的校準(zhǔn)流程

海拔高度的換算

BMP180傳感器提供溫度和壓力的絕對測量值,但不提供海拔高度的直接輸出。

由于大氣壓力隨高度升高而降低。

由上圖我們可知,氣壓與海平面的高度具有近似線性的反比,因此如果我們測量某地的氣壓,我們可以使用簡單的數(shù)學(xué)運算從海平面計算海拔高度。

通過當(dāng)?shù)氐臍庀蠓?wù)中可以得到海平面壓力P0,利用傳感器讀取的壓力P和該海平面壓力P0的值,通過下面的公式可以計算傳感器所在位置的高度。

注意:海平面壓力P0的值不是固定的,跟所屬區(qū)域及環(huán)境溫度和天氣模式的變化而變化。

結(jié)果展示

歡迎關(guān)注

專注于嵌入式知識分享,讓你學(xué)習(xí)路上不迷路,更多技術(shù)干貨,請關(guān)注【嵌入式從0到1】。

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 5
收藏 4
關(guān)注 69
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 巢湖市| 昌邑市| 金堂县| 井陉县| 星子县| 伊金霍洛旗| 亚东县| 滁州市| 界首市| 青浦区| 道孚县| 河曲县| 宜君县| 沛县| 井研县| 江北区| 浦东新区| 石河子市| 施秉县| 馆陶县| 济阳县| 东乡族自治县| 乐东| 固镇县| 江孜县| 鄂温| 乌鲁木齐市| 扶沟县| 罗源县| 海伦市| 芷江| 吐鲁番市| 桐梓县| 长葛市| 伊宁县| 香港| 平罗县| 兴隆县| 成都市| 邹平县| 遂昌县|