提问:
调试ADXL372,Y轴和Z轴的MSB输出数据是0xFF?X轴输出是正常的,Y、Z轴MSB为什么输出是0xFF,读ID和寄存器都是正确的
回答:
使能下自检(self test),看结果正常吗
提问:
检查了,你看我的处理程序,这是初始化
等待数据准备好读取
回答:
二进制补码,所以高位寄存器00或FF都有可能,按二进制补码换算成十进制LSB和加速度值看一下,你截图的加速度值单位是什么,怎么换算转换出来的。
提问:
我也感觉是二进制补码
void ADXL372_RD_XYZ(void)
{
u8 BUF[6];
short tx2,ty2,tz2;
if(ADXL372_RD_Reg(ADXL372_STATUS_1)&0x01)
{
BUF[1] = ADXL372_RD_Reg(ADXL372_X_DATA_H);
BUF[0] = ADXL372_RD_Reg(ADXL372_X_DATA_L);
BUF[3] = ADXL372_RD_Reg(ADXL372_Y_DATA_H);
BUF[2] = ADXL372_RD_Reg(ADXL372_Y_DATA_L);
BUF[5] = ADXL372_RD_Reg(ADXL372_Z_DATA_H);
BUF[4] = ADXL372_RD_Reg(ADXL372_Z_DATA_L);
// BUF[4] = ADXL372_RD_Reg(0x0D);
// BUF[5] = ADXL372_RD_Reg(0x0C);
printf("\r\nBUF[0]:%x\r\n",BUF[0]);
printf("\r\nBUF[1]:%x\r\n",BUF[1]);
printf("\r\nBUF[2]:%x\r\n",BUF[2]);
printf("\r\nBUF[3]:%x\r\n",BUF[3]);
printf("\r\nBUF[4]:%x\r\n",BUF[4]);
printf("\r\nBUF[5]:%x\r\n",BUF[5]);
}
tx2 = (BUF[1] << 8 | BUF[0] ) ;
ty2 = (BUF[3] << 8 | BUF[2] ) ;
tz2 = (BUF[5] << 8 | BUF[4] ) ;
tx2 = tx2>>4;
ty2 = ty2>>4;
tz2 = tz2>>4;
// tx2 = ((BUF[1] << 4 | BUF[0]>>4 )) ;
// ty2 = ((BUF[3] << 4 | BUF[2]>>4 )) ;
// tz2 = ((BUF[5] << 4 | BUF[4]>>4 )) ;
a2 = (float)tx2 * ADXL372_USCALE;//97.65625;
b2 = (float)ty2 * ADXL372_USCALE;//97.65625;
c2 = (float)tz2 * ADXL372_USCALE;//97.65625; //加速度转换
a2/= 1000000;
b2/= 1000000;
c2/= 1000000;
printf("\r\nX轴加速度:%f\r\n",a2);
printf("\r\nY轴加速度:%f\r\n",b2);
printf("\r\nZ轴加速度:%f\r\n",c2);
}
这样处理有问题吗?
如果0xff 0xa0,实际应该是十进制多少数值?
如果我处理数据是对的,那这个数据采集的结果感觉误差很大,实际这个精度是±3g,大概在±30m/s2都属于正常吗?
回答:
ADXL372是大量程检测跌落冲击事件的传感器,噪声会大一点,2~3g峰峰值的噪声是正常的
如果±3g有点大,可以改一下采样率做下fft看频域是否平坦,另外传感器要固定好,电源推荐用低噪声LDO。
*温馨提示:提问需要问题清晰,目的明确;涉及到的产品、型号完整;对问题所在时的测试环境等描述清楚、详细,并附上原理图。
来源:ADI智库