玩轉X-CTR100 l STM32F4 l HMC5983/HMC5883L三軸磁力計傳感器


我造輪子,你造車,創客一起造起來!塔克創新資訊【塔克社區 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    

本文介紹X-CTR100控制器 擴展HMC5983三軸磁力計傳感器,模塊型號為GY-282,淘寶上可以買到。

三軸磁力計可測量設備周圍磁場強度,結合地球磁場可以計算獲取水平指向,常用於電子羅盤、數字指南針。

原理

電子羅盤,也叫數字指南針,是利用地磁場來定北向的一種方法。電子羅盤作為一種重要的導航定向工具,正越來越多的應用於導航和定向系統。當前大多數的導航系統都使用電子羅盤來指示方向。電子羅盤通過對地球磁場和重力場等信息的計算、精確輸出航向(Azimuth)、俯仰(pitch)、橫滾(Roll)等參數。

地磁傳感器在一些運動系統中,有時需要進行精確的方向控制,雖然測量方向的方法 有多種,但最便利、通用性最強的還是測量地球的磁場。利用地磁作為參考, 通過傳感器測量出與地磁線之間的夾角就可以得到方位角的數據,從而實現精確的方向控制。這里就來討論一下地磁傳感器(又稱為數字羅盤或電子羅盤) 及其使用方法。常用的地磁傳感器主要有FreeScale(飛思卡爾)的MAG 系列和 Honeywell(霍尼韋爾)的HMC系列。

HMC5883 是一種表面貼裝的高集成度、帶有IIC 數字接口的弱磁傳感器芯 片。它內含有最先進的高分辨率HMC118X 系列磁阻傳感器,並附帶霍尼韋爾 專利的集成電路(包括有放大器、自動消磁驅動器和偏差校准等),具有12 位 模數轉換器能使羅盤精度控制在1°~2°之間。霍尼韋爾的磁傳感器在低磁場 傳感器行業中是靈敏度最高和可靠性最好的傳感器。其測量范圍能從毫高斯到 8 高斯(gauss)。HMC5883 的工作電壓在2.16V~3.6V 之間,典型為3.3V。雖然工作電壓為 低電壓方式,但數據端口的電壓可通過VDDIO 口來指定。

HMC5983是HMC5883L的升級版磁場傳感器,相比於HMC5883,具有如下優勢。

1. 可支持IIC以及SPI協議傳輸;

2. 自動進行溫度補償;

3. 數據更新速率可達220Hz

霍尼韋爾三軸電子羅盤HMC5983是一個溫度補償的三軸集成電路羅盤,一種表面貼裝的高集成模塊,用於測量磁場,被廣泛應用在磁場檢測,手機、平板、上網本、消費電子、自動導航和個人導航設備等領域。

Honeywell 公司的先進的工藝,內置高分辨的HMC118X 系列的磁阻傳感器加上ASIC,還有放大器,自動消磁帶、偏置帶和一個12bitADC,這款是5983 航向角的精確度達到1-2 度。I2C 個SPI 串行通信總線,尺寸為3.0*3.0*0.9 表面16 引腳貼片封裝。HMC5983 利用霍尼韋爾的AMR 技術,該技術領先於其他的磁傳感器技術,這種各向異性傳感器具有在軸向高靈敏度和線性高精度的特點,傳感器具有對正交軸的低靈敏度的固相結構能用於測量地球磁場的方向和大小,其測量范圍從毫高斯到8 高斯。霍尼韋爾的磁傳感器在地磁場傳感器行業中是靈敏度最高和可靠性最好的傳感器。

溫度補償,測量磁感應數據的溫度補償都已經在出廠的時候設置過了,通過芯片內部的溫度傳感器測量溫度來補充由於溫度變化產生的傳感器靈敏度的變化,這依據傳感器典型的敏感溫度系數。補償數據將會被自動放置到數據輸出寄存器中,如果想要補償功能工作,那么必須設置使溫度傳感器工作(設置CRA7=1)。

例程

初始化HMC5983,采集三軸磁力值並輸出顯示。

硬件說明

硬件資源:

  • 串口UART1
  • LF接口(IIC2接口)
  • 擴展模塊HMC5883L或HMC5983L三軸地磁傳感器(需自備)

硬件連接:

模塊連接到LF IIC2接口,連接如下圖所示。

    

軟件生態

X-SOFT軟件生態,X-API文件如下。

ax_hmc5983.c——X-CTR100 擴展HMC5983L磁力傳感器源文件

ax_hmc5983.h——X-CTR100 擴展HMC5983L磁力傳感器頭文件

操作函數如下:

void AX_HMC5983_Init(void); //HMC5983傳感器初始化

void AX_HMC5983_GetRawMagData(int16_t *pbuf);    //HMC5983獲取磁場強度值

軟件說明

主程序代碼如下。

int main(void)

{

    int16_t magdata[3];

 

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 HMC5983三軸磁力傳感器例程***\r\n\r\n");

 

    //模塊初始化及配置

    AX_HMC5983_Init();

 

    while (1)

    {

        AX_HMC5983_GetRawMagData(magdata);

 

        printf("磁力寄存器數據 X:%d Y:%d Z:%d \r\n", magdata[0], magdata[1], magdata[2]);

 

        AX_Delayms(500);

        AX_LEDG_Toggle();

    }

}

實現效果

運行效果如下圖所示。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM