亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

淺談HMC5883L和QMC5883P磁力計(jì)的區(qū)別及STM32F103驅(qū)動(dòng)

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

掃碼添加小助手

加入工程師交流群

HMC5883L和QMC5883P芯片區(qū)別

在這里插入圖片描述

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

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

HMC5883L手冊(cè)鏈接:HMC5883L手冊(cè)

寄存器說(shuō)明

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

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

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

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

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

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

/** * 函    數(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號(hào)
  * 參    數(shù):無(wú)
  * 返 回 值:HMC5883L的ID號(hào)
  */
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ù):磁力計(jì)X、Y、Z軸的數(shù)據(jù),使用輸出參數(shù)的形式返回
  * 返 回 值:無(wú)
  */
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);		//讀取磁力計(jì)X軸的高8位數(shù)據(jù)
	DataL = HMC5883L_ReadReg(HMC5883L_REG_XOUT_L);		//讀取磁力計(jì)X軸的低8位數(shù)據(jù)
	*X = (DataH < < 8) | DataL;						    //數(shù)據(jù)拼接,通過(guò)輸出參數(shù)返回
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_YOUT_H);		//讀取磁力計(jì)Y軸的高8位數(shù)據(jù)
	DataL = HMC5883L_ReadReg(HMC5883L_REG_YOUT_L);		//讀取磁力計(jì)Y軸的低8位數(shù)據(jù)
	*Y = (DataH < < 8) | DataL;						    //數(shù)據(jù)拼接,通過(guò)輸出參數(shù)返回
	
	DataH = HMC5883L_ReadReg(HMC5883L_REG_ZOUT_H);		//讀取磁力計(jì)Z軸的高8位數(shù)據(jù)
	DataL = HMC5883L_ReadReg(HMC5883L_REG_ZOUT_L);		//讀取磁力計(jì)Z軸的低8位數(shù)據(jù)
	*Z = (DataH < < 8) | DataL;						    //數(shù)據(jù)拼接,通過(guò)輸出參數(shù)返回	
}

HMC5883L主函數(shù)

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

int main(void)
{
	/*模塊初始化*/
	OLED_Init();		                //OLED初始化
	HMC5883L_Init();		            //HMC5883L初始化
	/*顯示ID號(hào)*/
	OLED_ShowString(1, 1, "ID:");		
	HMC5883L_GetID(&IDA, &IDB, &IDC);	//獲取HMC5883L的ID號(hào)
	OLED_ShowHexNum(1, 4, IDA, 2);		//OLED顯示ID號(hào)(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號(hào)(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及三軸磁力計(jì)數(shù)據(jù)

QMC5883P手冊(cè)鏈接:QMC5883P手冊(cè)

寄存器說(shuō)明

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

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

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

/**
  * 函    數(shù):QMC5883P初始化
  * 參    數(shù):無(wú)
  * 返 回 值:無(wú)
  */
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(過(guò)采樣率), ODR=11(200Hz), MODE=11(連續(xù)發(fā)送模式Continuous Mode) */
	QMC5883P_WriteReg(QMC5883P_REG_CONTROL1, 0xFF);
    /* 配置寄存器2:這里寫的參數(shù)是不軟復(fù)位,不自檢,量程30Guass,不更新偏移量 */
    QMC5883P_WriteReg(QMC5883P_REG_CONTROL2, 0x01);
}

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

/**
  * 函    數(shù):QMC5883P獲取數(shù)據(jù)
  * 參    數(shù):X Y Z 磁力計(jì)X、Y、Z軸的數(shù)據(jù),使用輸出參數(shù)的形式返回
  * 返 回 值:無(wú)
  */
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);		//讀取磁力計(jì)X軸的高8位數(shù)據(jù)
	DataL = QMC5883P_ReadReg(QMC5883P_REG_XOUT_L);		//讀取磁力計(jì)X軸的低8位數(shù)據(jù)
	*X = (DataH < < 8) | DataL;						//數(shù)據(jù)拼接,通過(guò)輸出參數(shù)返回
	
	DataH = QMC5883P_ReadReg(QMC5883P_REG_YOUT_H);		//讀取磁力計(jì)Y軸的高8位數(shù)據(jù)
	DataL = QMC5883P_ReadReg(QMC5883P_REG_YOUT_L);		//讀取磁力計(jì)Y軸的低8位數(shù)據(jù)
	*Y = (DataH < < 8) | DataL;						//數(shù)據(jù)拼接,通過(guò)輸出參數(shù)返回
	
	DataH = QMC5883P_ReadReg(QMC5883P_REG_ZOUT_H);		//讀取磁力計(jì)Z軸的高8位數(shù)據(jù)
	DataL = QMC5883P_ReadReg(QMC5883P_REG_ZOUT_L);		//讀取磁力計(jì)Z軸的低8位數(shù)據(jù)
	*Z = (DataH < < 8) | DataL;						//數(shù)據(jù)拼接,通過(guò)輸出參數(shù)返回	
}

QMC5883P主函數(shù)

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

int main(void)
{
	/*模塊初始化*/
	OLED_Init();		                //OLED初始化
	QMC5883P_Init();		            //QMC5883P初始化
	
	/*顯示ID號(hào)*/
	OLED_ShowString(1, 1, "ID:");		//顯示靜態(tài)字符串
	ID = QMC5883P_GetID();				//獲取QMC5883P的ID號(hào)
	OLED_ShowHexNum(1, 4, ID, 2);		//OLED顯示ID號(hào)
	
	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測(cè)試現(xiàn)象
在這里插入圖片描述

總結(jié)

==由于兩個(gè)模塊的底板是兼容的,所以拿到手的時(shí)候磁場(chǎng)方向只有HMC5883L的磁場(chǎng)方向是對(duì)的,QMC5883P的磁場(chǎng)方向?qū)?yīng)手冊(cè)里或者上面磁場(chǎng)方向圖片看就行。==
需要代碼和對(duì)應(yīng)資料的可以在評(píng)論區(qū)留言郵箱獲取哦!

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

    關(guān)注

    6072

    文章

    45271

    瀏覽量

    661570
  • STM32F103
    +關(guān)注

    關(guān)注

    34

    文章

    486

    瀏覽量

    66883
  • 磁力計(jì)
    +關(guān)注

    關(guān)注

    1

    文章

    72

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    HMC5883L

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

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

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

    請(qǐng)問(wèn)MPU6050+HMC5883L的數(shù)據(jù)融合磁力計(jì)如何加入算出YAW的準(zhǔn)確角度?

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

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

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

    請(qǐng)問(wèn)MPU6050,HMC5883L,ADXL345之間我該選擇哪個(gè)?

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

    如何使用這款QMC5883L磁力計(jì)

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

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

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

    HMC5883L中文

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

    hmc5883l的特點(diǎn)及優(yōu)點(diǎn)_HMC5883L磁力計(jì)校準(zhǔn)方法

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

    HMC5883L應(yīng)用說(shuō)明

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

    霍尼韋爾HMC5883L詳細(xì)資料下載

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

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

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

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

    在這個(gè)中,我們的 HMC5883L 3 項(xiàng)目設(shè)備可以測(cè)量地球?qū)?b class='flag-5'>磁力計(jì)連接到 Arduino 方向。 Uno。它是一種以低軸設(shè)備中的設(shè)備,可以在手機(jī)或?qū)Ш街?,找到提供?zhǔn)確的您航還可以使用它們來(lái)檢測(cè)含鐵(含鐵)金屬,因?yàn)榻饘僦械蔫F在靠近傳感器的時(shí)候會(huì)改變磁場(chǎng)。
    的頭像 發(fā)表于 06-10 16:24 ?7433次閱讀
    如何利用<b class='flag-5'>HMC5883L</b>實(shí)現(xiàn)三軸<b class='flag-5'>磁力計(jì)</b>的設(shè)計(jì)

    磁力計(jì)HMC5883L傳感器特性

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