#adc #嵌入式-hal-driver #隔离 #spi-driver #偏移 #校准 #sigma-delta

无需std ade791x

ADE7912/ADE7913 3通道、隔离、Sigma-Delta ADC带SPI的驱动器

4个版本

0.3.4 2023年1月17日
0.3.3 2022年12月16日
0.3.2 2022年12月8日
0.3.1 2022年12月7日

#1528 in 嵌入式开发

每月下载23

MIT/Apache

48KB
693 代码行

Rust ADE791x 3-Channel, Isolated, Sigma-Delta ADC with SPI Driver

crates.io docs.rs github

这是一个适用于ADE7912/ADE7913 3-Channel、隔离、Sigma-Delta ADC带SPI的平台无关Rust驱动器,使用embedded-hal traits。

此驱动器允许您

  • 初始化和配置设备。
  • 执行硬件/软件复位。
  • 关闭/唤醒设备。
  • 从ADC获取原始和转换测量值。
  • 管理在多相计量系统中配置的多个ADC(请参阅poly模块)。

文档

设备

ADE7912/ADE7913是用于使用分流电流传感器的三相电能计量应用的双通道/三通道隔离Σ-Δ ADC。数据和电源隔离基于Analog Devices, Inc.的Coupler®技术。ADE7912具有两个ADC,而ADE7913具有三个ADC。电流ADC在3 kHz信号带宽内提供67 dB的信噪比(SNR),而电压ADC在相同带宽内提供72 dB的SNR。一个通道专门用于在分流用于电流感应时测量分流电压。最多可以有两个额外的通道专门用于测量电压,通常使用电阻分压器感应。一个电压通道可以通过内部传感器测量晶圆的温度。ADE7913包括三个通道:一个电流通道和两个电压通道。ADE7912有一个电压通道,但其他方面与ADE7913相同。

数据表

用法

首先,为了获得正确的读数,ADC需要根据以下步骤进行校准

  1. 将校准偏移量和乘数设置为默认值。
  2. 从ADC中移除任何负载。
  3. 计算偏移量,作为无负载应用时ADC读数的平均值。
  4. 设置计算出的校准偏移量,保留乘数为默认值。
  5. 向ADC施加已知负载。
  6. 通过将已知负载除以施加已知负载时ADC读数的平均值来计算乘数。

以下是从ADC获取读数的两个最小示例,一个是在单相ADC配置中,另一个是在多相多ADC配置中。

单相

use ade791x::*;

// Initialization
let config = Config::default();
let calibration = Calibration::default();
let mut adc = Ade791x::new_ade7912(spi, cs);
adc.init(delay, config, calibration).unwrap();

// Measurement
// Run the following in the DREADY ISR to get measurements as soon as they are ready
let measurement = adc.get_measurement().unwrap();

多相

use ade791x::*;

// Initialization
let config = [
    Config { clkout_en: true, ..Default::default() },
    Config { clkout_en: true, ..Default::default() },
    Config::default()
];
let calibration = [Calibration::default(); 3];
let emi_ctrl = [
    ade791x::EmiCtrl::from(0x55),
    ade791x::EmiCtrl::from(0xAA),
    ade791x::EmiCtrl::from(0x55)
];
let mut adc = poly::Ade791x::new(spi, [
    (cs0, Chip::ADE7912), (cs1, Chip::ADE7913), (cs2, Chip::ADE7912)
]);
adc.init(delay, config, calibration, emi_ctrl).unwrap();

// Synchronization
// Execute the following every couple of seconds to ensure that the ADCs are always in sync
adc.ajust_sync().unwrap();

// Measurement
// Run the following in the DREADY ISR to get measurements as soon as they are ready
let measurement = adc.get_measurement().unwrap();

状态

  • 初始化/配置
  • 硬件/软件重置
  • 关机/唤醒
  • 测量读取
  • 多相管理
  • 测量转换
  • 温度读取
  • 配置检查
  • 单元测试
  • 测量CRC检查

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义提交给作品中的任何贡献,均应双授权如上所述,不附加任何额外条款或条件。

依赖项

~71KB