3个版本 (重大变更)
0.4.0 | 2024年2月12日 |
---|---|
0.3.0 | 2023年1月30日 |
0.2.0 | 2022年3月2日 |
#370 in 嵌入式开发
每月 33次下载
68KB
1.5K SLoC
mpu6050-dmp
适用于InvenSense MPU-6050运动处理器的平台无关i2c驱动程序。
drogue-mpu-6050的分支
原因/差异
- 移除了对
drogue-embedded-timer
和embedded-time
的依赖- 定时器在常规操作中不是必需的,仅用于设置
- drogue-embedded-timer与分支时的嵌入式-time版本不同步
- 移除了对
log
的依赖 - 四元数到YPR转换存在微小差异(没有
pitch -= PI
) - 对例如clippy lints的各种修复(也提交了PR到上游)
STM32F1的示例项目
STM32F4的示例项目
片上DMP '数字运动处理器'
此驱动程序可以加载基于四元数的片上DMP处理的适当固件。
设置
i2c
初始化您的i2c总线
let gpiob = dp.GPIOB.split();
let scl = gpiob
.pb8
.into_alternate()
.internal_pull_up(true)
.set_open_drain();
let sda = gpiob
.pb9
.into_alternate()
.internal_pull_up(true)
.set_open_drain();
let i2c = dp.I2C1.i2c((scl, sda), 400.kHz(), &clocks);
MPU驱动程序
let sensor = Mpu6050::new(i2c, Address::default()).unwrap();
设置DMP需要暂时独占访问阻塞延迟实现。提供initialize_dmp(&mut delay)
方法来设置合理的配置并将DMP固件加载到处理器中。
sensor.initialize_dmp(&mut delay).unwrap();
如果使用高级片上DMP逻辑,FIFO将包含28字节的四元数和其他数据包。
前16字节是四元数,可以使用Quaternion
类构建。
let len = sensor.get_fifo_count().unwrap();
if len >= 28 {
let buf = sensor.read_fifo(&mut buf).unwrap();
let q = Quaternion::from_bytes(&buf[..16]).unwrap().normalize();
let ypr = YawPitchRoll::from(quat);
rprintln!("{:?}", ypr);
}
依赖项
~465KB