1 个不稳定版本
0.1.0 | 2020年10月19日 |
---|
#1395 在 嵌入式开发
43KB
797 代码行
drogue-mpu-6050
为InvenSense MPU-6050 运动处理器提供的i2c驱动程序。
高级DMP
此驱动程序可以在芯片上加载基于四元数的DMP处理的适当固件。
设置
i2c
按照常规初始化您的i2c总线
let scl3 = gpioc.pc0.into_open_drain_output(&mut gpioc.moder, &mut gpioc.otyper).into_af4(&mut gpioc.moder, &mut gpioc.afrl);
let sda3 = gpioc.pc1.into_open_drain_output(&mut gpioc.moder, &mut gpioc.otyper).into_af4(&mut gpioc.moder, &mut gpioc.afrl);
let i2c = I2c::i2c3(device.I2C3, (scl3, sda3), KiloHertz(100), clocks, &mut rcc.apb1r1);
MPU驱动程序
MPU驱动程序需要一个具有embedded-time
功能的时钟。
let sensor = Mpu6050::new(i2c, Address::default(), &CLOCK).unwrap();
一旦时钟开始滴答,您就可以操作MPU。为了方便,提供了initialize_dmp()
方法来设置合理的配置并将DMP固件加载到处理器中。
let sensor: &mut Mpu6050<'_, _, _> = ctx.resources.sensor;
sensor.initialize_dmp().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[0..16]).unwrap().normalize();
....
}
四元数也可以转换为Euler
或YawPitchRoll
测量。
依赖关系
~2MB
~34K SLoC