STM32
直播中

张国厚

8年用户 1469经验值
私信 关注
[问答]

STM32G474如何实现Buck变换器的COT控制模式?

我想用STM32G474实现恒定导通时间模式控制,如下图所示,我打算使用片上比较器实现VOUT和Vref的比较功能以开通pwm波,但是要如何实现当比较器触发信号长时间大于导通时间时反复进行导通(如图红色方框所示),

回帖(1)

石玉兰

2025-7-15 17:01:37

好的,使用 STM32G474 的 HRTIM 和比较器 COMP 来实现 COT (Constant On-Time) Buck 变换器控制模式,特别是处理比较器输出长时间有效(Vout 低于 Vref 超过 Ton_max)时需要强制重复导通的情况,是一个非常典型的应用场景。G474 的 HRTIM 硬件能力非常适合实现这种需求。


以下是实现的核心思路、关键硬件配置和具体步骤:


核心思路:



  1. 事件驱动导通 (On-Demand Turn-On): 使用比较器 COMP2 比较 Vout 和 Vref。当 Vout < Vref 时,COMP2 输出变高(或低,取决于极性配置),这个上升沿作为 导通触发事件

  2. 固定导通时间 (Ton): 在接收到 COMP2 的触发事件后,HRTIM 立即开启 Buck 的高边开关(例如 TIM A 输出 PWMHx)。同时启动一个计时器(Ton计时器)。这个 Ton 计时器可以通过 HRTIM 内部的比较器或周期匹配事件来实现。

  3. 时间到关断: 当 Ton 计时器达到预设的固定时间 (Ton_fixed) 后,立即关闭 PWMHx。同时启动(或进入)一个最小关断时间保护计时器 (Toff_min timer)。

  4. 处理“反复导通”需求(关键部分):

    • 在关断期间 (Toff_min 内),虽然 Vout 可能仍低于 Vref (COMP2 输出仍有效),但 不能立刻响应新的比较器触发。这就是最小关断时间保护,防止开关频率过高。

    • Toff_min 计时器结束时:

      • 如果此时 COMP2 输出仍然有效(Vout < Vref),说明负载很重或输入电压突降,仅靠常规的事件触发+Ton无法维持电压。此时,系统必须 强制 产生一个新的导通触发事件

      • 如果此时 COMP2 输出无效(Vout >= Vref),则系统处于正常稳态或轻载状态,等待下一次 COMP2 触发的自然发生。


    • 这个“强制触发”操作,本质上是在 Toff_min 结束时刻,主动模拟一个 COMP2 触发信号(即使物理上的 COMP2 输出可能已经有效了很长时间)。

    • HRTIM 在检测到这个“强制触发”信号后,就会立刻开始下一个开关周期:开启 PWMHx 并重新启动 Ton_fixed 计时器。



如何利用 STM32G474 HRTIM 实现上述逻辑(关键硬件配置):


HRTIM 的强大之处在于其事件、触发、门控和状态机逻辑,可以在硬件层面处理大部分 COT 时序需求,包括“反复导通”。




  1. 比较器 COMP2 设置:



    • 连接 Vout (同相端) 和 Vref (反相端)。Vref 可由内部 DAC 或外部 DAC 提供。

    • 配置为快速比较器模式(启用内部补偿电容以提高响应速度)。

    • 配置输出极性,使其在 Vout < Vref 时输出高电平 (或低电平,但要与触发边沿选择匹配)。

    • 将 COMP2 输出连接到 HRTIM 的一个 TRIGGER 输入源(如 TRIG1)。在 STM32CubeMX 或参考手册中寻找 “COMP2 HRTIM TRIGGER” 的路由选项。




  2. HRTIM 设置 - 时间基准 (Timer A for Buck):



    • 模式: 配置为 Burst Mode。在此模式下,通常需要一个外部事件(这里是 COMP2 触发)来启动计时器。当达到峰值条件(我们的 Ton_fixed 设置)时自动停止(复位)。这与 COT 的事件驱动特性完美契合。

    • 主周期 (Period): 设置为一个远超预期最大 Ton 和最大开关周期的值(例如 65535)。HRTIM 实际控制逻辑是由触发和事件驱动的,Period 在此仅作为计数器上限。

    • Ton 固定计时实现:

      • 使用 比较器 (CMPx):设置一个比较寄存器 TIMx_CMP1 = Ton_fixed。配置对应的比较事件 (CMP1) 来触发 ADC Start of Conversion (如果使用 ADC 电流保护)。

      • 使用 周期 (PER) 中断匹配: 配置 TIMx_PER 寄存器为 Ton_fixed。在 Burst Mode 下,计数达到 PER 值也会被视为结束条件。但通常用 CMP 更灵活。

      • 关键链接:TIMx_OUT 寄存器中,配置 FLT[0]FLT[1]FAULT 源为 CMP1 event (或 PER event)。这样,当 Ton_fixed 时间达到时,会触发 Fault 事件。

      • 设置故障动作:TIMx_FLTINx (x=1 或 2, 对应选择的 FAULT 源) 寄存器中,配置故障响应动作 DISACTIONSet output to reset/inactive level (对应高边开关关闭)。这样,Ton 时间一到就关闭开关。


    • 强制状态机复位 (处理反复导通):

      • 使用另一个 Timer (如 Timer E) 作为 Toff_min 计时器。

      • 配置 Toff_min: 设置 Timer E 的 PER 寄存器 = Toff_min

      • 启动 Toff_min: 当 Timer A (Buck Timer) 的 FAULT 事件 (CMP1/PER 事件导致关断) 发生时,使用这个事件 (FAULTx) 作为 Timer E 的 软件更新触发 (SWUPDT) 或计数开始事件 (CONT)。这样,Timer A 关断的同时就启动了 Timer E (Toff_min) 的计时。

      • Timer E Period 结束事件: 配置 Timer E 的 PER 事件 (达到 Toff_min 时间) 作为 HRTIM 的一个 GLOBAL RESET 触发源 (GRSTx)。

      • GRSTx 动作: 关键点来了!配置 GRSTx 源为 Timer E 的 PER 事件。GRST 的作用是 强制 HRTIM 状态机复位

      • 连接 COMP2 状态 (门控): HRTIM 的输入触发可以被门控(Gating)。找到 TRIG1 (COMP2) 输入对应的门控配置 TIMx_TRIG1

      • 使能门控功能: 设置门控源 GATING (例如 GATENG1)。一个合适的门控源可以是另一个 Timer (如 Timer E) 的 PER 事件本身或其反相 (!PER)。配置门控类型 GTYPEEnable

      • 目的: 在 Timer E 运行期间 (Toff_min 内),禁止 TRIG1 (COMP2) 触发 HRTIM。在 Timer E PER 事件结束时 (Toff_min 结束),允许 TRIG1 触发或更重要地,强制状态机复位本身会像检测到一个触发一样开始下一个周期!


    • 动作链 (处理反复导通):

      • Toff_min 结束 (Timer E PER 事件) -> 触发 GRSTx。

      • GRSTx 强制 Timer A (Buck Timer) 状态机复位。

      • 状态机复位后,HRTIM 会立即检查当前有效的触发源。此时:

        • 如果 COMP2 输出依然有效 (Vout < Vref),则在 GRSTx 发生瞬间,TRIG1 输入是有效的。HRTIM 会立即将这个有效电平视为一个等待处理的触发事件! 因此它会立刻响应这个“新”触发,开始新的 Ton 周期(开启 PWMHx,启动 Ton 计时)。

        • 如果 COMP2 输出此时无效 (Vout >= Vref),则复位后的状态机中没有等待的触发事件,HRTIM 保持等待状态,直到下一次 COMP2 有效触发发生。


      • 这样,就实现了在 Toff_min 结束后,只要 Vout 仍然低,就强制开始一个新开关周期的逻辑,解决了反复导通的需求。整个过程是在硬件层面自动完成的。





  3. PWM 输出设置 (TIMx_CHx):



    • 配置选择的 TIMx_CHx (例如 TIMA_CH1) 输出为 PWM mode 1

    • 设置 DTG(死区时间生成器)防止半桥穿通(如果使用外部驱动或同步整流)。

    • 将高边开关输出 PWMH1 连接到你功率级的 MOSFET Gate 驱动。




总结关键配置点以实现“反复导通”:



  1. Toff_min 生成: 使用一个辅助 Timer(如 E)在 Buck Timer 关断事件启动,计时 Toff_min

  2. Toff_min 结束复位状态机: 将辅助 Timer 的 PER 事件连接到 GRSTx 源,用于强制复位 Buck Timer 的状态机。

  3. 门控 COMP2 触发: 使用辅助 Timer (PER 或其反相 !PER) 门控 COMP2 的触发输入 (TRIGx),在 Toff_min 期间屏蔽触发。

  4. 复位与自动响应: GRSTx 复位 Buck Timer 后,由于 COMP2 触发信号(门控已释放)在复位瞬间是有效的(等待状态),状态机会立即将其视为有效触发,从而开启新的 Ton 周期。如果 COMP2 在 Toff_min 结束时无效,状态机则保持等待。


实现步骤:



  1. CubeMX 配置:

    • 启用 HRTIM,配置 Timer A (Burst Mode), Period 很大 (0xFFFF)。

    • 配置 HRTIM COMP1 值 = Ton_fixed,并链接 COMP1 事件到对应 FAULT 输入,设置 FAULT Action 为 Disable Output (关断)。

    • 配置 Timer E (Continuous Mode),设置 Period = Toff_min

    • 设置 Buck Timer 关断事件(FAULTx)触发 Timer E 的 SWUPDT(软件更新,启动计时)或使其开始计数 (CONT)。

    • 设置 Timer E PER 事件连接到 GRSTx 源(选择适当的 GRSTx)。

    • 设置 COMP2 输出连接到 TRIG1 输入。

    • TRIG1 配置门控,启用门控功能,选择 Timer E 的 PER!PER 作为门控源,类型 Enable(当门控源有效时允许触发)。

    • 配置 PWM 通道输出、极性、死区等。

    • 配置 DAC 产生 Vref 或外部连接 Vref。

    • 配置 COMP2(正负输入,输出极性,速度等)。


  2. 初始化代码:

    • HAL_HRTIM_WaveformOutputStart(&hhrtim, HRTIM_OUTPUT_TAx) (启动 Buck PWM 输出)

    • HAL_HRTIM_WaveformCounterStart(&hhrtim, HRTIM_TIMERID_TIMER_A | HRTIM_TIMERID_TIMER_E) (启动 HRTIM 计数)

    • HAL_COMP_Start(&hcomp2) (启动比较器)

    • 根据负载/输入,可能需要动态设置 Ton_fixedVref (DAC)的值,通过修改 TIMx_CMP1xR (Ton_fixed) 或 HAL_DAC_SetValue() (Vref)实现。


  3. 运行时:

    • 主要逻辑在 HRTIM 硬件中自动执行。

    • 软件只需监控系统状态(过压、过流保护需要配置)、处理用户命令(改变 Vref/DAC)、动态调整 Ton_fixed 值等。



重要注意事项:



  • 响应速度: 确保 COMP2 的响应时间和 HRTIM 的触发->输出延迟足够快,以满足系统瞬态响应的要求。

  • 斜率补偿: 对于工作在连续导通模式(CCM)的 D > 50% 的 Buck,COT 可能需要斜率补偿(通常通过向电流检测信号或 COMP2 比较端添加一个小斜坡实现)以防止次谐波振荡。STM32G474 内部资源(如斜坡发生器 DAC)可以辅助实现。

  • 电流限制: 保护电路是必要的。使用 ADC 采样电流或 COMP1 进行峰值电流限制保护,连接到另一个 FAULT 输入并设置立即关断动作。

  • 门控与复位选择: 仔细查阅 HRTIM 手册,理解 GRSTx 行为和 Gating 机制细节,选择正确的触发源、门控源和门控类型。

  • 调试: 使用示波器仔细观测 COMP2_OUT, HRTIM TRIGx, TIMx_CHy, GRSTx, 辅助 Timer TIMER_E_PER 等关键信号,验证状态机转换是否符合预期,特别是“反复导通”部分。


通过合理配置 STM32G474 强大的 HRTIM 资源(特别是 Burst Mode, 触发、门控、GRST 和状态机复位逻辑),可以高效地在硬件层面实现 COT Buck 控制及其所需的“反复导通”特性,减轻 CPU 负担并提高系统响应速度和可靠性。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分