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

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

[复制链接]
STMCU小助手 发布时间:2022-2-25 19:35
前言
+ W. y( ]: \& G$ G0 F: J% zSTM32F334 内部集成了高精度 Timer,最高主频 4.6GHz,灵活的控制用于产生数字电源等产品的 PWM 控制信号,内部丰富的联动机制可以产生各种实际需求波形,本文针对多相相移信号的产生给开发者一定启示,抛砖引玉,开发者可以根据不同需求产生应用所需的波形。
4 J4 e. c/ r; U0 j( m
( i9 S8 |% p8 U, c, H2 l+ _STM32F334 内部 HRTIMER 结构' C5 \$ }3 t" \9 ~" L) Z
下图为 HRTIMER 的框图,可以看到该高精度 Timer 拥有五路独立的计数器,可以产生独立的五路带死区互补输出的 PWM波形,同时 Master Timer 这个没有输出端口的独立 Timer 可以作为五路其他 Timer 的清零同步信号。# P) J4 e- ?5 f. H4 s! B! s' f% i
! J) ]1 W/ ?4 v! J6 s0 W: p
1D2C]9_TBO[T0__)_ZMBMLE.png
2 J. k; ^3 t  v/ Q
' N: d5 u  e. @  f5 G7 V
2 r6 L, D5 w7 B9 S5 M需要产生的波形

: x; p8 h/ P; k- t8 E$ X+ x假定需要输出四路带死区互补输出 PWM 波形,频率相同,但各路波形存在相移:
& @: p! v7 n: G6 g) F+ zPWM1,PWM2,PWM3,PWM4, 需要控制这四路波形的相位,% U. I5 z, C0 a
PWM1 为 0 度,PWM2 为 30 度相移,PWM3 为 85 度相移,PWM4 为 100 度相移占空比假定都是 50%的占空比
' U8 \2 `$ A7 f
& e6 o# L& j; E. [0 t' l  R9 T- W9 \# }* a# [
产生上述波形的机制; a  ?$ C2 c# q$ V7 s7 L8 _
STM32F334 的波形产生采用了比较输出模式,也就是说可以单独设定波形的 Set,Reset 位置,当需要将各路波形统一起来,需要同一个触发源,在不同相位点去触发 Timer 计数器复位,这样当设定好比较模式时,波形将自动输出,准确快速,并且可靠;
' m" y5 Z# S2 n, f" d% Y9 c: ^0 ~- T0 ^6 a

# k8 v6 B$ `. q2 t+ y配置步骤! X0 F& X2 I! O
配置管脚以及时钟
: I) W2 J2 U- M: U( C6 y0 o! E5 @2 R0 Q& Y+ I8 x- }, R" x
- G" Q% i, Y1 `: Y
1]_I2RX$VGGG47PZE4J9[YI.png ) ^- a9 _8 P8 y# k& }

( W" g$ i2 i) e& J* l3 ]" C+ N" n7 k2 h9 L+ y( y
配置 Master Timer2 d6 j. c+ B5 H4 w, W! V5 K
假定使用 128MHz*8 = 1024MHz 作为基本时钟源,Master Timer 设定为 50KHz,则 Master Timer 的 ARR 寄存器数据为1024MHz/50KHz = 20480,即 360 度对应 20480;( @2 z5 d/ \2 v- a
Master Timer 的 Update 事件作为 TimerA 的计数 reset 信号,此时设定相移为 0 度
; n# B* t0 D( S/ a" w1 yMaster Timer 的 Compara Value 1 作为 TimerB 的计数 reset 信号,如果设定相移为 30 度,则 Compara Value 1 =ARR*30/360 = 17060 B) D8 h# O, c: y! v( ^# r# _
Master Timer 的 Compara Value 2 作为 TimerC 的计数 reset 信号,如果设定相移为 60 度,则 Compara Value 1 =ARR*85/360 = 3413
. V5 v) c# v" d8 vMaster Timer 的 Compara Value 1 作为 TimerD 的计数 reset 信号,如果设定相移为 90 度,则 Compara Value 1 =ARR*100/360 = 5120$ K# T/ ?9 f: _( V. ^
  1. pTimeBaseCfg.Period = 20480;! z% J% N+ t  q
  2. pTimeBaseCfg.RepetitionCounter = 0x00;
    1 u" W( ]( A/ }1 S6 Q
  3. pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;  k0 g( r" U+ S4 M, J) Q
  4. pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
    & C& e4 j; o. ^' V! D9 z
  5. HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);
    % @# k  c# C4 |! l7 z
  6. pCompareCfg.CompareValue = 1706;+ h0 Y9 J" s9 F/ ]& S' I
  7. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1,&pCompareCfg);
    8 W; c8 R4 |* w
  8. pCompareCfg.CompareValue = 3413;+ B% K6 G: L/ k- D
  9. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2,&pCompareCfg);
    / ~4 s( R% N  B% _4 c' v4 e- m" u
  10. pCompareCfg.CompareValue = 5120;& l2 a8 f/ c5 k( a
  11. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3,&pCompareCfg);
复制代码
: X9 v1 g! M" }) t  d- N
配置各个独立 Timer
4 z) l! x% m; C9 F# U# O- k% yTimer 的计数 Reset 信号分配如上面所示,因为这里设定的占空比为 50% ,那么只需要使用到独立 Tiemr 的 ComparaValue1 作为该 Timer 的 Set 信号,而 Timer 的 update 事件作为该 Timer 的 Reset 信号即可,当然这里还要说明,如果如果设定不同占空比信号输出,也可以直接配置该 Timer 的 Compara Value2 作为该 Timer 的 Reset 信号即可;7 H. B( E9 J: r8 h7 {8 [4 d5 @
本例因为是 50%的占空比,那么直接设定 Compara Value1x(x=A,B,C,D) = 20480/2 = 10240;死区时间固定的上升下降都为数字 100,该数据可根据实际调整;
7 A1 U, o% w; A8 n0 d8 N* L$ M
  1. pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
    ' o, u" I9 P, c# k
  2. pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP1;
    6 B6 q1 ?$ u0 |- M
  3. pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMPER;& q0 k( B* D& M, M" M2 H$ f
  4. pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;& B! |! F9 s" ~. h+ |; o# X
  5. pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
    $ l5 b" [2 t# D8 u/ k3 f
  6. pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;! J* X: i5 ?: n" ?
  7. pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;
    : @- ~$ B3 q+ e! z+ @( W
  8. pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;4 |7 o; ], ~1 ?2 Y, }  K6 P
  9. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1,3 ?9 P& S6 A: v$ J1 Y& l
  10. &pOutputCfg);
    ) S% F, Z3 O* C& j; B
  11. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1,# i( ]7 d1 m8 o0 L( F7 Q7 L
  12. &pOutputCfg);
    8 k. H" D3 W9 \: N
  13. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1,* K! W. j  c+ i3 N" y
  14. &pOutputCfg);
    + }9 U: ~$ t. k4 x- T
  15. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1,9 ~+ m- b2 y  T1 D# i2 |; c
  16. &pOutputCfg);
复制代码
$ m' q  }" ?& j" c  a$ t
实际测试波形:) x+ U6 j& o6 z! o2 A/ h1 |
为方便观察,只取每相的通道 1 的波形进行观察。如下,可看到清晰的移相信号:
5 f3 ?1 Z  l4 C& @1 v' c7 N' l6 z4 ^: [, i. h

" L5 M9 X) B8 ]8 U. @ 4{D9YW_M}{1`P1T1[3Y`$ST.png
+ u# F; }2 ^3 ]6 ?. \9 ]% u2 a4 |6 G0 Z( z1 n; w8 ]
赞 收藏 评论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 手机版