【实验】ESP32S3 PWM外设的使用

实验简介

本设计主要是学习如何使用ESP32S3的PWM外设。

本实验中,开发板选用的是图灵哥TRGESP32S3探索板,通过PWM控制LED灯的状态。

PWM简介

PWM(脉冲宽度调制,Pulse Width Modulation)是一种在微控制器单元(MCU)中广泛使用的技术,用于控制电路的功率输出。以下是对PWM在MCU中应用的简介

PWM是一种数字信号控制技术,通过调节脉冲的宽度(即高电平持续时间与总周期时间的比例)来模拟模拟信号的控制效果。在微控制器单元(MCU)中,PWM广泛应用于各种领域,如电机控制、电源管理、音频信号处理等。

PWM主要特点

  1. 高效率:PWM技术可以实现高效率的功率控制,减少能量损耗,提高系统性能
  2. 精确控制:通过调整脉冲宽度,可以实现精确的功率输出控制,满足不同应用场景的需求
  3. 灵活性强:PWM信号可以方便地通过软件编程进行调节,适应不同的控制策略
  4. 抗干扰能力强:由于PWM信号是一种数字信号,相较于模拟信号,具有更好的抗干扰性能

PWM程序设计思路:

在MCU中,PWM的实现通常涉及以下步骤

  1. 设置PWM频率:根据应用需求,设置PWM信号的工作频率
  2. 设置占空比:通过调整高电平持续时间和总周期时间的比例,即占空比,来控制功率输出
  3. 启动PWM输出:使能PWM模块,开始输出PWM信号
  4. 实时调节:在运行过程中,根据实际需求动态调整PWM参数,以实现最佳控制效果

Summary:PWM技术在MCU中的应用为嵌入式系统设计提供了强大的控制手段,使得系统在节能、精度和灵活性方面表现出色学习好PWM的驱动很重要。

程序源码

led_pwm.ino

/**
 ******************************************************************************
 * @file      led_pwm.ino
 * @author    Turinger Software
 * @version   V1.0
 * @date      2024-09-20
 * @brief     LED PWM实验
 ******************************************************************************
 * 
 * 实验平台    图灵哥 TRGESP32S3探索板
 * 实验目的:学习LED PWM外设的使用
 *
 * 硬件资源及引脚分配: 
 * 1, LED --> ESP32S3 IO
 *    LED --> IO1
 * 
 * 实验现象:
 * 1, LED指示灯实现呼吸灯效果,由暗变亮,再由亮变暗
 * 
 * 注意事项:
 * 无
 * 
 ******************************************************************************
 */

#include "pwm.h"


uint16_t g_ledpwmval = 0;     /* 占空比值 */
uint8_t g_dir = 1;            /* 变化方向(1增大 0减小) */

/**
 * @brief    当程序开始执行时,将调用setup()函数,通常用来初始化变量、函数等
 * @param    无
 * @retval   无
 */
void setup() 
{
    led_pwm_init(1000, 10);   /* LED PWM初始化,PWM输出频率为1000HZ,占空比分辨率为10 */
}

/**
 * @brief    循环函数,通常放程序的主体或者需要不断刷新的语句
 * @param    无
 * @retval   无
 */
void loop() 
{
    if (g_dir)
    {
        g_ledpwmval += 5;
    }
    else
    {
        g_ledpwmval -= 5;
    }

    if (g_ledpwmval > 1005)
    {
        g_dir = 0;
    }

    if (g_ledpwmval < 5)
    {
        g_dir = 1;
    }

    pwm_set_duty(g_ledpwmval);
    delay(5);
}

pwm.cpp

/**
 ****************************************************************************************************
 * @file      pwm.cpp
 * @author    Turinger Software
 * @version   V1.0
 * @date      2024-09-20
 * @brief     LEDPWM驱动代码
 * 实验平台    图灵哥 TRGESP32S3探索板
 *
 ****************************************************************************************************
 */

#include "pwm.h"

/**
 * @brief     LEDPWM初始化函数
 * @param       frequency: PWM输出频率,单位HZ
 * @param       resolution: PWM占空比的分辨率1-16,比如设置8,分辨率范围0~255
 * @retval      无
 */
void led_pwm_init(uint16_t frequency, uint8_t resolution)
{
    //ledcSetup(LED_PWM_CHANNEL, frequency, resolution);    /* PWM初始化,引脚和通道由pwm.h的LED_PWM_PIN和LED_PWM_CHANNEL宏修改 */
    //ledcAttachPin(LED_PWM_PIN, LED_PWM_CHANNEL);          /* 绑定PWM通道到LED_PWM_PIN上 */
    //ledcAttachChannel(LED_PWM_PIN,frequency,resolution);
    ledcAttachChannel(LED_PWM_PIN,frequency,resolution,LED_PWM_CHANNEL);
}

/**
 * @brief     PWM占空比设置
 * @param       duty: PWM占空比
 * @retval      无
 */
void pwm_set_duty(uint16_t duty)
{
    ledcWrite(LED_PWM_PIN, duty);   /* 改变PWM的占空比,通道由pwm.h的LED_PWM_CHANNEL宏修改 */
}

pwm.h

/**
****************************************************************************************************
 * @file      pwm.h
 * @author    Turinger Software
 * @version   V1.0
 * @date      2024-09-20
 * @brief     LEDPWM驱动代码
 * 实验平台    图灵哥 TRGESP32S3探索板
 *
****************************************************************************************************
 */

#ifndef __PWM_H
#define __PWM_H

#include "Arduino.h"

/* LED PWM定义 */
#define LED_PWM_PIN       1   /* PWM信号输出的引脚  */
#define LED_PWM_CHANNEL   0   /* LED PWM通道号 */

/* 函数声明 */    
void led_pwm_init(uint16_t frequency, uint8_t resolution);    /* LED PWM初始化函数 */
void pwm_set_duty(uint16_t duty);                             /* PWM占空比设置 */

#endif

实验结果:可观察到LED指示灯(右下)实现呼吸灯效果,由暗变亮,再由亮变暗

实验到此结束,感谢观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值