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

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

[复制链接]
STMCU小助手 发布时间:2021-12-5 10:47
这几天研究了下STM32F334的HRTIM,看了STM32F334的单片机参考手册,基于Cube的HAL库做出以下总结。
2 |! B7 t# p' k) F0 ^9 V
( C, u; }2 g( d, ?1 K7 D, lF334单片机自带的HRTIM经过始终配置后可以高达144M Hz,经过内部处理后,频率可以高达4.608G Hz(144M*32).而相对与高级定时器TIM1和其他普通的定时器,其配置起来更加复杂,所涉及的东西也更多。
) g1 {8 J7 D1 y
0 e0 R! L; r/ m/ r! S4 R
20181006151627357.png

! Q( d5 j+ H3 g  Z+ S: {/ ]; W  C( k
, E$ t- D3 C* e$ A# c' I4 L3 k' H我选的是F334C8T6,准备做一个数控电源,就先简单的通过HRTIM产生一个PWM吧。以后会更新如何配合ADC使用。外部晶振8M,2线下载形式,打开HRTIM的Timer A.
8 n( s/ }( ^1 d1 b" Q0 W! f& E" r; t
20181006151809111.png
4 Y& x/ n, D* V6 y
! O' @/ g) K% {2 Z7 @8 e* `$ u% L7 ~
这个是F334的始终配置,选择外部告诉时钟 HSE,系统时钟72M,一定要勾选HRTIM时钟,为144M.
1 o1 P( w. y- K9 q4 ~& ?
0 S+ U; e, o: y% Y  V2 A/ _2 ^好了下面开始重点讲解HRTIM配置过程中,各个参数的意义了。/ H6 M0 V  G8 O* c% A( O. O" p
20181006152009193.png

( k: k' ^& a! ?+ C3 ~9 h
5 M* N" X* H: J: r. R" c% R1 i1 X1 W7 d0 P* J上面是你打开HRTIM 最基本的配置,General自动匹配你选的Time A..E. 而Base Setting  里面和普通的定时器配置没什么区别,主要是选择好周期(会自动告诉你PWM频率)。 Repetition和普通的定时器一样,用于产生多少个波,这个在电机控制方面很有用。
& [1 A/ p2 M' G1 B! i
* \. V! V5 Z" N6 q# _' p$ yMode:  是连续模式和单一模式,就是产生连续的波还是单一的脉冲。
$ K. X+ D8 @& K- x1 E/ i
; @7 d+ N  u2 E0 }1 y
20181006152347502.png

6 D5 _4 d' u+ K' O  N! j9 O. q2 T: W
9 w9 m, u. w( F; q# T" s8 r0 ?Half mode.... :  半波模式下,是输出PWM占空比占据一半的情况,可以选择使能或者不使能。, J9 _, E8 |% H+ }; \' _5 C

6 d% |, f2 X2 zStart/Reset/ on sync用于同步定时器,是否是外部事件发生的时候开启或者关闭定时器。输出PWM的时候只能选no  effect
- _- Y( r$ k6 s; g0 }1 L) V4 \0 p0 W$ y1 N
Preload Enable: 这个没多说的,就是定时器自动重装。
; ]2 D% p0 T# S3 f# Z0 B9 W8 R
9 j7 @- |0 R8 F1 D- h$ V& Q接下来的降格Update参数,用于DMA,不用DMA的时候不用配置就行' r+ N7 f/ K( H- v, l1 f

* v& \, s+ N9 o# @4 B9 u) rBurst Mode: 就是控制定时器输出波形的时间,当开启Burst 模式的时候,波形不能输出,和Delay protection 差不多,不过有区  别,可以百度或者看参考手册, _% J* I, b( Y
+ u: \3 o7 O) J1 O" Y$ T& d
Push pull : 不是之前选的I/O输出的推挽输出,是一种波形选择方式,百度吧,解释起来浪费时间。
" W6 v% R3 u& ^' f0 [! A( v# S4 @. G6 \3 T2 z6 \3 W/ {# n
Fault lock :  HRTIM 有Fault 事件检测,检测到可以关闭定时器输出等等,所以这个是设置Fault 是否可以写入。
* d0 _8 t6 y$ l! p; E
  Z7 C) `& u& k1 j9 D, P: f; g- t! EDead timing : 简单的说就是死区时间,如果选择使能,就一定输出PWM了,而且每个通道的匹配通道不需要配置。0 F: ?$ T, b; {3 g5 [; q/ o( _4 P

! I2 \% o  s5 w; N% ~; I接下来的几个参数牵涉到几个定时器之间的联系,比如 time A update 发生了,会对time B 产生什么结果等等。
" B, {! `1 @9 a" B) V5 u( _3 ~5 u* ^+ v
(我上述的配置是为了产生互补的PWM波,所以开启了死区)
/ H& e& U: _5 |
8 `( C2 S7 d. \% z) n
2018100615414192.png
7 j- w7 g$ i, P

# g: q: v& |" j1 N这个用于设置PWM的CMP1,到CMP1 的时候发生什么。可以配置多个CAP1 Z% F4 ~" c1 V0 V+ M) J' @5 p

! s! ^! k# ?+ n# L
20181006154321736.png

' A5 M% H: B- K, C
7 g( h. q3 g) [7 W5 A这些是捕获,外部事件,DMA等等,根据需要配置,不需要配置的时候Disable就可以刚才刚才在基础设置中选择了死区,所以下面会给死区的配置。和普通的配置差不多,但是这个更高级,可以配置死区Sign,是高电平多出的死区,还是第电平多出的死区。还可以配置上升沿的死区和下降沿的死区不同,还可以锁定防止一些外部事件来改变死区时间。
, ?5 n( G5 X/ N
; r- ?+ z7 i, E/ Z
20181006154643425.png
4 r0 \) t4 Z$ l1 `) I$ V8 V

3 P  P# D/ C$ u4 u3 G1 B) y最后,就是配置两个通道啦,由于PWM输出配置了死区,导致了TA2不需要配置,会自动互补。而配置TA1 和之前的差不多,配置在什么时候Set (高电平),什么Reset(低电平)。我上面是在开始是高电平,当CAP1发生时,编程低电平。其他设置发生了Burst 时候,空闲状态是什么(可高可低),Fault事件来了对PWM的影响等等。7 G0 X# I* z7 l$ a

( M. C+ L" @" C4 G基本配置就完成了,此时还不能输出PWM波,这个是Cube的一个重要缺点,他为了保护,不给你任何启动信号,所以你需要在主函数的配置之后加上启动函数:+ a, N; v4 E* _7 f; F: L' a

  1. * ~1 |3 q, z: P4 s
  2.         HAL_HRTIM_WaveformOutputStart(&hhrtim1,HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2);% x% o$ d- ]0 I# C5 ?" O+ t! D
  3.         HAL_HRTIM_WaveformCounterStart_IT(&hhrtim1,HRTIM_TIMERINDEX_TIMER_A);
复制代码

+ B+ v/ y) q0 i/ O( e然后就可以输出互补的PWM波啦,I/O口PA8,PA9。& k) ?5 J- L& H4 U& _
6 }+ y$ o# p6 J$ m# R, W

, C/ H+ ?4 \& }, B1 x; W5 {
) }9 K5 d% @" l" U+ R& _
2018100615441084.png
收藏 评论0 发布时间:2021-12-5 10:47

举报

0个回答

所属标签

相似分享

官网相关资源

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