你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】HRTIMER 多种 Fault 事件联动机制

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言
" w' Y) r6 Y! ~' V; o- ~4 WSTM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。7 d2 _+ Q7 Q3 E/ W

9 R: U7 I7 [* T3 qSTM32F334 的 STM32F334 的输出端管理3 R. ]9 H6 i8 V
下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口1 R9 @. E; O! L0 X
% X' h" l" W9 k; ^" `+ F
5S(~7(N2N1W8II%CVRAI4RR.png & n" |& d7 L' t' Q8 {* O7 U
. m; L3 s/ ^4 @
输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换( w( ?& k3 m# U; N! Z0 k
# y5 s7 y8 t( V
JQXS1$YT(%{RNM5Y7D{WW.png " \# s; M6 E- J: z0 G) z2 d

, P; U2 A" i+ ^  z7 L4 U2 e  [2 K0 h4 M4 b7 V3 s1 b  A
Fault 事件 Fault 事件管理( h$ [4 P( Z- Z6 m
STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;
! ?; B1 G% ^. y. f9 F$ C: A; r
% Q$ z% s/ G' Q: Z& q1 ~
: Z  {8 @0 Y% w* Q* w, |5 @
( k. W3 Q+ B1 }8 y& o( x+ j需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:
( e+ _; D$ M$ t8 ^4 a! R/ Y- C Clock Security System(时钟相关)" E% [9 m7 j, @6 v" f2 O. U1 h* p9 Z
SRAM parity checker(SRAM 部分)
1 r0 g0 N+ m3 K& o* ^8 a Cortex-M4-lockup signal(内核死锁)
" F5 A. j7 n' X, L5 t; R8 g/ U3 g PVD detector(电源管理)8 n8 E, C/ |0 r' p- T( Q( p1 U' q5 t

  w5 o; q# Q/ X; o; v$ U6 _$ H" gFault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。
7 ?' }- [) Q5 x% n" N+ f) j1 o按照 Fault 来源分可以分为两种:外部以及内部
8 v' d9 v; \, b( G外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)7 i% {3 i' n" k0 |7 f' D
内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。
! \' H; ]3 I* P9 ?: o) q! ^, B2 ~5 i- j, o( |+ U
具体 Fault 具体 Fault 配置举例
# y; y  Z& Y% L% \比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:" Z& V% w# \1 Z3 p* {) Z4 F
按照正常设置使 HRTIMER 输出 PWM 波形;
+ n8 j, _' j8 U9 m% u7 L 配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;
2 p8 y, H/ d* S* |3 `
  1. hcomp6.Instance = COMP6;
    ; N1 C! ?0 i5 g/ o3 v( K2 i: W
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;3 a6 `- |3 S5 N: L5 c
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;
    : D  u# i7 K+ K; D" @
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;$ O* |4 a0 g) V# F) ^
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
    ! }) v# j8 j5 D/ J
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;* m6 g" w: ^0 @1 ^
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;+ Z0 d7 D% x( A2 i- s
  8. HAL_COMP_Init(&hcomp6);
复制代码
$ N' t& n/ e( c  H1 w  Q
配置 PA12 为 HRTIM1_FLT1 引脚;+ U" |0 B7 l) Y
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;% Q) V4 H* k3 {, b
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    ) M5 d8 ~# m; f, J& }5 H1 P* q
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;
    + d9 L! s! e$ X  W
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;1 n: X# C8 G/ |
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;9 \3 ^  e, d1 H4 k0 d: L) A
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

6 L! _& Y8 v4 F* p* X4 VFault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;
* n7 |% y  \  Q6 k Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;
8 o8 @, O" D2 ~6 ^( ]9 B$ W 设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line36 F6 F8 J  j& H3 k6 A5 `, F# n
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;) R2 l; a) C( I
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;- D5 k* m9 s9 d- F' E5 T
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;% M/ |) Y/ c) m! Z. F" ^
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;% m2 U5 X" x; }
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);
    ' u- m, h( l5 U3 R$ I* t0 @, J  q
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);8 W) I# U1 S# S6 U; [' y

  7. : h: }( ~& t& h8 D
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;
    - |5 N$ v+ P* k* O0 J/ B! k
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;. F( [8 P/ a; I) z" [& b' ^
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);
    * J# p( s4 A6 `" }8 K
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);
    # I8 p% O& h, ^% h
复制代码

; W! L; l- ^- l: f0 G- n. m& q. F测试效果& t6 ^4 Q2 l0 ~8 C: V
当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。+ {$ s$ l$ `% s8 z+ z3 Q8 T. a

% C1 i2 p& g/ [2 H
8M)WS(VR_P}KJPKFD$NF_C6.png
收藏 评论1 发布时间:2022-2-24 21:02

举报

1个回答
辰亦 回答时间:2024-7-10 09:56:04

请问有具体使用stm32cubemx配置的教程吗

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版