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

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

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

: _' w8 Q- X( n$ i1 ~STM32F334 内部 HRTIMER 结构
" o% ?, ]& I+ g0 \下图为 HRTIMER 的框图,可以看到该高精度 Timer 拥有五路独立的计数器,可以产生独立的五路带死区互补输出的 PWM波形,同时 Master Timer 这个没有输出端口的独立 Timer 可以作为五路其他 Timer 的清零同步信号。$ l# @+ m! N: t3 _2 F. M
( c! Y! ?  |$ z  {( Y, S2 g  X! [- A/ B. K
1D2C]9_TBO[T0__)_ZMBMLE.png
# y$ R+ a' S' {% [) d+ Q; ]
( q$ a8 ^( R+ B! I+ I  Y% b# w: x$ C$ r$ P" S3 a
需要产生的波形

$ Q. n2 q7 n' ^. t假定需要输出四路带死区互补输出 PWM 波形,频率相同,但各路波形存在相移:
- ]- A( K- r0 E3 x) l2 `PWM1,PWM2,PWM3,PWM4, 需要控制这四路波形的相位,7 h) u6 Y" e/ y2 x8 D! b2 T& a% J
PWM1 为 0 度,PWM2 为 30 度相移,PWM3 为 85 度相移,PWM4 为 100 度相移占空比假定都是 50%的占空比( B/ H+ H# @5 D; T  _! g
& k4 a8 ]# \( M6 w% U

3 m9 N9 K1 ^0 }' f. H' b产生上述波形的机制1 x6 O% {$ m: \5 s& O. j
STM32F334 的波形产生采用了比较输出模式,也就是说可以单独设定波形的 Set,Reset 位置,当需要将各路波形统一起来,需要同一个触发源,在不同相位点去触发 Timer 计数器复位,这样当设定好比较模式时,波形将自动输出,准确快速,并且可靠;! n# t2 R7 i0 S- h7 n
/ E9 ^) L, N5 A& D
# f0 R0 Y& t9 ?/ q4 r
配置步骤
) g5 h: X% ?' A: n8 F1 D配置管脚以及时钟3 G5 A3 `+ |: K+ R# M; A
# p& V- j7 f4 r: G; {- X
3 S5 q+ U* I1 C) s
1]_I2RX$VGGG47PZE4J9[YI.png
' `8 m2 e, S' Z; z5 r: q+ s6 S$ u3 Z+ y3 a
" J" ?8 X( Q% w* b' P# Z
配置 Master Timer
& J9 G# `% @/ ]& m6 M假定使用 128MHz*8 = 1024MHz 作为基本时钟源,Master Timer 设定为 50KHz,则 Master Timer 的 ARR 寄存器数据为1024MHz/50KHz = 20480,即 360 度对应 20480;
  \) G1 |+ ?0 R  f7 NMaster Timer 的 Update 事件作为 TimerA 的计数 reset 信号,此时设定相移为 0 度
. A( n! U- \% k8 `Master Timer 的 Compara Value 1 作为 TimerB 的计数 reset 信号,如果设定相移为 30 度,则 Compara Value 1 =ARR*30/360 = 1706
* R' C2 _' X) [; ]! B- U# JMaster Timer 的 Compara Value 2 作为 TimerC 的计数 reset 信号,如果设定相移为 60 度,则 Compara Value 1 =ARR*85/360 = 3413
  q# p) I) b: ]1 h7 CMaster Timer 的 Compara Value 1 作为 TimerD 的计数 reset 信号,如果设定相移为 90 度,则 Compara Value 1 =ARR*100/360 = 5120
# U+ _% `, n& P# }$ h, }
  1. pTimeBaseCfg.Period = 20480;& w8 @# _9 w7 j; i, r
  2. pTimeBaseCfg.RepetitionCounter = 0x00;
    2 x. ^2 F0 _0 S: @( N
  3. pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;7 k3 F, L1 h! j% g7 S
  4. pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;- g' ]" [1 X0 v6 ~' h3 t( a
  5. HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);
    3 ~* T$ u, x( B* f6 q4 d
  6. pCompareCfg.CompareValue = 1706;
    / i: N* t3 C* d/ X  h' u( `
  7. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1,&pCompareCfg);' u2 }$ w" S; r. M; H
  8. pCompareCfg.CompareValue = 3413;+ [7 q$ I: H/ Y. _- O2 x
  9. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2,&pCompareCfg);5 ]' E' h! w4 L1 b
  10. pCompareCfg.CompareValue = 5120;; j/ I3 V/ u* e! X8 k* G) N
  11. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3,&pCompareCfg);
复制代码

/ l/ ~2 K3 H. X/ s配置各个独立 Timer
* t; r% n6 ]* r, T0 p+ V9 cTimer 的计数 Reset 信号分配如上面所示,因为这里设定的占空比为 50% ,那么只需要使用到独立 Tiemr 的 ComparaValue1 作为该 Timer 的 Set 信号,而 Timer 的 update 事件作为该 Timer 的 Reset 信号即可,当然这里还要说明,如果如果设定不同占空比信号输出,也可以直接配置该 Timer 的 Compara Value2 作为该 Timer 的 Reset 信号即可;" _1 k: S0 b  E* H. V
本例因为是 50%的占空比,那么直接设定 Compara Value1x(x=A,B,C,D) = 20480/2 = 10240;死区时间固定的上升下降都为数字 100,该数据可根据实际调整;
. r; T0 K% _2 U. M
  1. pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
    0 @( n1 g( y9 T6 F2 D1 @, _! @
  2. pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP1;
    0 L: y" c- Y( ]5 u
  3. pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMPER;
    6 H8 w  u# b! A
  4. pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
    , c! P. [5 R; f- _+ ?
  5. pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;* H! ?! G( M; q- Q# c: ^: ]
  6. pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;
    : {# @6 [% l, j. i3 K" N
  7. pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;$ C0 n4 R" E# I3 M, x  S
  8. pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;- n- w# E$ Q5 @! F/ G0 w: q: c8 ^
  9. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1,
    ' [7 y9 A, o: Y# J
  10. &pOutputCfg);; w% r, D- }( g- Z" G% f
  11. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1,) U2 F5 N7 Y# J" g5 E
  12. &pOutputCfg);: q# U/ r; i3 @, W! R; z+ {( t
  13. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1,! A# b' m6 x' P# t, O2 o
  14. &pOutputCfg);
    0 p$ _& x" a$ A& ^9 v, i8 |
  15. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1,
    5 n2 x* |& E5 @
  16. &pOutputCfg);
复制代码

6 K" ?8 ^* H5 o4 ?! X实际测试波形:
9 h6 s; \1 P" j) v- }1 v- `为方便观察,只取每相的通道 1 的波形进行观察。如下,可看到清晰的移相信号:
( Y9 i; n( P8 |( }" |* f, `5 [/ j6 s9 b- {9 L. ]

7 c5 G( Y9 b" P2 N$ U$ f1 a 4{D9YW_M}{1`P1T1[3Y`$ST.png ! V. E6 n8 |8 Y3 F6 M; m# n- ?' j

- K6 ~! y; a, ]& Q
赞 收藏 评论1 发布时间:2022-2-25 19:35

举报

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

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

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版