1、前言
霍尼韋爾 HMC5883L 是一種表面貼裝的高集成模塊,并帶有數字接口的弱磁傳感器芯片,應用于低成本羅盤和磁場檢測領域(指南針、GPS)。
HMC5883L 包括最先進的高分辨率 HMC118X 系列磁阻傳感器,并附帶霍尼韋爾專利的集成電路包括放大器、自動消磁驅動器、偏差校準、能使羅盤精度控制在 1°~2°的 12 位模數轉換器.
支持 I2C,帶有 16 引腳,尺寸為 3.0 X 3.0 X 0.9mm。
HMC5883L 的所應用領域有手機、筆記本電腦、消費類電子、汽車導航系統和個人導航系統。
HMC5883L 采用霍尼韋爾各向異性磁阻(AMR)技術,該技術的優點是其他磁傳感器技術所無法企及。 這些各向異性傳感器具有在軸向高靈敏度和線性高精度的特點。 傳感器帶有的對于正交軸低敏感行的固相結構能用于測量地球磁場的方向和大小,其測量范圍從毫高斯到 8 高斯(gauss)。
2、傳感器特性
- 三軸磁阻傳感器和 ASIC 都被封裝在 3.0 × 3.0 × 0.9mm LCC 表面裝配中
- 12-bit ADC 與低干擾 AMR 傳感器,能在 ±8 高斯的磁場中實現 5 毫高斯分辨率
- 內置自檢功能
- 低電壓工作(2.16-3.6V)和超低功耗(100uA)
- 內置驅動電路
- I2C 數字接口
- 無引線封裝結構
- 磁場范圍廣(+/-8Oe)
- 有相應軟件及算法支持
- 最大輸出頻率可達 160Hz
- 4 個可編程紅外 LED 電流輸出
- 高環境光抑制
- 串擾補償
- 符合 RoHS 安全標準
優點
- 是體積小高集成產品。 只需添加一個微處理器接口,外加兩個外部 SMT 電容。 專為大批量、成本敏感的 OEM 生產而設計,易于裝配并與高速 SMT 裝配件兼容
- 能讓羅盤航向精度精確到 1°~2°
- 產品組裝后能進行低成本功能性測試
- 適用于電池供電的應用場合
- 帶置位/復位和偏置驅動器用于消磁、自測和偏移補償
- 適用于消費類電子設備應用中通用雙線串行數據接口
- 符合 RoHS 標準
- 傳感器能在強磁場環境中羅盤航向精度達到 1°~2°
- 可獲得羅盤航向、硬磁、軟磁以及自動校準庫
- 能應用于個人導航系統和 LBS
技術規格
25°C 時的測試
內部示意圖
雙電源參考設計
單電源參考設計
電源管理
該器件可有兩種不同的供電模式。 第一個是內部運作的 VDD 供電電源,第二個是為 IO 接口供電的 VDDIO 電源,當然 VDDIO 的電壓可以與 VDD 電源電源相近; 單電源模式,或在 VDDIO 電壓低于 VDD 的情況下,HMC5883L 都能正常運作并能與其他裝置兼容。
自測
為了檢測 HMC5883L 是否正常運行,傳感器內部可產生標準磁場而進行的自測試(不論是正向配置還是負向配置),再去測量此標準磁場強度并輸出。 在設置 A 寄存器上相應位 MS 的值,就可啟動自測功能及產生電壓的極性。 來自 VDD 電源的內部電流源產生直流電流(大約 10 mA),然后加到磁阻傳感器的偏置帶上,這樣就在傳感器內部產生了一個人為的標準磁場。
3、參考資料
《HMC5883L中文規格書.pdf》
《HMC5883L.pdf》
4、引腳說明
箭頭標明磁場方向,該磁場在正常測量模式下產生正向輸出可讀。
封裝圖 HMC5883L(16-PIN LPCC,單位 mm)
5、工作模式
1)連續測量模式
連續測量模式,在客戶所選擇的速率下進行連續的測量,并所測量的更新數據輸出寄存器。 如果有必要,數據可以從數據輸出寄存器重新讀取,但是,如果主機并不能確保在下次測量完成之前可以訪問數據寄存器,數據寄存器上的舊的數據會被新的測量數據取代。 為了保存測量之間的電流,該裝置被放置在一個類似閑置模式的狀態,但模式寄存器沒有改變成空閑模式。 即MD[n]位不變。 配置寄存器A的設置在連續測量模式時會影響數據輸出速率(比特DO[n]) ,測量配置(bits MS[n]),和增益(bits GN[n])。 所有寄存器在連續測量模式中保留數值。 在連續測量模式下 I2C 總線可被網絡內的其他裝置啟用。
2)單次測量模式
這是預設的供電模式。 在單測量模式,該裝置進行單次測量并將測量數據更新至輸出數據寄存器中。 在完成測量和輸出數據寄存器的更新以后,通過設置MD[n] bits,該裝置被置于閑置模式,模式寄存器變更為閑置模式。 配置寄存器的設置在單一測量模式時影響測量配置(bits MS[n])。。 在單測量模式中所有寄存器保留數值。 在單測量模式下 I2C 總線可被網絡內其他裝置啟用。
3)閑置模式
在此模式下,裝置可以通過 I2C 總線訪問,但主要電源能耗是禁用的,如 ADC,放大器,傳感器偏置電流,但不僅限于這些。 在空閑模式下所有寄存器保留數值。 在閑置測量模式下 I2C 總線可被網絡內其他裝置啟用。
6、I2C 讀寫地址
7位地址:0x1E
8位讀取地址:0x3D
8位寫入地址:0x3C
7、寄存器
寄存器詳細解釋請參考數據手冊
8、代碼
博主用的是輪詢去讀數據,大家也可以配置成中斷方式。
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
}
讀取數據
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、國產替代
HMC5883L 國產替代是 QMC5883L,硬件上 PIN to PIN,軟件上大致相同,寄存器有所區別,如下:
因此大家也可以用 QMC5883L。
10、傳感器集線器
自此,博主大致實現了一個 sensorhub,在 STM32 上,用 FreeRTOS 啟用幾個 task,采集傳感器數據并上報。 后面會繼續擴展:
1、將 accgyro 從輪詢模式改成中斷模式,并從 I2C 改為 SPI 接口,應對高速率采集場景。 其他三個傳感器還是輪詢模式,I2C 接口,但是不用延時實現,用定時器去做。
2、可以動態的 enable、disable、config、sample、calibration 各個傳感器,并且支持數據時間戳機制。
3、為該系統提供一個 framework 層,統一管控各個傳感器的 enable、disable、config 、sample、calibration 操作。
4、在 framework 層區分下命令的 user,根據 user 下命令的不同,為各個 user 分發不同速率的傳感器數據,簡稱 down sample 機制(down sample 只能以倍數實現,如采樣 200Hz,可以分發出 50Hz,100Hz)
5、若器件數據手冊寫明支持自測功能,則增加 self_test 函數,如 lsm6dso accgyro 和 HMC5883L 磁力計都支持。
6、增加虛擬傳感器功能,利用物理傳感器的數據進行融合,實現如計步器、步伐檢測、設備旋轉方向等功能。
-
傳感器
+關注
關注
2552文章
51366瀏覽量
755731 -
驅動器
+關注
關注
53文章
8269瀏覽量
146823 -
接口
+關注
關注
33文章
8687瀏覽量
151674 -
I2C
+關注
關注
28文章
1495瀏覽量
124248 -
HMC5883L
+關注
關注
0文章
25瀏覽量
15065
發布評論請先 登錄
相關推薦
評論