文章目录

  • 一、PWM介绍
  • 二、PWM实验


一、PWM介绍

什么是PWM?

  • PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于有效电平的时间占据整个信号周期的百分比。
  • 脉冲宽度调制
  • 通过占空比编码模拟信号
  • 占空比 :一个周期内,有效电平占据时长的百分比

STM32F103C8T6 PWM资源
高级定时器(TIM1):7路
通用定时器(TIM2~TIM4):各4路

  • PWM输出模式:
  • PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平
  • PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。
  • stm32cubemx PWM 极性_单片机

  • 注意:有效电平不一定是高电平

PWM信号的周期计算公式:

stm32cubemx PWM 极性_脉冲宽度_02


PWM占空比:

由TIMx_CCRx寄存器决定

二、PWM实验

需求:使用PWM点亮LED1实现呼吸灯效果

1.LED灯为什么可以越来越亮,越来越暗?
这是由不同的占空比决定的

2.如何计算周期/频率?
假如频率为 2kHz ,则:PSC=71,ARR=499

3.LED1连接到哪个定时器的哪一路

stm32cubemx PWM 极性_stm32_03


步骤:

  1. 设置时钟
  2. 设置定时器

    记得把极性设置为Low,因为LED灯是低电平才亮。
  3. 配置工程
  4. 业务代码
// 定义变量
uint16_t pwmVal=0; //调整PWM占空比
uint8_t dir=1; //设置改变方向。1:占空比越来越大;0:占空比越来越小
// 使能 Timer4 第3通道 PWM 输出
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
// while循环实现呼吸灯效果
while (1)
{
HAL_Delay(1);
if (dir)
pwmVal++;
else
pwmVal--;
if (pwmVal > 500)
dir = 0;
if (pwmVal == 0)
dir =1;
//修改比较值,修改占空比
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwmVal);
}