int16_t使arduino中的MPU6050加速读取溢出

问题描述 投票:1回答:1

我很难确定为什么有时会得到奇怪的值并从MPU6050传感器溢出。我有一个从DROTEK 10 DOF IMU传感器读取的ATM328P微型读数,其中之一是加速度,有时会变成ovf或表现异常。这是我正在使用的代码:

#include<Wire.h>
const int MPU=0x69;
int16_t ax,ay,az;
float acc[3] = {0, 0, 0};
float S = 0.00006103515625; // scale factor g/LSB 4/65536

void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(115200);
}
void loop(){
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,6,true);  // request a total of 14 registers
  az=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  ay=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  ax=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)

 acc[0] = ax*S;
 acc[1] = ay*S;
 acc[2] = az*S;
}

为什么这些来自数组的最后acc值有时会溢出或表现为怪异的方式(而不是期望值),为什么当它开始表现出怪异后就不再恢复了?我一直在寻找有关int16_t到float转换的问题,但没有找到任何可以帮助我的线索。 Here还有另一个类似的问题,但是我认为这不适用于我的原因,因为我从传感器获得的ax,ay和az值距离限制很远,并且我正在转换为更大的格式编号。

任何人有任何想法吗?

我开始认为这可能是硬件问题。

arduino sensor
1个回答
0
投票

好吧,我遇到了同样的问题,我想到了将加速度计值从int16_t转换为float数据类型的问题。不确定为什么

© www.soinside.com 2019 - 2024. All rights reserved.