传感技术
直播中

王兰

14年用户 943经验值
擅长:基础元器件
私信 关注
[问答]

adxl314读出来的加速度数据格式是什么?

数据表中 OUTPUT RESOLUtiON 是13位的,每个轴输出是2个字节,这样会有3位抛弃,请问是哪三位。

回帖(1)

陈敏

2025-7-17 17:46:51

ADXL314 的加速度数据格式和丢弃位问题解答如下:


? 1. 数据格式:



  • 输出分辨率: 13 位(实际有效数据精度)。

  • 物理存储: 每个轴(X、Y、Z)占用 2字节(16位) 的存储空间。

  • 格式: 16位二进制补码(Two's Complement) 整数,数据采用左对齐(Left-Justified) 格式。


⚠️ 2. 丢弃的3位:



  • 被丢弃的位: 最低的3位(LSBs),即 Bit 2、Bit 1、Bit 0(D2、D1、D0)。

  • 数据存放位置:

    • 有效数据位: Bit 15 ~ Bit 3(共13位),其中:

      • Bit 15:符号位(0=正数,1=负数)。

      • Bit 14 ~ Bit 3:数据位(12位),表示加速度值大小。


    • 无效位: Bit 2 ~ Bit 0(低3位)固定为0或无意义,读取后需丢弃。


  • 内存布局示意:
     字节1(MSB): [D15 (符号位) | D14 | D13 | D12 | D11 | D10 | D9 | D8 ]
    字节2(LSB): [D7  | D6  | D5  | D4  | D3  | D2 (0) | D1 (0) | D0 (0) ]


? 3. 数据转换方法:



  • 步骤:

    1. 读取2字节原始数据(16位有符号整数,范围:-32768 ~ +32767)。

    2. 右移3位:丢弃低3位(D2~D0),保留高13位(D15~D3)。
      int16_t raw_value = (msb << 8) | lsb;  // 合并为16位有符号整数
      int16_t actual_value = raw_value >> 3; // 右移3位,保留符号位


      • 示例:

      • 原始值:0b1101101101100000(16位,负数)

      • 右移3位:0b1101101101100(13位有效数据,值不变)



  • 标度转换:

    • 根据量程(如±2g)和灵敏度(如512 LSB/g),将13位数据转为实际加速度(g):
      float acceleration_g = (float)actual_value / sensitivity; // sensitivity=512 (LSB/g)



? 4. 为什么这样设计?



  • 简化计算: 左对齐格式使得高13位直接对齐到符号位,避免了额外的掩码操作(仅需移位即可)。

  • 兼容性: 16位存储兼容标准I2C/SPI接口,硬件可直接读取2字节。


? 5. 重要提醒:



  • 符号位保护: 右移时确保编译器正确处理算术右移(保留符号位),避免逻辑右移错误。

  • 数据手册参考: 详见ADXL314数据手册的 "Data Format""Register Map" 章节,通常寄存器地址为 0x32~0x37(X/Y/Z轴数据)。


总结:ADXL314的16位输出中,丢弃的是最低3位(Bit 2~Bit 0),有效数据通过右移3位快速提取为13位有符号整数,再根据量程转换为物理加速度值。 ✅

举报

更多回帖

发帖
×
20
完善资料,
赚取积分