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

硬件机制实现固定个数的 PWM 脉冲输出

[复制链接]
STMCU小助手 发布时间:2022-8-2 18:26
前言
5 R# m6 t5 t/ tSTM32 高级定时器提供了丰富可调的功能。应用中,需要输出固定个数 PWM 脉冲时,可以利用 STM32 高级定时器的硬件机制,实现在不占用 CPU 资源的情况下,输出固定 PWM 脉冲数。本文利用 STM32CubeMX,介绍如何利用 STM32 的高级定时器实现固定个数 PWM 脉冲的输出。
, T9 k+ A- Z3 d+ f- `, d
, l, r$ _2 d/ |* k$ ~; O# V

/ ]! K% m+ a2 r6 a一 实现机制 2 L5 y  _' ]. y* ?2 G( X& n
利用 STM32 定时器的 PWM 模式和单脉冲模式,结合高级定时器独有的重复计数(TIMx_RCR 寄存器)功能,实现固定个数 PWM 脉冲的输出。实现机制如下图所示。9 j, d5 V1 ~; @9 T* A' E
6 E5 v# e/ L. Z- [. a
* B9 v7 h* F% j5 l* ?0 D  E

& ^! e: `9 A( Y$ S$ O2 f% M/ q' j% L) F7 ~5 T

' n, s# `) ~. E+ U  S6 F根据应用需要,利用自动装载寄存器(TIMx_ARR)、预分频寄存器(TIMx_PSC)等配置对应的 PWM 周期;利用自动装载寄存器(TIMx_ARR)、TIMx_CCRx 配置需要的占空比;利用 TIMx_RCR 配置需要的脉冲个数,TIMx_RCR 的范围为 0~255,所以利用这种机制,输出 PWM 脉冲的个数在 1~256 范围内。* P8 S: X6 n+ @% {, d
在启动 PWM 前,开启单脉冲模式(单脉冲模式会在更新事件发生时,停止计数器),高级定时器在输出对应个数的PWM 脉冲后自动停止,实现输出固定个数 PWM 的需求。更多关于配置细节的介绍请参考文档 RM0090。
, n$ f* q( t( I$ |! v: j) p- i; N( y3 R  ~% r% M! ~/ R8 _
3 n; q) K( f% ?1 |9 g7 K' }, [( T5 f
二 实现例   S3 Q: s% a# B$ {9 ]9 X: I7 M, v
首先利用 STM32CubeMX 生成 PWM 输出的初始化工程,然后介绍如何通过简单的添加,实现固定个数 PWM 脉冲的输出。3 r- y8 \$ W5 f) y
本文中例程基于 STM32F4xG-Eval 板和 HAL 驱动库,利用高级定时器 1 的通道 3 输出 PWM 脉冲。为简化演示环节,本文中不对 STM32 时钟、PWM 周期等配置来源做细节讨论,具体实现可参考 STM32 参考手册中定时器章节,以及 ST 提供的PWM 例程。实现步骤如下(开发者也可以直接在 PWM 例程上做修改实现,从而省略 STM32CubeMX 生成工程的步骤):
3 _/ A6 W7 `# s8 h/ C$ g. d1. 利用 STM32CubeMX 获取 PWM 输出的初始化工程。
" F6 Z7 H7 j0 Y/ C* O, X9 [a. 选择对应的目标微控制器(本文采用 STM32F407IG),选择调试接口、外部时钟(根据硬件平台情况)、8 i0 s6 l9 u, x, c" ?  I! Y
高级定时器 1 通道 3 选择‘PWM Genration CH3’(其他通道也支持)。
0 `0 P6 {# B8 y% \
* u5 \0 V7 i. C, x7 V$ ~* b* H" k
* L" e7 k4 F  C! f
53HTX`WFHZLX1HM}GQ]Y{ZM.png ( k) z: E' c. \) h* ~7 e
# q4 n7 ?. u. [+ P

7 _' j" R* h' q$ x1 R& ]6 Q; B" qb. 切换至‘Configuration’标签页,单击‘TIM1’打开 TIM1 配置界面。配置如下。) H6 \4 [& m& b, }2 e' p8 _
4 B6 Y  Z6 G, `; H& W

" \2 O/ R" z# |' I7 ~( z @07V]R6OU5`1S14P_9MNE.png , Q$ T0 c% A& h; \: ^
8 _$ l# K" h) ?3 R& w& [0 i
QSV76)5WMMC494@[[PSWW7K.png ! b9 q* `1 O3 R" ]4 z
Repetition Counter 决定了 PWM 脉冲个数(Repetition 值 + 1)。更多详细介绍请参考对应 STM32 的参考
: e; i7 j9 z! i手册中定时器章节。
) k* c, w: {( M" M3 e3 O! y# h! u* L5 c  L2 k- x
2. 在生成工程的 main.c 中,添加单脉冲模式的支持,实现固定个数 PWM 脉冲的输出。6 a' u/ ^* r4 X
下述指令,产生固定个数的 PWM 脉冲,然后 PWM 输出自动停止。注:停止时,电平对应为 CH Polarity 设置状态。2 M& A6 [$ _% V# @, q
  1. <font face="Tahoma"><font size="3"><font color="#000000">/* USER CODE BEGIN 2 */ </font></font></font>4 d; S% O, K. ]* O+ t. C. V" O
  2. <font face="Tahoma"><font size="3"><font color="#000000"> /* Reset the OPM Bit */</font></font></font>  N2 u  r8 F9 O7 l' L* G5 h) o
  3. <font face="Tahoma"><font size="3"><font color="#000000"> htim1.Instance->CR1 &= ~TIM_CR1_OPM;</font></font></font>
    , Y' g) k; o; L. c: [1 x
  4. <font face="Tahoma"><font size="3"><font color="#000000"> /* Configure the OPM Mode */</font></font></font>6 c0 T% M$ a' L2 j  S6 b
  5. <font face="Tahoma"><font size="3"><font color="#000000"> htim1.Instance->CR1 |= TIM_OPMODE_SINGLE;</font></font></font>
    # D) ?- z1 g! @; h+ ?1 N+ p, }9 z. E1 V
  6. <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
    $ s  D; J' N' t. y$ {% r
  7. <font face="Tahoma"><font size="3"><font color="#000000"> if(HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3) != HAL_OK)</font></font></font>! m% }$ P" q0 T) R0 R
  8. <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>- J$ u% k$ P* ]( C# R2 }
  9. <font face="Tahoma"><font size="3"><font color="#000000"> /* PWM Generation Error */</font></font></font>: `" m3 X# a' J2 C3 I( L1 S! }
  10. <font face="Tahoma"><font size="3"><font color="#000000"> Error_Handler();</font></font></font>) X* t% z& O6 U! e: K& L
  11. <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>$ ?  a6 g+ }- T; b2 k; v7 J' g
  12. <font face="Tahoma"><font size="3"><font color="#000000"> /* USER CODE END 2 */</font></font></font>
复制代码
3 T$ C4 z: U( u! `2 r, {) C
按照上述配置及调用,输出 PWM 脉冲如下图所示。) Y) F. n2 ?# b. [
另外,在再次启动时,如果需要更改 PWM 脉冲个数,仅需更改重复计数器参数即可,如下方式所示(输出 10 个 PWM脉冲)。* U. q# u  g# F8 X4 A( c
  1. <font face="Tahoma"><font size="3"><font color="#000000">htim1.Init.RepetitionCounter = 9;</font></font></font>
    5 i' e3 g6 j" m- Y; A. g
  2. <font face="Tahoma"><font size="3"><font color="#000000"> if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)</font></font></font>
    ( y% W" ^9 D% x5 |8 z" w; E
  3. <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
    , Q/ `$ U+ c: N6 O; `1 K
  4. <font face="Tahoma"><font size="3"><font color="#000000"> /* PWM Generation Error */</font></font></font>$ c$ {5 [* i( w. l9 A4 O/ y
  5. <font face="Tahoma"><font size="3"><font color="#000000"> Error_Handler();</font></font></font>6 |! D( ?- r$ x9 h; m, D
  6. <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>) a+ p3 N: k- s. Z4 V6 M
  7. <font face="Tahoma"><font size="3"><font color="#000000"> if(HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3) != HAL_OK)</font></font></font>' H9 ~4 ~& v- g( W" z4 w
  8. <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
    4 S+ z: C9 S* W# D8 k5 o5 p
  9. <font face="Tahoma"><font size="3"><font color="#000000"> /* PWM Generation Error */</font></font></font>8 l2 I2 L' |% Y6 ]7 V3 |% i0 i
  10. <font face="Tahoma"><font size="3"><font color="#000000"> Error_Handler();</font></font></font>: ]% d3 ^- G9 S* k; V
  11. <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
复制代码
$ z, y$ c9 w" p
& i$ Q& X* M6 v' l) i
三 小结
$ w9 u) g5 J6 d9 m5 }! @通过使用高级定时器独有的重复计数器,能够在不占用 CPU 资源的情况下,实现固定 PWM 脉冲数的输出。如果没有额外高级定时器可用,可以利用普通定时器,通过在比较中断中计算产生 PWM 脉冲数,到达指定的 PWM 脉冲数时关闭定时器实现,这种方式会占用少量 CPU 资源处理中断服务。! s+ _) Q) j5 @/ K9 i) y

: G  Y! ^" ?1 ~. {- A, m4 Q
' [) {0 H6 A9 v. o0 j完整版请查看:附件
$ T  O+ P; l( A

- x) D. u# A; Y7 P! y2 G4 Q* |% {+ }8 {& l* t
6 O% a2 c& p2 o+ q0 o* B8 j
% B( k" L$ D3 r% C  S
R@71EGPVOH}JLB1@~LJF5)9.png

Output the specified number of PWM pulses.pdf

下载

920.81 KB, 下载次数: 42

赞 收藏 评论0 发布时间:2022-8-2 18:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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