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

【经验分享】STM32F3 系列的HRTIM 产生PWM理解与应用 (以STM32F334为例,cube,HAL库,附带完整程序)

[复制链接]
STMCU小助手 发布时间:2021-12-5 10:47
这几天研究了下STM32F334的HRTIM,看了STM32F334的单片机参考手册,基于Cube的HAL库做出以下总结。
4 I5 J8 o( e; q5 m2 ?5 O3 j, _. l& V
F334单片机自带的HRTIM经过始终配置后可以高达144M Hz,经过内部处理后,频率可以高达4.608G Hz(144M*32).而相对与高级定时器TIM1和其他普通的定时器,其配置起来更加复杂,所涉及的东西也更多。
/ U5 Z2 D) w% V7 W$ i# \) G+ i# d9 L# K3 N1 K- F( r
20181006151627357.png

+ P( m- U; `; N1 z0 Y0 C8 R/ M& ^
! `0 ~! r% u4 F5 E5 {! w3 V我选的是F334C8T6,准备做一个数控电源,就先简单的通过HRTIM产生一个PWM吧。以后会更新如何配合ADC使用。外部晶振8M,2线下载形式,打开HRTIM的Timer A.
0 E  K& Q/ G5 A9 f1 e, G1 V# e$ R0 Q5 R& ~5 t4 E% Y" P6 X3 F
20181006151809111.png

) v$ }# Y0 ?4 @6 q( v5 M$ w) I" u8 }* E) q! e
这个是F334的始终配置,选择外部告诉时钟 HSE,系统时钟72M,一定要勾选HRTIM时钟,为144M.
9 g& j" @5 e- d8 z, A
- D/ ~( w" D! P0 {好了下面开始重点讲解HRTIM配置过程中,各个参数的意义了。8 h4 T! v* x+ F3 V$ T" u" r
20181006152009193.png

) z0 p* `2 F6 d0 I/ m: _% X* d% r% N+ y( `0 Q+ l& x) z
上面是你打开HRTIM 最基本的配置,General自动匹配你选的Time A..E. 而Base Setting  里面和普通的定时器配置没什么区别,主要是选择好周期(会自动告诉你PWM频率)。 Repetition和普通的定时器一样,用于产生多少个波,这个在电机控制方面很有用。# K8 T% C4 J4 Y' K/ i1 z4 S
4 e: E! x# ]4 A" ]
Mode:  是连续模式和单一模式,就是产生连续的波还是单一的脉冲。
+ h$ l4 p9 v. q$ U7 x4 k
$ A9 k# s3 F) Y4 }' ~+ c
20181006152347502.png
- x% |% w: q% C" |- l" I

4 f* ]. u" T( r4 g* rHalf mode.... :  半波模式下,是输出PWM占空比占据一半的情况,可以选择使能或者不使能。, H4 c6 |3 o* s3 r  a

+ o/ K0 W- n% G% IStart/Reset/ on sync用于同步定时器,是否是外部事件发生的时候开启或者关闭定时器。输出PWM的时候只能选no  effect/ G  c/ u( @$ I  N% G/ x

% F# E& @0 `( E  }) FPreload Enable: 这个没多说的,就是定时器自动重装。
, e# g4 c* C* T  I% t
. Q& F+ U- m  g& M# m. l接下来的降格Update参数,用于DMA,不用DMA的时候不用配置就行
& n" u0 d4 p5 p- w  x" Q% d' d1 Y9 P  ^; j* z+ s
Burst Mode: 就是控制定时器输出波形的时间,当开启Burst 模式的时候,波形不能输出,和Delay protection 差不多,不过有区  别,可以百度或者看参考手册
: x. Q/ w' V: I/ @5 ~% f- x3 E" F- o& N6 }) U5 X
Push pull : 不是之前选的I/O输出的推挽输出,是一种波形选择方式,百度吧,解释起来浪费时间。9 V0 U, Z( C0 x' h0 R5 d; l% k; J

! j1 Q7 O4 O8 l4 m3 X& D% z# H! gFault lock :  HRTIM 有Fault 事件检测,检测到可以关闭定时器输出等等,所以这个是设置Fault 是否可以写入。
  X- ?- w7 c# }# z
# f6 x6 i2 H  d' \Dead timing : 简单的说就是死区时间,如果选择使能,就一定输出PWM了,而且每个通道的匹配通道不需要配置。, p+ y: Q8 O9 N

' p$ m2 @+ G: j, r接下来的几个参数牵涉到几个定时器之间的联系,比如 time A update 发生了,会对time B 产生什么结果等等。; `" h" Y  ~' j7 _: B
% z/ |% |3 U" ^9 O2 O  f
(我上述的配置是为了产生互补的PWM波,所以开启了死区)
2 D5 D5 [6 h* C/ h% I% g7 A8 u  d" X9 L
2018100615414192.png
5 u  x9 N) M1 u3 c& N. I
& V0 P& ]' u4 T; Y
这个用于设置PWM的CMP1,到CMP1 的时候发生什么。可以配置多个CAP: a2 P7 @5 h- T, x7 F) r2 v( A
) s; l/ t$ _$ t# u+ A" F0 v
20181006154321736.png

0 J  p' h. Z$ O: y! x- l& H: ^% O
这些是捕获,外部事件,DMA等等,根据需要配置,不需要配置的时候Disable就可以刚才刚才在基础设置中选择了死区,所以下面会给死区的配置。和普通的配置差不多,但是这个更高级,可以配置死区Sign,是高电平多出的死区,还是第电平多出的死区。还可以配置上升沿的死区和下降沿的死区不同,还可以锁定防止一些外部事件来改变死区时间。
, `5 ]5 G( w/ \. _6 v4 \- N6 x1 o1 J
  b  K8 D* K1 x2 s
20181006154643425.png

; ~4 m+ C  l9 |: P0 q; p9 X* r% G) N5 h& p5 D& y- R& J
最后,就是配置两个通道啦,由于PWM输出配置了死区,导致了TA2不需要配置,会自动互补。而配置TA1 和之前的差不多,配置在什么时候Set (高电平),什么Reset(低电平)。我上面是在开始是高电平,当CAP1发生时,编程低电平。其他设置发生了Burst 时候,空闲状态是什么(可高可低),Fault事件来了对PWM的影响等等。
6 v: N- ^% X% T; `
" |' X# ~, q2 O$ e* x0 ?1 O基本配置就完成了,此时还不能输出PWM波,这个是Cube的一个重要缺点,他为了保护,不给你任何启动信号,所以你需要在主函数的配置之后加上启动函数:0 U$ ]4 W. t! Y' d

  1. ( q4 |2 y: X6 S7 Q/ {* f/ W
  2.         HAL_HRTIM_WaveformOutputStart(&hhrtim1,HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2);' p# C, `$ M, e3 g4 E* d7 y
  3.         HAL_HRTIM_WaveformCounterStart_IT(&hhrtim1,HRTIM_TIMERINDEX_TIMER_A);
复制代码
3 w. \5 O- [  r
然后就可以输出互补的PWM波啦,I/O口PA8,PA9。
9 V1 {1 ^( n) g$ i9 \4 \
: [  W- f# b2 d! ]/ F3 J) K9 \( x$ i, ]+ k5 k- Z0 @
6 R$ T5 ?$ @# o9 t; S# _
2018100615441084.png
收藏 评论0 发布时间:2021-12-5 10:47

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版