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

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

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言* q, ~2 \1 B1 M7 K3 ~2 k
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。! p" r' i1 ?! E8 P

( X0 h+ U7 z. O. ^, iSTM32F334 的 STM32F334 的输出端管理
7 d: S- S7 N# V% [) ?: @下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口
- w% e2 f: M/ ~1 A, e# O2 a, S& M3 Q9 J- s& V' e, R2 i: C
5S(~7(N2N1W8II%CVRAI4RR.png 1 G4 q( g; e! B
! n8 [  P. F2 L3 d$ D$ _
输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换& s% Q+ v5 R$ p3 ?( e
4 ?5 `3 Q( T5 m
JQXS1$YT(%{RNM5Y7D{WW.png
; f* x9 c1 i2 Y: P1 X& J
7 E% Z) p  I) z7 e2 c6 `! e
3 N9 V, ~4 g# S; fFault 事件 Fault 事件管理. d) D' g' B' b. c+ |& w7 X  I
STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;
. M6 ]/ ^3 @2 I1 ]3 N: s' H3 M; m8 c9 i: n( K  B" a
: p3 A5 O" F+ t1 d  |& ^

! E1 L+ D- K) L/ Q需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:6 s- X3 g8 a6 ~8 R+ c' S, I
Clock Security System(时钟相关)
1 N) h8 W& I0 f: L; y SRAM parity checker(SRAM 部分)
' V4 y% \8 O+ }" j, w Cortex-M4-lockup signal(内核死锁)
3 [+ \6 E# g6 L# d) o$ A PVD detector(电源管理)
$ \6 C' l5 \& ]& l* [+ e
! w$ a' ^1 X: [& {$ ZFault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。
. r' A* Z+ c; P) ]按照 Fault 来源分可以分为两种:外部以及内部
4 T2 G* p% P' f/ }/ `6 ?" K外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)
- ^8 ]/ e& }& l; \内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。. O% r6 p" X- m+ N: {2 V. D
* ^1 s0 t7 R7 q6 i7 C
具体 Fault 具体 Fault 配置举例
  W( k! _, |1 T3 I比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:3 D# n2 z" U& K; o* q
按照正常设置使 HRTIMER 输出 PWM 波形;
, |! u# K" t' c2 B& V0 K 配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;8 ?9 _7 }$ c- n+ @/ l4 c$ v* X
  1. hcomp6.Instance = COMP6;
    + l5 B# N( t, r" }. T
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
    8 j. i. R, f7 m9 }; e! T4 Q1 p
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;! E# L0 s5 W% s+ F
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;
    4 A; t; [; H% f/ ^/ t
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
    1 @8 j3 J8 I# b" I: S/ d
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;
    / J7 w& F5 d# l
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
    + v4 d& L5 @) d' m+ O4 ]- e- ?
  8. HAL_COMP_Init(&hcomp6);
复制代码
! b& u$ K9 l. }
配置 PA12 为 HRTIM1_FLT1 引脚;
& ?9 {7 x: K  f7 P' U& g" }- F
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;
    , P. |  Q$ ?% J" C
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  T( }2 Z/ Y+ j  K8 I3 d9 \( ?
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;0 A' O4 p* q- v+ ^& N7 F
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;. ^, C9 L* `  ?
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;
    ; ]  c7 ^: ^4 i
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
# M, E' V# {' r0 j2 y# c/ H
Fault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;
& }5 m* @+ o/ L/ j3 V. x4 C' f Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;' r8 A3 Z# s- o) A
设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line3! m, M! }7 Q8 b5 J+ [% ]0 \
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
    $ e5 e5 k- l; x- S+ M
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
    # i- e' H, x: t) @7 ^) }
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;( p% o$ G/ x* X/ Z
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;
    7 b/ s* l/ M2 }9 N, L; B
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);
    ( q# _% ^1 M  d* H
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);
    . n8 e3 ~8 v7 S! ~' q" x

  7.   ]! Z8 c* ?1 B  X- g& W
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;
    5 R* b7 O! H" @( ^" T8 r  W* D+ O* v
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;( Y# c9 t6 \4 q8 O3 t  J) I
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);  J; L" ^% A3 W$ |& F; {1 L
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);, O0 e/ I# N% t6 M4 v( R
复制代码

/ j4 W# A2 p* S! t6 e) x测试效果
# k  J! A* Z- }( {( p9 S当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。
) l& ]$ A, I; U7 }% L. A5 }2 T3 [0 [6 ]  V3 l' l- p
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 手机版