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

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

[复制链接]
STMCU小助手 发布时间:2022-9-4 17:08
概述
. B/ Y; H/ V/ t+ v% p% F本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。
& v) ^4 G' l% n本章主要配置定时器输出PWM,同时演示PWM频率与占空比。# a/ c! j6 W9 w8 C+ }  C6 Y# w
需要GD样片的可以加Q_QUN申请:6_15061293。
$ S% b. a8 G! Z' c查阅手册可以得知,PB11为定时器1的通道3,对应ST的为定时器2的通道4。4 `1 h% I' A' [* b

" _3 N: c" X: @ 1d4f85426a6a4223a7e814d05bcd1583.png % R3 f- L: U( N+ ^- c1 p$ b& V
* ?$ c  f3 L7 T4 |

0 y9 y0 S7 D" S: k; y生成例程
7 |/ p5 p( e7 y* E) J: i8 z这里准备了自己绘制的开发板进行验证。
& R: w# |" K  q# m8 i' }, C& o. V  @& U* T, ?
8f06c197b0194e61ae679b1ee545af2d.png
0 Q& X; P7 g& {$ l7 S5 f! l& Y6 q; J! y. o
使用PB11进行验证。
7 v; [2 ?* E' F" U; `6 d8 ~" A
% @$ a8 L  C4 k7 b+ H6 d 6d6641f954284106b044330529f9d0e2.png % h: `5 C7 b( K3 z  c$ N- X0 a
4 t/ ^9 k* R4 _. X2 e' u$ g' D
工作过程1 Y1 ]( K  j8 t1 t. `
查看下面工作原理图可以得知,时钟可以由内部Internal clock产生或者外部ETR。) d9 `" Z: c8 }8 ?+ T
同时可以设置复位,使能,向上/向下,计数。
( y  {9 k! a7 `6 ^0 V# r" L  b
$ a6 w; c$ ~" W, o 225383ad58094106baf290f39738c93c.png
; t( F( h: Z2 c3 ]. _% P2 ]: A) G) F
查看下列文档可以得知,定时器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR控制。
9 ]: g- x/ l* q* s同时预分频器(TIMx_PSC)范围位1-65535。6 K$ V; ?" |) x- g
18da2273e591422f8689f47e191ae47b.png # N$ ?2 F8 _, `: _

6 V* `" x. O' M! g$ y. ]# D0 g查看TIMx_PSC说明,可以得知定时器频率为 fCK_PSC / (PSC[15:0] + 1)2 a. e) q/ L) r' q8 X
# b: I9 X6 {8 o$ a
ab2875773d2b4df7bdbec73dbe1375f1.png ' d/ c; O" s0 I  N# s. O, B

6 h4 H; v" E% _5 M" R6 t+ f可以看到,当psc设置为不同的值的时候,计数频率也会发生改变。, r1 v; x. f6 c* F% h
& z. v, d0 |0 v$ W9 n9 E
6ab5eb37c6ec42c3b104f70df11814b3.png
3 Q; e$ |% B9 k  v4 O5 \7 `
  N1 L( [) g0 Q; T& |同时ARR可以改变计数值,当写入的arr越大,他的频率越低,计数周期是ARR+1。
& X2 [# V; U4 r7 t( E: ?6 F
: A# W6 Y7 m3 F' [4 G4 e8 v- B9 h 976e7732f02c4d09a955d7a496660ec5.png
* ^' @* v) F* A
1 Q- x, [3 h5 X. C# uPWM频率计算如下所示。
7 Q  f9 G5 x. l1 Z7 F0 ^' N' Q1 c' g, d
aa83f65a5f42410b8cde46692cf2eaaf.png
, H! p4 f  e* r& U0 K5 \" ?1 t+ q: u0 {
在上面配置TIM2参数,预分频系数设置为64-1, 自动重载值设置为1000-1,那么PWM频率为64,000,000/((64-1+1)*(1000-1+1))=1000Hz,即1KHz。6 S; B" M' g+ M9 y$ o
6 v% t. c# Q, s1 j1 A
760ea1553d5e4e888864dc3c035ac76c.png
' X2 g4 [3 k3 G6 W& A& y: |  V3 }
0 U/ m; K. R5 U/ ^7 C& J* u只要TIM2_CNT<TIM2_CCRx,PWM参考信号OCxREF总是为高的。若TIM2_CNT>= TIM2_CCRx,OCxRER为低。若TIM2_CCRx中的比较值大于自动重载值(在TIM2_ARR中)则OCxREF仍保持1。若比较值是0则OCxREF保持0。下图的例子显示了当TIM2_ARR=8时一些边沿对齐的PWM波形。
+ x0 l+ I, c7 [' k7 o* G
* @/ L* m; ^) m+ I cec9640a5ddb4a8b9e5aebf7b6d65102.png 9 N9 c5 q; P( C1 V4 k1 [

2 [! x; v5 e5 n5 V, d" Q6 m) B# ?6 s, J. z' p. l6 Z6 |
__HAL_TIM_SET_COMPARE()
3 D2 F# D9 r0 y1 d) i设置ccr,可以通过此函数修改pwm。
% p& p9 v) ^2 }1 M) {
/ a3 o" Q4 O2 t& l2 D be865fc945df43d39827e964e90369be.png , y, f" N; C2 Q! q# h1 @/ K

$ V: K- U1 J  n' X由于上述设置计数值位1000,那么设置30%的正占空比的ccr应该配置为30%*1000=300,代码如下所示。
& U& |. D8 Q8 F* B7 a! V2 F# g1 H6 l7 y7 g' s
  1. HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);' e& P$ m. q% A" y; k) e+ K* W2 c
  2. __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 300);
复制代码
1 h& p: ?, G  H! b# Q+ ^  O9 C+ _- U0 g
6a05bb52499041b0924f346a28ed3e39.png ! z9 l' ^; Y6 H0 i+ p. F% L
1 ~$ M* @2 O! L3 e; p# [) j1 F0 V
修改PWM频率5 ?0 k1 l( x! q; p# H, b& l0 Q
修改PWM频率可以修改PSC或者ARR来进行改变。
- c9 F$ C8 i3 N
( ^1 b/ X/ y0 B7 N# r5 A3 D 872f85bcaa5f4a08975483bde785f521.png % x; N+ e8 `) \& N4 N
' ^' x7 r: G- N' Y
__HAL_TIM_SET_AUTORELOAD ()
! V+ V( t5 E  h* A设置TIM自动重新加载寄存器值。- C4 P1 C4 }8 C5 x
7 _. [$ U3 i8 s1 h. h" u8 i/ l8 W
52870bc02820463a980979ab5384a834.png
4 N; U) J( O+ o9 S( e/ z0 c- @" M. h0 C( n/ l6 ^7 `
初始设置为PSC为64-1,ARR为1000-1,若设置为500-1,那么他的频率应该是64M/(64-1+1)(500-1+1)=2k, ^# F/ L+ O1 A2 h) d
占空比为300/500*100%=60%) S  `7 q; ^; ~9 I# f6 _

! |, W" S0 t, P& u
  1. __HAL_TIM_SET_AUTORELOAD(&htim2, 500-1);
复制代码
+ O, a& Y( B  {. p9 p% s
a4a935f989874f5e80c096c43e1d2ef7.png 5 v" r; o2 ~# K
. a3 A" ~; c! A2 w( p: B
* F$ K0 {; m1 \/ N5 H3 x
__HAL_TIM_SET_PRESCALER()
- K. I5 d- `6 U9 r
在运行时设置TIM Prescaler。
, E4 w& ]+ |1 A, o- p! Q& }( X3 _8 z7 O! G+ k' z
bbd70f5985384b3d873f411e93853280.png
& J1 m4 J* i7 ^9 n$ Q  z* F+ O3 H  f/ t% L6 m0 N5 a
初始设置为ARR为500-1,PSC为64-1,若设置为32-1,那么他的频率应该是64M/(32-1+1)(500-1+1)=4k
8 m& j! }# G0 K( v7 B$ j- l) z占空比为300/500*100%=60%7 L/ o! O6 E& ?- f" @4 t

  {4 n* h8 u+ _- H
  1. __HAL_TIM_SET_PRESCALER(&htim2, 32-1);
复制代码
" `: }5 [- n) i' P+ n
9a862ee0a86640beaf5e5b5d1e08085b.png 3 T! s/ N7 O0 I( Y! R$ ~* N

7 R3 [' c' @4 a9 s% r————————————————8 E9 X1 ^. m/ O; A+ z# d9 V
版权声明:记帖, r  o7 N5 @0 d( N
8 r; R7 q' U4 K$ M( ~9 j

5 i8 B# f6 r& d7 m4 n' H
赞 收藏 评论0 发布时间:2022-9-4 17:08

举报

0个回答

所属标签

相似技术帖

官网相关资源

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