刚刚开始学习的菜鸟新手提问,希望得到ADI工程师和前辈的回答。
入手一块ADXL350的开发板,使用STM32F4,SPI四线通信。 现在通信没有问题,但是收到的数据有一些问题,如下图:
其中[0]、[1]、[2]分别为X、Y、Z轴的数据。
这是模块平放(+Z)时的数据:
模块反放(-Z)时的数据:
+X方向放置的数据:
-X方向放置时的数据:
+Y方向放置时的数据:
-Y方向放置时的数据:
从数据中可以看出,数据变化的方向是正确的,XY轴的数据相对较为准确,在+-X和+-Y时,数据应该是+-512LSB左右。Z轴的数据方向也是对的,但明显有非常大的偏置量,XY轴的数据也有一定的偏置量。
请问,这是我初始化设置的问题,还是模块的问题? 这个可以通过修正静态时候的偏置(计算OFFSET)来解决吗? 谢谢!
下面是我写的ADXL350初始化和数据读取的代码,请指教我哪里写的有问题,谢谢!
void Initial_ADXL350()
{
//DATA_FORMAT设置
SPI1_WriteRegister(DATA_FORMAT,0x0B, CS_GPIO, CS_GPIO_PIN);
Delay_ms(5);
//POWER_CTL
SPI1_WriteRegister(POWER_CTL,0x08, CS_GPIO, CS_GPIO_PIN);
Delay_ms(5);
//INT_ENABLE
SPI1_WriteRegister(INT_ENABLE,0x00, CS_GPIO, CS_GPIO_PIN);
Delay_ms(5);
//BW_RATE
SPI1_WriteRegister(BW_RATE,0x0F, CS_GPIO, CS_GPIO_PIN);
Delay_ms(5);
//FIFO_CTL
SPI1_WriteRegister(FIFO_CTL,0x80, CS_GPIO, CS_GPIO_PIN);
Delay_ms(5);
}
void ADXL350_Read()
{
u8 i = 0;
GPIO_ResetBits(CS_GPIO,CS_GPIO_PIN); //片选置位
SPI1_ReadWriteByte(DATAX0|_SPI_READ_MB);//设置连续读取模式
for(i=0;i<6;i++)
{
SPI1_Buffer[i] = SPI1_ReadWriteByte(_SPI_READ);
}
GPIO_SetBits(CS_GPIO,CS_GPIO_PIN); //关闭通信
Acc_Raw[0] = (((int16_t)SPI1_Buffer[1]) << 8) | (int16_t)SPI1_Buffer[0];
Acc_Raw[1] = (((int16_t)SPI1_Buffer[3]) << 8) | (int16_t)SPI1_Buffer[2];
Acc_Raw[2] = (((int16_t)SPI1_Buffer[5]) << 8) | (int16_t)SPI1_Buffer[4];
//判断数值正负
if (Acc_Raw[0]&0xF000)
OUT[0] = -(0xFFFF - Acc_Raw[0] + 1);
else
OUT[0] = Acc_Raw[0];
if (Acc_Raw[1]&0xF000)
OUT[1] = -(0xFFFF - Acc_Raw[1] + 1);
else
OUT[1] = Acc_Raw[1];
if (Acc_Raw[2]&0xF000)
OUT[2] = -(0xFFFF - Acc_Raw[2] + 1);
else
OUT[2] = Acc_Raw[2];
}





