#加速度计 #磁力计 #嵌入式HAL驱动程序 #MEMS #低功耗 #传感器

无需std lsm303agr

适用于LSM303AGR超紧凑高性能电子罗盘模块的平台无关Rust驱动程序:超低功耗3D加速度计和3D磁力计

8个版本 (2个稳定版)

1.1.0 2024年6月24日
1.0.0 2024年1月22日
0.3.0 2023年7月17日
0.2.2 2021年9月21日
0.1.0 2020年9月13日

#191 in 嵌入式开发

Download history 140/week @ 2024-04-27 134/week @ 2024-05-04 125/week @ 2024-05-11 157/week @ 2024-05-18 796/week @ 2024-05-25 250/week @ 2024-06-01 155/week @ 2024-06-08 129/week @ 2024-06-15 399/week @ 2024-06-22 171/week @ 2024-06-29 143/week @ 2024-07-06 124/week @ 2024-07-13 128/week @ 2024-07-20 176/week @ 2024-07-27 115/week @ 2024-08-03 138/week @ 2024-08-10

每月587次下载
2个crate中使用(通过microbit-bsp

MIT/Apache

83KB
2K SLoC

Rust LSM303AGR 超低功耗 3D 加速度计和 3D 磁力计驱动程序

crates.io Docs Minimum Supported Rust Version Build Status Coverage Status

这是一个适用于LSM303AGR超紧凑高性能电子罗盘模块的平台无关Rust驱动程序:使用embedded-hal特性实现超低功耗3D加速度计和3D磁力计。如果启用了async特性,此驱动程序还支持embedded-hal-async特性。

此驱动程序允许您

  • 通过I2C或SPI连接。见:new_with_i2c()
  • 初始化设备。见:init()
  • 加速度计
    • 读取测量的加速度。见:acceleration()
    • 获取加速度计状态。见:accel_status()
    • 设置加速度计模式和输出数据率。见:set_accel_mode_and_odr()
    • 设置加速度计量程。见:set_accel_scale()
    • 获取加速度计ID。见:accelerometer_id()
    • 获取温度传感器状态。见:temperature_status()
    • 读取测量的温度。见:temperature()
    • 配置FIFO。见:acc_set_fifo_mode()
    • 启用/禁用中断。见:acc_enable_interrupt()
  • 磁力计
    • 获取磁力计状态。参见:mag_status()
    • 切换为连续/单次模式。参见:into_mag_continuous()
    • 读取测量的磁场。参见:magnetic_field()
    • 设置磁力计模式和输出数据速率。参见:set_mag_mode_and_odr()
    • 获取磁力计ID。参见:magnetometer_id()
    • 启用/禁用磁力计内置偏移消除。参见:enable_mag_offset_cancellation()
    • 启用/禁用磁力计低通滤波器。参见:mag_enable_low_pass_filter()

LSM303AGR是一款超低功耗高性能系统级封装,内置3D数字线性加速度传感器和3D数字磁力传感器。LSM303AGR具有±2g/±4g/±8g/±16g的线性加速度全量程和±50高斯磁场动态范围。

LSM303AGR包括支持标准、快速模式、快速模式+和高速(100 kHz、400 kHz、1 MHz和3.4 MHz)的I2C串行总线接口以及SPI串行标准接口。

系统可以配置为生成自由下落、运动检测和磁场检测的中断信号。

可以分别启用或关闭磁场和加速度计模块的电源管理模式。

文档:数据表 - 应用笔记

用法

要使用此驱动程序,导入此crate和embedded_hal实现,然后实例化设备。

请在此存储库中查找使用硬件的附加示例:driver-examples

use linux_embedded_hal::{Delay, I2cdev};
use lsm303agr::{AccelMode, AccelOutputDataRate, Lsm303agr};

fn main() {
    let dev = I2cdev::new("/dev/i2c-1").unwrap();
    let mut sensor = Lsm303agr::new_with_i2c(dev);
    sensor.init().unwrap();
    sensor
        .set_accel_mode_and_odr(&mut Delay, AccelMode::Normal, AccelOutputDataRate::Hz50)
        .unwrap();
    loop {
        if sensor.accel_status().unwrap().xyz_new_data() {
            let data = sensor.acceleration().unwrap();
            println!(
                "Acceleration: x {} y {} z {}",
                data.x_mg(),
                data.y_mg(),
                data.z_mg()
            );
        }
    }
}

有关在micro:bit V2上使用此驱动程序的异步支持的示例,请参阅microbit-v2示例

支持

有关问题、问题、功能请求和其他更改,请提交github项目中的问题

许可

许可方式如下:

任选其一。

贡献

除非您明确声明,否则您提交的任何有意提交以包含在本作品中并由Apache-2.0许可定义的任何贡献,均应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~1.5MB
~40K SLoC