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

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

[复制链接]
STMCU小助手 发布时间:2022-2-24 21:02
前言) A0 Q" i/ d1 Z0 {+ c  I* o/ m; i, v
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而 STM32F334 内部的 Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生 Fault 事件,关闭 PWM 输出,与此同时可以区别对待 Fault 事件,可以一直关闭 PWM 输出,也可以关闭再打开的操作等。2 C* q( Q6 \+ a4 ?) X9 p4 y1 y* G  P
; M, G- O5 l9 S8 N( c5 E& j6 i
STM32F334 的 STM32F334 的输出端管理
0 E/ d# k$ p# ?& _下图为输出端管理模块,可以看到 Fault 事件会直接作用于波形输出端口
9 ~: z( W1 r9 z: w  H
4 G, {9 V+ r9 I2 | 5S(~7(N2N1W8II%CVRAI4RR.png % L  x! {9 [; s1 V$ d
3 w% t0 g. k2 `2 f* s, w5 e. X* e
输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换% q" |4 X8 [( B
5 |& l( S. \8 J% [. i/ _/ q0 f& F
JQXS1$YT(%{RNM5Y7D{WW.png
" ?# w  U! V2 w' c, u
" v0 j( h6 {: a" K' ?! G. T2 U7 E9 h; L8 q7 S
Fault 事件 Fault 事件管理, E0 a6 |6 Y) D* @
STM32F334 内部共有 5 个 Fault 通道,通过多路选择器,任意一个 Fault 源发生 Fault 事件,都可以直接作用于输出;
0 ]0 v7 ^0 a# v$ e/ S$ |5 L2 _1 I! T0 z

- J6 y( X3 K/ \$ [( C) o" l( Y) b! e2 ^9 u9 }1 y* `; f' e
需要特别说明的是 SYSFLT 端口属于高端系统 Fault 源,高于其它 5 路 Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生 PVD 等,下面是具体的系统 Fault 源:
; E) f8 u5 [* W" s2 v! o Clock Security System(时钟相关)
! N- X0 }  O$ Z! R+ K SRAM parity checker(SRAM 部分)/ Y3 o2 L3 [$ p. p( _! X8 t
Cortex-M4-lockup signal(内核死锁)
2 g: {9 ~2 ~; Q8 [. {# t PVD detector(电源管理)( h2 Q* @' o' g& \& x
- o% L) r2 ]' l; @& }
Fault 事件可以配置极性(高或低有效),可以设定是否产生 Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。! J# [& ]" Z; j  W) F% J3 V6 t
按照 Fault 来源分可以分为两种:外部以及内部. J* {( A1 E0 Q3 r, U
外部----即外部 FLT 引脚,每个通道对应 1 个 FLT 管脚记为 HRTIM1_FLTx(x = 1,2,3,4,5)
1 P. k. W/ c* O) p9 ]7 p内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。# A8 D/ l' [4 u7 v& v3 i" f7 f- n
6 R* Q3 J. E6 F4 x0 S$ v
具体 Fault 具体 Fault 配置举例7 b* X: ?; ^! ^2 m4 n1 O1 H- W1 t
比如我们现在需要配置比较器 6 的输出(COMP6)以及 HRTIM1_FLT1 输入作为 Fault 源,按照以下步骤进行配置:5 e% O5 ^7 k( S0 r- z* B& O
按照正常设置使 HRTIMER 输出 PWM 波形;9 t/ _" k4 D! q( c- Z3 l! p
配置 COMP6 正端输入为 PB11,负端输入为 VREF/2;
1 z5 S6 y) M% m5 C$ {1 Q
  1. hcomp6.Instance = COMP6;& S& I' p7 Q; B1 {. X# U
  2. hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
    5 m# o, |  c. i% `
  3. hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;
    " y' w/ f. `2 Q5 a0 R
  4. hcomp6.Init.Output = COMP_OUTPUT_NONE;; i8 Q9 F+ I( g8 n7 Z
  5. hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
    4 W7 P/ n9 b8 o# w& a. S3 w! L
  6. hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;2 S) x/ A: }/ I6 d& s( U2 r: R
  7. hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;! p. e- K! _3 g' g2 K4 |+ X, y" c
  8. HAL_COMP_Init(&hcomp6);
复制代码

9 h2 e# Y9 U# j- L5 a, O) e3 U 配置 PA12 为 HRTIM1_FLT1 引脚;( c5 h1 f" \1 ^, x
  1. GPIO_InitStruct.Pin = GPIO_PIN_12;. I; o( I3 U; C' ^$ `
  2. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    / y: k4 O# z# J% D, u
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;$ [' R! d( y  ?- x% i
  4. GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    % ]5 L/ ]$ U0 J% ]' a) n- D0 `
  5. GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;: d8 p' I7 Q7 o; Z' X
  6. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
5 \0 J8 d' M' D) w$ \3 v* c! ~
Fault Line1 配置为外部 FLT 引脚输入,使能 Fault Line1;' [2 }" g- ]" q& V
Fault Line3 配置为内部 COMP6 的 Fault 输入,使能 Fault Line3 ;
/ K9 Z' A$ U) q6 Z* ? 设定 HRTIMER 的 Fault 源有两个,一个是 Fault Line1,另外一个为 Fault Line3, h5 {% H6 }7 f# P
  1. pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;4 I% |, v- `( _6 |* y
  2. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
      y1 C: Z9 W& D0 Z& U6 D
  3. pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;3 h% t/ P( R4 X/ v/ R
  4. pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;
    % o& O0 [; N' W4 h
  5. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);& Y, H* t; U4 U( t% C$ Y
  6. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);) K- M: [, s& C

  7. 3 ~! [- x+ D" ^9 f8 x+ p
  8. pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;
    . A7 T" y: ^5 L9 k& P; O  u- e7 O
  9. pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
    * y) b2 Q* F. `$ i+ }7 N
  10. HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);* S; N/ T3 E7 v) B
  11. HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);
    & u% P; ^- \6 U
复制代码

+ O( i/ S& g1 r0 [8 W/ t; E测试效果
  c8 {/ j% e5 L$ f8 k% t当 PA12 为低电平,并且 PB11 电平小于 VREF/2 时,PWM 输出口 PA8 有 PWM 波形输出;当 PA12 为高电平或者 PB11 电平大于 VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止 PWM 输出。: E* M( G, ~. s6 [9 \0 C
" N2 J( D0 h- H# p  q% e
8M)WS(VR_P}KJPKFD$NF_C6.png
赞 收藏 评论1 发布时间:2022-2-24 21:02

举报

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

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

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版