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

【经验分享】CounterMode,OC Mode 与 OCPolarity关系

[复制链接]
STMCU小助手 发布时间:2022-2-24 19:41
STM32L053 的 PWM 模式下,CounterMode,OC Mode 与OCPolarity 的关系。8 r3 O) m; e- x& t! o6 T$ s
一. 前言' ]6 B$ {  G* [8 C5 ?
研究下 CounterMode,OC Mode 与 OCPolarity 的排列组合的关系4 x* e9 ^1 C! Z' D! |

% p# e) a) P7 _" o% Z! r二.排列组合
4 b0 a5 h: `8 j9 c这里的测试条件有:
; k8 }* C! M. b( C* q  jCounterMode:TIM_COUNTERMODE_UP,TIM_COUNTERMODE_DOWN;* O2 e) z/ ]4 \
OC Mode: TIM_OCMODE_PWM1, TIM_OCMODE_PWM2;7 D% c( T9 n$ {7 U7 v) I
OCPolarity: TIM_OCPOLARITY_HIGH, TIM_OCPOLARITY_LOW;9 q  K+ r& X) w7 U
所有的源代码程序都是基于,DMA 控制 STM32L053 的 PWM 脉冲个数的例程。只是更改不同的排列组合,看看有什么差别。
3 a, w" |% r* o2 c- |6 D" ]- j  U# B8 p5 ?8 o, ~" z
/ \: x  Z) z% z4 F6 ]
2.1 测试. |! K+ ]( B# @# h5 J# e
1/CounterMode = TIM_COUNTERMODE_UP;
$ c. _0 `& R4 s! X: QOCMode = TIM_OCMODE_PWM1;: e. B) w) L: P0 ]9 N+ J$ N, v
OCPolarity = TIM_OCPOLARITY_HIGH;
) m) p* t2 D" g$ v显示出来的波形如下图:
" b& l2 N1 t; V
* u0 L% U' {- x8 C IER9@0M%]MHNY@953(7MR}H.png ! t/ H2 L% B. b; |+ U
: z6 [5 w6 I( Q1 S% U
测量一下前端比较宽的电平:
8 b* Z  p3 U$ g+ l! ^  Z) y( m, X8 j* [
10GPF(TJ}E37H[@86TV]EKP.png 6 Z+ d; T. Z. @' L0 m5 h$ n4 j
& X& B8 a( k: h5 k# ~
发现前端的高电平与后面几个脉冲的高电平的持续时间不一样。' H: s- Z- C9 H
2/CounterMode = TIM_COUNTERMODE_UP;; U3 T" q3 A# w$ z9 Q
OCMode = TIM_OCMODE_PWM1;) E: l8 l4 }  p4 n) L: h; |2 R# \* c, _
OCPolarity = TIM_OCPOLARITY_LOW;( A2 r; O5 p2 X# W7 Q# S4 r
显示的波形如下图:% m7 O" K2 O0 q: |/ a
* `$ l8 ]. i1 E# x& d8 o
T~SIRZ`L257LUU]MFW@OG~T.png ! o7 r, d) M1 ]# S, [* \
# f3 r  O% c3 h6 X9 t
上面的波形符合自己最初的设想,脉冲个数可控制的 PWM。
% i* q- W* Q% V( t9 q6 M比较上面测试的 1/和 2/的波形,发现,第一个脉冲宽度不一样,脉冲结束后的电平也不一样。
3 M9 f. B) G. o而参数的设定只是 OCPolarity = TIM_OCPOLARITY_LOW;与 OCPolarity =TIM_OCPOLARITY_HIGH;的区别。
9 {$ q6 F  y+ t为什么会有这样的区别呢?2 [! A2 R3 d9 A1 A
同样的道理,可以测试下只改变 CounterMode = TIM_COUNTERMODE_UP(DOWN);或者只改变OCMode = TIM_OCMODE_PWM1(PWM2);会发现仍然存在上述一样的差别。+ _3 m( G1 p" E; w

7 p8 L5 `4 F* c- x7 e7 o) M) I  P3 A/ d8 H( C) ^$ {% q" t
2.2 分析原因' m# p& v& o- U  E0 j5 N7 \
这种现象可以总结为这几个参数的搭配有一定的要求,
. n1 d4 N% m$ Y9 U# S; z我这试下来貌似不是能随意搭配使用的。0 _, q, [1 \" |/ W/ I" x& b
究其原因进一步分析,在参阅了数据手册之后发现:
6 _7 \0 K0 v8 _2 `! D, f
3 M  |: F0 O+ g+ {6 C; f. t ZIWL)D@N6A@RFE5X)J2W)~7.png ' t: H2 w- u3 X% X% X6 e
/ v* E1 ?4 R/ O: S, {# [* [
具体原因分析,电平为什么会多一个宽度?执行什么语句之后电平发生了跳变?7 X" B7 w) a1 ]/ ]9 E$ O$ A/ K
程序加上示波器单步运行,发现函数在执行完成这段函数后,电平发生了跳变。7 @% D( J+ P  I3 L, X9 f  A
$ s+ q" \0 D4 k
TBNHD{FT{CAJ~@MR`TCU5R0.png
4 G9 e; x' V: N8 [7 O+ ^3 X: }; p: h. j/ L* L% w% z
调用上面函数的是下面的函数指令,也就是说在电平跳变之后,定时器才 (__HAL_TIM_ENABLE);才产生 PWM 波形,造成了一定指令的延误。换句话,定时器的使能与否,并不影响内部电平的比较输出。8 I) P; F, c  f/ [0 a! L
& A( T* ]! @& e$ {0 ?, u
B{KVQ@WQ%U6I@OV@`L}MZ2N.png
7 \" _8 L7 P% A( W5 M. R( c2 e
% f9 ^" k' T* R$ Q' D跳变的电平变化如下图:
& V- |4 U1 w$ X9 M; m7 }4 X( l1 G$ _/ q8 |5 z9 c: g3 q5 w) n
4G@M]QOYAK34OO866{@`GVY.png
: v! |# D7 u' d6 ^9 N7 K' g  P2 A. }; h0 r2 Q
其实,这个现象的原因在其他 MCU 系列中也会出现的。因为电平的比较输出理论上不可能同时与定时器使能同时打开。
9 N& Q3 ^6 V' O1 q如果先把定时器 Enable,然后再使能捕获通道呢?程序修改如下图:
7 Z1 X* u0 q0 ~  W( L0 B. S; n% F) s" @1 g/ {: T: R5 w
@{P7}B%IIKG15PGN_`)2PBK.png
0 v3 n2 e6 N* t8 D3 T
* `" z& b: e' I8 X  X, G, T运行后的波形如下图:第一个波形的脉宽有所改善,但是脉冲的个数确是只有 5 个,而程序的设定需要的是 6 个,还是不能彻底解决问题。
4 p, |1 G- w- M0 @8 C' P' s: H; b; \# J+ l5 p! l
M~7DVWJ3N(CVQ`PTM5DN[1J.png * h: O8 \- f8 V8 b+ q+ _+ c

# p5 g6 g5 t% O! z4 ~- N所以,综合比较下来,最后一个电平为高或者为底,是根据捕获通道的比较电平决定的。而第一个脉冲的宽度是由定时器的使能和捕获通道的使能的先后顺序决定的。需要选择适合的参数去匹配自己的设计需求。
( k5 B' U- T- k1 b+ x7 b3 b& Q5 j9 u' ^
赞 收藏 评论0 发布时间:2022-2-24 19:41

举报

0个回答

所属标签

相似技术帖

官网相关资源

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