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

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

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言- N. N% M% M+ e; z5 y
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。
0 y) Z" o/ k  K( R! R1 L
0 t+ [1 |5 S( `8 t1 l9 ISTM32F334 的 STM32F334 的输出端管理) k. `  p9 f6 |: K1 H
下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口* P& v9 N1 @- L/ C; M: y2 \  T, N

4 `: \1 v6 v* T# R! M 5S(~7(N2N1W8II%CVRAI4RR.png
; e6 I3 P9 X1 r& G% @0 \4 C# N* J
0 t- a  O+ `& V9 p- R输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换
' d1 ]1 x  [  \4 f# T" F& Y; a9 j& ~. t4 b" j  v& T: G
JQXS1$YT(%{RNM5Y7D{WW.png
$ ^# j: k- Y3 T; S9 y+ w
8 M5 m5 z6 q' L' Y" w5 B
1 h. P2 H4 V  @, v4 `0 d& F' kFault 事件 Fault 事件管理9 n  K5 M5 f" @# A
STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;
( K& {* t# D' s2 n1 b) V  z3 |+ X$ d% H' D+ [6 @! R" N9 X! m- t! X, a

" n, n4 e5 t: d: P+ r! y9 |
% Z4 ~/ S" B2 s* V$ ]. O需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:' {5 i5 o; z; F; a  c2 D
Clock Security System(时钟相关)
1 Z# d7 U1 a1 o; |- O SRAM parity checker(SRAM 部分)  F* j: c6 j0 \# F- K, o3 g
Cortex-M4-lockup signal(内核死锁)3 @3 q0 u7 |  i# b
PVD detector(电源管理)
& P7 D* m( a8 y  r9 e# N  K
1 b4 O: F2 C* \' zFault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。
' R9 b$ c3 ]/ }4 I按照 Fault 来源分可以分为两种:外部以及内部
7 W! |$ y7 u% J$ @, J9 g外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)1 {% B) o* {, b: m9 a4 O6 A+ s( f
内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。# W8 l' Y4 @9 n$ p6 D
6 F5 [" y+ s0 R
具体 Fault 具体 Fault 配置举例" l0 p6 y# j/ T
比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:
4 U* P4 j, x8 Y( F 按照正常设置使 HRTIMER 输出 PWM 波形;
, o; `0 ?6 V5 m& g) g 配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;2 Z$ o) Z6 P& s( D
  1. hcomp6.Instance = COMP6;4 L0 \9 n1 y* g# P( ]
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
    ) j% b# Q. |. d. M
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;7 m- V1 c( R+ o) ^5 G' @8 _# R. _. `' _
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;
    % H" n7 A* Q/ M5 u" y! G0 o
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
    & R1 {1 m6 Z7 k# I! ~: P" y4 ?1 r' V; V
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;3 r2 _6 [# u+ l8 H3 _& c( p
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;  ]5 `5 o6 h1 j) k! Z) m
  8. HAL_COMP_Init(&hcomp6);
复制代码
; H" W4 X$ Q  B# @2 r* Q
配置 PA12 为 HRTIM1_FLT1 引脚;# E" [6 w; p7 F' `5 {; }- w/ g
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;9 \: Z# a* \) V
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;6 N" N- s1 g5 |5 g4 i0 z
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;
    ( m% p" c6 y) z* @' Q2 x  V' O
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;) |4 \7 H# b; u- c& [. {" {9 L
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;$ {* B& U5 R2 r+ w: M, y3 X
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
+ R* f# K- u' ^5 W* H7 ]
Fault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;
8 A7 U7 {+ e* E% o  `/ U9 ?5 b& j Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;% x# y7 F( A" w1 R: ~2 D
设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line3
) ]6 }7 J2 R4 j6 t9 a) j0 E
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;9 ?7 K2 f2 B5 `
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;; c* [  ]# M) \6 I1 ~* T) J/ S
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;
    : R' S0 y3 L: h2 ^' o  H
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;/ e/ T: g6 q, D5 L" T
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);
      v8 T* S' [) w
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);
    % d! R' a1 g7 \1 l$ }8 j$ |

  7. ( G. Q6 T- I. z' s) U6 x4 `
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;
    $ E. H5 h, g# R3 r: [1 F8 }. a4 b
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;% ?: d6 j: j2 y0 {4 q
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);$ c6 g% T: E- a
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);
    5 S; L2 X3 x. J( o" T; G, N
复制代码

0 A$ }/ R- k. l" f% L: K测试效果" r% W! _6 t3 B8 F# g9 T3 v& {5 r$ e
当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。; U; W0 B( Y+ W3 N, ~

4 U' n* i0 L3 G9 R
8M)WS(VR_P}KJPKFD$NF_C6.png
收藏 评论1 发布时间:2022-2-24 21:02

举报

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

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

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版