掌握PWM:STM32F103实现PWM控制直流电机小风扇

简介: PWM,即脉冲宽度调制(Pulse Width Modulation),是一种广泛应用于电子和电机控制领域的信号编码方法。PWM的核心思想是通过改变数字信号的脉冲宽度来模拟模拟信号的幅度变化,从而达到控制输出功率的目的。


目录

效果图:

PWM

工作原理

参数

频率:

占空比

输入捕获:

输出比较:

输出过程:

应用领域

优点

实现方法

应用实例:STM32F103实现PWM控制直流电机小风扇

电机原理图:

STM32CubeMax配置图:

开启高速时钟

配置PWM引脚属性:

HAL库PWM函数:

主函数代码:


效果图:

        image.gif 编辑

不要问为啥有点卡~因为CSDN不允许图片大于5MB....

PWM

PWM,即脉冲宽度调制(Pulse Width Modulation),是一种广泛应用于电子和电机控制领域的信号编码方法。PWM的核心思想是通过改变数字信号的脉冲宽度来模拟模拟信号的幅度变化,从而达到控制输出功率的目的。

image.gif 编辑

工作原理

在PWM信号中,信号是以固定频率发送的周期性脉冲序列。每个脉冲都有两个主要参数:脉冲的持续时间(脉冲宽度)和脉冲之间的间隔(即脉冲周期)。PWM信号的占空比是指脉冲宽度与脉冲周期的比例,它决定了平均输出电压的高低。

想象一下,我们有一个周期性的信号,其中高电平表示“开”状态,低电平表示“关”状态。PWM 就是在一个固定的时间周期内,通过改变高电平和低电平的持续时间来控制信号的特性。

例如,如果我们将高电平持续时间设为较长,低电平持续时间设为较短,那么平均电压或功率就会比较高。相反,如果高电平持续时间设为较短,低电平持续时间设为较长,平均电压或功率就会比较低。

通过不断地调整高电平和低电平的持续时间比例,我们可以得到不同的输出效果。这种方法常用于控制电机的速度、调光灯的亮度、音频设备的音量等。

总结起来,PWM 通过改变信号的高电平和低电平的时间比例来控制输出的平均电压或功率,是一种常用的调节信号的方法

参数

周期: 高低电平变化所需时间, 单位:ms

T=1/f T->周期 f->频率

频率:

在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位Hz。

比如:频率50Hz,一个周期就是20ms,一秒钟有50次的PWM周期。

20 * 50 =1000 ms

占空比

在一个脉冲周期内,高电平的时间占整个周期时间的比例,单位是% (0%-100%)。

image.gif 编辑

输入捕获:

输入捕获可以用来捕获外部事件,比如引脚的电平变化(上升沿,下降沿),并记录下变化的时间,通常可以用来测量外部信号的频率或者电平持续的时间

image.gif 编辑

输出比较:

此项功能是用来控制一个输出波形,当计数器与捕获/比较寄存器的内容相同时,输出比较功能做出相应动作,比如电平的翻转。通常用于生产PWM波形

image.gif 编辑

image.gif 编辑

输出过程:

当0-t1这段时间,计数器寄存器的CNT的值是小于CCR,输出高电平。

当t1-t2这段时间,计数器寄存器的CNT的值是大于CCR且小于ARR的,输出低电平。

当CNT的值达到ARR里的值时,产生溢出事件,自动清零(重装寄存器)再次从0开始向上计数。

应用领域

PWM技术在许多领域都有应用,其中最常见的是:

  1. 电机控制:通过调整PWM的占空比,可以控制直流电机的速度和方向,以及交流电机的频率和电压,实现精密的速度和扭矩控制。
  2. LED亮度调节:PWM可以用来控制LED的亮度,通过改变占空比,可以平滑地调节LED的亮度而不影响颜色。
  3. 电源转换:在开关电源和DC-DC转换器中,PWM用于控制功率晶体管的导通和关断时间,从而调节输出电压和电流。
  4. 音频放大器:某些音频放大器使用PWM技术来提高效率和降低失真。

优点

  • 高效率:由于PWM信号在高电平和低电平之间切换,减少了能量损耗,提高了整体系统的效率。
  • 精确控制:PWM可以实现非常精细的功率控制,适用于需要高精度调节的应用。
  • 简单性:相对于模拟电路,PWM电路更容易设计和实现,因为它主要使用数字逻辑。

实现方法

PWM可以通过专用的硬件电路,如微控制器的PWM输出引脚,或使用软件算法结合定时器产生。在现代微控制器中,通常会有内置的PWM发生器,可以方便地设置频率、分辨率和占空比。

应用实例:STM32F103实现PWM控制直流电机小风扇

电机原理图:

image.gif 编辑

点击共有两条线,一条接到高电平,一条接到低电平即可转动,所以我们将一条接到固定高电平上,例如5V引脚,另一个接到我们的PWM控制的引脚即可。

我目前接的是PB8引脚。

image.gif 编辑

STM32CubeMax配置图:

开启高速时钟

image.gif 编辑

image.gif 编辑

配置PWM引脚属性:

image.gif 编辑

image.gif 编辑

HAL库PWM函数:

image.gif 编辑

HAL_StatusTypeDef HAL_TIM_PWM_Start (TIM_HandleTypeDef * htim, uint32_t Channel)

功能:启动PWM信号生成

参数: htim:TIM句柄

Channel: TIM要启用的通道,该参数可以是以下值之一

XXXXXXXXX

返回值:状态

主函数代码:

上面的HAL_TIM_PWM_Start的参数需要根据自己的配置去更改,也就是看你给引脚开的哪个。

函数的逻辑其实也很简单,就是让他一直减少,增加到0后再逐渐增加到1000,往返寻常。

image.gif 编辑

Ok, 目前到此为止也就结束了,一个简单的小实验,希望可以帮到大家~

相关文章
|
2月前
STM32Cubemx PWM驱动加湿器模拟火山喷发效果
STM32Cubemx PWM驱动加湿器模拟火山喷发效果
48 14
|
2月前
STM32Cubemx PWM驱动SG90舵机
STM32Cubemx PWM驱动SG90舵机
71 13
|
2月前
STM32CubeMX PWM
STM32CubeMX PWM
38 9
|
2月前
STM32Cubemx TB6612直流电机驱动
STM32Cubemx TB6612直流电机驱动
56 0
|
4月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
STM32F103C8 TIM输出比较与PWM
STM32F103C8 TIM输出比较与PWM
84 0