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

【经验分享】HRTIMER 产生多相相移信号

[复制链接]
STMCU小助手 发布时间:2022-2-25 19:35
前言
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,内部丰富的联动机制可以产生各种实际需求波形,本文针对多相相移信号的产生给开发者一定启示,抛砖引玉,开发者可以根据不同需求产生应用所需的波形。

STM32F334 内部 HRTIMER 结构
下图为 HRTIMER 的框图,可以看到该高精度 Timer 拥有五路独立的计数器,可以产生独立的五路带死区互补输出的 PWM波形,同时 Master Timer 这个没有输出端口的独立 Timer 可以作为五路其他 Timer 的清零同步信号。

1D2C]9_TBO[T0__)_ZMBMLE.png


需要产生的波形

假定需要输出四路带死区互补输出 PWM 波形,频率相同,但各路波形存在相移:
PWM1,PWM2,PWM3,PWM4, 需要控制这四路波形的相位,
PWM1 为 0 度,PWM2 为 30 度相移,PWM3 为 85 度相移,PWM4 为 100 度相移占空比假定都是 50%的占空比


产生上述波形的机制
STM32F334 的波形产生采用了比较输出模式,也就是说可以单独设定波形的 Set,Reset 位置,当需要将各路波形统一起来,需要同一个触发源,在不同相位点去触发 Timer 计数器复位,这样当设定好比较模式时,波形将自动输出,准确快速,并且可靠;


配置步骤
配置管脚以及时钟


1]_I2RX$VGGG47PZE4J9[YI.png


配置 Master Timer
假定使用 128MHz*8 = 1024MHz 作为基本时钟源,Master Timer 设定为 50KHz,则 Master Timer 的 ARR 寄存器数据为1024MHz/50KHz = 20480,即 360 度对应 20480;
Master Timer 的 Update 事件作为 TimerA 的计数 reset 信号,此时设定相移为 0 度
Master Timer 的 Compara Value 1 作为 TimerB 的计数 reset 信号,如果设定相移为 30 度,则 Compara Value 1 =ARR*30/360 = 1706
Master Timer 的 Compara Value 2 作为 TimerC 的计数 reset 信号,如果设定相移为 60 度,则 Compara Value 1 =ARR*85/360 = 3413
Master Timer 的 Compara Value 1 作为 TimerD 的计数 reset 信号,如果设定相移为 90 度,则 Compara Value 1 =ARR*100/360 = 5120
  1. pTimeBaseCfg.Period = 20480;
  2. pTimeBaseCfg.RepetitionCounter = 0x00;
  3. pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;
  4. pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
  5. HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);
  6. pCompareCfg.CompareValue = 1706;
  7. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1,&pCompareCfg);
  8. pCompareCfg.CompareValue = 3413;
  9. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2,&pCompareCfg);
  10. pCompareCfg.CompareValue = 5120;
  11. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3,&pCompareCfg);
复制代码

配置各个独立 Timer
Timer 的计数 Reset 信号分配如上面所示,因为这里设定的占空比为 50% ,那么只需要使用到独立 Tiemr 的 ComparaValue1 作为该 Timer 的 Set 信号,而 Timer 的 update 事件作为该 Timer 的 Reset 信号即可,当然这里还要说明,如果如果设定不同占空比信号输出,也可以直接配置该 Timer 的 Compara Value2 作为该 Timer 的 Reset 信号即可;
本例因为是 50%的占空比,那么直接设定 Compara Value1x(x=A,B,C,D) = 20480/2 = 10240;死区时间固定的上升下降都为数字 100,该数据可根据实际调整;
  1. pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
  2. pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP1;
  3. pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMPER;
  4. pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
  5. pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
  6. pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
  7. pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
  8. pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;
  9. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1,
  10. &pOutputCfg);
  11. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1,
  12. &pOutputCfg);
  13. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1,
  14. &pOutputCfg);
  15. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1,
  16. &pOutputCfg);
复制代码

实际测试波形:
为方便观察,只取每相的通道 1 的波形进行观察。如下,可看到清晰的移相信号:


4{D9YW_M}{1`P1T1[3Y`$ST.png

收藏 评论1 发布时间:2022-2-25 19:35

举报

1个回答
amishe 回答时间:2024-3-14 21:12:33

非常感谢楼主分享,学习满满的知识点,不过文中有点小问题,前面文字说的是85、100度相位角,后面例子中的也是85、100,但注释中确实60、 90度,应该是笔误吧!

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版