|
03、STM32输出PWM原理本文将重点在②部分,捕获/对比通道讲解,其中STM32的PWM就是利用对比通道实现的。脉冲宽度调制模式可以生成一个信号,该信号频率由TIMx_ARR 寄存器值决定,其占空比则由TIMx_CCRx 寄存器值决定。" [# Z0 [3 x# [
+ G6 ?/ F" E3 K& x
从下图可以看出,当CCR寄存器和CNT计数器数值一样时,会产生动作(改变通道对应的GPIO电平)。由于CNT溢出时,重载值由TIMx_ARR寄存器值决定的。所以说TIMx_ARR寄存器值决定周期,而TIMx_CCRx寄存器值决定CNT溢出时,经过多久会产生动作(改变通道对应的GPIO电平),也就是决定了占空比。以向上计数为例,重载值为ARR,比较值为CRRx
3 J( P' \( w9 }STM32输出PWM的过程:
8 s, [8 O& B6 |, w6 |' t! p# l* H' t% ^0 |9 e
1、首先配置GPIO,配置定时器,具体参考一下代码。定时器配置参考《STM32基础定时器详解》。
( @& @' c0 m; d& ]8 k5 z! O: P H
" |; s0 s7 Q8 V# q& h0 P2、捕获/比较通道使能比较通道: B* ]' T. S6 u& v4 z9 {4 t
3、使能完输出,就要配置PWM输出了
" ]5 V4 o2 H9 G: \ z4 S. [①TIMx_CCMR1寄存器的OC1M[2:0]位,设置输出模式控制器' j/ f) ^3 g( ~$ a6 a% E
. o) t, B* z5 v0 e
110:PWM模式1,111:PWM模式2。
; d4 S- p) K4 Y j* d8 u; D, W# V( }( c' B X% f- g% L8 c
②计数器值TIMx_CNT与通道1捕获比较寄存器CCR1进行比较,通过比较结果输出有效电平和无效电平。. U" X: L; G# K4 l9 T' P w
: ~) B8 A+ n* w4 f. ~, _' zOC1REF=0 无效电平,OC1REF=1无效电平。 E* K5 V! u( F- n
; O. j. J2 o' |1 k# T; Q
③通过输出模式控制器产生的信号。TIMx_CCER寄存器的CC1P位,设置输入/捕获通道1输出极性。: _ w+ G+ ]" N+ R( p
# i4 D1 X+ [5 {% [+ ^7 t& B
0:高电平有效,1:低电平有效。
' | d8 u7 k( x: b6 K& J
}* _8 f6 @, O3 `& n; |# ^. A④TIMx_CCER:CC1E位控制输出使能电路,信号由此输出到对应引脚。
) Q: `' `' A* d
. L* Q o6 c5 b" N9 k6 d! }, L0:关闭,1:打开。
+ E% w! v7 `$ e1 v
9 s) [8 \. O% W+ {" X- v+ B首先对PWM模式1和PWM模式2进行介绍:4 U# ^1 Q B4 C) `, Y# O7 W
7 D, G2 r0 X) g9 ?* z模式1% i/ x; ?# u# Z6 E4 O8 i. o" e( A
# W, b+ j3 ~! ^
在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向上计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
! g+ B. {* }- }* c, P
$ {' Y( o! \( H+ Z% c* a2 o/ v) j模式2
2 q% [" m. d9 B: r1 ^, w
9 { c5 L# Z" ~1 z在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
0 t5 ~9 |9 W' e* ^4 w; f( f) X/ m. I1 p0 H" y* }
TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
! i$ S& n4 j1 z5 |
7 q4 q+ W9 W9 N. X1 S0 V! PPWM输出高低电平由TIMx_CCMR1:OC1M位和TIMx_CCER:CC1P位共同决定。# U' y, m; n1 b1 _
3 w( q& G( \# \9 d总结下来:
1 I) [3 `, I* P# W
" r' a a+ A* I T# B# k! M模式1:
2 f. n- {5 H2 k" t2 _ }( x' b- }6 G$ o( k; t- D7 B, {
CNT<CCR为有效电平//(OC1REF =1)
+ D* o: ?0 V8 G& r
+ F& b6 B2 N. Q9 XCNT>CCR为无效电平//(OC1REF =0)
7 b4 D+ w5 Y' T3 O
$ \" @6 v5 _9 I, K. R模式2:' i# Q9 {1 W1 a+ F$ |' \$ b
' c; b8 n7 G+ RCNT<CCR为无效电平//(OC1REF =0)
3 b! U7 f5 ^. l+ @) `" \0 H$ L T) I2 |- k4 r1 p' l5 y
CNT>CCR为有效电平//(OC1REF =1)
! @; z1 _! Y O+ B
- z) J! u" Y7 m6 qCC1P:
2 ^+ }$ J3 B- b- T S1 u9 X1 p: D
3 L4 A& g7 T0 t, b: {/ J) N; n+ h8 E- w0:高电平有效6 R7 T8 ^" u' U$ j& \: z
+ m0 ^' f" y2 U- ~, F5 I
1:低电平有效 |
|