国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談HMC5883L和QMC5883P磁力計的區別及STM32F103驅動

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2025-08-30 10:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HMC5883L和QMC5883P芯片區別

在這里插入圖片描述

HMC5883L和QMC5883P兩款都是磁力計芯片,HMC5883L是Honeywell生產的芯片,QMC5883P是QST公司生產的替代芯片,兩者在硬件封裝上是兼容的,都是LGA-16 3.0x3.0x0.9mm封裝,引腳上也都是兼容的,但是引腳功能上HMC5883L比QMC5883P多了一個DRDY引腳,可以用于中斷控制,還有軟件驅動上是不兼容的,寄存器地址以及IIC地址都是不相同的,不過底層驅動原理都是相同的。
在這里插入圖片描述
以上是兩個芯片的一些重要參數的區別,還有一個重要的區別是兩者的磁場方向上是有區別的,如下圖:
在這里插入圖片描述
進行計算的時候需要注意區分下。

HMC5883L獲取ID及三軸磁力計數據

HMC5883L手冊鏈接:HMC5883L手冊

寄存器說明

這里先看下HMC5883L的寄存器表格:
在這里插入圖片描述
首先注意下10/11/12寄存器這里用10進制來寫了,實際代碼中讀取的寄存器地址應該分別是0A,0B,0C的寄存器地址。
在這里插入圖片描述

Configuration Register A(00H) :位CRA7保留;CRA6-CRA5配置采樣平均次數;CRA4-CRA2配置輸出速率(配置的是連續測量模式下的輸出速率(如下表1)。如果是在單次測量模式下,可以通過監測 DRDY 中斷引腳可以實現最高 160 Hz的輸出速率);CRA1-CRA0:測量配置(主要用于正常測量啟用正/負偏置自檢(self-test) :00 = Normal、01 = Positive bias (自檢+)、10 = Negative bias (自檢?)、11 = 保留/未定義,具體說明可以看下表2)。
輸出速率表格
在這里插入圖片描述
Configuration Register B(01H) :前三位GN通過設置增益確定量程范圍,如下表,剩下的位并未使用,需要配置為0。(對于B寄存器的具體說明可以看資料對應的章節說明,這里就不贅述了)
在這里插入圖片描述
Mode Register(01H) :這個寄存器最高位MR7是設置為1可以配置成高速IIC模式,MR6到MR2未使用配置為0,MR1和MR0是用來配置模式,配置00時連續測量模式,01是單次測量模式,剩下兩個都是休眠模式。如下表:
在這里插入圖片描述03-08H :分別是三軸數據的寄存器了,都是12bits數據。
09H :狀態寄存器,只讀寄存器,用來讀取數據鎖存位和數據完成標志位。

名稱功能說明
7–30保留,固定為 0
2LOCK數據鎖存位。當一個軸的數據輸出寄存器被讀出時,其他兩個軸的數據會鎖存,直到它們也被讀出或發生新的測量更新。此位為1表示在讀取過程中有新數據到來,舊數據被鎖存;0表示沒有鎖存。
1RDY數據準備完成標志。當有新數據寫入輸出寄存器時置 1,表示三軸數據已更新,可以讀取。讀取一次數據后會自動清零。
00保留

0A-0CH:分別是存儲3個ID身份的ASCII碼,分別對應:0A-H,0B-4,0C-3
以上就是所有寄存器的簡單介紹了,下面開始初始化模塊和讀取數據。

獲取HMC5883L ID和磁力計三軸數據

這里展示的是STM32F103C8T6單片機通過軟件IIC初始化HMC5883L模塊以及讀取三個標識ID寄存器和磁力計三軸數據,直接讀取寄存器的值,未作校準,自己有更精準的數據需求的話,需要自行開發算法哦。
HMC5883L驅動代碼部分展示

/** * 函    數:HMC5883L初始化*/
void HMC5883L_Init(void)
{
	MyI2C_Init();									//先初始化底層的I2C
     /* 配置寄存器A:配置為 0x70 (8-average, 15Hz, normal) 
       8-average: MA = 11 (bits 5-6)
       15 Hz: DO = 100 (bits 2-0)
       Normal measurement: MS = 00 (bits 1-0 of config A for measurement mode)*/
    HMC5883L_WriteReg(HMC5883L_REG_CONFIG_A, 0x70);
    /*配置寄存器B: Gain = default (1.3 Ga) - > 0x20 (可按需修改) */
    HMC5883L_WriteReg(HMC5883L_REG_CONFIG_B, 0x20);
    /* 模式: continuous-measurement mode (0x00) */
    HMC5883L_WriteReg(HMC5883L_REG_MODE, 0x00);
}

/**
  * 函    數:HMC5883L獲取ID號
  * 參    數:無
  * 返 回 值:HMC5883L的ID號
  */
void HMC5883L_GetID(uint8_t *A, uint8_t *B, uint8_t *C)
{
	*A = HMC5883L_ReadReg(HMC5883L_REG_IDA);		//返回IDA寄存器的值
    *B = HMC5883L_ReadReg(HMC5883L_REG_IDB);		//返回IDB寄存器的值
    *C = HMC5883L_ReadReg(HMC5883L_REG_IDC);		//返回IDC寄存器的值
}


/**
  * 函    數:HMC5883L獲取數據
  * 參    數:磁力計X、Y、Z軸的數據,使用輸出參數的形式返回
  * 返 回 值:無
  */
void HMC5883L_GetData(int16_t *X, int16_t *Y, int16_t *Z)
{
	uint8_t DataH, DataL;								//定義數據高8位和低8位的變量
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_XOUT_H);		//讀取磁力計X軸的高8位數據
	DataL = HMC5883L_ReadReg(HMC5883L_REG_XOUT_L);		//讀取磁力計X軸的低8位數據
	*X = (DataH < < 8) | DataL;						    //數據拼接,通過輸出參數返回
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_YOUT_H);		//讀取磁力計Y軸的高8位數據
	DataL = HMC5883L_ReadReg(HMC5883L_REG_YOUT_L);		//讀取磁力計Y軸的低8位數據
	*Y = (DataH < < 8) | DataL;						    //數據拼接,通過輸出參數返回
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_ZOUT_H);		//讀取磁力計Z軸的高8位數據
	DataL = HMC5883L_ReadReg(HMC5883L_REG_ZOUT_L);		//讀取磁力計Z軸的低8位數據
	*Z = (DataH < < 8) | DataL;						    //數據拼接,通過輸出參數返回	
}

HMC5883L主函數

uint8_t IDA, IDB, IDC;					//定義用于存放ID號的變量
int16_t X, Y, Z;			            //定義用于存放各個數據的變量

int main(void)
{
	/*模塊初始化*/
	OLED_Init();		                //OLED初始化
	HMC5883L_Init();		            //HMC5883L初始化
	/*顯示ID號*/
	OLED_ShowString(1, 1, "ID:");		
	HMC5883L_GetID(&IDA, &IDB, &IDC);	//獲取HMC5883L的ID號
	OLED_ShowHexNum(1, 4, IDA, 2);		//OLED顯示ID號(hex)
	OLED_ShowHexNum(1, 7, IDB, 2);		
    OLED_ShowHexNum(1, 10, IDC, 2);		
    
    OLED_ShowString(2, 1, "ID:");		
    OLED_ShowChar(2, 4, (char)IDA);		//OLED顯示ID號(ASCII碼)
	OLED_ShowChar(2, 5, (char)IDB);		
    OLED_ShowChar(2, 6, (char)IDC);		
    
    
	while (1)
	{
		HMC5883L_GetData(&X, &Y, &Z);	//獲取HMC5883L的數據
		OLED_ShowSignedNum(3, 1, X, 5);	//OLED顯示數據
		OLED_ShowSignedNum(3, 9, Y, 5);
		OLED_ShowSignedNum(4, 1, Z, 5);
	}
}

輸出結果

OLED輸出數據
在這里插入圖片描述

QMC5883P獲取ID及三軸磁力計數據

QMC5883P手冊鏈接:QMC5883P手冊

寄存器說明

在這里插入圖片描述
參數上和HMC5883L是大同小異的,這里不細說明了,可以自行查看手冊里的說明。主要區別是兩個芯片數據存放的寄存器位置不同,驅動的時候改下寄存器地址即可,還有QMC5883P的三軸數據是16bits,以及ID寄存器這里只用了一個寄存器(00H)去存放,不像HMC5883L用了三個寄存器存放ID。下面直接上代碼驅動。

獲取QMC5883P ID和磁力計三軸數據

這里展示的是STM32F103C8T6單片機通過軟件IIC初始化QMC5883P模塊以及讀取ID寄存器和磁力計三軸數據,直接讀取寄存器的值,未作校準,自己有更精準的數據需求的話,需要自行開發算法哦。
QMC5883P驅動代碼部分展示

/**
  * 函    數:QMC5883P初始化
  * 參    數:無
  * 返 回 值:無
  */
void QMC5883P_Init(void)
{
	MyI2C_Init();									//先初始化底層的I2C

    /* 初始化 QMC: 
       配置寄存器1:連續模式 + 200Hz
       位 [7:6]=OSR2, [5:4]=OSR1, [3:2]=ODR, [1:0]=MODE
       這里寫 0x0F = > OSR2=00(濾波器), OSR1=00(過采樣率), ODR=11(200Hz), MODE=11(連續發送模式Continuous Mode) */
	QMC5883P_WriteReg(QMC5883P_REG_CONTROL1, 0xFF);
    /* 配置寄存器2:這里寫的參數是不軟復位,不自檢,量程30Guass,不更新偏移量 */
    QMC5883P_WriteReg(QMC5883P_REG_CONTROL2, 0x01);
}

/**
  * 函    數:QMC5883P獲取ID號
  * 參    數:無
  * 返 回 值:QMC5883P的ID號
  */
uint8_t QMC5883P_GetID(void)
{
	return QMC5883P_ReadReg(QMC5883P_REG_CHIPID);		//返回CHIPID寄存器的值
}

/**
  * 函    數:QMC5883P獲取數據
  * 參    數:X Y Z 磁力計X、Y、Z軸的數據,使用輸出參數的形式返回
  * 返 回 值:無
  */
void QMC5883P_GetData(int16_t *X, int16_t *Y, int16_t *Z)
{
	uint8_t DataH, DataL;							//定義數據高8位和低8位的變量
	
	DataH = QMC5883P_ReadReg(QMC5883P_REG_XOUT_H);		//讀取磁力計X軸的高8位數據
	DataL = QMC5883P_ReadReg(QMC5883P_REG_XOUT_L);		//讀取磁力計X軸的低8位數據
	*X = (DataH < < 8) | DataL;						//數據拼接,通過輸出參數返回
	
	DataH = QMC5883P_ReadReg(QMC5883P_REG_YOUT_H);		//讀取磁力計Y軸的高8位數據
	DataL = QMC5883P_ReadReg(QMC5883P_REG_YOUT_L);		//讀取磁力計Y軸的低8位數據
	*Y = (DataH < < 8) | DataL;						//數據拼接,通過輸出參數返回
	
	DataH = QMC5883P_ReadReg(QMC5883P_REG_ZOUT_H);		//讀取磁力計Z軸的高8位數據
	DataL = QMC5883P_ReadReg(QMC5883P_REG_ZOUT_L);		//讀取磁力計Z軸的低8位數據
	*Z = (DataH < < 8) | DataL;						//數據拼接,通過輸出參數返回	
}

QMC5883P主函數

uint8_t ID;								//定義用于存放ID號的變量
int16_t X, Y, Z;			            //定義用于存放各個數據的變量

int main(void)
{
	/*模塊初始化*/
	OLED_Init();		                //OLED初始化
	QMC5883P_Init();		            //QMC5883P初始化
	
	/*顯示ID號*/
	OLED_ShowString(1, 1, "ID:");		//顯示靜態字符串
	ID = QMC5883P_GetID();				//獲取QMC5883P的ID號
	OLED_ShowHexNum(1, 4, ID, 2);		//OLED顯示ID號
	
	while (1)
	{
		QMC5883P_GetData(&X, &Y, &Z);	//獲取QMC5883P的數據
		OLED_ShowSignedNum(2, 1, X, 5);	//OLED顯示數據
		OLED_ShowSignedNum(3, 1, Y, 5);
		OLED_ShowSignedNum(4, 1, Z, 5);
	}
}

輸出結果

QMC5883P——OLED測試現象
在這里插入圖片描述

總結

==由于兩個模塊的底板是兼容的,所以拿到手的時候磁場方向只有HMC5883L的磁場方向是對的,QMC5883P的磁場方向對應手冊里或者上面磁場方向圖片看就行。==
需要代碼和對應資料的可以在評論區留言郵箱獲取哦!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6076

    文章

    45495

    瀏覽量

    670321
  • STM32F103
    +關注

    關注

    34

    文章

    495

    瀏覽量

    67700
  • 磁力計
    +關注

    關注

    1

    文章

    74

    瀏覽量

    21973
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    求助啊 為什么我的HMC5883L讀出的原始數據中Y軸一直都是-4096

    =-4096z=-476x=-137y=-4096z=-476這是hmc5883l代碼# include "hmc5883l.h"http://磁力計初始化void HMC5883L
    發表于 02-22 23:04

    HMC5883L

    放大器、自動消磁驅動器、偏差校準、能使羅盤精度控制在1°~2°的12位模數轉換器.簡易的I2C 系列總線接口。HMC5883L 是采用無鉛表面封裝技術,帶有16引腳,尺寸為3.0X3.0X0.9mm
    發表于 04-16 09:04

    發現一款可以直接PIN-TO-PIN替換HMC5883L的傳感器?。。?!

    最近看到很多人都在找HMC5983和HMC5883L的替代料,給大家推薦一顆新的替代料: QMC5883L,可以和HMC5883L進行PIN to PIN替換,不用改硬件,只需軟件修改
    發表于 05-09 16:36

    請問MPU6050+HMC5883L的數據融合磁力計如何加入算出YAW的準確角度?

    最近一直在研究四軸,讀完6050后,加入磁力計對YAW角度進行校準,磁力計選用HMC5883L,讀取完數據后,按照網上說法,用互補濾波的方法進行數據融合。融合完后發現我實際旋轉的角度與傳感器測量
    發表于 06-06 04:36

    如何處理磁力計HMC5883L獲取的三軸數據?

    HMC5883L來矯正陀螺儀使用四元數法來求偏航角,想問問如何處理磁力計HMC5883L獲取的三軸數據?
    發表于 07-25 19:44

    請問MPU6050,HMC5883L,ADXL345之間我該選擇哪個?

    我想測量一個物體的自身旋轉角度(應該是相當于自身的偏航角yaw),最近一段時間一直在看相關的資料和一些程序。MPU6050是 3軸角度+3軸加速度,HMC5883L磁力計,ADXL345是加速度
    發表于 07-31 04:36

    如何使用這款QMC5883L磁力計

    QMC5883L磁力計介紹QMC5883L是一款國產磁力計,與HMC5993 pin to pin 兼容,軟件上只要少許改動,便可達到相同效
    發表于 02-11 07:26

    HMC5883L中文數據手冊

    霍尼韋爾公司出品,三軸地磁傳感器HMC5883的升級版HMC5883L,用于地磁車輛檢測,智能交通系統,停車誘導系統等等。
    發表于 02-29 16:58 ?119次下載

    HMC5883L中文

    HMC5883L中文
    發表于 12-13 17:15 ?16次下載

    hmc5883l的特點及優點_HMC5883L磁力計校準方法

    尼韋爾專利的集成電路包括放大器、自動消磁驅動器、偏差校準、能使羅盤精度控制在1°~2°的12位模數轉換器。簡易的I2C 系列總線接口。HMC5883L 是采用無鉛表面封裝技術,帶有16引腳,尺寸為3.0X3.0X0.9mm。HMC588
    發表于 03-08 10:32 ?1.7w次閱讀

    HMC5883L應用說明

    尼韋爾專利的集成電路包括放大器、自動消磁驅動器、偏差校準、能使羅盤精度控制在1°~2°的12位模數轉換器。簡易的I2C 系列總線接口。HMC5883L 是采用無鉛表面封裝技術,帶有16引腳,尺寸為3.0X3.0X0.9mm。HMC588
    發表于 03-08 10:49 ?2.9w次閱讀

    霍尼韋爾HMC5883L詳細資料下載

    霍尼韋爾HMC5883L詳細資料下載
    發表于 12-08 10:51 ?11次下載

    QMC5883L磁力計介紹(硬件+軟件)(附STM32程序~~~)

    QMC5883L磁力計介紹(硬件+軟件)(附STM32程序~~~)
    發表于 12-08 10:51 ?87次下載
    <b class='flag-5'>QMC5883L</b><b class='flag-5'>磁力計</b>介紹(硬件+軟件)(附<b class='flag-5'>STM32</b>程序~~~)

    如何利用HMC5883L實現三軸磁力計的設計

    在這個中,我們的 HMC5883L 3 項目設備可以測量地球將磁力計連接到 Arduino 方向。 Uno。它是一種以低軸設備中的設備,可以在手機或導航中,找到提供準確的您航還可以使用它們來檢測含鐵(含鐵)金屬,因為金屬中的鐵在靠近傳感器的時候會改變磁場。
    的頭像 發表于 06-10 16:24 ?7892次閱讀
    如何利用<b class='flag-5'>HMC5883L</b>實現三軸<b class='flag-5'>磁力計</b>的設計

    磁力計HMC5883L傳感器特性

    霍尼韋爾 HMC5883L 是一種表面貼裝的高集成模塊,并帶有數字接口的弱磁傳感器芯片,應用于低成本羅盤和磁場檢測領域(指南針、GPS)。 HMC5883L 包括最先進的高分辨率 HMC
    的頭像 發表于 07-20 10:40 ?2584次閱讀