芯进电子荣获“中国芯”优秀技术创新产品奖

时间:2025-04-28  作者:Diven  阅读:0

本文聊聊上海矽睿产的加速度传感器QMA6100P的使用。

1、特性

高集成,小尺寸封装:2 x 2 x 0.95 mm LGA
14位数模转化,低噪声 ·
具有标准模式和快速模式,支持I2C和SPI接口
内置self-test
大范围操作电压1.7V-3.6V,与低功耗2~50μA
集成64位FIFO存贮器,符合RoHS标准,无卤素添加
内置运动算法 ,尤其是硬件计步算法
可在-40°C~85°C的温度中工作

芯进电子荣获“中国芯”优秀技术创新产品奖

2、引脚说明

c76e13a2-58df-11ee-9788-92fbcf53809c.png
可以看出提供了两个外部中断引脚,支持SPI或I2C通信。

3、I2C读写地址

c78b2f0a-58df-11ee-9788-92fbcf53809c.png

4、部分寄存器

4.1、设备ID寄存器

c79edd84-58df-11ee-9788-92fbcf53809c.png
可以通过读这个寄存器判断设备是否存在,默认是0x90。

4.2、软复位寄存器c7b4ec00-58df-11ee-9788-92fbcf53809c.png

4.3、数据寄存器c7d650ca-58df-11ee-9788-92fbcf53809c.png

通过这6个寄存器可以读出三轴数据。

4.4、量程寄存器

c7ef9864-58df-11ee-9788-92fbcf53809c.png
通过这个寄存器设置测量范围。

4.5、带宽寄存器

c800e86c-58df-11ee-9788-92fbcf53809c.png

4.6、电源管理寄存器

c8202b28-58df-11ee-9788-92fbcf53809c.png

5、原理图设计

c83ef0c6-58df-11ee-9788-92fbcf53809c.png

6、代码

本文使用软硬件I2C与QMA6100P通讯,通过宏切换。

void I2cInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF , ENABLE);

GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_1);

GPIO_PinAFConfig(GPIOF, GPIO_PinSource7, GPIO_AF_1);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOF, &GPIO_InitStructure);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStructure.I2C_DigitalFilter = 0x00;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_Timing = 0x40B22536;//0x20D22E37;// 0x02105070; //0x40B22536//100k, 0x10950C27; //400kHz
I2C_Init(I2C2, &I2C_InitStructure);

I2C_Init(I2C2, &I2C_InitStructure);

I2C_Cmd(I2C2, ENABLE);
}
void I2cWrite(uint8_t reg,uint8_t var)
{

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY) != RESET){};

I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_Reload_Mode, I2C_Generate_Start_Write);
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS )==RESET){}; // I2C_FLAG_TXE
I2C_SendData(I2C2, reg);
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TCR) == RESET){};
I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_AutoEnd_Mode, I2C_No_StartStop);

while (I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS) == RESET){}; //I2C_FLAG_TXIS

I2C_SendData(I2C2, var);

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF) == RESET){};
}
uint8_t I2cRead(uint8_t reg)
{
uint8_t ret=0;

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY) != RESET){};

I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS ) == RESET){}; //I2C_FLAG_TXIS
I2C_SendData(I2C2, reg);
while (I2C_GetFlagStatus(I2C2, I2C_FLAG_TC) == RESET){};

I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_AutoEnd_Mode, I2C_Generate_Start_Read);
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_RXNE) == RESET){};

ret = I2C_ReceiveData(I2C2);

while(I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF) == RESET){};
return ret;
}
#define _SCL_PORT GPIOF
#define _SCL_PIN GPIO_Pin_6
#define _SDA_PORT GPIOF
#define _SDA_PIN GPIO_Pin_7
void _I2cInit(void)
{

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF , ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void _SDA_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void _SDA_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
}
void _I2C_Start(void)
{
_SDA_OUT();
GPIO_SetBits(_SDA_PORT,_SDA_PIN); //SDA=1
DelayUs(10);
GPIO_SetBits(_SCL_PORT,_SCL_PIN); //SCL=1
DelayUs(10);
GPIO_ResetBits(_SDA_PORT,_SDA_PIN);//SDA=0
DelayUs(10);
GPIO_ResetBits(_SCL_PORT,_SCL_PIN);//SCL=0
DelayUs(10);
}
void _I2C_Stop(void)
{
_SDA_OUT();
GPIO_ResetBits(_SDA_PORT,_SDA_PIN);//SDA=0
DelayUs(10);
GPIO_SetBits(_SCL_PORT,_SCL_PIN); //SCL=1
DelayUs(10);
GPIO_SetBits(_SDA_PORT,_SDA_PIN); //SDA=1
DelayUs(10);
}
void _I2C_Ack(void)
{
_SDA_OUT();
GPIO_ResetBits(_SDA_PORT,_SDA_PIN);//SDA=0
DelayUs(5);
GPIO_SetBits(_SCL_PORT,_SCL_PIN); //SCL=1
DelayUs(5);
GPIO_ResetBits(_SCL_PORT,_SCL_PIN); //SCL=0
}
void _I2C_NAck(void)
{
GPIO_SetBits(_SDA_PORT,_SDA_PIN); //SDA=1
DelayUs(10);
GPIO_SetBits(_SCL_PORT,_SCL_PIN); //SCL=1
DelayUs(10);
GPIO_ResetBits(_SCL_PORT,_SCL_PIN); //SCL=0
DelayUs(10);
}
uint8_t _I2C_Wait_Ack(void)
{
uint8_t ucErrTime=0<

猜您喜欢

分子排阻色谱法(Size Exclusion Chromatography, SEC)是应用于生物化学和分析化学中的分离技术。该方法根据样品分子的大小进行分离,...
2025-04-14 17:01:43

CO₂是一种无色无味气体,密度比空气略大,溶于水,并生成碳酸。CO₂在工业中的应用非常广泛,如固态二氧化碳俗称干冰,升华时可吸收大量热,因而用作制冷剂,如人工降...
2023-09-11 14:47:00

固态电容和电解电容是电子元件中常见的。有不同的特点和应用。本文将详细介绍的区别。基本定义固态电容是使用固体电解质。的电解质是固体的。电解电容则使用液体电解质。的...
2025-03-20 04:30:02

货架是商店和仓库中不可少的设施,但种类繁多,各具特点。按材质分类,货架可分为金属货架、木质货架和塑料货架。金属货架坚固耐用,适合重物存放;木质货架则更具美观性,...
2017-03-19 00:00:00

贴片电阻2002并非指阻值为2002欧姆。实际上,「2002」指的是电阻的封装尺寸,表示其长宽分别为2.0mm和0.2mm。贴片电阻的阻值通常用数字和字母组合表...
2024-11-26 11:29:51

PVC管件是由聚氯乙烯材料制成的管道配件,应用于建筑、管道工程及家居装修等领域。主要用于连接、转弯、分支和封闭等功能,以实现管道系统的有效布局和流体输送。PVC...
2014-02-05 00:00:00

电解电容和瓷片电容是电子元件中常见的。在电路中有着重要的作用。了解的符号,对于电子产品设计很重要。本文将为大家详细介绍这两种电容的符号。电解电容的符号电解电容的...
2025-03-22 13:30:35

贴片电阻规格尺寸通常用四位数字表示,例如0402、0603、0805、1206等。这些数字并非随意排列,而是代表了电阻的长和宽,单位是英寸。具体来说,前两位数字...
2024-11-26 11:30:05

消防设备电源监控系统调试,通常情况下不单独套用定额,而是根据实际情况选择合适的项目进行计费。具体来说,可以参考以下几种方式:并入其相关子系统调试费用: 消防设备...
2024-03-03 00:00:00

气动辅助件是现代工业中不可少的重要组成部分,在不同的应用场景中有着着各自的作用。气动执行器和气动阀门是两种常见的气动辅助件。气动执行器主要用于将气体的压力转换为...
2008-01-19 00:00:00