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

基于STM32 PWM配置经验分享

[复制链接]
攻城狮Melo 发布时间:2023-6-14 10:42
本文主要介绍通过CubeMX对STM32G070CBT6进行配置生成PWM波,内容包括PWM的基本概念、PWM的应用、PWM产生的方法、STM32 PWM波配置详解。  @  I+ y( A* I) ?' `* {% q
$ E" R, {/ |8 C) M' p4 R6 y! }# m
1、PWM
   PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,也就是一种周期一定而高低电平可调的方波信号,在一个信号周期中,高电平持续时间的为T1,低电平持续时间的为T2 。
占空比:在一个信号周期中,高电平持续时间与信号周期的比值,即T1/Time。比如,Time=40,T1=20,则占空比=20/40=50%,即方波信号的占空比就是50%.
$ g! Q1 G+ t4 o/ k- x1 F! ]/ X
微信图片_20230614104114.png
* s. X5 e' T( \/ e9 X
' C, ^9 ?9 d( u# E
   当输出脉冲的频率(周期的倒数)一定时,输出脉冲的占空比越大,其高电平持续的时间越长,只要改变T1和T2的值,即改变波形的占空比,达到PWM脉宽调制的目的。
  f( I: o7 l! r7 X6 x2 a
2、PWM应用
7 F& z; i; X5 E5 l+ D( I8 m7 R
2.1 LED调光灯  交流调光电路,高电平占多一点,也就是占空比大一点亮度就亮一点,占空比小一点亮度就减弱,前提是PWM的频率要大于我们人眼识别频率(交流调光电路,高电平占多一点,也就是占空比大一点亮度就亮一点,占空比小一点亮度就减弱,前提是PWM的频率要大于我们人眼识别频率,要不然会出现闪烁现象。),要不然会出现闪烁现象。
6 e5 z4 a1 q. O0 T2 @& v% x/ b/ _# j, v
0 s5 V8 v  c5 h
2.2 PWM对电机转速的控制
2 n, t* i8 i" l调节占空比可以实现不同电压的输出,实现对电机转速的调节。对于直流电机来讲,电机输出端引脚是高电平电机就可以转动,当输出端高电平时,电机会转动,但是是一点一点的提速,在高电平突然转向低电平时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了。在电机控制中,电压越大,电机转速越快,而通过PWM输出不同的模拟电压,便可以使电机达到不同的输出转速。当然,在电机控制中,不同的电机都有其适应的频率 频率太低会导致运动不稳定,如果频率刚好在人耳听觉范围,有时还会听到呼啸声。频率太高时,电机可能反应不过来,正常的电机频率在 6-16kHZ之间为好。
7 j/ q: k& G  {3 {  v7 Q9 M$ z' `
. Y  b6 k- R& a5 T) V; b6 T! V6 M

3 o) d( S* f" {$ D2.3 PWM对舵机的控制% K+ R; }+ a+ M
舵机的控制就是通过一个固定的频率,给其不同的占空比来控制舵机不同的转角。舵机的频率一般为频率为50HZ,也就是一个20ms左右的时基脉冲,而脉冲的高电平部分一般为0.5ms-2.5ms范围,来控制舵机不同的转角。500-2500us的PWM高电平部分对应控制180度舵机的0-180度。9 m/ h4 t3 x% {+ h6 A

( n' c/ D  a$ e0 g) Q: s$ M! F3 X
3、如何实现PWM信号输出
  实现PWM信号输出有两种方式可实现:
     一是通过软件模拟实现PWM输出。如果对PWM频率要求不是很高的话,可以利用I/O口设置一些参数来输出PWM信号。因为PWM信号其实就是一高一低的一系列电平组合在一起。具体方法是通过定时器控制I/O的高低电平,对于你要求输出的PWM信号频率与你的定时器一致,用定时器中断来计数,通过调整计数值来改变占空比,当然如果要求不高也可以通过软件延时来实现。
   二是可以直接通过芯片内部模块输出PWM信号,前提是这个I/O口要有集成模块,只需要配置好频率和占空比,简单几步就好了。这种自带有PWM输出的功能模块在程序设计更简便,同时数据更精确。
& D! M3 A8 T6 I4 H& u
4.STM32 PWM 配置详解  _6 o/ F6 q9 T) T
     STM32的通用定时器都具有生成PWM波的功能,PWM波可以输出到定时器的通道引脚,也可以不输出到引脚。本文就以定时器TIM3为例,详细说明使用TIM3输出PWM波。STM32 PWM 配置分为基础配置和定时器相关配置。9 j" S- E' h& {5 w
4.1 基础配置
     首先配置PF0和PF1为外部晶振的输入和输出引脚,基础配置主要是STM32时钟配置,如下图所示。设置HSE时钟为8MHz,设置HCLK为50MHz,并将总线定时器时钟频率和总线时钟都设置为50MHz。这样设置是为了方便计算定时器的预分频系数和输入时钟信号频率。

) I9 o' h( r( l/ O- V
微信图片_20230614110405.png
9 R) i- I1 G3 ^6 G7 B& i
4.2 TIM3定时器配置
    定时器TIM3的配置主要包括模式和参数设置。其中模式设置界面如下图所示,时钟源选择内部时钟时钟源;TIM3有四个通道,这里使能通道1,选择工作模式为PWM Generation CH1,此时,引脚PA6自动设置为复用引脚TIM3_CH1,如下图所示。( a5 e3 m$ A& V  t1 J$ T) ]
9 T9 X/ ^" U$ m' R% T' E
微信图片_20230614104117.png
; y. O; \7 Q9 ~( B
微信图片_20230614104119.png

- z4 l: d& k% |6 H: E7 y' S
定时器TIM3参数设置,如下图所示:
1.Prescaler,预分频寄存器值,设置为4999,那么预分频系数就是4999+1.定时器使用内部时钟信号50Mhz,经过预分频后进入计数器的时钟频率就是fclk_cnt=50*10^6/(4999+1)=10Khz.
2.计数模式选择递增计数。+ O% D) y+ n6 g7 b& S1 x- O9 V
3.counter mode计数周期ARR值,设置为199,那么一个计数周期就是
Tarr=(1+199)/(10*10^6)s=20ms.
4.内部时钟分频,选择Disable,表示不分频。即CK_PSC为=fclk_cnt。
5.自动重载预装载,设置为disable,设置的新的ARR值立即生效。
6.pulse,PWM脉冲宽度,这里设置50,因为计数器的时钟频率为10KHZ,所以脉冲宽度就是5ms。需要注意脉冲宽度小于ARR。! ?5 R* d0 v9 h4 y& m

' M# Z0 z6 X( A! y& F1 F
微信图片_20230614104122.png

( j* l* ~3 {- {; r. R8 A8 [
最后开启定时器TIM3的中断。7 S5 T" F- h. \7 L# g1 a

3 w  x  m1 _6 R1 M! i0 K
微信图片_20230614104124.png

  s* P" w8 l8 J5 F$ b4 g7 E% t8 z' ~5 T6 I6 C# H# `. R
5.主程序
要启动定时器3的PWM输出,还需要在mai函数中先执行HAL_TIM_Base_Start_IT(&htim3);启动定时器3,然后执行函数HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_1);启动CH1的PWM波输出
& F, X4 A, c8 a6 n8 A% b$ \
微信图片_20230614104127.png

' E3 @8 Q( F: P! B5 q, Q& [/ T; z
     构建项目后,将其下载到开发板上运行,通过示波器观察PA6引脚波形如下图所示:可以看到经过以上配置,在PA6上输出量一个周期为20ms,高电平脉冲宽度为5ms的固定占空比的PWM波。

- O* N7 {* r+ ?1 E. N
微信图片_20230614104130.png

3 u7 _; Q; \9 }3 R  I0 J. t. t
当然在实际应用时,通常占空比是随着控制的要求而实时变换的。在程序要动态改变PWM波的占空比,就需要修改寄存器TIMx_CCR1的值。使用宏函数__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,pulseWidth);可以设置CCR值。其中第一个参数为定时器对象指针,第二个参数为定时器通道,第三个参数为需要的CCR值。如下图所示,在main函数while循环中加入一代码,即可实现占空比可调。

* ~0 |' T- h6 s) e3 A( T- l$ p8 o: U# G& O1 o
微信图片_20230614104133.png

7 H, _% Q; m: i3 T  n# }, W
转载自: MCU学习笔记
如有侵权请联系删除
% B6 E! N" U/ ~& o7 l

5 ~7 O% W5 U( d0 M* h# \+ {% }1 }; D$ I4 a
收藏 评论0 发布时间:2023-6-14 10:42

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版