|
03、STM32输出PWM原理本文将重点在②部分,捕获/对比通道讲解,其中STM32的PWM就是利用对比通道实现的。脉冲宽度调制模式可以生成一个信号,该信号频率由TIMx_ARR 寄存器值决定,其占空比则由TIMx_CCRx 寄存器值决定。5 ]7 N% s7 Y+ |- { p* Y" |
0 E' n8 F ]3 `4 i- d
从下图可以看出,当CCR寄存器和CNT计数器数值一样时,会产生动作(改变通道对应的GPIO电平)。由于CNT溢出时,重载值由TIMx_ARR寄存器值决定的。所以说TIMx_ARR寄存器值决定周期,而TIMx_CCRx寄存器值决定CNT溢出时,经过多久会产生动作(改变通道对应的GPIO电平),也就是决定了占空比。以向上计数为例,重载值为ARR,比较值为CRRx+ N5 Q% I4 c+ ?- y, u, z W1 M
STM32输出PWM的过程:$ y6 b4 |8 i8 D& v/ s; X- m
4 e6 a" W) D8 c z. {1 L1、首先配置GPIO,配置定时器,具体参考一下代码。定时器配置参考《STM32基础定时器详解》。7 ^1 j; i& v, r8 u* ~* h
8 u9 \7 |4 |% y$ u2、捕获/比较通道使能比较通道( R4 C% y4 _* o
3、使能完输出,就要配置PWM输出了
0 A! }1 D5 ^* f$ _: V3 R* I/ L①TIMx_CCMR1寄存器的OC1M[2:0]位,设置输出模式控制器4 n0 [4 W4 M2 q; O- |$ ?! A
8 q. F t7 R6 i5 s+ @; ]110:PWM模式1,111:PWM模式2。
3 b$ d$ g# V9 R2 K& o* n* F2 A
$ E1 H5 p2 g9 y②计数器值TIMx_CNT与通道1捕获比较寄存器CCR1进行比较,通过比较结果输出有效电平和无效电平。
- a/ d# K2 O8 p {; Q
% t9 ?0 M9 F9 O* W5 j; N( |4 {: L/ uOC1REF=0 无效电平,OC1REF=1无效电平。! W8 U+ x: \" S/ a, T
4 A7 ^2 ^+ _. L! h/ D' _
③通过输出模式控制器产生的信号。TIMx_CCER寄存器的CC1P位,设置输入/捕获通道1输出极性。2 K- w2 H" \. a1 G- O; B
: s* y w. G& g* ]
0:高电平有效,1:低电平有效。
, ~- R2 Q$ Z7 n3 e4 o9 @
- C0 r. N: y. `' a④TIMx_CCER:CC1E位控制输出使能电路,信号由此输出到对应引脚。
9 Q! x1 M! Q" `4 s$ |9 R J1 Q, a7 [' ? K8 J7 R. ~) q) W
0:关闭,1:打开。
: a4 u+ ?8 U1 S \# x
' ?$ r m+ H1 q5 [( K首先对PWM模式1和PWM模式2进行介绍:- ^ U: r3 ^, w% t
9 k, y' `" g q/ r
模式16 W9 |% S! N( H+ A% A7 V6 g5 m" D
; s n: g8 ^* f6 x3 i$ e
在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向上计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
! T3 x( g4 w( e
* M. Y6 U8 _0 h; T& t4 v模式2
) F4 k7 E5 D# R
8 R# c: y- B; U在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。. {9 F" ]2 [& m% k+ R+ c# i9 P/ H
7 ^8 q7 ]0 w% {' a3 H$ Z) z
TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。% | |5 I6 k0 |% o( V- b$ `
, X) {' @- q" t; Q2 m2 I! j2 E
PWM输出高低电平由TIMx_CCMR1:OC1M位和TIMx_CCER:CC1P位共同决定。% k) {' q" N* Y
6 f) B* E; Z0 r1 P
总结下来:
& h! ]0 m! p0 i* i& q$ ~
9 y& ]( u( R; H模式1:
. m) j' i2 X. I8 v0 N2 S; ^, e, ^0 c7 n# `
CNT<CCR为有效电平//(OC1REF =1)* w+ |8 a3 F" ^; _& w" O1 ?/ h
; e" J+ q2 i0 N2 R* d
CNT>CCR为无效电平//(OC1REF =0)
- ?4 y; j5 K# c( D( B" F- `/ s1 o4 d. [* }0 L
模式2:* ~$ R' j$ a$ \8 @3 g3 I8 M
, K+ L) k. o" G W7 L# c6 o1 uCNT<CCR为无效电平//(OC1REF =0)
& `% A2 P9 o) w# a |& }" ]: l; D3 c3 K2 l! {
CNT>CCR为有效电平//(OC1REF =1)
! o% [( `, G2 Y7 z
% I3 [2 D0 I) k$ r. C2 h( [CC1P:& w0 ?# O; x, C7 J
& z) v+ u; A* Z1 F. c
0:高电平有效
3 a! E" H5 V( v# b2 Q
; z) u0 g" w: D4 I, X, E1:低电平有效 |
|