QMC5883L磁力计介绍(硬件+软件)(附STM32程序!!!)

Posted 三明治开发社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QMC5883L磁力计介绍(硬件+软件)(附STM32程序!!!)相关的知识,希望对你有一定的参考价值。

QMC5883L磁力计介绍

话不多说,先上代码链接
https://github.com/Tuya-Community/tuya-iotos-embeded-mcu-demo-wifi-ble-electronic-compass
QMC5883L是一款国产磁力计,与HMC5993 pin to pin 兼容,软件上只要少许改动,便可达到相同效果。鉴于网络上qmc5883l资料较少,今天小编就教大家如何使用这款传感器。


硬件介绍

首先是硬件,qmc5883硬件引脚如下

1 SCL :Serial Clock – I2C Master/Slave Clock
2 VDD :Power Supply (2.16V to 3.6V)
3 NC: Not to be Connected
4 S1 :Tie to VDDIO
5 NC: Not to be Connected
6 NC: Not to be Connected
7 NC :Not to be Connected
8 SETP: Set/Reset Strap Positive – S/R Capacitor (C2) Connection
9 GND :Supply Ground
10 C1: Reservoir Capacitor (C1) Connection
11 GND: Supply Ground
12 SETC :S/R Capacitor (C2) Connection – Driver Side
13 VDDIO: IO Power Supply (1.71V to VDD)
14 NC: Not to be Connected
15 DRDY :Data Ready, Interrupt Pin. Default low. Data ready high until data
register is read.
16 SDA: Serial Data – I2C Master/Slave Data

根据手册说明,电路可以如下设计:

这边要提以下几点:
首先是供电电压,qmc5883l的供电范围是2.16~3.6V,大家千万不要超出这个范围,否则会影响正常工作,甚至永久损坏。
还有一个是设备地址,qmc5883默认的7-bit IIC地址为0X0D:0001101
qmc5883l有一个S1引脚,
如果我们将S1接VDD,那么写地址为0X1A,读地址为0X1B(通常接VDD);
如果我们将S1接GND,那么写地址为0X18,读地址为0X19;

初始化


驱动程序方面,初始化函数可以如下
IIC_Write_Byte(QMC5883L_ADDRESS,0x0B, 0x01);
IIC_Write_Byte(QMC5883L_ADDRESS,0x20, 0x40);
IIC_Write_Byte(QMC5883L_ADDRESS,0x21, 0x01);
Config = OVER_SAMPLE_RATIO_512
|FULL_SCALE_2G
|OUTPUT_DATA_RATE_10HZ
|MODE_CONTROL_CONTINUOUS;
/OSR=512,RNG=+/-2G,ODR=200Hz,MODE= continuous***/
IIC_Write_Byte(QMC5883L_ADDRESS,0x09, Config);

其中0x0B寄存器写01,这个设置周期,01是手册建议的写入值;


后面0x20和0x21这两个寄存器参数的写入,手册上并没有提及,这个小编还在查找依据,有结论会第一时间告诉大家;

0x09寄存器,这个是重点。

主要用于设置工作模式,输出频率,量程范围和采样速率,大家可以根据自己的需求,看表格设置。
小编是设置成512采样速率,2G范围,10HZ输出,连续采样模式。其中低输出速率,可以提高一些精度。

数据读取

接下来是数据读取,数据寄存器有6个

程序如下,注意第一个数据是低八位,后面的是高八位。
IIC_ReadMulByte(QMC5883L_ADDRESS,0x00,Mag,6);
Mag_data.x= (int16_t)(Mag[1] <<8 | Mag[0]);// First byte is LSB, second byte is MSB
Mag_data.y= (int16_t)(Mag[3] << 8 | Mag[2]);
Mag_data.z= (int16_t)(Mag[5] << 8 | Mag[4]);

当然,如果出于产品化考虑,可以在获取数据前,先判断一下传感器状态。
IIC_ReadMulByte(QMC5883L_ADDRESS,0x06,&temp,1);

当传感器数据已测量完毕并准备好DRDY位被置“1”,数据寄存器一旦被读取,DRDY位将被置“0”。
当有任意一个轴的测量值超过范围,OVL将被置“1”,当下一次测量不超测量范围时,OVL将会被置“0”。
当处于连续模式下测量数据被跳过时DOR被置“1”,而当数据寄存器被读写后置“0”。

角度计算

获取地磁原始数据后,就可以通过三角函数,计算出方位角度。
data->x=atan2((double)Mag_data.y,(double)Mag_data.x)*57.3+180;

完成例程,可以通过下面链接查看

本文例程

 

以上是关于QMC5883L磁力计介绍(硬件+软件)(附STM32程序!!!)的主要内容,如果未能解决你的问题,请参考以下文章

STM32智能家居项目目录

硬件——STM32 , 软件框架

学习stm32单片机,必备工具和软件,你知道几个?

STM32入门开发: 介绍SPI总线读写W25Q64(FLASH)(硬件+模拟时序)

STM32入门开发: 介绍SPI总线读写W25Q64(FLASH)(硬件+模拟时序)

STM32入门开发: 采用IIC硬件时序读写AT24C08(EEPROM)