18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

3天內(nèi)不再提示

淺談HMC5883L和QMC5883P磁力計的區(qū)別及STM32F103驅(qū)動

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

掃碼添加小助手

加入工程師交流群

HMC5883L和QMC5883P芯片區(qū)別

在這里插入圖片描述

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

HMC5883L獲取ID及三軸磁力計數(shù)據(jù)

HMC5883L手冊鏈接:HMC5883L手冊

寄存器說明

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

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

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

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

獲取HMC5883L ID和磁力計三軸數(shù)據(jù)

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

/** * 函    數(shù):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);
}

/**
  * 函    數(shù):HMC5883L獲取ID號
  * 參    數(shù):無
  * 返 回 值: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寄存器的值
}


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

HMC5883L主函數(shù)

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

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的數(shù)據(jù)
		OLED_ShowSignedNum(3, 1, X, 5);	//OLED顯示數(shù)據(jù)
		OLED_ShowSignedNum(3, 9, Y, 5);
		OLED_ShowSignedNum(4, 1, Z, 5);
	}
}

輸出結(jié)果

OLED輸出數(shù)據(jù)
在這里插入圖片描述

QMC5883P獲取ID及三軸磁力計數(shù)據(jù)

QMC5883P手冊鏈接:QMC5883P手冊

寄存器說明

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

獲取QMC5883P ID和磁力計三軸數(shù)據(jù)

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

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

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

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

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

QMC5883P主函數(shù)

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

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

輸出結(jié)果

QMC5883P——OLED測試現(xiàn)象
在這里插入圖片描述

總結(jié)

==由于兩個模塊的底板是兼容的,所以拿到手的時候磁場方向只有HMC5883L的磁場方向是對的,QMC5883P的磁場方向?qū)謨岳锘蛘呱厦娲艌龇较驁D片看就行。==
需要代碼和對應資料的可以在評論區(qū)留言郵箱獲取哦!

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

    關(guān)注

    6072

    文章

    45267

    瀏覽量

    661178
  • STM32F103
    +關(guān)注

    關(guān)注

    34

    文章

    486

    瀏覽量

    66823
  • 磁力計
    +關(guān)注

    關(guān)注

    1

    文章

    72

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

    HMC5883L

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

    發(fā)現(xiàn)一款可以直接PIN-TO-PIN替換HMC5883L的傳感器!?。。?/a>

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

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

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

    如何處理磁力計HMC5883L獲取的三軸數(shù)據(jù)?

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

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

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

    如何使用這款QMC5883L磁力計

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

    HMC5883L中文數(shù)據(jù)手冊

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

    HMC5883L中文

    HMC5883L中文
    發(fā)表于 12-13 17:15 ?14次下載

    hmc5883l的特點及優(yōu)點_HMC5883L磁力計校準方法

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

    HMC5883L應用說明

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

    霍尼韋爾HMC5883L詳細資料下載

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

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

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

    如何利用HMC5883L實現(xiàn)三軸磁力計的設(shè)計

    在這個中,我們的 HMC5883L 3 項目設(shè)備可以測量地球?qū)?b class='flag-5'>磁力計連接到 Arduino 方向。 Uno。它是一種以低軸設(shè)備中的設(shè)備,可以在手機或?qū)Ш街校业教峁蚀_的您航還可以使用它們來檢測含鐵(含鐵)金屬,因為金屬中的鐵在靠近傳感器的時候會改變磁場。
    的頭像 發(fā)表于 06-10 16:24 ?7425次閱讀
    如何利用<b class='flag-5'>HMC5883L</b>實現(xiàn)三軸<b class='flag-5'>磁力計</b>的設(shè)計

    磁力計HMC5883L傳感器特性

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