请问通过SPI协议获取到的ADXL355数据应当如何转换为g值-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2249|回复: 2

[已解决] 请问通过SPI协议获取到的ADXL355数据应当如何转换为g值

[复制链接]
发表于 2020-9-9 09:47 | 显示全部楼层 |阅读模式
如题,近期在测试ADXL355这个三轴加速度计,使用的是SPI协议,用arduino开发的程序,目前程序输出的值如下
22222.jpg

部分代码如下:
void setup() {
  Serial.begin(115200);
  SPI.begin();

  pinMode(CHIP_SELECT_PIN,OUTPUT);

  writeRegister(RANGE,RANGE_10G);//使用10G
  writeRegister(POWER_CTL,MEASURE_MODE);

  delay(100);
}

void loop() {
  int axisAddresses[] = {XDATA1, XDATA2, XDATA3, YDATA1, YDATA2, YDATA3, ZDATA1, ZDATA2, ZDATA3};
  int axisMeasures[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
  int dataSize = 9;

  readMultipLEData(axisAddresses, dataSize, axisMeasures);

  int xdata = (axisMeasures[0] >> 4) + (axisMeasures[1] << 4) + (axisMeasures[2] << 12);
  int ydata = (axisMeasures[3] >> 4) + (axisMeasures[4] << 4) + (axisMeasures[5] << 12);
  int zdata = (axisMeasures[6] >> 4) + (axisMeasures[7] << 4) + (axisMeasures[8] << 12);

  IF (xdata >= 0x80000) {
    xdata = ~xdata + 1;
  }
  if (ydata >= 0x80000) {
    ydata = ~ydata + 1;
  }
  if (zdata >= 0x80000) {
    zdata = ~zdata + 1;
  }

  Serial.print("X=");
  Serial.print(xdata);
  Serial.print("\t");

  Serial.print("Y=");
  Serial.print(ydata);
  Serial.print("\t");

  Serial.print("Z=");
  Serial.print(zdata);
  Serial.print("\n");

  delay(100);
}


量程暂定为±10g,灵敏度为51200 LSB/g,请问输出的数值应当如何转换成g值呢?
发表于 2022-2-11 09:59 | 显示全部楼层
将所得值除以灵敏度就可以了
发表于 2022-2-11 10:01 | 显示全部楼层
ADXL355量程,分为2.048g、4.096g、8.192g;其灵敏度根据量程可分为256000LSB/g、128000LSB/g、64000LSB/g,
楼主我想向你请教一个问题,你是采用GitHub上的项目做的吗,利用arduino mkr1000+ADXL355采集加速度,想问下你是否是采用mkr1000做的?GitHub程序是否正确?非常感谢!     
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 16:03 , Processed in 0.191728 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表