扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

STM32H7 DFSDM 模拟看门狗双功能实现:过流保护与周期封波应用指南

2025/11/20
2102
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

伺服电机控制等工业场景中,常需同时实现过流保护(OC)与周期封波(CBC)功能。STM32H7 系列的 DFSDM(数字滤波器)模块虽自带模拟看门狗,但单独使用仅能实现单一功能。本文基于 Nucleo-H723ZG 开发板,详解 “DFSDM + 双 TIM 外设” 的硬件实现方案,通过双模拟看门狗与信号联动,同时达成过流快速切断与周期封波自恢复,适配电机驱动等高精度控制场景。

资料获取:使用DFSDM模拟看门狗做过流保护以及封波应用

1. 核心原理:DFSDM 与 TIM 的联动逻辑

1.1 基础功能定位

  • DFSDM 模块:接收 Sigma-Delta ADC电流采样信号,经数字滤波后用于电机控制,同时通过模拟看门狗(AWD)监测电流阈值,超限时输出 Break 信号。
  • TIM1:生成 6 路互补 PWM 波驱动电机,支持 Break 信号触发 PWM 关闭,配合 ETR(外部触发输入)实现周期封波。
  • TIM16:作为辅助外设,输出信号接入 TIM1 的 ETR 管脚,配合 DFSDM 的 Break 信号实现 CBC 自恢复功能。

1.2 关键信号关联

  • DFSDM 的 Break [0]:映射至 TIM1 的 BKIN1,作为过流保护(OC)触发信号,超阈值时立即关闭 PWM。
  • DFSDM 的 Break [1]:映射至 TIM16 的 BKIN,作为周期封波(CBC)触发信号,触发后通过 TIM16_CH1 控制 TIM1 的 ETR,实现 PWM 周期性启停。
  • 自恢复机制:TIM1 与 TIM16 均使能 AOE(自动输出使能)功能,Break 信号消失后 PWM 自动恢复输出,无需软件干预。

2. 硬件架构:双 AWD + 双 TIM 实现双功能

2.1 系统框图

电流采样信号(A/B/C三相)→ DFSDM通道0/1/2
                          ↓
              模拟看门狗0(AWD0)→ Break[0] → TIM1 BKIN1(OC功能)
                          ↓
              模拟看门狗1(AWD1)→ Break[1] → TIM16 BKIN
                          ↓
TIM16 CH1(100%占空比PWM)→ TIM1 ETR(CBC功能)
                          ↓
TIM1 → 6路互补PWM输出(驱动电机)

2.2 核心组件作用

  • 双模拟看门狗:AWD0 配置较高阈值(如 ±20000),检测严重过流;AWD1 配置较低阈值(如 ±10000),检测轻微过流或周期性限流。
  • TIM16:工作频率与 TIM1 一致,输出 100% 占空比 PWM,Break 信号触发时输出低电平,通过 ETR 清除 TIM1 计数,实现周期封波。
  • DMA 通道:DFSDM 滤波后的电流数据通过 DMA 传输至 SRAM1(0x30000000),避免 DTCM 区域无法被 DMA1 访问的问题。

3. 分步配置:CubeMX + 程序实现全流程

3.1 CubeMX 基础配置

(1)DFSDM 模块配置

  • 通道配置:启用通道 0/1/2,工作模式设为 “PDM/SPI 输入 + 外部时钟”,配置上升 / 下降沿采样。
  • 滤波器配置:启用 Filter0(用于正常电流滤波)和 Filter1(仅用于 AWD1),Filter0 配置为 FastSinc 类型,注入通道选择通道 0/1/2,触发源设为 TIM1_TRGO。
  • DMA 配置:Filter0 启用注入模式 DMA,关联 DMA1 Stream0,数据方向为 “外设到内存”,模式设为循环模式,数据宽度为 Word。

(2)TIM1 配置

  • PWM 生成:启用 3 对互补通道(CH1/CH1N~CH3/CH3N),死区根据实际需求配置。
  • Break 功能:使能 BKIN1,极性设为高,滤波值设为 0,勾选 “DFSDM Break” 使能。
  • ETR 功能:启用 “ETR 作为清除源”,极性设为反相,通道 1/2/3 均使能清除功能。

(3)TIM16 配置

  • PWM 生成:通道 1 设为 PWM 模式 1,脉冲值设为 10000(100% 占空比),输出极性为高。
  • Break 功能:使能 BKIN,极性设为高,滤波值设为 0,勾选 “DFSDM Break” 使能。
  • 自恢复配置:启用 AOE(自动输出使能)和 OSSI(空闲模式关闭),确保 Break 信号消失后自动恢复输出。

3.2 程序补充配置(模拟看门狗)

CubeMX 不支持模拟看门狗细节配置,需通过寄存器手动初始化,核心代码如下:

(1)AWD0(过流保护)配置

void DFSDM_AWD_Init(void) {
  // 启用快速模式,独立滤波参数
  DFSDM1_Filter0->FLTCR1 |= (1<<30);
  // 配置通道0/1/2共用AWD0
  DFSDM1_Filter0->FLTCR2 |= (0x07<<16);
  // 设置过流阈值(±20000,16位有符号值)
  DFSDM1_Filter0->FLTAWHTR = (20000<<16);
  DFSDM1_Filter0->FLTAWLTR = -(20000<<16);
  // 清除标志位,映射Break[0]到TIM1
  DFSDM1_Filter0->FLTAWCFR = 0xFFFF;
  DFSDM1_Filter0->FLTAWHTR |= 0x01;
  DFSDM1_Filter0->FLTAWLTR |= 0x01;
}

(2)AWD1(周期封波)配置

void DFSDM_AWDCBC_Init(void) {
  DFSDM1_Filter1->FLTCR1 |= (1<<30);
  DFSDM1_Filter1->FLTCR2 |= (0x07<<16);
  // 设置CBC阈值(±10000)
  DFSDM1_Filter1->FLTAWHTR = (10000<<16);
  DFSDM1_Filter1->FLTAWLTR = -(10000<<16);
  DFSDM1_Filter1->FLTAWCFR = 0xFFFF;
  // 映射Break[1]到TIM16
  DFSDM1_Filter1->FLTAWHTR |= 0x02;
  DFSDM1_Filter1->FLTAWLTR |= 0x02;
}

(3)DMA 存储配置

// 定义数组存储电流数据,指定至SRAM1区域
int32_t FLT1_JData[3] __attribute__((section (".sram1")));

// 启动DFSDM注入模式DMA
HAL_DFSDM_FilterInjectedStart_DMA(&hdfsdm1_filter0, FLT1_JData, 3);

4. 功能测试与验证

4.1 测试条件

  • 信号输入:通过 SPI 模拟 Sigma-Delta 电流采样信号,实时调整输入幅值触发不同阈值。
  • 硬件连接:TIM16_CH1(PF6)连接至 TIM1 的 ETR 管脚(PE7),确保信号传输正常。

4.2 波形验证

  • 周期封波(CBC):输入电流超 ±10000 时,TIM1 PWM 周期性启停,波形呈现 “输出 - 关闭 - 恢复” 的循环。
  • 过流保护(OC):输入电流超 ±20000 时,TIM1 PWM 立即关闭,直至电流恢复至阈值内自动重启。
  • 数据读取:通过DFSDM_FLTxAWS寄存器可查询触发 AWD 的通道,便于故障定位。

5. 关键注意事项

  1. 阈值配置:AWD1 的阈值必须小于 AWD0,避免功能冲突,阈值单位需与电流采样精度匹配(16 位有符号范围 ±32767)。
  2. 存储区域:DMA 目标地址需设为 SRAM1(0x30000000),DTCM 区域不支持 DMA1 访问,会导致数据传输失败。
  3. 频率匹配:TIM16 的计数周期需与 TIM1 一致,确保 CBC 功能的周期准确性。
  4. 死区配置:实际应用中需为 TIM1 配置合理死区时间,避免电机驱动桥臂直通。

本方案通过 DFSDM 双模拟看门狗与 TIM1、TIM16 的硬件联动,无需软件中断干预即可同时实现过流保护与周期封波,响应速度快、可靠性高,特别适用于伺服电机、变频器等对电流控制精度要求较高的工业场景。其核心优势在于充分利用 STM32H7 的外设集成能力,简化硬件设计,降低系统延迟。

相关推荐