ADI 技术
直播中

李凯

7年用户 194经验值
私信 关注
[问答]

请问ADXL345的数字输出数据为16位二进制补码需要进行数据转换吗?

手动测量的数据如下:
[tr]加速度(g)x轴y轴z轴[/tr]
z轴向上-0.75-1.183.89
z轴向下-0.83-1.171.84
x轴向上0.40-1.132.88
x轴向下-2.04-1.182.81
y轴向上-0.8302.85
y轴向下-0.85-2.882.88


//********************ADXL345初始化**************************//
   Single_Write_ADXL345(0x31,0x0B);   //测量范围,正负16g,13位模式
   Single_Write_ADXL345(0x2C,0x1F);   //速率设定为3200Hz p13
   Single_Write_ADXL345(0x2D,0x08);   //功耗模式   p24
   Single_Write_ADXL345(0x2E,0x00);   //不启用中断
   Single_Write_ADXL345(0x1E,0x00);   //X 偏移量
   Single_Write_ADXL345(0x1F,0x00);   //Y 偏移量
   Single_Write_ADXL345(0x20,0x00);   //Z 偏移量
//*****************************************************************//
具体程序如附件。

问题一:
    ADXL345的数字输出数据为16位二进制补码,在数据处理时即使转换成原码仍然不对,需要进行数据转换吗?
问题二:
    如果我通过矫正偏移量,将在z轴向下时定为零点,那对THRESH_ACT和THRESH_INACT的设置有无影响?

我也看到有人也是跟我一样的问题,如果说芯片坏了应该不会巧合到连数据都差不多,请帮看下程序对不对,谢谢
附件

回帖(5)

刘悦竹

2018-10-1 11:50:24
ADXL345的数据处理,可以参考下面的方式。
ADXL345 Data Processing
unsigned char buf[6];

signed short int AccX, AccY, AccZ;

xl345Read(6, XL345_DATAX0, buf);

//Read DATAX/Y/Z registers

AccX = (buf[1] << 8) | buf[0];

AccY = (buf[3] << 8) | buf[2];

AccZ = (buf[5] << 8) | buf[4];

UploadToHAL(XL345, AccX, AccY, AccZ);

The data processing can be optimized as below

signed short int AccBuffer[3];

xl345Read(6, XL345_DATAX0, AccBuffer);

UploadToHAL(XL345, AccBuffer[0], AccBuffer[1], AccBuffer[2]);

如果数据处理正确,依然看到这么大offset偏置的话,说明器件已坏。
举报

朱佳婧

2018-10-1 11:57:09
引用: minwayson 发表于 2018-10-1 11:50
ADXL345的数据处理,可以参考下面的方式。
ADXL345 Data Processing
unsigned char buf[6];

我想请教下:就是ADXL335 会有温度漂移的现象, 我需要用ADXL335测角度,然后会随着温度的变化而发生改变,这种技术上有什么解决方案么?谢谢!
举报

史乃原

2018-10-1 12:15:31
引用: buerutert 发表于 2018-10-1 11:57
我想请教下:就是ADXL335 会有温度漂移的现象, 我需要用ADXL335测角度,然后会随着温度的变化而发生改变,这种技术上有什么解决方案么?谢谢!

同求上述问题
举报

刘悦竹

2018-10-1 12:23:38
引用: buerutert 发表于 2018-10-1 11:57
我想请教下:就是ADXL335 会有温度漂移的现象, 我需要用ADXL335测角度,然后会随着温度的变化而发生改变,这种技术上有什么解决方案么?谢谢!

所有器件都会有温漂,关键要看温漂是否在容许的范围内,如果不是,就要考虑温补校正或换用更低温漂的器件。
举报

更多回帖

×
20
完善资料,
赚取积分