Gyro陀螺仪 > MPU 6000 vs ICM 20689

目录

参考

MPU 6000和ICM 20689对比

陀螺仪的选择:采样率与噪声


参考

Gyro - MPU 6000 vs ICM 20689 | IntoFPV Forum

FPV Drone Flight Controller Explained - Oscar Liang

MPU 6000和ICM 20689对比

两个飞行控制器陀螺仪。 分别属于 T-Motor iFlight。T-Motor 使用 MPU 6000 陀螺仪,而 iFlight 使用 2x ICM 20689。两个 FC 都是 F7 并且成本相同。

MPU6000被认为是老式且稳定的选项,最高频率为 8KHz,而 ICM20689 在 Betaflight 中最高可运行 32KHz。 但是,当在 ICM 陀螺仪上启用 32KHz 模式时,更容易产生噪音。 一些制造商使用了 ICM 陀螺仪一段时间,但很多都改回了 MPU。当将它们用于 8KHz 时就不那么敏感了。MPU6000 的噪音问题较少。

现在 Betaflight 4.1 移除了 32KHz 模式,最高循环时间现在是 8KHz,ICM 看起来更没有吸引力了。 不过可以更有效地滤除噪音。移除了 32KHz 模式后,最高循环时间现在是 8KHz,因此选择哪种陀螺仪已经不是什么大问题了。

IMUPossible Communication Protocol (BUS)Max. Effective Gyro Sampling Frequency
MPU6000SPI, i2c8K
MPU6050i2c4K
MPU6500SPI, i2c32K
MPU9150*i2c4K
MPU9250*SPI, i2c32K
ICM20602SPI, i2c32K
ICM20608SPI, i2c32K
ICM20689SPI, i2c32K

* MPU9150 实际上是带有集成 AK8975 磁力计的 MPU6050,而 MPU9250 是带有相同磁力计的 MPU6500

陀螺仪的选择:采样率与噪声

在飞行控制器中需要考虑 IMU 的两个主要属性:最大采样率,以及对噪声的敏感程度(电气和机械)。目前使用最广泛的 IMU 是 MPU6000,因为它支持高达 8KHz 的采样率,并被证明是最强大的抗噪声 IMU 之一。 普遍的共识是避免使用 MPU6500 和 MPU9250,尽管它们的采样速度更高。ICM20689 也相当不错,但据称故障率较高。 然而,ICM20602 很容易受到噪声的影响,可能应该避免使用。有一些 FC 将陀螺仪“软安装”在泡沫上,以减少振动从电机传递到系统中的计算误差。

### GY-912ICM20948模块介绍 #### GY-912模块概述 GY-912是一款基于MPU6500芯片的六轴运动处理传感器模块,集成了三轴加速度计三轴陀螺仪。该模块能够提供精确的姿态测量,在无人机、机器人以及各种姿态检测项目中有广泛应用。 对于ESP8266 NodeMCU来说,通过I²C接口可以方便地连接并操作此类型的传感器模块[^1]。利用Arduino IDE编写程序来获取来自这些传感器的数据相对简单,并且网络上存在大量关于如何配置这类硬件的具体教程支持资源。 #### ICM20948模块特性 ICM20948是由InvenSense公司生产的高性能九轴MEMS惯性测量单元(IMU),它不仅包含了三个方向上的角速率感应器(即陀螺仪),还具备三个维度线性加速度感知能力,另外更增加了磁力计部分使得其成为一款真正的多合一型产品。相比起传统的六自由度器件而言,这种组合提供了更加全面的空间位置信息描述手段。 由于采用了先进的制造工艺技术设计思路,这款IMU具有功耗低、精度高、响应速度快等特点;同时支持多种通信协议如SPI或I²C总线方式来进行数据交换工作。因此非常适合应用于智能手机平板电脑等移动终端设备内部作为导航定位系统的组成部分之一[^2]。 ### 应用实例展示 为了更好地理解这两个组件的实际应用场景,下面给出一段简单的Python代码片段用来模拟从这两种不同型号的IMUs读取原始传感数值的过程: ```python import smbus # 导入smbus库用于I2C通讯 from time import sleep class IMUSensor(): def __init__(self,address): self.bus=smbus.SMBus(1) self.address=address def read_raw_data(self,reg): high=self.bus.read_byte_data(self.address, reg) low=self.bus.read_byte_data(self.address, reg+1) value=(high << 8)|low if(value>32768): value=value-65536 return value if __name__=='__main__': mpu_addr=0x68 # MPU6500默认地址 icm_addr=0x6B # ICM20948默认地址 sensor_mpu=IMUSensor(mpu_addr) sensor_icm=IMUSensor(icm_addr) while True: acc_x_mpu=sensor_mpu.read_raw_data(0x3B)/16384.0 gyro_z_icm=sensor_icm.read_raw_data(0x43)/131.0 print(f'MPU Acc X:{acc_x_mpu:.2f}g\tICM Gyro Z:{gyro_z_icm:.2f}°/s') sleep(.5) ``` 这段代码展示了如何初始化两个不同的IMU对象,并周期性的打印出由它们各自测得的部分物理量值。需要注意的是实际使用时还需要考虑更多细节比如寄存器设置等问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值