本帖最后由 duanchengjie325 于 2025-5-22 14:32 编辑
#申请原创# #技术资源#
SDF(Sigma-Delta Modulation Filter Module)是一种用于信号处理的模块,常见于数字信号处理器(DSP)和一些微控制器中。SDF的主要功能是将模拟信号转换为数字信号,并对其进行滤波,以提高信号的质量和精度。以下是SDF功能的详细使用介绍:
1. SDF的基本原理
SDF通过Sigma-Delta调制技术,将输入的模拟信号转换为脉冲密度调制(PDM)信号,这种信号在时间上通过脉冲的宽度表示模拟信号的幅度。然后,SDF模块会对这些PDM信号进行滤波,以提取出有用的数字信号。
2. SDF的主要组成部分
调制器:负责将模拟信号转化为PDM信号。
滤波器:用于过滤掉高频噪声,保留低频信号。
采样率控制:调整输入信号的采样频率,以适应不同的应用需求。
3. SDF的使用步骤
配置SDF模块:
设置输入信号的参数,如输入通道、增益等。
配置SDF的滤波器参数,包括截止频率和滤波类型。
启动SDF:
启动SDF模块,开始接收模拟信号。
确保系统时钟和采样频率相匹配,以避免信号失真。
读取输出数据:
从SDF中读取经过滤波的数字信号。
处理这些数字信号,进行进一步的分析或存储。
调试与优化:
根据需要调整滤波器参数,以获得最佳的信号质量。
监测输出信号,以识别潜在的问题并进行修正。
G32 R501包含4 条Σ-Δ滤波器模块(SDF)输入通道(每条通道 2 个并联滤波器)
SDF功能包括:
每个SDF模块有8个外部引脚
每个SDF模块4个sigma delta 数据输入引脚(SD-Dx,其中x = 1到4)
每个SDF 模块4个sigma delta 时钟输入引脚(SD-Cx,其中 x = 1 到 4)
4 种不同的可配置调制器时钟模式:
模式 0:调制器时钟速率等于调制器数据速率
模式 1:调制器时钟速率以调制器数据速率的一半运行
模式 2:调制器数据是曼彻斯特编码.不需要调制器时钟
模式 3:调制器时钟速率是调制器数据速率的两倍
每个SDF模块4个独立的可配置比较器单元:
4种不同的滤波器类型选择(Sinc1 / Sinc2 / Sincfast / Sinc3)选项能够检测过高和低值条件
比较器的OSR值可从 1到32编程
每个SDF模块4个独立的可配置 sinc 滤波器单元:
4 种不同的滤波器类型选择(Sinc1 / Sinc2 / Sincfast / Sinc3)选项
滤波器单元的 OSR 值可编程为1至256
能够启用/禁用单个滤波器模块
能够使用主机滤波器使能(MFE)位(或)使用PWM信号同步SDF模块的所有4个独立滤波器.
数据滤波器输出可以用 16 位(或)32 位表示
PWM 可用于为Σ-Δ调制器生成调制器时钟
4.高电气隔离电机驱动电流采样方案简介
SDF与隔离式 Σ-Δ 调制器配合使用时,可实现电隔离
硬件配置:
AD7403/AMC1305M25 与 G32 R501 协同工作,接口处需完成以下硬件配置,简略图如下所示:
1. AD7403/AMC1305M25 数字端 DVDD 使用外部 5V。评估板提供隔离电源设计,模拟检测端供电 AVDD 由评估板自带隔离电源提供[1]。
2. AD7403/AMC1305M25 需要一路数据时钟 fdata 频率范围 5MHz ~ 20.1MHz(CLK_IN)。该时钟可以使用 G32R501 PWM 模块产生。本测试选择使用 GPIO4/PWM3A。
3.G32R501 SDF 在进行数据采样时需要数据时钟 SDx_Cx 和数据流 SDx_Dx。由于 G32R501 会在时钟上升或下降沿沿采集数据,尽可能保证 DOUT 与 CLK_RETURN 在靠 AMC1305M25 芯片引脚处,这样返回主控的数据和时钟延迟相同。本次此时使用 G32R501 的 GPIO16 与 GPIO17,作为调制器的数据与时钟输入。
4. AD7403/AMC1305M25 数据输出 DOUT 链接 SDF 模块的 SDx_Dx 引脚,提供数据源。
软件配置:
Geehy在 G32R501_SDK_DEV软件开发包中提供 G32R501 SDF 模块开发示例代码,请参考安装路径下:
G32R5xx_SDK_V1.0.0\driverlib\g32r501\examples\eval\sdf\sdf_ex3_filter_sync_dmaread
GPIO配置如下:(详见附件)
void configureSDFPins(void)
默认示例代码无法工作,需要完成 PWM 模块配置与 SDF 模块配置后,AD7403/AMC1305M25 与 G32R501最小系统才能工作。
配置步骤如下:
1. G32R501可以使用 PWM 模块产生 AD7403/AMC1305M25 需要的时钟信号。
在本次示例中时钟配置如下所示,使PWM1A(GPIO0)模块,PWMCLK 经过分频后为 100MHz,计数模式了 UP_DOWN,最终 GPIO1 输出时钟为 10MHz。 PWM时钟配置如下:(详见附件)
void delta_sigma_clock_init(void)
2.配置 SIGMA-DELTA 滤波器
G32R501库中提供 SDF_configureData_filter()函数直接对 SDF 的滤波器类型,过采样率,输出数据位长进行配置。在接下来的输入短路噪声测试中,主要修改滤波器类型为 SINC1, SINC2, SINC3;过采样率为 OSR=64, OSR=128 与 OSR=256。
根据实际应用情况,我们需单独进行配置:
AD7403/AMC1305M25 检测电压与 G32R501数字表达关系
根据规格书可知,AMC1305M25 的输入范围为正负 312.5mV,当输入达到 312.5mV,输出为近乎100% “1”码流;当输入位-312.5mV,输出为近乎 100% “0”码流。另外,根据 G32R501的规格书,可以得知:SDF 模块支持两种数据格式,第一种为 32 位二进制有符号补码;第二种为有符号 16 位二进制有符号补码,在 SINC3 滤波器模式下,由于数据位宽过大,如果使用 16 位表示数据,最终数据需要进行移位处理。不正确的移位和换算都会导致最终数字量结果和模拟量输入幅值不匹配。本测试将以 SINC3 滤波器为例,采用16 位数据格式计算输入电压的方法,并对数据进行移位。
不同滤波器阶数和过采样率组合下 SDF 输出范围
1、电流采样
电流采样滤波器配置代码: SDF_configDataFilter(SDFInstance, (SDF_FILTER_2 | SDF_FILTER_SINC_3 | SDF_SET_OSR(64)), (SDF_DATA_FORMAT_16_BIT | SDF_FILTER_ENABLE | SDF_SHIFT_VALUE(0x0003))); 其中滤波器输出结果数据加符号共19位,设置右移3位并存放于16位的寄存器中。 电流采样换算代码 AD7403: AD7403芯片的量程为+-320mv,其经过20mΩ的采样电阻采样可以得到其电流量程为+-16A,因此可以得到下述的代码。 current_chg.iu = (float32)-motor.u_current*16/32768; AMC1305M25: AMC1305M25芯片的标准为250mv时输出90%的占空比,-250mv时输出10%,因此,其电压量程应为312.5mv,因此其电流量程为15.625A。 current_chg.iu = (float32)-motor.u_current*15.6/32768; 2、母线电压采样 母线采样滤波器配置代码: SDF_configDataFilter(SDFInstance, (SDF_FILTER_3 | SDF_FILTER_SINC_3 | SDF_SET_OSR(128)), (SDF_DATA_FORMAT_16_BIT | SDF_FILTER_ENABLE | SDF_SHIFT_VALUE(0x0006))); 其中滤波器输出结果数据加符号共22位,设置右移6位并存放于16位的寄存器中。 母线电压采样换算: 根据采样的量程,可以算出我们的电路满量程应该为1266v左右,换算成系数为0.0386。同时在硬件上通过程序测量偏置值,得到换算代码如下: DMA配置: SDF采样到的结果,直接搬入DMA中,由于SDF和DMA转换速度较快,在电机控制中可以忽略采样点滞后的影响(参考资料1/2),按随用随取即可. 实际测试硬件: AD7403采样电路 电平转换电路 5.测试结果: 绿色为电流钳、红色为SDF结果 附件:参考C语言代码
|