我有一些麻烦来确定为什么有时候我会从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值远离极限,我正在转换为更大的格式号。
有人有任何想法吗?
我开始认为它可能是硬件。
答案 0 :(得分:0)
好吧,我遇到了同样的问题,我想到了将加速度计值从int16_t转换为float数据类型的问题。不确定为什么