ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

采用STM32的HRTIM实现三相同步三角载波PWM输出

2022-08-24 22:05:06  阅读:202  来源: 互联网

标签:定时器 HAL hhrtim1 HRTIM TIMER STM32 OUTPUT PWM


1. 应用需求与实现思路

对于常用的三相两电平变流器,通常应使三桥臂的载波为同步的三角载波。为方便控制,常在三角载波过零处进入中断进行采样何控制。当采用STM32的HRTIM实现该功能时,一种思路为:采用主定时器实现中断,并采用之对三个桥臂实用的载波进行同步。
基本设置参数为:

  • 开关频率:10kHz;
  • 死区时间:1μs;

2. 主定时器(Master Timer)

主定时器时基配置如下:
image

采用预装载(Preload)设置,当定时器进Update时进入中断,如下:
image

并开启主定时器的全局中断,如下:
image

3. 载波定时器(TimerA-TimerF)

采用上下计数模式,设置counter等于0时触发事件,确保载波过0处才将影子寄存器中的compare值锁存至active寄存器中。如下:
image

使能预装载(Preload),结合上面的设置,实现控制中延迟为固定的一周期。使能死区,并配置主定时器Period事件发生时载波定时器Reset。如下:
image

使能Compare Unit 1(也可以时其他Unit),并配置为counter值与compare值相等时触发事件。如下:
image

死区配置如下:
image

对于上下计数模式,需配置为compare事件发生时输出inactive状态:
image

因此Output 1 Configuration设置如下:
image

由于设置了死区所以Output 2不用配置。

4. 库函数API说明

完成上述配置后,需调用相关API以控制相应的定时器。包括:
开启定时器(如需停止定时器只需将函数中的Start改成Stop即可):

  HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_A);
  HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_B);
  HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_C);
  HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_D);
  HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_E);
  HAL_HRTIM_WaveformCountStart(&hhrtim1, HRTIM_TIMERID_TIMER_F);
  HAL_HRTIM_WaveformCountStart_IT(&hhrtim1, HRTIM_TIMERID_MASTER);

使能输出(如需停止输出只需将函数中的Start改成Stop即可):

  HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2);
  HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TB1 | HRTIM_OUTPUT_TB2);
  HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TC1 | HRTIM_OUTPUT_TC2);
  HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TD1 | HRTIM_OUTPUT_TD2);
  HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TE1 | HRTIM_OUTPUT_TE2);
  HAL_HRTIM_WaveformOutputStart(&hhrtim1, HRTIM_OUTPUT_TF1 | HRTIM_OUTPUT_TF2);

设置比较值以设置占空比(0x0-0x5分别指TimerA-TimerF):

  __HAL_HRTIM_SETCOMPARE(&hhrtim1, 0x0, HRTIM_COMPAREUNIT_1, ((uint32_t)(_LEG_TIMER_PRD * _DUTY)));
  __HAL_HRTIM_SETCOMPARE(&hhrtim1, 0x1, HRTIM_COMPAREUNIT_1, ((uint32_t)(_LEG_TIMER_PRD * _DUTY)));
  __HAL_HRTIM_SETCOMPARE(&hhrtim1, 0x2, HRTIM_COMPAREUNIT_1, ((uint32_t)(_LEG_TIMER_PRD * _DUTY)));
  __HAL_HRTIM_SETCOMPARE(&hhrtim1, 0x3, HRTIM_COMPAREUNIT_1, ((uint32_t)(_LEG_TIMER_PRD * _DUTY)));
  __HAL_HRTIM_SETCOMPARE(&hhrtim1, 0x4, HRTIM_COMPAREUNIT_1, ((uint32_t)(_LEG_TIMER_PRD * _DUTY)));
  __HAL_HRTIM_SETCOMPARE(&hhrtim1, 0x5, HRTIM_COMPAREUNIT_1, ((uint32_t)(_LEG_TIMER_PRD * _DUTY)));

5. 波形说明

TimerA-TimerF的上下计数模式似乎并非真正的上下计数模式,而是二倍频的向上计数模式,但对于PWM输出,效果是一致的,如下(CH1为TimerA的compare值,CH2为Output1,CH3为TimerA的counter值):
image

标签:定时器,HAL,hhrtim1,HRTIM,TIMER,STM32,OUTPUT,PWM
来源: https://www.cnblogs.com/xixizhk/p/16622418.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有