1、前言
霍尼韋爾 HMC5883L 是一種表面貼裝的高集成模塊,并帶有數(shù)字接口的弱磁傳感器芯片,應(yīng)用于低成本羅盤(pán)和磁場(chǎng)檢測(cè)領(lǐng)域(指南針、GPS)。
HMC5883L 包括最先進(jìn)的高分辨率 HMC118X 系列磁阻傳感器,并附帶霍尼韋爾專利的集成電路包括放大器、自動(dòng)消磁驅(qū)動(dòng)器、偏差校準(zhǔn)、能使羅盤(pán)精度控制在 1°~2°的 12 位模數(shù)轉(zhuǎn)換器.
支持 I2C,帶有 16 引腳,尺寸為 3.0 X 3.0 X 0.9mm。
HMC5883L 的所應(yīng)用領(lǐng)域有手機(jī)、筆記本電腦、消費(fèi)類(lèi)電子、汽車(chē)導(dǎo)航系統(tǒng)和個(gè)人導(dǎo)航系統(tǒng)。
HMC5883L 采用霍尼韋爾各向異性磁阻(AMR)技術(shù),該技術(shù)的優(yōu)點(diǎn)是其他磁傳感器技術(shù)所無(wú)法企及。 這些各向異性傳感器具有在軸向高靈敏度和線性高精度的特點(diǎn)。 傳感器帶有的對(duì)于正交軸低敏感行的固相結(jié)構(gòu)能用于測(cè)量地球磁場(chǎng)的方向和大小,其測(cè)量范圍從毫高斯到 8 高斯(gauss)。
2、傳感器特性
- 三軸磁阻傳感器和 ASIC 都被封裝在 3.0 × 3.0 × 0.9mm LCC 表面裝配中
- 12-bit ADC 與低干擾 AMR 傳感器,能在 ±8 高斯的磁場(chǎng)中實(shí)現(xiàn) 5 毫高斯分辨率
- 內(nèi)置自檢功能
- 低電壓工作(2.16-3.6V)和超低功耗(100uA)
- 內(nèi)置驅(qū)動(dòng)電路
- I2C 數(shù)字接口
- 無(wú)引線封裝結(jié)構(gòu)
- 磁場(chǎng)范圍廣(+/-8Oe)
- 有相應(yīng)軟件及算法支持
- 最大輸出頻率可達(dá) 160Hz
- 4 個(gè)可編程紅外 LED 電流輸出
- 高環(huán)境光抑制
- 串?dāng)_補(bǔ)償
- 符合 RoHS 安全標(biāo)準(zhǔn)
優(yōu)點(diǎn)
- 是體積小高集成產(chǎn)品。 只需添加一個(gè)微處理器接口,外加兩個(gè)外部 SMT 電容。 專為大批量、成本敏感的 OEM 生產(chǎn)而設(shè)計(jì),易于裝配并與高速 SMT 裝配件兼容
- 能讓羅盤(pán)航向精度精確到 1°~2°
- 產(chǎn)品組裝后能進(jìn)行低成本功能性測(cè)試
- 適用于電池供電的應(yīng)用場(chǎng)合
- 帶置位/復(fù)位和偏置驅(qū)動(dòng)器用于消磁、自測(cè)和偏移補(bǔ)償
- 適用于消費(fèi)類(lèi)電子設(shè)備應(yīng)用中通用雙線串行數(shù)據(jù)接口
- 符合 RoHS 標(biāo)準(zhǔn)
- 傳感器能在強(qiáng)磁場(chǎng)環(huán)境中羅盤(pán)航向精度達(dá)到 1°~2°
- 可獲得羅盤(pán)航向、硬磁、軟磁以及自動(dòng)校準(zhǔn)庫(kù)
- 能應(yīng)用于個(gè)人導(dǎo)航系統(tǒng)和 LBS
技術(shù)規(guī)格
25°C 時(shí)的測(cè)試
內(nèi)部示意圖
雙電源參考設(shè)計(jì)
單電源參考設(shè)計(jì)
電源管理
該器件可有兩種不同的供電模式。 第一個(gè)是內(nèi)部運(yùn)作的 VDD 供電電源,第二個(gè)是為 IO 接口供電的 VDDIO 電源,當(dāng)然 VDDIO 的電壓可以與 VDD 電源電源相近; 單電源模式,或在 VDDIO 電壓低于 VDD 的情況下,HMC5883L 都能正常運(yùn)作并能與其他裝置兼容。
自測(cè)
為了檢測(cè) HMC5883L 是否正常運(yùn)行,傳感器內(nèi)部可產(chǎn)生標(biāo)準(zhǔn)磁場(chǎng)而進(jìn)行的自測(cè)試(不論是正向配置還是負(fù)向配置),再去測(cè)量此標(biāo)準(zhǔn)磁場(chǎng)強(qiáng)度并輸出。 在設(shè)置 A 寄存器上相應(yīng)位 MS 的值,就可啟動(dòng)自測(cè)功能及產(chǎn)生電壓的極性。 來(lái)自 VDD 電源的內(nèi)部電流源產(chǎn)生直流電流(大約 10 mA),然后加到磁阻傳感器的偏置帶上,這樣就在傳感器內(nèi)部產(chǎn)生了一個(gè)人為的標(biāo)準(zhǔn)磁場(chǎng)。
3、參考資料
《HMC5883L中文規(guī)格書(shū).pdf》
《HMC5883L.pdf》
4、引腳說(shuō)明
箭頭標(biāo)明磁場(chǎng)方向,該磁場(chǎng)在正常測(cè)量模式下產(chǎn)生正向輸出可讀。
封裝圖 HMC5883L(16-PIN LPCC,單位 mm)
5、工作模式
1)連續(xù)測(cè)量模式
連續(xù)測(cè)量模式,在客戶所選擇的速率下進(jìn)行連續(xù)的測(cè)量,并所測(cè)量的更新數(shù)據(jù)輸出寄存器。 如果有必要,數(shù)據(jù)可以從數(shù)據(jù)輸出寄存器重新讀取,但是,如果主機(jī)并不能確保在下次測(cè)量完成之前可以訪問(wèn)數(shù)據(jù)寄存器,數(shù)據(jù)寄存器上的舊的數(shù)據(jù)會(huì)被新的測(cè)量數(shù)據(jù)取代。 為了保存測(cè)量之間的電流,該裝置被放置在一個(gè)類(lèi)似閑置模式的狀態(tài),但模式寄存器沒(méi)有改變成空閑模式。 即MD[n]位不變。 配置寄存器A的設(shè)置在連續(xù)測(cè)量模式時(shí)會(huì)影響數(shù)據(jù)輸出速率(比特DO[n]) ,測(cè)量配置(bits MS[n]),和增益(bits GN[n])。 所有寄存器在連續(xù)測(cè)量模式中保留數(shù)值。 在連續(xù)測(cè)量模式下 I2C 總線可被網(wǎng)絡(luò)內(nèi)的其他裝置啟用。
2)單次測(cè)量模式
這是預(yù)設(shè)的供電模式。 在單測(cè)量模式,該裝置進(jìn)行單次測(cè)量并將測(cè)量數(shù)據(jù)更新至輸出數(shù)據(jù)寄存器中。 在完成測(cè)量和輸出數(shù)據(jù)寄存器的更新以后,通過(guò)設(shè)置MD[n] bits,該裝置被置于閑置模式,模式寄存器變更為閑置模式。 配置寄存器的設(shè)置在單一測(cè)量模式時(shí)影響測(cè)量配置(bits MS[n])。。 在單測(cè)量模式中所有寄存器保留數(shù)值。 在單測(cè)量模式下 I2C 總線可被網(wǎng)絡(luò)內(nèi)其他裝置啟用。
3)閑置模式
在此模式下,裝置可以通過(guò) I2C 總線訪問(wèn),但主要電源能耗是禁用的,如 ADC,放大器,傳感器偏置電流,但不僅限于這些。 在空閑模式下所有寄存器保留數(shù)值。 在閑置測(cè)量模式下 I2C 總線可被網(wǎng)絡(luò)內(nèi)其他裝置啟用。
6、I2C 讀寫(xiě)地址
7位地址:0x1E
8位讀取地址:0x3D
8位寫(xiě)入地址:0x3C
7、寄存器
寄存器詳細(xì)解釋請(qǐng)參考數(shù)據(jù)手冊(cè)
8、代碼
博主用的是輪詢?nèi)プx數(shù)據(jù),大家也可以配置成中斷方式。
HMC5883L.H
#define HMC5883_ADDR 0X1E
#define HMC_CONFIG_A_REG 0X00
#define HMC_CONFIG_B_REG 0X01
#define HMC_MODE_REG 0X02
#define HMC_XMSB_REG 0X03 //X
#define HMC_XLSB_REG 0X04
#define HMC_ZMSB_REG 0X05 //Z
#define HMC_ZLSB_REG 0X06
#define HMC_YMSB_REG 0X07 //Y
#define HMC_YLSB_REG 0X08
#define HMC_STATUS_REG 0X09
#define HMC_CHEAK_A_REG 0X0A
#define HMC_CHEAK_B_REG 0X0B
#define HMC_CHEAK_C_REG 0X0C
//value
#define HMC_CHECKA_VALUE 0x48
#define HMC_CHECKB_VALUE 0x34
#define HMC_CHECKC_VALUE 0x33
HMC5883_Check
u8 HMC5883_Check(void)
{
u8 tempA;
u8 tempB;
u8 tempC;
tempA=I2C2_ReadOneByte(HMC5883_ADDR,HMC_CHEAK_A_REG);
tempB=I2C2_ReadOneByte(HMC5883_ADDR,HMC_CHEAK_B_REG);
tempC=I2C2_ReadOneByte(HMC5883_ADDR,HMC_CHEAK_C_REG);
if(tempA == HMC_CHECKA_VALUE & tempB == HMC_CHECKB_VALUE & tempC == HMC_CHECKC_VALUE)
return 0;
else
return 1;
}
void Hmc5883_Init(void)
{
I2C2_WriteOneByte(HMC5883_ADDR,HMC_CONFIG_A_REG,0x78); //set 75Hz
I2C2_WriteOneByte(HMC5883_ADDR,HMC_CONFIG_B_REG,0x00);
I2C2_WriteOneByte(HMC5883_ADDR,HMC_MODE_REG,0x00); //cotinue mode
}
讀取數(shù)據(jù)
xValue = I2C2_ReadOneByte(HMC5883_ADDR,HMC_XLSB_REG)|(I2C2_ReadOneByte(HMC5883_ADDR,HMC_XMSB_REG)<<8);
zValue = I2C2_ReadOneByte(HMC5883_ADDR,HMC_ZLSB_REG)|(I2C2_ReadOneByte(HMC5883_ADDR,HMC_ZMSB_REG)<<8);
yValue = I2C2_ReadOneByte(HMC5883_ADDR,HMC_YLSB_REG)|(I2C2_ReadOneByte(HMC5883_ADDR,HMC_YMSB_REG)<<8);
printf("M-SENSOR:xValue:%d ,yValue:%d ,zValue:%d \\r\\n",xValue,yValue,zValue);
9、國(guó)產(chǎn)替代
HMC5883L 國(guó)產(chǎn)替代是 QMC5883L,硬件上 PIN to PIN,軟件上大致相同,寄存器有所區(qū)別,如下:
因此大家也可以用 QMC5883L。
10、傳感器集線器
自此,博主大致實(shí)現(xiàn)了一個(gè) sensorhub,在 STM32 上,用 FreeRTOS 啟用幾個(gè) task,采集傳感器數(shù)據(jù)并上報(bào)。 后面會(huì)繼續(xù)擴(kuò)展:
1、將 accgyro 從輪詢模式改成中斷模式,并從 I2C 改為 SPI 接口,應(yīng)對(duì)高速率采集場(chǎng)景。 其他三個(gè)傳感器還是輪詢模式,I2C 接口,但是不用延時(shí)實(shí)現(xiàn),用定時(shí)器去做。
2、可以動(dòng)態(tài)的 enable、disable、config、sample、calibration 各個(gè)傳感器,并且支持?jǐn)?shù)據(jù)時(shí)間戳機(jī)制。
3、為該系統(tǒng)提供一個(gè) framework 層,統(tǒng)一管控各個(gè)傳感器的 enable、disable、config 、sample、calibration 操作。
4、在 framework 層區(qū)分下命令的 user,根據(jù) user 下命令的不同,為各個(gè) user 分發(fā)不同速率的傳感器數(shù)據(jù),簡(jiǎn)稱 down sample 機(jī)制(down sample 只能以倍數(shù)實(shí)現(xiàn),如采樣 200Hz,可以分發(fā)出 50Hz,100Hz)
5、若器件數(shù)據(jù)手冊(cè)寫(xiě)明支持自測(cè)功能,則增加 self_test 函數(shù),如 lsm6dso accgyro 和 HMC5883L 磁力計(jì)都支持。
6、增加虛擬傳感器功能,利用物理傳感器的數(shù)據(jù)進(jìn)行融合,實(shí)現(xiàn)如計(jì)步器、步伐檢測(cè)、設(shè)備旋轉(zhuǎn)方向等功能。
-
傳感器
+關(guān)注
關(guān)注
2545文章
50453瀏覽量
751099 -
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
52文章
8102瀏覽量
145823 -
接口
+關(guān)注
關(guān)注
33文章
8450瀏覽量
150726 -
I2C
+關(guān)注
關(guān)注
28文章
1477瀏覽量
123063 -
HMC5883L
+關(guān)注
關(guān)注
0文章
25瀏覽量
15006
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論