最近使用一款∑∆调制器配合Stm32H743单片机DFSDM外设采集相电流信号但是发现网上基本没有相关的帖子自己摸索的过程中也走了很多弯路这里记录一下也希望能帮助到后面的人参考文档使用DFSDM模拟看门狗做过流保护以及封波应用 - ST MCU(35 封私信 / 70 条消息) 工程师笔记|DFSDM 时钟配置问题 - 知乎Getting started with sigma-delta digital interface on applicable STM32 microcontrollers - Application note【实战经验】STM32 DFSDM测量温度应用 - 资料馆 - 论坛-意法半导体STM32/STM8技术社区DFSDM外设介绍DFSDM嵌入式滤波器 具有一组可配置参数可以调整输出分辨率和数据速率满足应用要求。DFSDM具有其他与ADC相关的功能包括• 每个通道上的独立快速看门狗具有可编程速度和分辨率可检测超过最小或最大允许 电压电平的输入信号。• 刹车信号生成用于即时向其他外设定时器报告模拟看门狗或短路检测等事件。• 每个通道上的短路检测器可以非常快速地检测信号钳位当输入电压达到其中一个模拟量程限制并在超过给定的持续时间内保持稳定时独立于主转换。• 极值检测器将记录的最小值和最大值存储到极值寄存器中。通过读取这些极值寄存器可以在一段时间内监控转换信号的最大和最小电平。每一次读取极值寄存器 时都会使用复位值对其进行重新初始化并重新启动极值检测。串行收发器”模块接收来自外部∑∆调制器的串行数据。它采用SPI和曼彻斯特串行协 议格式同时具有可配置的上升/下降采样时钟沿可支持大多数∑∆调制器类型。它还 支持数字麦克风使用的PDM信号格式 而并行收发器则用于接受单片机自身ADC模块转换后的数据最多不超过16位此时相当于一个不负责采集只负责滤波的协处理器数字滤波器是处理输入数据的关键组件。可配置的数字滤波器用于支持最终应用需求速度、分辨率。可以配置下列参数• 滤波阶数Sinc1 ... Sinc5FastSinc “滑动平均”计算可以多次应用于已经取得平均值的样本。滤波阶数定义“滑动平均”计算应用于相同输入样本的次数。高阶滤波器通过添加更多的取平均值循环产生更高的分辨率但又增加了延迟。• 过采样率 FOSR 1 ... 1024对于Sinc1 ... Sinc3FastSinc、FOSR 1 ... 215对于Sinc4、FOSR 1 ... 73对于Sinc5上述FOSR范围考虑了滤波阶数和滤波器内部分辨率32位宽以避免溢出在1位输入 信号的情况下对于多位并行输入信号范围减小。较长的滤波器对较多样本取平均值会产生更高的分辨率但会降低输出数据速率抽取。因此滤波器长度是所需转换速率和最终数据分辨率之间的折衷结果。获取数据DFSDM和外部调制器分为SPI通讯一根数据线一根时钟线通讯速率最高20MHZ和曼彻斯特编码数据输入格式操作 数据流仅通过 DATINy 引脚通讯速率最高10MHZ获取到数据后需要对数据进行处理芯片的数据手册中给了DFSDM外设的滤波器输出值范围虽然DFSDM最高支持24位有效数据有符号数据类型最高位为符号位但是我们获取到的24位DFSDM数据有时候只有低n位有用可以理解为DFSDM的24位数据宽度是一个容器而DFSDM经过滤波器和积分器滞后的输出分辨率决定了这个容器里实际有效数据的位宽和对齐方式同时外部Σ-Δ调制器输出的数据格式也会对其有限制例如根据下图假设DFSDM的积分器IOSR1滤波器FOSR128滤波器选择sinc3型滤波器阶数为3那么最终数据数据范围在-2097152也就是22位数据位宽那我们就可以将24位的低22位作为有效数据需要注意的是DFSDM的数据寄存器为32位而24位DFSDM数据是32寄存器的高24位因此实际使用时 current_ib (int32_t)(ib 8); //根据芯片手册DFSDM数据寄存器高24位为数据位因此这里8移位后的24位数据中只有低22位数据为有效数据转换时间计算∑∆调制DFSDM外设需要一个外部模拟前端用于执行模拟信号源的A/D转换。该外部模数转换在∑∆调制器中执行。 ∑∆调制器包含1位(b)A/D转换器后者将输入模拟数据进行数字化处理转换为串行数字数据流。对模拟输入进行采样并将其转换为具有交替的0和1的1位数字数据流。在给定时间间隔期间计算的数字流的平均值表示在相同时间间隔期间输入模拟信号的平均值。 ∑∆调制原理可以表示为特殊的PWM调制其中周期和占空比都将进行调制典型的PWM调制方式是周期固定只对占空比进行调制。优点1、噪声整形∑∆调制将量化噪声更均匀地传导至更高频率这一效果被称为“噪声整形”。此特性可 用于设计更简单的滤波器形成较少噪声的基带信号。原理是PWM调制信号的特征在于具有固定周期和可变占空比。由于具有固定的调制周期或频 率PWM频谱显示出与调制基频及其谐波对应的典型能量峰值。模拟滤波RC或LC滤波 器较难以去除这些谐波峰值。 ∑∆调制使用可变占空比和可变频率。如此一来∑∆频谱上的能量更均匀地扩散而不 会如同PWM无固定的调制频率一般集中出现在规则间隔的峰值上。此外与PWM相比 ∑∆调制通常在高频时具有更高能量因为调制频率更高。模拟滤波RC或LC滤波器 可以轻松去除∑∆调制的噪声内容。2、∑∆调制A/D转换的线性度比其他类型的A/D转换要更好3、可扩展的ADC分辨率∑∆转换的最终输出分辨率并非固定如12位SAR ADC的示例所示。∑∆调制器的输出 分辨率是1位通过跟随数字滤波取平均值至所需分辨率即可增加分辨率。此分辨率增加方法的缺点在于降低了输出数据速率。数据速率的降低情况是可预测的必须 针对给定的应用要求进行计算。例如可以针对1 kHz输出数据速率将数字滤波器配置为 24位输出或者针对50 kHz输出数据速率将数字滤波器配置为16位输出。缺点1、偏移和增益误差2、低数据率 借助∑∆调制器来提高分辨率的方法是增加1位数据流的平均值更长的取平均时间或 更高的滤波阶数。因此∑∆转换器主要用于较低数据速率的应用通常用于音频范围 和较低频率。但在要求具有出色线性的特殊情况下∑∆转换器可用于较高数据速率的应用实际应用使用NSI1306采集电流采样电阻的差分电压NSI1306 是一款高性能的Σ-Δ调制器基于诺维森斯电容隔离技术实现了输出与输入的隔离。该器件具有±50mV±64mV满量程或±250mV±320mV满量程的线性差分输入信号范围。差分输入非常适合需要隔离的高压应用中的基于分流电阻的电流检测。模拟输入被放大并由二阶Σ-Δ调制器连续采样然后转换为高速单比特数据流。输出数据与外部时钟同步频率范围从5MHz到21MHz。通过使用适当的数字滤波器如sinc3滤波器对位流进行抽取该器件可以在20MHz主时钟下以78.125kSPS实现16位分辨率和86dB/82.5dB的信噪比。故障安全功能包括输入共模过压检测和AVDD缺失检测简化了系统级设计和诊断。这里输入电压最大为-320mV则采样电阻的选取应该小于 320mV/最大三相过流电流当采样电阻为0.025欧姆时最大三相过流电流为 320mV/25mΩ 12.8A由于推荐的输入电压范围为-250mV则采样电阻为0.025欧姆时额定工况下三相电流最大值为 250mV/25mΩ 10.0A这里由于我们使用外部的sigma-delta调制器因此我们需要选择DFSDM的串行收发器来作为数据接收通讯模式为SPI模式DFSDM输出外部串行时钟频率我们根据前面调制器手册的推荐值选择20MHZH750 DFSDM的SPI输出时钟最大也就20MHZ但是发现有一路数据受干扰较严重换成10MHZ输出时钟就正常了因此最后选择10MHZ输出外部串行时钟频率。这里由于DFSDM的内部时钟为120MHZ因此这里选择12分频Divider 12FOSR 和IOSR共同影响DFSDM的滤波器过采样率抽取率也就是FOSR * IOSR当抽取率不高时一般我们设置IOSR为1然后只通过FOSR来对抽取率进行设置这里我们选择128这里滤波器选择sinc3型滤波器阶数为3结合前面芯片的数据手册中给了DFSDM外设的滤波器输出值范围来理解滤波器输出数据范围为-2,097,15222位数据位宽由于DFSDM的数据是有符号类型因此最高位为符号位剩下21位为绝对值数据由于DFSDM最大能输出24位数据因此这里不需要右移直接使用DFSDM输出24位中的低22位作为输出数据数据是左对齐到 32 位高 24 位是真正的 24-bit 结果低 8 位是保留/标志/通道号。因此通过HAL_DFSDM_FilterRegularStart_DMA(hdfsdm1_filter0, ib, 1)获取数据后需要右移八位current_ib (int32_t)(ib 8); //根据芯片手册DFSDM数据寄存器高24位为数据位因此这里8由于前面我们配置的参数为IOSR 1FOSR 128滤波器选择sinc3型滤波器阶数为3根据前面的查表或者位宽计算公式可以得到滤波器输出数据范围为-2,097,15222位数据位宽因此DFSDM 的24位数据中滤波器输出值只有24位中的低22位这22位数据的最高位为符号位而根据前面调制器的输入电压最大320mV采样电阻25mΩ则最大采样电流-12.8A即我们获取到的DFSDM 的24位数据为绝对值为2,097,152时采到的绝对值电流为12.8A比特流100%高时间对应DFSDM数据2,097,1520%高时间对应DFSDM数据-2,097,152那么1A电流对应数据163,840DFSDM 的数据值对应电流的比例系数就是1/163840根据调制器数据手册中说明的16位有效数据这里也可以取DFSDM输出24位中的低22位中的高16位数据也就是直接将输出24位数据的低6位0以消除掉那些无效微小噪声比例系数不变