ST STM32G4_HRTIM fault 功能使用注意事项

1. 目的

STM32G474 系列芯片功能强大,提供了高解析的 Timer ( HRTIM, High-resolution timer ),可灵活产生 PWM 用于各种数位电源拓朴控制,或是各种马达应用控制。

当然电源与马达相关的应用控制,有时会发生过电压或过电流的情况,这时候保护的机制就不可少。STM32G474 除了高解析的 HRTIM,内部 HRTIM 也连结了 DAC、Comparator 模组,当遇到过电压或是过电流的情况时,内部的比较器能即时产生触发信号,连结 HRTIM来即时的关闭 PWM输出信号,做到过电压与过电流保护。

本篇博文会用到 STM32G474内部的 HRTIM ( 高解析 Timer 模组 ) 来输出 PWM,另外也会用到DAC 与比较器模组模组来与 HRTIM 作连动设定。由于功能复杂,这边会让使用者了解怎么使用 ST 的 CubeMX 来设定这些相关模组与注意事项。

功能说明 :

这边会设定三个 Channel HRTIM 的PWM ( HRTIM1_CHA1,HRTIM1_CHB1 ) 输出,再用一支 MCU Pin ( COMP1_INP ) 设定成比较器,输入外部电压,当外部电压顶到内部 DAC设定保护的电压值时,会即时的关闭 HRTIM 的 PWM 输出。

编译软体工具 :

a. STM32CubeIDE 1.8.0 ( 软体编译工具软体 )

b. STM32CubeMX  6.7.0 (图形界面设定 & 产生程式软体)   

硬体工具 :

a. NUCLEO-G474RE ( STM32G474 开发版 )

2. CubeMX设定说明 ( DAC1 )

这边要设定 STMM32G4内部 DAC 功能。CubeMX 里面,设定 DAC1,作为比较器的比较电压。

2.1 OUT1 mode : Connected to external pin and to chip-peripherals

 ( 设定连接外部脚与芯片内部周边,可观察 DAC 输出与连接到内部比较器)

2.2 Mode selected : Normal Mode

2.3 设定完成后,可以看到右边芯片已设定好脚位 DAC1_OUT1 (PA4),可用示波器量测此 pin 脚观察 DAC 输出变化。


3. CubeMX设定说明 ( COMP1 )

这边要设定 STM32G474 内部比较器功能。CubeMX 里面,设定比较器 COMP1,当比较器COMP1 有事件发生时 ( 例如 OVP,OCP ),比较结果的信号输出到 HRTIM 模组。

3.1 勾选 Input [+] ,设定输入的 DAC 来源为刚刚设定的 DAC1 OUT1

3.2 Trigger Mode : 设定为 Rising Edge Event ( 当外部电压顶到 DAC 电压时,输出上升沿事件 )

3.3 设定完成后,可以看到右边芯片已设定好脚位 DAC1_OUT1 ( PA4 ),外部输入电压由此脚位输入,这边会用可变电阻分压来做输入电压的改变。


4. CubeMX设定说明 ( HRTIM1 )

这边要设定 STM32G474 的 HRTIIM ( High-resolution timer ) PWM输出功能,在 CubeMX 里除了设定 PWM输出,并且设定比较器触发信号发生时,及时关闭 PWM。

4.1 在HRTIM1 设定 Timer A 的PWM TA1、Timer B TB1 输出 PWM。


4.2 设定 HRTIM Timer A PWM 输出参数重点 ( 1 )

Prescaler Ratio : HRTIM Clock Multiplied by 32 ( 设定除频 170M/32 )

Period : 54400 ( 设定 PWM 频率 = 100KHz )

Up Down Mode : Timer counter is operating in up-counting mode ( 上数模式 )

Mode : The timer operates in continuous (free-running) mode ( 连续模式 )


4.3 设定 HRTIM Timer A PWM 输出参数重点 ( 2 )

Preload Enable : 设定Preload enable ( 启动预载写入  )

Repetition Update: 设定 Update on repetition enabled ( 启动更新事件  )


4.4 设定 HRTIM Timer A PWM 输出参数重点 ( 3 )

Number of Faults to enable : 1 ( 设定一个 fault 讯号 )

 1st Fault Source : Fault 4 enabled ( 设定 fault 4 为来源讯号 )

( 这边要注意 fault 的来源设定 )

4.5 设定 HRTIM Timer A PWM 输出参数重点 ( 4 )

设定 Timer A Compare Unit 1,这边要启动设定 Timer A 的 compare 的点,整个 Timer 周期 Period 为 54400 ( 100KHz ),compare 1 value 设定 27200,表示 PWM duty 为 50%。


4.6 设定 HRTIM Timer A PWM 输出参数重点 ( 5 )

Polarity : Output is active HIGH ( 设定 PWM 输出动作为高准位 )

Set Source Selection : 1 ( 一个set来源 )

1st Set Source : Timer period event forces the out to its active state ( 设定 PWM 当 Timer A 的 period 起始为 high )

Reset Source Selection : 1 ( 一个reset来源 )

1st Reset Source : Timer compare 1 event forces the output to its inactive state ( 设定PWM 当 count 数到 compare 1 时为 Low )

Idle Mode : The output is not affected by the burst mode operation ( 设定当在 Idle mode 的时候不受 burst mode 影响 )

Idle Level : Output at inactive level when in IDLE state ( 设定在 Idle mode 的时候,PWM输出为 Low 信号 )

Fault Level : Output at inactive level when in FAULT state ( 设定当发生 Fault 的情况时,PWM 输出为 Low信号 )


4.7 设定 HRTIM Timer A PWM 输出参数重点 ( 6 )

( 这边注意 fault 与 Event 的来源 )

External Event 4

Event Configuration : Enable External Event 4 ( 启动 外部 Event 4 )

Source : External Event Source 2 – COMP1  ( Event 4 来源为 比较器 1 )

Event Polarity : External event is active high ( 事件发生时为 high 信号 )

Event Sensitivity : External event is active on Rising edge ( 比较器信号为上升沿触发 )

Event Fast Mode : External Event is re-synchronized by the HRTIM logic before acting on output ( 外部信号会在输出之前重新同步 )


4.8 设定Timer B PWM 输出

Timer B 的设定内容与 Timer A 一样。验证 Fault 发生时,可以关闭 Timer A 与 Timer B。


4.9 完成 CubeMX设定后,点选 GENERATE CODE 产生初始代码成

-> 点选 Open Project 就可以开启 CubeIDE 进入程式编辑界面


5. EVM 硬体设定

5.1 MCU Pin 脚规划如下 ( 范例 )

HRTIM1_CHA1 (PA8) : PWM输出,Timer A 的 Ch1

HRTIM1_CHB1 (PA10) : PWM输出,Timer B 的 Ch1

COMP1_INP (PA1) : 外部电压输入,这边用可变电阻调整外部电压 (0~3V)

DAC1_OUT1(PA4) : DAC 信号输出,可以观察设定输出DAC 电压,同时输出到内部比较器1


5.2 开发板 NUCLEO-G474RE 讯号接线图

6. 编辑程式

这边要注意,在 CubeMX 设定好的 HRTIM、DAC、Comparator模组,但是这些模组还尚未启动,在 CubeIDE 编辑程式下就要用程式代码来启动这些模组功能。

6.1 在程式中的 Main() 里面,在初始化程式后请加上设定 DAC 与启动DAC 程式


//设定 DAC 输出电压参数与资料对其方式:

HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1241);

//DAC_ALIGN_12B_R : DAC 的 Data 为 12bit 靠右对其


参数 1241 : DAC 输出电压为1V

计算公式如下:

//启动 DAC1 的 Channel1:

HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);

6.2  在程式中的 Main() 里面,在初始化程式后请加上启动 Comparator 1 程式

// 启动 Comparator 1

HAL_COMP_Start(&hcomp1);


6.3 在程式中的 Main() 里面,在初始化程式后请加上启动 HRTIM1 & Output 程式

//启动 HRTIM1 的 TimerA & TimerB

HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);

HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_B);

//启动 TimerA 的 TA1 & TimerB 的 TB1 输出

HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TB1 );


7. 验证 HRTIM Fault 功能

完成硬体接线与程式后,烧录程式到开发板的主芯片 STM32G474 验证 HRTIM 功能,验证结果如下。

7.1 未发生 Fault 时,HRTIM 的 PWM 皆正常输出。

Ch1 : TimerA 的 TA1 输出 PWM

Ch2 : TimerB 的 TB1 输出 PWM

Ch3 : 可变电阻输入电压进入 MCU 比较器脚位

Ch4 : DAC 输出电压值为 1V


7.2 透过外部可变电阻,把输入电压调整超过 1V,当超过 1V 时,内部比较器会触发 Fault,关闭 PWM 讯号输出。在电源或马达的应用上可以做到,如下图。

Ch1 : TimerA 的 TA1 输出 PWM ( PWM 已停止动作 )

Ch2 : TimerB 的 TB1 输出 PWM ( PWM 已停止动作 )

Ch3 : 可变电阻输入电压进入 MCU 比较器脚位,输入电压超过 1V

Ch4 : DAC 输出电压值为 1V


7.3 当发生 Fault 关闭 HRTIM PWM,输入电压回复到正常状态( 1V 以下 )时,如果想要回复 HRTIM PWM 启动状态,就可以在程式中在下启动 HRTIM PWM 程式指令如下:

// 重新启动 HRTIM TimerA TA1 & HRTIM TimerB TB1 输出

HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 + HRTIM_OUTPUT_TB1 )。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

ybbbbb

ybbbbb

8 个月前
您好我想问一下FAULT是怎么配置的?