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

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

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

: R# I! M8 J5 W/ V+ P( _STM32F334 内部 HRTIMER 结构
" j. o# N2 K4 J" R下图为 HRTIMER 的框图,可以看到该高精度 Timer 拥有五路独立的计数器,可以产生独立的五路带死区互补输出的 PWM波形,同时 Master Timer 这个没有输出端口的独立 Timer 可以作为五路其他 Timer 的清零同步信号。1 p2 U" S, L- R# l& o

, g5 U6 |2 G/ X- k) {0 o# | 1D2C]9_TBO[T0__)_ZMBMLE.png ! {* E3 x9 g" W6 X+ W  \

0 j( R$ C/ [! s' ?8 `
: z9 z$ ]3 y2 @1 |需要产生的波形
$ m- P( }* W0 V9 R
假定需要输出四路带死区互补输出 PWM 波形,频率相同,但各路波形存在相移:# C! D+ l( R* P! u; G- }
PWM1,PWM2,PWM3,PWM4, 需要控制这四路波形的相位,' c9 }2 s5 W! U7 {9 {; ~( x$ _( g
PWM1 为 0 度,PWM2 为 30 度相移,PWM3 为 85 度相移,PWM4 为 100 度相移占空比假定都是 50%的占空比
3 X; B: v, ~; N, a" b- W. y. X- U  z% K* R1 @

" }' k# |. N* I; d* |4 a8 \1 j产生上述波形的机制
2 w/ N9 W; _3 {6 X; B$ ASTM32F334 的波形产生采用了比较输出模式,也就是说可以单独设定波形的 Set,Reset 位置,当需要将各路波形统一起来,需要同一个触发源,在不同相位点去触发 Timer 计数器复位,这样当设定好比较模式时,波形将自动输出,准确快速,并且可靠;# Z6 s: a4 e  s6 o' y. [7 j

( U* o' w9 j  u2 f  A, P; E8 z7 Y# E5 F  G0 K) m) c2 c
配置步骤) f! k0 T+ n, I1 r) O7 u! v7 ]
配置管脚以及时钟
* |1 R8 R" ]4 H) z  f
2 v/ B2 f! B" a" u

/ P: B% ~  Z5 @ 1]_I2RX$VGGG47PZE4J9[YI.png ' v9 Q5 v  m  P! S$ o% p
+ [$ f9 g6 H  x1 G1 Z
% O- |8 H, }4 c$ K0 K+ P, L; h
配置 Master Timer# A9 v8 k8 ~+ d5 u. W5 J* Y: S
假定使用 128MHz*8 = 1024MHz 作为基本时钟源,Master Timer 设定为 50KHz,则 Master Timer 的 ARR 寄存器数据为1024MHz/50KHz = 20480,即 360 度对应 20480;
& a5 V2 Z% ^7 k- _$ nMaster Timer 的 Update 事件作为 TimerA 的计数 reset 信号,此时设定相移为 0 度
: z) w7 J* J9 V$ {4 C) Z. T3 ]Master Timer 的 Compara Value 1 作为 TimerB 的计数 reset 信号,如果设定相移为 30 度,则 Compara Value 1 =ARR*30/360 = 1706. d2 p/ b2 {# ?! O
Master Timer 的 Compara Value 2 作为 TimerC 的计数 reset 信号,如果设定相移为 60 度,则 Compara Value 1 =ARR*85/360 = 3413
) ]7 d# J0 p4 o# U5 v1 e. wMaster Timer 的 Compara Value 1 作为 TimerD 的计数 reset 信号,如果设定相移为 90 度,则 Compara Value 1 =ARR*100/360 = 51204 f; J$ T6 ~) L" l. V; ^0 h
  1. pTimeBaseCfg.Period = 20480;- i3 ?. d1 e# z  F0 x
  2. pTimeBaseCfg.RepetitionCounter = 0x00;& p/ ~" p$ X: B+ v
  3. pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;$ O  h& O& f$ [' l3 {6 w$ u
  4. pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;9 j/ c: E3 E: U( C3 B
  5. HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);
    ( e- p& r5 v# E9 m' Q
  6. pCompareCfg.CompareValue = 1706;
    ( A# A5 G3 E' V% m' f
  7. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1,&pCompareCfg);
      A4 @0 {% `& Y5 z
  8. pCompareCfg.CompareValue = 3413;
    ( o, x" q' w- k! r& o
  9. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2,&pCompareCfg);5 P+ b  s$ l7 j& _" f0 u+ L
  10. pCompareCfg.CompareValue = 5120;: C' x: \1 S9 A( c+ T& p9 W: L; @
  11. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3,&pCompareCfg);
复制代码
  ^9 D/ y. Z; ~/ j  v" s$ @5 {# R
配置各个独立 Timer  M5 j. n* q: u. i7 l8 R
Timer 的计数 Reset 信号分配如上面所示,因为这里设定的占空比为 50% ,那么只需要使用到独立 Tiemr 的 ComparaValue1 作为该 Timer 的 Set 信号,而 Timer 的 update 事件作为该 Timer 的 Reset 信号即可,当然这里还要说明,如果如果设定不同占空比信号输出,也可以直接配置该 Timer 的 Compara Value2 作为该 Timer 的 Reset 信号即可;
2 r# k& T! ]* e  n, \本例因为是 50%的占空比,那么直接设定 Compara Value1x(x=A,B,C,D) = 20480/2 = 10240;死区时间固定的上升下降都为数字 100,该数据可根据实际调整;
' G8 y6 T# ?; b$ V5 @
  1. pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
    + J8 R1 M/ P4 J: D- z
  2. pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP1;
    / U# R4 w5 y. k  J* Y% h0 {; Q
  3. pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMPER;2 B% u$ f) T. f) c/ b
  4. pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;% d$ A, G8 D) A" d! r! O
  5. pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
    * S4 F" [5 V% p: ^' ~- ]
  6. pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
    * s" t4 V$ a. j# U9 [9 M
  7. pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
    - e+ [" t( |2 G' v- R2 z9 T
  8. pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;8 c7 d  s1 s4 p- c: H5 i! R
  9. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1,
    2 M6 k( V4 G6 [1 ~' g
  10. &pOutputCfg);
    3 x/ b' g9 H/ d6 ]
  11. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1,
    5 @: |  A/ W3 {; K; w* w+ x) |2 e
  12. &pOutputCfg);
    * y" D; r0 c- H, |7 l
  13. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1,2 m2 w* v# |5 T% I( M7 D
  14. &pOutputCfg);2 `7 |( n/ k4 \. E+ `  n
  15. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1,4 S+ d, K& }; E2 [5 x$ z' V
  16. &pOutputCfg);
复制代码
) F% O8 j" `! Y! v* }
实际测试波形:
- a3 y/ b' O3 C# P4 {为方便观察,只取每相的通道 1 的波形进行观察。如下,可看到清晰的移相信号:
8 ?. c9 E! I6 c
) T$ g+ Y4 |5 {+ B" ]
0 O5 k4 _) @" M, `, D0 \0 s8 X 4{D9YW_M}{1`P1T1[3Y`$ST.png
) G5 I8 T0 p( {2 S) L. y5 Z) P) K
6 U$ [3 I; w" X
收藏 评论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 手机版