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

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

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言9 a7 n$ f2 F1 n- {" H  |) K
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。
$ x- \* T. z& g* N3 a9 |  r8 G% D( T* o; h% S1 V" z
STM32F334 的 STM32F334 的输出端管理
% y5 ^( J, S' o! N下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口
3 n  Z# P3 m$ s8 N/ n9 E
, l- U/ ?8 I  Y 5S(~7(N2N1W8II%CVRAI4RR.png
2 g1 }" ?8 f5 z" l, u% f
# |- q1 g" A) }( x/ }输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换. D' ^' L0 I/ ~! R3 {3 g2 V) {4 X8 r, z
9 \3 A% r' u- |+ K7 K/ A2 M
JQXS1$YT(%{RNM5Y7D{WW.png
; z% w. ~1 y1 f! f7 E  U6 s
0 c! Y4 S) U' X9 h1 g8 @! v2 F& d5 v" @: I. Y
Fault 事件 Fault 事件管理# w9 t/ ?6 z9 M% w' I3 g- U
STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;1 w: W# Y2 ]2 g: E$ ~

- _0 a7 {; \( o7 S% k1 L# C8 {$ \! S" L
5 `) Z+ @1 O4 s
需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:
; Z' k2 _; c; _ Clock Security System(时钟相关)
& j+ W5 o/ a0 P SRAM parity checker(SRAM 部分)3 [; p6 J% ~6 J0 a, E5 W  f/ m
Cortex-M4-lockup signal(内核死锁)
, F) }* R/ f* |& }9 A PVD detector(电源管理)7 |) d- l- I1 F$ G( N
# p! d, v( x; m. n" F8 m
Fault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。
& r) I+ V& U' w' \按照 Fault 来源分可以分为两种:外部以及内部
' S" o. _3 J1 L7 {+ F5 C. U0 D外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)4 T0 k# i- x$ n0 r5 f, d
内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。6 ]; V  U+ w9 K+ ~- \% D7 s/ T

$ ~: e3 V) u$ V! l  p! A  [具体 Fault 具体 Fault 配置举例% o1 E0 B1 F$ {
比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:( `% W8 Q% G8 O2 T7 M/ G
按照正常设置使 HRTIMER 输出 PWM 波形;  s5 T" M) e0 H: j
配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;5 H  e- v9 g" ]- e2 r
  1. hcomp6.Instance = COMP6;- i6 x8 m2 D: J' S, A- U
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
    . W: G4 E( T. J
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;+ H1 k3 T% ?% w; m
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;: T# P# H" E3 s9 v- R3 D, F
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
    $ c$ |' O" @, o' u" v" u
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;
    . o- x6 _; c9 g8 S( f- s! f
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
      n: x8 O; J" @6 Q5 ^1 p
  8. HAL_COMP_Init(&hcomp6);
复制代码
' P6 k7 q: ~4 l; j" R: L
配置 PA12 为 HRTIM1_FLT1 引脚;
* g4 N0 J) [! [8 t: }- O
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;
    * s: f/ o- J4 c- ~
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    ' Q. y) n# j% m7 [$ ~
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;
    ) s) T# }2 y  `% ]
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;! n. y; r6 Q2 s/ T
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;$ Z( ^. x0 J) t; e3 V9 Q
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
4 A7 w" L3 f+ t' ^$ `
Fault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;
' ^8 c+ ], i  X' C& P8 _4 u5 b Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;
3 K  f9 z# H( x6 T1 | 设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line3
& a+ T8 X: z- \
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;+ P# _6 ~2 J8 f7 B5 @
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
    ) l) w: H% D- S; I% g
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;( {. k+ M7 p8 T) j
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;6 [+ |& T6 j9 q
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);
    3 n! z; `; I: M4 N
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);# t+ b  F3 U6 b4 i! a: ]: T
  7. - u- G5 u. W1 r
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;% g' ^' U. K% ~, \) _. K4 i* J2 v5 u3 L* B
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;6 D# J) V2 p+ Y6 f; h
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);! h5 X9 F- X, c% t0 `% t- X8 @7 K
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);
    : f; O" N7 [, H, S2 P) J9 f3 [. V
复制代码
+ T3 C1 ^. `) G% A
测试效果
9 Y6 T1 N) J2 w# A+ A6 O2 l当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。) {3 C8 a1 W9 ]3 G' ]
; ]; h# S3 t$ U+ v0 J& W3 C7 A1 y
8M)WS(VR_P}KJPKFD$NF_C6.png
收藏 评论1 发布时间:2022-2-24 21:02

举报

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

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

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版