#sensor #embedded-hal-driver #temperature-sensor #angle-meter #hall-sensor

无需std tmag5170

适用于与TMAG5170-Q1(3D霍尔传感器)交互的平台无关的驱动程序

2个版本

0.1.1 2021年6月13日
0.1.0 2021年6月13日

#1765嵌入式开发

MIT/Apache

69KB
574 代码行

适用于TMAG5170-Q1 3D霍尔传感器的平台无关的Rust驱动程序

TMAG5170-Q1是一种针对汽车和工业应用的3轴线性霍尔效应传感器。该设备在X、Y和Z轴集成了3个独立的霍尔传感器。一个高精度的模拟信号链路和集成的12位ADC将测量的模拟磁场值数字化。SPI接口可以被外部微控制器用来配置设备、启动转换或读取设备寄存器数据。芯片上集成的温度传感器数据可用于多个系统功能,例如安全检查和给定磁场测量的温度补偿。

设备

https://www.ti.com/product/TMAG5170-Q1

用法

将此驱动程序包含到您的Cargo.toml中

[dependencies]
tmag5170 = "<version>"

使用嵌入式-hal实现来获取SPI和用于芯片选择的GPIO OutputPin,然后创建磁力计句柄。以下是驱动程序的基本用法。

use tmag5170::{self, ExtError, device_config, sensor_config, system_config, alert_config};

...
  let mut tmag5170 = tmag5170::Tmag5170::new(spi, cs);

  let config = sensor_config::SensorConfig::new()
      .set_angle_en(sensor_config::AngleEn::Xy)
      .set_sleep_time(sensor_config::SleepTime::Ms500)
      .set_mag_ch_en(sensor_config::MagChEn::Xyz)
      .set_z_range(sensor_config::Range::A1_100mT_A2_300mT)
      .set_y_range(sensor_config::Range::A1_100mT_A2_300mT)
      .set_x_range(sensor_config::Range::A1_100mT_A2_300mT);
  let _ = tmag5170.apply_sensor_config(config);


  let config = system_config::SystemConfig::new()
      .set_diag_sel(system_config::DiagSel::AllDataInSeq)
      .set_trigger_mode(system_config::TriggerMode::Spi)
      .set_data_type(system_config::DataType::AM)
      .set_diag_sel(system_config::DiagSel::AllDataInSeq)
      .set_diag_en(false)
      .set_t_z_limit_check(false)
      .set_t_y_limit_check(false)
      .set_t_x_limit_check(false);
  let _ = tmag5170.apply_system_config(config);

  let config = alert_config::AlertConfig::new()
      .set_alert_latch(alert_config::AlertLatch::NotLatched)
      .set_alert_mode(alert_config::AlertMode::Interrupt)
      .set_rslt_alrt_enable(true);
  let _ = tmag5170.apply_alert_config(config);

  let config = device_config::DeviceConfig::new()
      .set_conv_avg(device_config::ConvAvg::Avg32x)
      .set_mag_tempco(device_config::MagTempco::NdBFe)
      // WakeupAndSleep doesn't work in pre-release device
      .set_operating_mode(device_config::OperatingMode::Active)
      .set_t_en(true)
      .set_t_rate(device_config::TRate::OncePerConvSet)
      .set_t_limit_check_en(false)
      .set_t_comp_en(true);
  let _ = tmag5170.apply_device_config(config);

  let res = tmag5170.read_am();

  match res {
      Err(ext) => 
          match ext {
              ExtError::CrcError => rprintln!("Crc Error"),
              ExtError::E(_e) => rprintln!("SPI Error"),
          },
          Ok((a,m)) => rprintln!("Angle {:3} deg, magnitude {}", a / 8, m),
  }

依赖项

要使用此模板构建嵌入式程序,您需要

  • Rust 1.31,1.30-beta,nightly-2018-09-13或更新的工具链。例如 rustup default beta

许可协议

此模板根据您选择之一许可

贡献

除非您明确表示,否则您有意提交的任何贡献,根据Apache-2.0许可证定义,将根据上述条款双许可,不附加任何额外条款或条件。

行为准则

此crate的贡献根据 Rust行为准则 组织,此crate的维护者、Cortex-M团队 承诺将介入以维护该行为准则。

限制

目前,CRC4表存储在每个tmag5170实例中。在系统中只有tmag5170的情况下,这不应该成为问题

依赖项

~84KB