PWM技术的简单应用

PWM技术的简单应用

1、简介

  • 脉冲宽度调变(Pulse Width Modulation,PWM),也成脉冲宽度调制,简称为脉宽调制,是一项功能强大的技术,它是一种对模拟信号电平进行数字化编码的方法。在脉宽调制中使用高分辨率计数器来产生方波,并且可以通过调整方波的占空比来对模拟信号电平进行编码。PWM通常使用在开关电源和电机控制中。

2、具体操作(呼吸灯)

(1)初始化硬件

  • 使能RCC
    img
  • 配置时钟,将HCLK配置为72MHZ
    img
  • 将对应小灯引脚设置为时钟对应的通道
    img
  • 使能时钟通道,使用PWM模式
    img

PWM配置公式:img

  • 根据公式设置预分频和重装载值
    img
  • 启用PWM的计时器
  /* USER CODE BEGIN 2 */

  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);

(2)操控设备

  • 新建2个文件,用来写LED驱动
    img
    img

记得要放在相应的文件夹中,防止文件管理混乱

  • PWM_LED.h中写入以下内容:
#include "main.h"
#include "tim.h"

void PWM_LED(void);
  • PWM_LED.c中写入以下内容
int value, step = 2000;//设置步长value,计数step
#include "PWM_LED.h"
/*驱动LED的程序*/
void PWM_LED(){
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, value);//配置计时器
	value += step;//每次添加2000
	HAL_Delay(200);
    //当超过重装载阈值或小于0时,计数翻转(即数大改为减,数小改为加)
	if(value > 19999 || value < 0){
		step = -step;

	}
}

  • 记得要在main.h中引用头文件:
/* USER CODE BEGIN Includes */
#include "PWM_LED.h"
/* USER CODE END Includes */
  • main.c中引用头文件
/* USER CODE BEGIN Includes */
#include "PWM_LED.h"
/* USER CODE END Includes */
  • 主循环外部启用计时器
/* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  /* USER CODE END 2 */
  • 在主循环内部配置计数器
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  PWM_LED();
  }

3、最终效果

  • 小灯将会在"亮","灭"间切换,并且会有过渡效果
    img
    img
    img

流程图

graph TD; begin((开始)) ---> GPIO_Init[初始化GPIO] ---> TIM_Init[初始化TIM] ---> TIM_Start[ 启用计时器] ---> Add[将比较值加上步长] ---> Delay[延时0.5秒] ---> Pend{比较值是否加满或为0} Pend --> |是|Toggle[将步长翻转] Pend --> |否|Delay Toggle ---> Delay

4、代码清单

/*---------启用计时器的函数,
需要计时器句柄&htim,具体使能的通道TIM_CHANNEL_x---------------------*/
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
/*---驱动LED的函数------*/
void PWM_LED(){
	__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, value);//configure the TIM
	value += step;//Add 2000 each time
	HAL_Delay(500);
	if(value > 19999 || value < 0){
		step = -step;

	}
}
posted @ 2025-09-01 13:52  奶龙大王  阅读(27)  评论(0)    收藏  举报