[评测分享]
【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】3、SDM对Σ-Δ调制器输出数据采样
#板卡评测
 
573 人阅读
|
0 人回复
|
2025-07-08 
 
 
 
 
TA的每日心情  | 开心 昨天 13:36 | 
|---|
 
  签到天数: 203 天 连续签到: 3 天 [LV.7]常住居民III 
进士 
 
 
	- 积分
 - 2735
 
 
 
 
 | 
 
 
一、引言 
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 模块初始化 
- sdm_get_default_module_control(TEST_SDM, &control);
 
 - sdm_init_module(TEST_SDM, &control);
 
  复制代码 
 
初始化 SDM 模块,配置时钟同步、数据同步。 
(2) 通道配置 
- ch_config.sampling_mode = sdm_sampling_rising_clk_edge;
 
 - ch_config.enable_err_interrupt = false;
 
 - ch_config.enable_data_ready_interrupt = false;
 
 - sdm_config_channel_common_setting(TEST_SDM, TEST_SDM_CHANNEL, &ch_config);
 
  复制代码 
 
采样模式:在时钟上升沿采样(与 NSI1306 的 Σ-Δ 输出同步)。 
中断配置:禁用错误中断和数据就绪中断(使用轮询模式)。 
(3) 数字滤波器配置 
- filter_config.filter_type = sdm_filter_sinc3;
 
 - filter_config.oversampling_rate = 256;
 
 - filter_config.ignore_invalid_samples = 2;
 
 - sdm_config_channel_filter(TEST_SDM, TEST_SDM_CHANNEL, &filter_config);
 
  复制代码 
 
滤波器类型:Sinc? 滤波器(适合 Σ-Δ 调制器,抑制高频噪声)。 
过采样率 (OSR):256(提高分辨率,但降低带宽)。 
无效样本忽略:跳过前 2 个样本(避免初始不稳定数据)。 
(4) 数据采集与转换 
- do {
 
 -     stat = sdm_receive_filter_data(TEST_SDM, TEST_SDM_CHANNEL, true, (int8_t *)filter_result, TEST_DATA_COUNT, 4U);
 
 - } while (stat != status_success);
 
  
- 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 
 
 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |