int16_t浮动MPU6050在arduino中读取溢出

时间:2015-07-20 21:11:25

标签: arduino sensor

我有一些麻烦来确定为什么有时候我会从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浮点转换的问题,但没有找到任何可以帮助我的线索。 Here还有另一个类似的问题,但我认为它不适用于我的因为我从传感器得到的ax,ay和az值远离极限,我正在转换为更大的格式号。

有人有任何想法吗?

我开始认为它可能是硬件。

1 个答案:

答案 0 :(得分:0)

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