我很难确定为什么有时会得到奇怪的值并从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值距离限制很远,并且我正在转换为更大的格式编号。
任何人有任何想法吗?
我开始认为这可能是硬件问题。
好吧,我遇到了同样的问题,我想到了将加速度计值从int16_t转换为float数据类型的问题。不确定为什么