本帖最后由 浅墨飞鱼 于 2014-9-3 11:32 编辑
请问如何才能尽可能提高mpu6050的采样频率?
这个函数accelgyro.getMotion6( &ax, &ay, &az, &gx, &gy, &gz );运行最多要0.896ms,因为我的程序对时间很敏感,想尽可能的缩短这个函数的调用时间,大家有好的法子么?我查过用dmp的方式读取数据,貌似数据白噪声有点多。
其实我这个0.896ms也是通过修改I2C总线频率才能做到这么小的值,TWBR = 1;
- #include <Wire.h>
- #include <I2Cdev.h>
- #include <MPU6050.h>
- //MPU6050参数设定
- MPU6050 accelgyro;
- int16_t ax, ay, az;
- int16_t gx, gy, gz;
- #define Gry_offset 296//陀螺仪x轴的静态飘移。
- #define Gyr_Gain 0.00763//由陀螺仪X轴读数转换为角速度值,=1/131 敏感比例因子131、
- #define ACC_Gain 0.000061//由读数转换为加速度值,=1/16384 Sensitivity Scale Factor
- void setup()
- {
- //MPU6050初始化
- accelgyro.initialize();
- TWBR = 1; //setup i2c clock; 24->400KHz
- }
- void loop()
- {
- accelgyro.getMotion6( &ax, &ay, &az, &gx, &gy, &gz );//读取六轴数值 最多要0.896ms
- float Y_Accelerometer = ay * ACC_Gain; //转换为向前的加速度(g),为负值
- float Z_Accelerometer = az * ACC_Gain; //转换为向下的加速度(g)
- angleA = atan(Y_Accelerometer / Z_Accelerometer) * 57.2958;//angleA= atan(Y_Accelerometer / Z_Accelerometer) * (180) / pi;
- float gx_revised = gx + Gry_offset;//陀螺仪x轴静态时修正后的角速度读数,向前为负值
- omega = Gyr_Gain * gx_revised;//陀螺仪,转换为向前的角速度(o/s),Gyr_Gain取负
- // Serial.println( angleA );
- }
复制代码 |