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

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

[复制链接]
STMCU小助手 发布时间:2021-12-5 10:47
这几天研究了下STM32F334的HRTIM,看了STM32F334的单片机参考手册,基于Cube的HAL库做出以下总结。
6 W" {  |# F9 K2 Z! }
  i* |, z6 u( FF334单片机自带的HRTIM经过始终配置后可以高达144M Hz,经过内部处理后,频率可以高达4.608G Hz(144M*32).而相对与高级定时器TIM1和其他普通的定时器,其配置起来更加复杂,所涉及的东西也更多。
/ |; I$ b" }4 w7 Q$ t4 C$ E- M, z8 }1 N5 V
20181006151627357.png
2 K( Q- E% u( g  O" `
! Q, m+ L1 C- c- Y0 `" F
我选的是F334C8T6,准备做一个数控电源,就先简单的通过HRTIM产生一个PWM吧。以后会更新如何配合ADC使用。外部晶振8M,2线下载形式,打开HRTIM的Timer A.& k9 Z- y6 r9 m1 n: a

5 Q) P5 T& u* ~& `& {0 M% c0 c
20181006151809111.png

; j$ S9 u7 [& J3 e4 R3 y/ b$ ~- r
' S3 o0 v5 ]' W, P. K0 L/ P" T( v" \8 I 这个是F334的始终配置,选择外部告诉时钟 HSE,系统时钟72M,一定要勾选HRTIM时钟,为144M.
3 t% `( m' B; X+ m3 k# a( p' s$ C* f: o0 {9 J! ^3 R3 B5 U- C
好了下面开始重点讲解HRTIM配置过程中,各个参数的意义了。
' @; }6 s: N( F' Q( z
20181006152009193.png
- L  o) X8 e8 j& g& N5 c4 Y
4 p. r) B- y  H+ N% E! y$ ^1 j1 G
上面是你打开HRTIM 最基本的配置,General自动匹配你选的Time A..E. 而Base Setting  里面和普通的定时器配置没什么区别,主要是选择好周期(会自动告诉你PWM频率)。 Repetition和普通的定时器一样,用于产生多少个波,这个在电机控制方面很有用。  U# x/ S' A. ]
) j" e& K/ E9 m+ f5 j3 R+ o
Mode:  是连续模式和单一模式,就是产生连续的波还是单一的脉冲。8 E. N' f- w$ H5 s* q0 M* H$ k0 |
; l& s5 j' M* w% e
20181006152347502.png
+ _1 \  x/ c9 F( ?
0 |( _% S: w/ m$ G2 m
Half mode.... :  半波模式下,是输出PWM占空比占据一半的情况,可以选择使能或者不使能。7 |5 K  d1 I1 r! v* \

' F1 |* A# k; Z9 }. Y2 EStart/Reset/ on sync用于同步定时器,是否是外部事件发生的时候开启或者关闭定时器。输出PWM的时候只能选no  effect& T( g7 g6 H7 C6 i" ]* `% j0 p: @

- }1 m  s, X) tPreload Enable: 这个没多说的,就是定时器自动重装。+ Y) o$ s; }  }* i& c+ x7 v" L
, s- L8 w' m8 X: a/ F
接下来的降格Update参数,用于DMA,不用DMA的时候不用配置就行7 K7 K* h  W7 M  g8 Z* m' D
. c( o' {+ c4 b
Burst Mode: 就是控制定时器输出波形的时间,当开启Burst 模式的时候,波形不能输出,和Delay protection 差不多,不过有区  别,可以百度或者看参考手册4 {$ q$ F! _0 l/ I" {- o& c& b- ^
2 p3 p2 i0 l/ W$ H4 Y
Push pull : 不是之前选的I/O输出的推挽输出,是一种波形选择方式,百度吧,解释起来浪费时间。  k4 y4 A$ S+ h2 ?% x

+ J( a2 Z4 Y! c+ H- ^$ l* l& G( @Fault lock :  HRTIM 有Fault 事件检测,检测到可以关闭定时器输出等等,所以这个是设置Fault 是否可以写入。4 `, E" q# W8 b- {! \4 D
7 w! D, _. E; s9 ]- ]6 K( y
Dead timing : 简单的说就是死区时间,如果选择使能,就一定输出PWM了,而且每个通道的匹配通道不需要配置。" v  ]  \- L% l! w

3 {7 Y/ J" J- R接下来的几个参数牵涉到几个定时器之间的联系,比如 time A update 发生了,会对time B 产生什么结果等等。
( p' s/ [: f; L: C
* }7 v, \1 e4 a1 s" z6 ^0 s(我上述的配置是为了产生互补的PWM波,所以开启了死区)
/ Z5 ^, I; j7 Q  Z' G7 |) e2 |  i! P" e# W8 z& j
2018100615414192.png
9 i% l8 u: g) g2 _! P6 ]; H: J" k
2 K1 T1 q6 g- T" K! r0 h
这个用于设置PWM的CMP1,到CMP1 的时候发生什么。可以配置多个CAP
7 w0 k! c9 a' P5 B. a' B8 F3 _) o& q
20181006154321736.png

- v% `: B+ V7 O
2 [+ Z! i! Y& @: R7 r这些是捕获,外部事件,DMA等等,根据需要配置,不需要配置的时候Disable就可以刚才刚才在基础设置中选择了死区,所以下面会给死区的配置。和普通的配置差不多,但是这个更高级,可以配置死区Sign,是高电平多出的死区,还是第电平多出的死区。还可以配置上升沿的死区和下降沿的死区不同,还可以锁定防止一些外部事件来改变死区时间。
0 O# [2 o8 ]: l; a0 b. N! s, A* C2 \8 z# u
20181006154643425.png

1 _) q: r5 @% z2 t
; S& n2 B8 J2 @, b( S最后,就是配置两个通道啦,由于PWM输出配置了死区,导致了TA2不需要配置,会自动互补。而配置TA1 和之前的差不多,配置在什么时候Set (高电平),什么Reset(低电平)。我上面是在开始是高电平,当CAP1发生时,编程低电平。其他设置发生了Burst 时候,空闲状态是什么(可高可低),Fault事件来了对PWM的影响等等。
/ i( J' p; X" M, S& g* I. `% h0 ?% P0 ?
; Y2 U0 `- q3 K: u基本配置就完成了,此时还不能输出PWM波,这个是Cube的一个重要缺点,他为了保护,不给你任何启动信号,所以你需要在主函数的配置之后加上启动函数:) b% S( [8 J. Y0 {

  1. . O1 W! z, y) h; z
  2.         HAL_HRTIM_WaveformOutputStart(&hhrtim1,HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2);
    % ?/ r! D* f! F3 S( F
  3.         HAL_HRTIM_WaveformCounterStart_IT(&hhrtim1,HRTIM_TIMERINDEX_TIMER_A);
复制代码

" G- j3 z$ V: R$ V1 E然后就可以输出互补的PWM波啦,I/O口PA8,PA9。
: G4 I' L3 l5 I1 W4 [+ w: ?
5 B8 ]  T4 ?+ Q% b3 q- P! I3 A1 w& m
  n2 J+ @3 l. F
2018100615441084.png
赞 收藏 评论0 发布时间:2021-12-5 10:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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