[评测分享]
【RISC-V 先楫半导体HPM5E00 MCU开发板试用体验】3、SDM对Σ-Δ调制器输出数据采样
#板卡评测
574 人阅读
|
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
|
|
|
|
|
|
|
|
|