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

STM32CUBEMX开发GD32F303(11)----输出PWM及修改PWM频率与占空比

[复制链接]
STMCU小助手 发布时间:2022-8-16 22:08
概述
& [1 l2 ?% z$ |7 t+ ^本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。
* e( S9 v+ ~3 c: @# q: L本章主要配置定时器输出PWM,同时演示PWM频率与占空比。
% c: D8 ]  y2 {% f2 v/ j4 A  E需要GD样片的可以加Q_QUN申请:6_15061293。% u& S6 w( s- G# O2 [
查阅手册可以得知,PB11为定时器1的通道3,对应ST的为定时器2的通道4。
7 o3 G! f5 ^. d  y; ~
: c0 x& K& u3 S: Y' q 1d4f85426a6a4223a7e814d05bcd1583.png
# V- F* V; v" q! R: t, V
! \9 ]4 N, ]0 @* _* D
' ]6 I3 w1 c, a* x2 C' ~4 t生成例程6 |' o( n1 @# J1 O6 B  C
这里准备了自己绘制的开发板进行验证。; F* Z. j( z) K) Q2 q  X4 Y6 K

& @! g" [0 ]3 W" M. Z 8f06c197b0194e61ae679b1ee545af2d.png
' X& m$ z* {# R( X/ S; p8 ^
( {) O( \  F3 p+ t, W; S1 D; Q使用PB11进行验证。
, n* B; O* C8 C2 P7 f2 C  J& y 6d6641f954284106b044330529f9d0e2.png
, j# V0 @! o  [* L
3 _- O' P6 n& Q, E. K工作过程4 _+ ~! x8 S5 |
查看下面工作原理图可以得知,时钟可以由内部Internal clock产生或者外部ETR。
6 M) S: L1 \6 f& Q同时可以设置复位,使能,向上/向下,计数。) ~, R1 ~, P, n1 s( o& f3 D
7 l7 N* o* `4 ~" P2 Q6 A
225383ad58094106baf290f39738c93c.png 4 ~1 h5 t* e( y( E6 E
" I- e8 u; {# ^5 y: w
查看下列文档可以得知,定时器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR控制。
  m" n, L7 |* X7 N; u8 D# t同时预分频器(TIMx_PSC)范围位1-65535。, e, ^$ B; y# o

8 Q" k) O$ Z1 s9 n! q/ Y$ @ 18da2273e591422f8689f47e191ae47b.png + U6 O" ^1 G: g) e" R$ [& w
- q- U; u: T: K5 s/ W2 {# U
查看TIMx_PSC说明,可以得知定时器频率为 fCK_PSC / (PSC[15:0] + 1)4 e' g' e! F; e3 Z0 x
9 o/ Q* P% z- q$ G0 e: l( T
ab2875773d2b4df7bdbec73dbe1375f1.png 8 `, x$ j/ l3 R% q3 D* J1 q

) l$ ]+ }% U) Z6 ?0 K- f' W) H可以看到,当psc设置为不同的值的时候,计数频率也会发生改变。/ I- _. C8 i1 V

% m3 H! c- x& h) l  K& Z4 D 6ab5eb37c6ec42c3b104f70df11814b3.png
0 ^2 [, H8 r( j0 P$ W1 n: K- a: d$ K9 l$ z3 w2 a8 y5 ?
同时ARR可以改变计数值,当写入的arr越大,他的频率越低,计数周期是ARR+1。
! d' h* q, Y# _
3 M+ r, C3 h6 y1 q. j& Z  Y 976e7732f02c4d09a955d7a496660ec5.png
0 Z( n' _) \3 T( _, G% z: b# P/ I2 t% Y8 Z
PWM频率计算如下所示。
. R: O, A" E% `$ ~9 C4 n) ?; x1 p" V
6 x3 X3 N# q( ?, _* z$ W9 U" M aa83f65a5f42410b8cde46692cf2eaaf.png
# x7 b8 r1 |$ d2 d6 d/ [6 z+ F; n5 _' Z! C8 G( N, t$ v' _
在上面配置TIM2参数,预分频系数设置为64-1, 自动重载值设置为1000-1,那么PWM频率为64,000,000/((64-1+1)*(1000-1+1))=1000Hz,即1KHz。: A( n# b; `4 h

* h& T2 o: {& c4 v4 r2 X8 r, O 760ea1553d5e4e888864dc3c035ac76c.png . h  p7 g  ~3 K1 j. Z7 [/ n

" F1 ]) t" `7 t, \只要TIM2_CNT<TIM2_CCRx,PWM参考信号OCxREF总是为高的。若TIM2_CNT>= TIM2_CCRx,OCxRER为低。若TIM2_CCRx中的比较值大于自动重载值(在TIM2_ARR中)则OCxREF仍保持1。若比较值是0则OCxREF保持0。下图的例子显示了当TIM2_ARR=8时一些边沿对齐的PWM波形。
3 r1 C' F  H9 N7 F0 y
7 p+ q" t( d9 v1 X: w cec9640a5ddb4a8b9e5aebf7b6d65102.png
9 [. d' o' \9 i8 ^/ c9 X% g" h( A5 @5 g; J

- q* k% B0 A: ?: P8 c) a__HAL_TIM_SET_COMPARE()
, J- u, }9 |0 g: ^$ l7 G1 _5 O7 c设置ccr,可以通过此函数修改pwm。
& A# W0 b0 K; k( ]( l( ~% V. Q0 a1 ?1 X
be865fc945df43d39827e964e90369be.png
$ m6 b1 h$ P: ]1 A. y) C8 o/ ^6 p1 c/ V! c( R3 i3 j0 R- ]
由于上述设置计数值位1000,那么设置30%的正占空比的ccr应该配置为30%*1000=300,代码如下所示。
4 c$ c& {. }( l( B1 d& Y; ^, w$ y/ C5 z* j: a
  1. HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
    3 Y  ?4 f6 k  T& d
  2. __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 300);
复制代码

7 ^; B. ?) i  O6 u8 Y 6a05bb52499041b0924f346a28ed3e39.png
4 l1 m9 D5 i$ R
3 s* a( e/ e! K! i. ?  o4 z+ d! s修改PWM频率+ K- g8 |/ a2 Q$ Y1 D! v
修改PWM频率可以修改PSC或者ARR来进行改变。
/ C  x, A5 k- I, a& i/ Q3 W
- O4 H" \' T6 v! {9 `+ q4 w' y 872f85bcaa5f4a08975483bde785f521.png 1 P" W; p5 x" m* ~0 A
. P) M& q7 I( D6 v
6 f' t2 F+ {- ]7 ~4 S
__HAL_TIM_SET_AUTORELOAD ()$ m$ D! v8 G3 Y$ D( H. O$ K1 ^
设置TIM自动重新加载寄存器值。3 A4 M% ^0 e# H% s* d* U5 a
+ {7 P: [+ L6 c, c* F
52870bc02820463a980979ab5384a834.png
0 d4 ~* J% h  ~
( M5 |, N5 P, s3 s* {# m初始设置为PSC为64-1,ARR为1000-1,若设置为500-1,那么他的频率应该是64M/(64-1+1)(500-1+1)=2k
. q, ?7 }! o& s1 ]% [2 x占空比为300/500*100%=60%
8 O# M# O8 b: L' ?8 z. D% r+ i7 V. J% i' b3 _" E
  1. __HAL_TIM_SET_AUTORELOAD(&htim2, 500-1);
复制代码

- L; K. ^/ _/ W' |& x4 M a4a935f989874f5e80c096c43e1d2ef7.png
6 H# G0 a0 g0 v4 I8 q) j/ Q* u. U! }: m/ u+ b
: r5 S; W2 j' k1 L
__HAL_TIM_SET_PRESCALER()
5 {7 o; n9 e) A( |" F, ]6 b. L在运行时设置TIM Prescaler。
% s/ Y) ]0 X/ d+ h7 Y
' q  n4 Y$ r! E  H bbd70f5985384b3d873f411e93853280.png
3 b  Z6 K( r4 I/ @1 _# V: A2 r& `2 ^: L+ u2 y  F! e. i8 I
初始设置为ARR为500-1,PSC为64-1,若设置为32-1,那么他的频率应该是64M/(32-1+1)(500-1+1)=4k* L! g6 [" ^( H6 D
占空比为300/500*100%=60%) L: E( A: g, \, z% \& ^8 u
+ {  f+ b! T9 M8 l8 w5 \
  1. __HAL_TIM_SET_PRESCALER(&htim2, 32-1);
复制代码

: D/ k, |0 Z- A/ q9 a( c 9a862ee0a86640beaf5e5b5d1e08085b.png 0 `9 }8 `" K, ~& g/ M/ i# N
- I# }  X& H' U0 b
, @/ {& z, A9 N

3 _6 o4 j  B* G& H/ e# x0 K+ {; X/ J' ~3 O0 ~3 O
赞 收藏 评论0 发布时间:2022-8-16 22:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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