|
03、STM32输出PWM原理本文将重点在②部分,捕获/对比通道讲解,其中STM32的PWM就是利用对比通道实现的。脉冲宽度调制模式可以生成一个信号,该信号频率由TIMx_ARR 寄存器值决定,其占空比则由TIMx_CCRx 寄存器值决定。 g$ X o" ~9 d! q8 O. q4 e" W
- Z, o9 L+ f; j8 ?, J从下图可以看出,当CCR寄存器和CNT计数器数值一样时,会产生动作(改变通道对应的GPIO电平)。由于CNT溢出时,重载值由TIMx_ARR寄存器值决定的。所以说TIMx_ARR寄存器值决定周期,而TIMx_CCRx寄存器值决定CNT溢出时,经过多久会产生动作(改变通道对应的GPIO电平),也就是决定了占空比。以向上计数为例,重载值为ARR,比较值为CRRx
+ {, k0 K# l- p* `: O0 N. S) J& ZSTM32输出PWM的过程:
& `! s* p* N3 Z" g$ q& A5 m3 Q6 }; c5 w) r4 Q
1、首先配置GPIO,配置定时器,具体参考一下代码。定时器配置参考《STM32基础定时器详解》。8 F: K6 y6 x! K2 E Q
: f9 _. k9 g& o) b) _
2、捕获/比较通道使能比较通道
' b& d6 Q& e6 a* [3、使能完输出,就要配置PWM输出了) i B3 {, A* B) [
①TIMx_CCMR1寄存器的OC1M[2:0]位,设置输出模式控制器
& [2 Q& D$ \! i/ u* J) n" u$ o& |' b8 c: G& l5 ~3 s
110:PWM模式1,111:PWM模式2。
# F' [+ I$ `) _4 X* ]9 H
/ j- D/ P1 D8 x②计数器值TIMx_CNT与通道1捕获比较寄存器CCR1进行比较,通过比较结果输出有效电平和无效电平。
* R d4 ?2 E s( c1 Q3 j/ F+ a8 A2 Y$ _3 ~" v% b, ^! U! H$ q
OC1REF=0 无效电平,OC1REF=1无效电平。) G; C0 A; H$ p8 P% p- e$ G
; I5 v* {6 {. o+ o& V③通过输出模式控制器产生的信号。TIMx_CCER寄存器的CC1P位,设置输入/捕获通道1输出极性。1 g& h; \: S( Q p- Z' p
- p2 i/ P5 u2 D( K& c; e4 x. F0:高电平有效,1:低电平有效。
/ f( x: N# v" o. b; P$ i0 T( e$ i4 z% \% p: a) `
④TIMx_CCER:CC1E位控制输出使能电路,信号由此输出到对应引脚。
. P( A. D7 ~1 X
( h' V! X% w! ]9 U0:关闭,1:打开。
: D9 ^! j6 [6 i5 l
) L# d z9 ` a首先对PWM模式1和PWM模式2进行介绍:4 L4 R1 F* q( d( z0 v5 b4 E' ?
# Z0 {: W1 f- N6 Q' A: j$ v$ q
模式1
9 ^9 d/ B, q0 K. q) V9 f: J9 m
]+ k7 k) D2 F( m$ B b在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向上计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
. o% k; y3 L3 N) h8 ]0 W. B( ~3 G( N; z
模式2
1 D( t. J8 F0 e# T
3 s- C. m4 p% B [' d在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
7 M+ X' V" e$ s( J' F: _
2 i! b1 u* a3 Y" S6 z/ \, G3 xTIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。 b! b# ]( Y- i4 N
5 S6 Z* c! d' z, oPWM输出高低电平由TIMx_CCMR1:OC1M位和TIMx_CCER:CC1P位共同决定。6 c3 G* X( b R1 h( {% R7 R; C x
& X% A" f. _- s# t( `
总结下来:
: _' y$ s+ J3 W' A G5 N. a% o% q2 Y
7 J" _: D5 |, f2 _2 h# f模式1:7 m5 g3 ^# P0 w. u, g
$ p1 f* H( { k: {
CNT<CCR为有效电平//(OC1REF =1)
9 v" i1 ?( h/ `/ u
1 V6 Q3 o8 T2 i7 a/ n' OCNT>CCR为无效电平//(OC1REF =0)/ |( C7 x+ q( c4 r. [2 r# m. o4 a
: ?" l3 n( u8 Y* M" o1 ]* `/ |模式2:! G+ R8 n1 z& ?% S$ Y8 P, b5 N
" A8 V5 U* k) i x5 L: Q* ~: W
CNT<CCR为无效电平//(OC1REF =0)
V. G/ `: ?& l" B0 m1 y
1 C2 S4 R) ?; W5 P2 V* F) WCNT>CCR为有效电平//(OC1REF =1)
' K! w4 T0 x, ~7 \3 N( }9 H- g, f+ J/ [7 t
CC1P:
4 I+ l1 j2 T4 ]- E9 V/ Y, _9 h8 Z E ?9 e$ i: p
0:高电平有效7 G! e3 o4 ?3 q+ L8 c
: [6 ] ?4 a* p3 w+ a% Q
1:低电平有效 |
|