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

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

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言
2 R. b" G; M9 f7 a" FSTM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。
/ }) J& |1 \% D  [/ A
4 g- P+ p) E2 l) F7 n  K% L) I, F1 {5 r) nSTM32F334 的 STM32F334 的输出端管理
2 y& w" e4 e. r/ Y& M  o2 E- R下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口' Q0 I# R% h) v
7 _, @2 m) z8 D) e/ L# W% G6 |+ a
5S(~7(N2N1W8II%CVRAI4RR.png
/ k3 k- m* M" ~0 V: t) a) q6 s& u/ R" h/ K6 y
输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换5 }9 t( H" [0 M9 }& H; J( Z! X
5 j7 g0 W7 [( Z2 e* Q9 f' `$ e
JQXS1$YT(%{RNM5Y7D{WW.png
# J  x1 X# f+ K5 K$ s' K, ?8 t
- A0 l9 d- A! g, u; K
! c  n; E( ?' A3 DFault 事件 Fault 事件管理
: c2 z0 p1 L( a/ F3 l5 O3 _STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;
. e3 v8 A' w( o, ~
7 Q8 D9 ]2 \. ]
$ d% Y/ ^) T! l4 O  U- w" U5 U9 y0 O( \  ^
需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:/ W# p" x' N0 H/ S* a2 f4 ]" l) ^
Clock Security System(时钟相关)
: ^2 @& x) }# j7 r' Z+ r SRAM parity checker(SRAM 部分)
2 D' b, v+ a5 o9 _* N Cortex-M4-lockup signal(内核死锁)
& |/ G; K& W0 R$ ]& a1 Z PVD detector(电源管理)7 h3 v% [) c; [2 V

# s- t, a: {. R2 _" u, nFault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。8 ?5 b$ D1 s& F* S( [
按照 Fault 来源分可以分为两种:外部以及内部0 |! F: I* E( r
外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)+ H; g; d, q5 C
内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。
3 R9 I) s( m7 U
+ ~+ N# _; z/ X3 N4 V  C具体 Fault 具体 Fault 配置举例) N5 C8 t3 J0 J3 e: d! \
比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:
( h. ^' w7 O; T  R 按照正常设置使 HRTIMER 输出 PWM 波形;
+ |* d0 \" v4 [8 y  ]4 R9 D/ b 配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;
/ p8 j$ e1 {  g( o* T. d
  1. hcomp6.Instance = COMP6;
    ( r* F) G5 Q1 D
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
    2 ~3 h( F/ e9 l& s9 v4 ]$ H( j3 E
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;5 l9 }; O7 I& A, A2 y
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;, P% D, y! i8 x& M, l& [+ }; L- z
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;" z5 }8 v% s# s+ p* R9 O  X2 p
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;4 e0 s8 g. ~% a7 ^8 K/ x  v& N
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
    $ i2 @  I! \5 ^3 n( A  U9 v  h- E
  8. HAL_COMP_Init(&hcomp6);
复制代码
# w/ i- [. R, R
配置 PA12 为 HRTIM1_FLT1 引脚;
% H7 @) v" ?! n  P+ _
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;  N* [5 @9 {+ ^6 ~# E% W6 ~5 u+ C
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;& l+ \: N% a# W" m
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;6 L5 E9 d4 M' P/ i6 q6 U0 S; E
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    3 Y9 W% M5 t: K* D
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;1 [0 N3 ], b! m8 A4 b3 u: y* j
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
' \4 e9 g. y1 J5 _
Fault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;
$ c- m" M& K" q# z/ J; V; J) Z Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;
4 g& t3 R0 A$ O* i 设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line3
4 }8 J0 {3 z& {' j& a
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
    + ~0 k6 a% S$ J6 R$ t- _5 F3 g) _
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;+ `6 |/ }3 D" T3 d/ _1 p
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;
    - a6 r4 Q4 i' D, J7 [
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;: g. d  J5 ~# u: x: j! Y
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);+ Y! y2 q* u: a3 `- C# [( b  {' T
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);6 X! x. [1 z( x  m' p

  7. " \7 q# H9 v( _
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;
    9 @# `2 B* c) X0 B$ }/ g# G$ y
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
    5 L: l7 X! ~  v
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);7 s4 ^; k7 X5 S
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);
    : l3 w" O, S) P
复制代码

9 F8 y2 |9 v3 h( @* p, ~2 _4 c/ }% k/ z测试效果
5 T& g" A+ L5 z5 M当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。" }/ n1 P8 Z* Q

& v& i# c, V  X
8M)WS(VR_P}KJPKFD$NF_C6.png
收藏 评论1 发布时间:2022-2-24 21:02

举报

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

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

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版