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

详解STM32的PWM输出及频率和脉宽(占空比)的计算

[复制链接]
eefishing 发布时间:2017-6-20 10:17

STM32电机培训online,大佬带你玩电机

3 ~0 n  M4 u  ^

" H% V5 b7 Z9 C) l& i( o( {* Q8 E

一、stm32的pwm输出引脚是使用的IO口的复用功能。

二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。

三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。

四、给出了PWM频率和占空比的计算公式。

步骤如下:

1、使能TIM3时钟

11.png


# U' ~: N0 A+ l/ z5 K

RCC->APB1ENR |= 1 << 1;

2、配置对应引脚(PA6)的复用输出功能

12.png

GPIOA->CRL &= 0XF0FFFFFF;//PA6清01 X  W: M$ s: [
GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)1 \/ {4 X1 g. u) N6 r# S
GPIOA->ODR |= 1 << 6;//PA6上拉

3、设定计数器自动重装值及是否分频

TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)* c, q; Y5 H; `* D3 g
TIM3->PSC = psc;//预分频器,0为不分频

4、设置PWM的模式(有1和2两种模式,区别在于输出电平极性相反),根据需求选一种即可

13.png

注:TIMX_CCMR1决定CH1~CH2路,TIMX_CCMR2决定CH3~CH4路。

14.png

//TIM3->CCMR1 |= 6 << 4;//CH1 PWM1模式

TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 " |) Y( g8 M* L  q1 M. i/ U
TIM3->CCMR1 |= 1 << 3;//CH1预装载使能

5、输出使能设置

15.png

TIM3->CCER  |= 1 << 0;//输入/捕获1输出使能

6、自动重装载预装载允许位(ARPE) 及 定时器 使能

16.png

TIM3->CR1 = 0X0080;//ARPE使能(此句不配置也行); B6 v# F, o, S+ U4 f
TIM3->CR1 |= 0X01;//使能定时器3

下面给出TIM3_CH1及TIM3_CH2的PWM输出代码:

  1. void PWM_Init_TIM3_CH1(u16 arr, u16 psc)
    ! z, Q0 Y( g8 ?7 i$ _
  2. {
    3 p6 t& O+ X( T# N# o7 S/ L. D& r
  3.     //1、使能TIM3时钟   
    9 @+ w; J; \8 j
  4.     RCC->APB1ENR |= 1 << 1;//使能TIM3时钟
    ! }  V# o$ V) D$ C" P$ ^
  5.     //2、配置对应引脚(PA6)的复用输出功能
    3 p, x* P  ?& S
  6.     GPIOA->CRL &= 0XF0FFFFFF;//PA6清07 x  Q3 s8 ^3 O: ~' G
  7.     GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
    " b1 a4 d, ]. e) b, `9 x, y
  8.     GPIOA->ODR |= 1 << 6;//PA6上拉   6 P, ~/ p* W# b" ]7 c
  9.     //3、设定计数器自动重装值及是否分频
    0 L) m- E' s6 V" J; H; L5 b
  10.     TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
    ( W9 P0 g# s8 e" s4 V5 T
  11.     TIM3->PSC = psc;//预分频器 0为不分频" s! G2 m0 O1 G" Y% |
  12.     //4、设置PWM的模式
    # ^" G: k2 _: [: O4 B
  13.     TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式
    : j- C- t: A' j* \4 y; _
  14.     TIM3->CCMR1 |= 1 << 3;//CH1预装载使能   
    # _; K* R: J$ u4 `  {# r
  15.     //5、输出使能设置
    , U% @, D3 G6 t* V) E  F
  16.     TIM3->CCER  |= 1 << 0;//输入/捕获1输出使能9 B* Q( Q. ?7 ?0 |
  17.     //6、自动重装载预装载允许位(ARPE) 及 定时器 使能; t8 z' w2 v+ H( ~( U& w# |+ @- @
  18.     TIM3->CR1 = 0X0080;//ARPE使能4 j7 C" v, Q; \. a: D" ?
  19.     TIM3->CR1 |= 0X01;//使能定时器3* ~# ~/ Z: c& o9 R9 V
  20. }
    & O' W2 P' t9 r! ]5 S9 \9 R/ p3 V
  21. void PWM_Init_TIM3_CH2(u16 arr, u16 psc)
    : [5 `( }8 h+ }
  22. {3 q! a9 O, K3 R8 L5 Y2 ~6 G
  23.     RCC->APB1ENR |= 1 << 1;//使能TIM3时钟
    ! n3 S6 s1 D4 Y+ x5 ^+ C/ ?
  24.     + |/ T& Z! q6 w2 h1 L$ v  [
  25.     GPIOA->CRL &= 0X0FFFFFFF;//PA7清0
    1 B$ r- l. h* G; D# F9 M
  26.     GPIOA->CRL |= 0XB0000000;//复用功能输出(推挽50MHz输出)- F- G# Z3 C# s4 v
  27.     GPIOA->ODR |= 1 << 7;//PA7上拉
    3 P8 A' k0 [" d) u+ E
  28.     TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)- H) l$ e1 H' T- P3 p; D3 T
  29.     TIM3->PSC = psc;//预分频器 不分频
    9 v3 e. B1 g: L; p
  30.     TIM3->CCMR1 |= 7 << 12;//CH2 PWM2模式9 Z2 J: v6 G* o; K$ o# f/ O% r2 ?
  31.     TIM3->CCMR1 |= 1 << 11;//CH2预装载使能$ u! U/ Z4 i+ }4 M! \1 R
  32.     TIM3->CCER  |= 1 << 4;//输入/捕获2输出使能
    ! d9 u) m! i6 f6 X( X! s$ ?
  33.     TIM3->CR1 = 0X0080;//ARPE使能
      x4 n" G% O) a/ V0 M8 |" a
  34.     TIM3->CR1 |= 0X01;//使能定时器3' ~* t3 k2 h+ ?, f
  35. }
复制代码

0 b( l) l1 y9 A/ e9 s7 t- l

频率:

//Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz). u5 p, O3 N; p+ K; x4 l
占空比:

//duty circle = TIM3->CCR1 / arr(单位:%)

注:本文方法的一个定时器4个通道的pwm输出的频率是相同的,但占空比可以不同!

7 O0 r0 _0 u/ Y) X5 `

评分

参与人数 1 ST金币 +10 收起 理由
MrJiu + 10 神马都是浮云

查看全部评分

收藏 3 评论5 发布时间:2017-6-20 10:17

举报

5个回答
MrJiu 回答时间:2017-6-21 09:37:50
支持基础理论讲解!!!!!!!!
xmshao 回答时间:2017-6-21 15:06:19
谢谢!# k( K3 L0 [3 t; W6 ^4 t! @. t3 a1 _
epochal 回答时间:2017-6-21 21:50:48
谢谢分享!
anny 回答时间:2017-6-21 23:54:39
不错的帖子,谢谢楼主的分享
sasikawyh 回答时间:2018-10-24 11:28:13
谢谢分享
- ^2 Q5 E; K5 g1 ^6 [8 z8 M6 Z

所属标签

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