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

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

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

% v% C4 h) j' H2 N/ TSTM32F334 内部 HRTIMER 结构) L( _5 R8 d/ M/ F" C( [$ T- p
下图为 HRTIMER 的框图,可以看到该高精度 Timer 拥有五路独立的计数器,可以产生独立的五路带死区互补输出的 PWM波形,同时 Master Timer 这个没有输出端口的独立 Timer 可以作为五路其他 Timer 的清零同步信号。
( A( |0 X5 R9 j  H  d* V1 i# h; g) @9 O1 w; A7 S
1D2C]9_TBO[T0__)_ZMBMLE.png
% H+ q8 L& S' P0 a: a  Q$ Z+ O/ f7 r0 t; B  ^3 F7 Y  l% ~
; R" B! p, U7 j6 @
需要产生的波形

7 t9 I, \: |9 b0 @假定需要输出四路带死区互补输出 PWM 波形,频率相同,但各路波形存在相移:
$ I6 \% D9 h' r! y; P" GPWM1,PWM2,PWM3,PWM4, 需要控制这四路波形的相位,
  E( R8 R# D+ z7 ?PWM1 为 0 度,PWM2 为 30 度相移,PWM3 为 85 度相移,PWM4 为 100 度相移占空比假定都是 50%的占空比
; v5 p: f- A1 o% l+ |6 L& T) l2 I! Q+ j( ~3 j, Z* @6 y
) H* w0 F& A% h" T' Z1 S. P
产生上述波形的机制& t' O8 i* g( _
STM32F334 的波形产生采用了比较输出模式,也就是说可以单独设定波形的 Set,Reset 位置,当需要将各路波形统一起来,需要同一个触发源,在不同相位点去触发 Timer 计数器复位,这样当设定好比较模式时,波形将自动输出,准确快速,并且可靠;
* N) \% H* T+ u- t  K3 u: A  _& l& C# D1 B! S" B3 O
3 V3 v2 o: t2 m7 Z0 V4 V
配置步骤
" O6 E0 p7 ^+ O) P3 J配置管脚以及时钟
% j/ k+ ^0 }6 ^9 j) N% d" H1 G8 y+ j1 H$ {  @

. |% c) {- L4 e7 ]8 @+ L$ O  z4 } 1]_I2RX$VGGG47PZE4J9[YI.png
, R8 r- ?3 H3 ]- p7 r0 K6 ], `- v9 O% Z# g6 e

, V8 w2 m: d$ d  B! C* B3 [( z0 ^
配置 Master Timer
2 M/ f* U2 S+ O. M  _- `4 p假定使用 128MHz*8 = 1024MHz 作为基本时钟源,Master Timer 设定为 50KHz,则 Master Timer 的 ARR 寄存器数据为1024MHz/50KHz = 20480,即 360 度对应 20480;
+ {' r' }8 m9 A9 c+ x- cMaster Timer 的 Update 事件作为 TimerA 的计数 reset 信号,此时设定相移为 0 度% O4 F3 W. ^/ X# @4 X
Master Timer 的 Compara Value 1 作为 TimerB 的计数 reset 信号,如果设定相移为 30 度,则 Compara Value 1 =ARR*30/360 = 1706( |4 H" _3 N, I& c
Master Timer 的 Compara Value 2 作为 TimerC 的计数 reset 信号,如果设定相移为 60 度,则 Compara Value 1 =ARR*85/360 = 34130 D  S7 ]- e# w( i- B; e
Master Timer 的 Compara Value 1 作为 TimerD 的计数 reset 信号,如果设定相移为 90 度,则 Compara Value 1 =ARR*100/360 = 51209 ]& ]( F! H6 q, a8 q
  1. pTimeBaseCfg.Period = 20480;
    6 D1 y9 K  f: i" T: T$ P( |) N5 ]
  2. pTimeBaseCfg.RepetitionCounter = 0x00;. P- J; k- W6 U2 G3 L  P
  3. pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_MUL8;/ u1 C: k% l! m9 c( w7 B, I
  4. pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;9 K" t* ~% f5 {7 N# {1 x5 J
  5. HAL_HRTIM_TimeBaseConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, &pTimeBaseCfg);) l) o; E# g4 W+ _0 [0 C6 W
  6. pCompareCfg.CompareValue = 1706;
    ' f' g3 H9 u7 ]& D8 I
  7. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_1,&pCompareCfg);8 o/ R# |0 W( Q
  8. pCompareCfg.CompareValue = 3413;4 ?9 D3 B+ @7 K$ F, a2 r
  9. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_2,&pCompareCfg);5 q8 a6 c) U( a. `- I7 N5 V
  10. pCompareCfg.CompareValue = 5120;, J' c! ^8 S& _5 R
  11. HAL_HRTIM_WaveformCompareConfig(&hhrtim1, HRTIM_TIMERINDEX_MASTER, HRTIM_COMPAREUNIT_3,&pCompareCfg);
复制代码

  T2 N0 D: K* b0 @7 h" g& z配置各个独立 Timer& T! s* S* A9 Y: c+ p: j  U9 y& L) v
Timer 的计数 Reset 信号分配如上面所示,因为这里设定的占空比为 50% ,那么只需要使用到独立 Tiemr 的 ComparaValue1 作为该 Timer 的 Set 信号,而 Timer 的 update 事件作为该 Timer 的 Reset 信号即可,当然这里还要说明,如果如果设定不同占空比信号输出,也可以直接配置该 Timer 的 Compara Value2 作为该 Timer 的 Reset 信号即可;. E7 d" m, R4 o. M
本例因为是 50%的占空比,那么直接设定 Compara Value1x(x=A,B,C,D) = 20480/2 = 10240;死区时间固定的上升下降都为数字 100,该数据可根据实际调整;* U  r! D/ x8 R* I0 Q2 R
  1. pOutputCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;* U4 H7 Y6 p; J& Y
  2. pOutputCfg.SetSource = HRTIM_OUTPUTSET_TIMCMP1;' }! V9 `* F0 s$ }; N, n' b  y' W
  3. pOutputCfg.ResetSource = HRTIM_OUTPUTRESET_TIMPER;8 n3 M) x7 C& v  e
  4. pOutputCfg.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;
    ' t- O4 B' U( y. P3 r) H
  5. pOutputCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;' \+ ^" Y. E( [0 m  I, C
  6. pOutputCfg.FaultLevel = HRTIM_OUTPUTFAULTLEVEL_NONE;8 v5 ?% \. L* c( _7 I. w
  7. pOutputCfg.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;$ b" x: k5 f5 ~" {+ V% w
  8. pOutputCfg.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;& j; a: r+ _0 l) C! {
  9. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_A, HRTIM_OUTPUT_TA1,
    2 E/ H6 x% t  `1 M; D- C
  10. &pOutputCfg);
    , u; O' C" h' f
  11. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_B, HRTIM_OUTPUT_TB1,
    6 B5 R0 _# y1 u
  12. &pOutputCfg);
    4 a. J) E' N! V) P5 K
  13. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_C, HRTIM_OUTPUT_TC1,' n+ `! I! D; ^+ }, ?
  14. &pOutputCfg);
    * q# O/ [) h4 {' e  t, e* j2 Q
  15. HAL_HRTIM_WaveformOutputConfig(&hhrtim1, HRTIM_TIMERINDEX_TIMER_D, HRTIM_OUTPUT_TD1,3 ?, d4 D3 d: N5 y& V: c% c# Q
  16. &pOutputCfg);
复制代码
; U+ ~& E$ T; {# v
实际测试波形:9 l6 s( I" L4 e5 c( U
为方便观察,只取每相的通道 1 的波形进行观察。如下,可看到清晰的移相信号:# O$ _5 Y  B& Y! H, z! P( K$ h# ]

3 K8 Y0 `0 |4 D7 j' U& R. O, |$ w/ J/ `, I1 r/ @6 v
4{D9YW_M}{1`P1T1[3Y`$ST.png ' R) }+ Q+ f, w/ v, d
1 C8 r" V( J  `
收藏 评论1 发布时间:2022-2-25 19:35

举报

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

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

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版