打印
[信息]

【实战经验】HRTIMER的多种Fault事件联动机制

[复制链接]
2013|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-16 15:05 编辑

HRTIMER的多种Fault事件联动机制

前言
STM32F334 内部集成了高精度Timer,最高主频4.6GHz,灵活的控制用于产生数字电源等产品的PWM 控制信号,与此同时对于产品安全部分也就有更高要求,而STM32F334 内部的Fault 联动机制可以保证这样的控制要求,比如过流保护,过压保护任意一项都可以产生Fault 事件,关闭PWM 输出,与此同时可以区别对待Fault 事件,可以一直关闭PWM 输出,也可以关闭再打开的操作等。

STM32F334 的输出端管理
下图为输出端管理模块,可以看到Fault 事件会直接作用于波形输出端口
输出状态控制,有三个状态:IDLE,RUN,FAULT,三个状态可以控制进行状态切换

Fault事件管理
STM32F334 内部共有5 个Fault 通道,通过多路选择器,任意一个Fault 源发生Fault 事件,都可以直接作用于输出;

需要特别说明的是SYSFLT 端口属于高端系统Fault 源,高于其它5 路Fault 输入,直接关闭输出,系统发生故障比如时钟失灵,发生PVD 等,下面是具体的系统Fault 源:
  •  Clock Security System(时钟相关)
  •  SRAM parity checker(SRAM 部分)
  •  Cortex-M4-lockup signal(内核死锁)
  •  PVD detector(电源管理)

Fault 事件可以配置极性(高或低有效),可以设定是否产生Fault 事件,同时也可以配置输入部分进行滤波,减少错误判断。按照Fault 来源分可以分为两种:外部以及内部:
外部----即外部FLT 引脚,每个通道对应1 个FLT 管脚记为HRTIM1_FLTx(x = 1,2,3,4,5)
内部----可以是内部比较器的输出,ADC_WDG 输出,OPA 输出等等。

具体Fault配置举例
比如我们现在需要配置比较器6 的输出(COMP6)以及HRTIM1_FLT1 输入作为Fault 源,按照以下步骤进行配置:
  • 按照正常设置使HRTIMER 输出PWM 波形;
  • 配置COMP6 正端输入为PB11,负端输入为VREF/2;

hcomp6.Instance = COMP6;
hcomp6.Init.InvertingInput = COMP_INVERTINGINPUT_1_2VREFINT;
hcomp6.Init.NonInvertingInput = COMP_NONINVERTINGINPUT_IO1;
hcomp6.Init.Output = COMP_OUTPUT_NONE;
hcomp6.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
hcomp6.Init.BlankingSrce = COMP_BLANKINGSRCE_NONE;

hcomp6.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
HAL_COMP_Init(&hcomp6);





  • 配置PA12 为HRTIM1_FLT1 引脚;
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);





  •  Fault Line1 配置为外部FLT 引脚输入,使能Fault Line1;
  • Fault Line3 配置为内部COMP6 的Fault 输入,使能Fault Line3 ;
  •  设定HRTIMER 的Fault 源有两个,一个是Fault Line1,另外一个为 Fault Line3

pFaultCfg.Source = HRTIM_FAULTSOURCE_DIGITALINPUT;
pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
pFaultCfg.Filter = HRTIM_FAULTFILTER_NONE;
pFaultCfg.Lock = HRTIM_FAULTLOCK_READWRITE;
HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_1, &pFaultCfg);
HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_1, HRTIM_FAULTMODECTL_ENABLED);
pFaultCfg.Source = HRTIM_FAULTSOURCE_INTERNAL;
pFaultCfg.Polarity = HRTIM_FAULTPOLARITY_HIGH;
HAL_HRTIM_FaultConfig(&hhrtim1, HRTIM_FAULT_3, &pFaultCfg);
HAL_HRTIM_FaultModeCtl(&hhrtim1, HRTIM_FAULT_3, HRTIM_FAULTMODECTL_ENABLED);


测试效果
当PA12 为低电平,并且PB11 电平小于VREF/2 时,PWM 输出口PA8 有PWM 波形输出;当PA12 为高电平或者PB11 电平大于VREF/2 时,两个条件只要满足其中一个,PA8 将立刻停止PWM 输出。

对应的代码:HRTIMER_Fault
更多实战经验请看:【ST MCU实战经验汇总贴】
沙发
mmuuss586| | 2015-9-10 19:37 | 只看该作者

开头几行写着,最高主频4.6G,似乎不对哦;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17097

帖子

287

粉丝