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

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

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言: e1 j# H- R" N, O; W3 G
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。9 ~2 |) j5 x' @  W0 M  E  t0 t/ [

' n* I2 l) `' d3 @3 ~, h9 RSTM32F334 的 STM32F334 的输出端管理
* z/ I2 y: g2 `% ]下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口
1 E" u2 c& y# e4 e3 E7 ?
; M  s& s1 {& R( k4 v- U 5S(~7(N2N1W8II%CVRAI4RR.png
( Z: ~6 k! e( _3 C+ \& I* w* b6 _9 H6 s4 ]
输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换
6 w6 J) Y7 M- T( M
  p- H# o2 T8 e3 |7 h$ ~1 c JQXS1$YT(%{RNM5Y7D{WW.png " x& m3 @' ], T( {- b
8 @. h9 T$ o; \3 q) A0 S) p9 \

& A" C5 K* {; A# I) ^Fault 事件 Fault 事件管理) g' Y6 C: j( b9 ^9 V
STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;
- `& z* H8 s% I3 p' y$ o, b2 x; I- E% o6 @1 ~

& H3 G( D, w% ]) U7 c6 M8 `+ ~7 e, x1 ?+ o1 l3 K' S
需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:1 P' r1 P" I" S# i& @9 |7 E
Clock Security System(时钟相关)
: h5 w' z* w/ a/ F+ _3 b* T SRAM parity checker(SRAM 部分)# N$ D* |' F6 B1 _: H0 }# h
Cortex-M4-lockup signal(内核死锁)
  Y7 O- F$ P0 ?. z; F$ o" m PVD detector(电源管理)
( Q& g- F# w4 T$ C5 l/ {5 x9 d, u& V
Fault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。
1 P  \  y, r9 B* {9 _; \1 F按照 Fault 来源分可以分为两种:外部以及内部
4 p" C* L* r# L, _6 q# @外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)+ U# S/ l% R0 ?8 ~% s
内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。: [% L8 U3 u3 {( V1 V+ y! f( i9 U
, C% M. z$ V/ K; I
具体 Fault 具体 Fault 配置举例
) W* m$ F; y) k4 ?3 k6 t5 Y比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:
# [( r" v4 K$ X 按照正常设置使 HRTIMER 输出 PWM 波形;
8 `; I$ f- W: L# C 配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;8 B/ o2 h3 f* ^" M" C
  1. hcomp6.Instance = COMP6;1 g4 k; F  W5 E0 m; f, L
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
    4 v+ Q* Y: U# S+ s
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;0 g4 H2 E0 R) o
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;. e& w- D4 U/ N
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;  y$ i/ s- W; K0 a
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;
    + e6 ]2 y2 |' s; d
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;# _% k  F1 v3 D8 H
  8. HAL_COMP_Init(&hcomp6);
复制代码
3 R- ^1 ?: o1 t  n) ^8 l
配置 PA12 为 HRTIM1_FLT1 引脚;# ~, ~1 q3 I3 T6 {3 j, j2 N5 r7 o
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;8 v$ P2 O% T' H
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    * B* E$ l' F' b% @# p
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;4 g& C% ]* y$ z) _/ K* E
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    & w: E; c6 R+ t
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;4 Q2 j. \2 P3 W  S; v) T3 ?* S- Z" {$ K
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码

2 J# h0 }$ y8 r. q0 U7 W4 MFault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;
& x1 m1 }; D5 y5 D* j7 c Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;6 x7 x: g4 }! O0 I
设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line3
" C3 n- }, ^: B
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
    0 [' ]( e, N- p& E: S4 o# e$ a
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;" }  r8 {+ E1 {4 }" g1 \
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;
    : L. r% f# Q5 f2 _+ c- t2 L$ [
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;
    ) W. ?1 g# T: i  `$ ?7 G
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);
    # S! R0 I& o$ e# |' Q) P5 r
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);
    9 D! Z: }# ^: V$ ^5 ?2 R
  7. $ S; Y% a; t3 z' b' y+ A
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;/ O8 p7 j7 y6 B  o1 h* S! j; o8 Q
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
    0 x; p: Y1 ^2 h3 c
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);3 I. a3 l1 a! [2 o! |4 b# M: {9 _
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);
    / J. Q, C9 F& f
复制代码

4 |, s9 J, z% j, b5 y, `. Q6 P+ u测试效果6 P, [0 w/ g" w% |8 Q" ^4 a. e- z8 \( I
当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。
( q6 {* e; w+ i* w: |9 H& m9 {# J2 Z! a! u0 q
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 手机版