回答

收藏

[评测分享] 【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】3、SDM对Σ-Δ调制器输出数据采样

#板卡评测 #板卡评测 574 人阅读 | 0 人回复 | 2025-07-08

一、引言
SDM(Sigma-Delta Modulator)是Σ?信号接收单元(Σ?Modulator)。
Σ-Δ电流采样优点是容易实现模拟隔离采样:主回路的开关噪声对控制电路干扰大,会影响系统稳定性和控制精度,隔离Σ-Δ采样可以实现控制与主回路隔离。隔离Σ-Δ转换器是采用脉冲输出方式传输信号,通过数字隔离芯片的原理实现隔离,较模拟隔离成本低而且失真小。

HPM5E00提供SDM模块具有以下特点:
信号输入接口:
  - 4组独立的CLK和DAT信号输入
  - 每组CLK/DAT可独立配置采样模式
  - 支持多种采样模式:
    - Mode 0: MCLK上升沿采样
    - Mode 1: MCLK上升沿和下降沿采样
    - Mode 2: Manchester编码模式
    - Mode 3: MCLK下降沿采样
    - Mode 4: 每2个MCLK上升沿采样
    - Mode 5: 每2个MCLK下降沿采样

- 数据滤波器(PCM_CIC):

  - 支持4种滤波器类型:

    - Sinc1 (1阶)
    - Sinc2 (2阶)
    - Sinc3 (3阶)
    - SincFast (2阶快速)

  - 可配置过采样率(1-256)
  - 内置16深度32bit宽度FIFO
  - 支持同步采样
  - 支持掩码控制(指定版本)
  - 可选时间戳输出功能(指定版本)

- 幅值检测器(AMP_CIC):

  - 同样支持4种滤波器类型
  - 独立的幅值监测通道
  - 支持高/低门限检测
  - 支持过零检测
  - 可配置过采样率(1-32)
  - 实时幅值输出

- 中断支持:

  - FIFO阈值中断
  - 数据溢出中断
  - 数据饱和中断
  - 幅值超限中断

- 同步功能:

  - 支持TRGMUX触发输入
  - 支持TRGMUX触发输出



二、硬件连接

开发板上已经集成了NSI1306。NSI1306是一款高性能Σ-Δ调制器,基于NOVOSENSE电容隔离技术,其输出与输入分离。该器件的线性差分输入信号范围为±50mV(满量程±64mV)或±250mV范围(满量程±320mV)。差分输入非常适合需要隔离的高压应用中基于分流电阻的电流检测。模拟输入经过放大,并由二阶Σ-Δ调制器连续采样,然后转换为高速,单比特数据流。输出数据与外部时钟同步,时钟上升沿有效,频率范围为5MHz至21MHz。通过使用适当的数字滤波器(例如sinc3滤波器)来抽取比特流,该器件可以在78.125KPS的条件下以20MHz的主时钟实现16位分辨率和86dB/82.5dB信噪比(SNR)。故障安全功能包括输入共模过压检测和VDD1缺失检测,简化了系统设计和诊断。


NSI1306管脚图

在CLKIN上升沿时通过DOUT采集数据


开发板原理图SDM连接图


SDM使用了PF16、PF17管脚


为了进行实验,外部接入如下分压电路,用于测量电池分压后的结果


三、软件部分


SDK示例中提供了四种工作模式演示:1. 轮询模式采样;2. 幅值检测模式;3. 中断模式采样;4. 同步信号采样模式
下面主要解读轮询模式采样模式。


(1) SDM 模块初始化
  1. sdm_get_default_module_control(TEST_SDM, &control);
  2. sdm_init_module(TEST_SDM, &control);
复制代码


初始化 SDM 模块,配置时钟同步、数据同步。
(2) 通道配置
  1. ch_config.sampling_mode = sdm_sampling_rising_clk_edge;
  2. ch_config.enable_err_interrupt = false;
  3. ch_config.enable_data_ready_interrupt = false;
  4. sdm_config_channel_common_setting(TEST_SDM, TEST_SDM_CHANNEL, &ch_config);
复制代码


采样模式:在时钟上升沿采样(与 NSI1306 的 Σ-Δ 输出同步)。
中断配置:禁用错误中断和数据就绪中断(使用轮询模式)。
(3) 数字滤波器配置
  1. filter_config.filter_type = sdm_filter_sinc3;
  2. filter_config.oversampling_rate = 256;
  3. filter_config.ignore_invalid_samples = 2;
  4. sdm_config_channel_filter(TEST_SDM, TEST_SDM_CHANNEL, &filter_config);
复制代码


滤波器类型:Sinc? 滤波器(适合 Σ-Δ 调制器,抑制高频噪声)。
过采样率 (OSR):256(提高分辨率,但降低带宽)。
无效样本忽略:跳过前 2 个样本(避免初始不稳定数据)。
(4) 数据采集与转换
  1. do {
  2.     stat = sdm_receive_filter_data(TEST_SDM, TEST_SDM_CHANNEL, true, (int8_t *)filter_result, TEST_DATA_COUNT, 4U);
  3. } while (stat != status_success);

  4. double voltage = sdm_data_value_to_voltage(&filter_config, filter_result[i]);
复制代码


轮询数据:从 FIFO 读取 32 位滤波后的数据(filter_result 为缓冲区)。
电压转换:将原始数据转换为实际电压值。


四、运行效果

串口输出采集结果:

采集结果约为14.74mV
根据分压可以算出电池电压:1010*14.74/10=1488.74mV≈1.49V



分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

2735 积分
4 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条