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

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

[复制链接]
STMCU小助手 发布时间:2022-2-25 19:35
前言4 z2 [5 Z& |& D2 e) m1 Q8 h
STM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,内部丰富的联动机制可以产生各种实际需求波形,本文针对多相相移信号的产生给开发者一定启示,抛砖引玉,开发者可以根据不同需求产生应用所需的波形。* B1 c9 o0 c8 _8 \
$ C( C. j' x: g1 L, J
STM32F334 内部 HRTIMER 结构
4 s0 m9 e+ x( w( M! A7 _下图为 HRTIMER 的框图,可以看到该高精度 Timer 拥有五路独立的计数器,可以产生独立的五路带死区互补输出的 PWM波形,同时 Master Timer 这个没有输出端口的独立 Timer 可以作为五路其他 Timer 的清零同步信号。5 }. t6 x$ K( Y! i- ]* e. X
: S6 q% m: ^( N
1D2C]9_TBO[T0__)_ZMBMLE.png
; G- X! n$ ~2 S, i( G. W6 W1 R7 w% B; h0 C

' S& p. q8 R! E: }- ~7 @需要产生的波形

" C/ |7 L3 P* J4 u2 k* t9 S& R假定需要输出四路带死区互补输出 PWM 波形,频率相同,但各路波形存在相移:
4 H0 D! d1 N/ _: z5 rPWM1,PWM2,PWM3,PWM4, 需要控制这四路波形的相位,
0 Q9 E8 C" T% t# e, m8 @PWM1 为 0 度,PWM2 为 30 度相移,PWM3 为 85 度相移,PWM4 为 100 度相移占空比假定都是 50%的占空比+ b, A) x7 H6 L" S

# U( q2 S1 g$ F+ V4 L* i( p- H; ]
产生上述波形的机制
# o  A5 d2 z1 a4 g! zSTM32F334 的波形产生采用了比较输出模式,也就是说可以单独设定波形的 Set,Reset 位置,当需要将各路波形统一起来,需要同一个触发源,在不同相位点去触发 Timer 计数器复位,这样当设定好比较模式时,波形将自动输出,准确快速,并且可靠;
5 @. h) \' m7 T* C3 N/ H& [% s! y8 t
+ g# H5 q$ V* R, o
配置步骤, P! T/ x& m0 N% d
配置管脚以及时钟+ a, T. k3 `2 t, g9 Z
3 N7 A7 W) y/ C9 z' U7 I
' I: }8 B5 \& d
1]_I2RX$VGGG47PZE4J9[YI.png
% K* h: o3 n0 c6 t; o: e
  r6 F! r5 w1 @' y/ |' o
. [* W+ O# K, i4 a
配置 Master Timer6 j9 X4 e: E( O/ ?" h2 E( \: y- g
假定使用 128MHz*8 = 1024MHz 作为基本时钟源,Master Timer 设定为 50KHz,则 Master Timer 的 ARR 寄存器数据为1024MHz/50KHz = 20480,即 360 度对应 20480;+ D+ k, R. T  k8 N% Y0 w+ G! h
Master Timer 的 Update 事件作为 TimerA 的计数 reset 信号,此时设定相移为 0 度
2 n/ X! Y) A) kMaster Timer 的 Compara Value 1 作为 TimerB 的计数 reset 信号,如果设定相移为 30 度,则 Compara Value 1 =ARR*30/360 = 1706
1 A: y4 y- b' f9 ]8 RMaster Timer 的 Compara Value 2 作为 TimerC 的计数 reset 信号,如果设定相移为 60 度,则 Compara Value 1 =ARR*85/360 = 3413" f: l+ `; `! {+ \# C; O; y
Master Timer 的 Compara Value 1 作为 TimerD 的计数 reset 信号,如果设定相移为 90 度,则 Compara Value 1 =ARR*100/360 = 5120
. U- U; `. [$ N5 C' m
  1. pTimeBaseCfg.Period = 20480;
    8 C' u8 W$ z; ?/ J) Y% `5 J
  2. pTimeBaseCfg.RepetitionCounter = 0x00;' i- z! N# z6 h2 U
  3. pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;
    5 U, s+ z" u/ k) X
  4. pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
    . `2 K( t5 `. m5 D! M
  5. HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);
    - ]1 j# v' v0 e" j, {' u
  6. pCompareCfg.CompareValue = 1706;
    $ H7 K4 j5 V; r: N* _
  7. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1,&pCompareCfg);5 N1 e( S" N, Q% X0 Z
  8. pCompareCfg.CompareValue = 3413;
    6 z) A# W3 W  f
  9. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2,&pCompareCfg);/ H2 `# Z; t1 v0 }3 H  Q
  10. pCompareCfg.CompareValue = 5120;
    " b& J. p4 H0 m  e- V# _, m5 m
  11. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3,&pCompareCfg);
复制代码
; h# T9 {4 h6 V9 J- J
配置各个独立 Timer
6 ~! e& B: }5 ~$ ]( S( Q0 R& {Timer 的计数 Reset 信号分配如上面所示,因为这里设定的占空比为 50% ,那么只需要使用到独立 Tiemr 的 ComparaValue1 作为该 Timer 的 Set 信号,而 Timer 的 update 事件作为该 Timer 的 Reset 信号即可,当然这里还要说明,如果如果设定不同占空比信号输出,也可以直接配置该 Timer 的 Compara Value2 作为该 Timer 的 Reset 信号即可;
. n: M$ @: o1 k本例因为是 50%的占空比,那么直接设定 Compara Value1x(x=A,B,C,D) = 20480/2 = 10240;死区时间固定的上升下降都为数字 100,该数据可根据实际调整;
0 k" _# ]6 e- K* F5 W4 L
  1. pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;# A" s0 U  ?# K  a' B" V
  2. pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP1;# A, S% O. n. `/ a2 z" M6 p: k4 p
  3. pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMPER;4 A  m# {7 d, S' T2 f2 ~
  4. pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;* ^8 Q1 f/ ~6 a( x0 z8 a3 G9 ~
  5. pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
    2 C: w7 ]1 ]4 Y" t
  6. pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;0 \9 f9 u: r+ S9 e5 n1 I5 D: O
  7. pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;$ a5 _) F  e6 W4 V
  8. pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;8 R. Q/ m' s1 D
  9. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1,
    6 s) R+ K) f6 e6 K; s4 t. f6 |
  10. &pOutputCfg);  b) p. I: M; T/ W% C
  11. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1,
    1 ]5 `  L1 Y; U" a! `% a3 i; z6 E
  12. &pOutputCfg);
    " ~( c8 F# d* a- P$ R% f
  13. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1,
    # p  n. _. M/ c  ^# N
  14. &pOutputCfg);; D7 z. B* R- B2 S0 \8 q/ @
  15. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1,
    ) }7 m; g: Y$ [0 N& s9 m6 X$ ^0 s
  16. &pOutputCfg);
复制代码
* D/ O/ m  d5 j) j
实际测试波形:
6 E! D( {* R( K7 W3 ]为方便观察,只取每相的通道 1 的波形进行观察。如下,可看到清晰的移相信号:
' c3 o# a8 x- ^; s) F/ E$ p5 b, X

- g0 p! E) C1 P: y 4{D9YW_M}{1`P1T1[3Y`$ST.png
/ K! u, @9 T4 B0 L; U, S# h) C+ }  `& ^) q) m
收藏 评论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 手机版