05 - PWM实验

PWM功能的核心实现依托于machine模块,通过精确配置PWM的频率(即每秒内高电平脉冲的数量)与占空比(定义为一个周期内高电平所占时间的比例),实现对特定电子设备的精细控制。以LED灯亮度调节为例,操作流程首先需对PWM对象进行初始化,并明确设定所需的频率与占空比参数。其中,频率参数对PWM信号的扫描速率具有直接影响,而占空比则通过调整高电平脉冲的持续时间,进而有效调控LED灯的亮度表现。

本节课目标:

实现ESP32的脉冲宽度调制(PWM)功能,用以控制LED灯实现从暗至亮,再由亮至暗的循环变化过程。该过程将周期性地重复进行。

本节课内容:

  1. PWM 脉宽调制技术简介
  2. machine.PWM类
  3. 硬件设计
  4. 软件设计
  5. 下载验证

一、PWM 脉宽调制技术简介

PWM,即脉冲宽度调制,是一种通过对一系列脉冲宽度的调整来等效生成所需波形的技术,用于对模拟信号电平进行数字编码。这一过程涉及通过调节占空比的变化来调控信号、能量等编码。占空比,具体指的是在一个周期内,信号处于高电平的时间所占整个信号周期的百分比比例,例如方波的占空比可为50%。

PWM的占空比受到频率与占空比本身两个因素的共同作用。以PWM控制周期为100ms为例,其中25ms为高电平时间,75ms为低电平时间,此时占空比即计算为25/100=25%。值得特别注意的是,在MicroPython环境中,针对ESP32设备的占空比(duty)设置并非采用百分比形式,而是采用一种分辨率机制,其取值范围界定在0至1023之间。

二、machine.PWM类

machine.PWM 类是 machine 模块中的一个核心硬件类,它旨在为用户提供一个接口以配置和控制 PWM 设备。通过此类,用户可以执行对 PWM 设备的一系列操作,以满足特定的硬件控制需求。PWM,即脉冲宽度调制,是一种广泛应用的数字信号技术,用于模拟信号电平的编码与控制。

在具体操作中,PWM 设备通过调整一个周期内有效电平(通常为高电平或低电平之一)所占的时间比例来实现对设备的控制。这种控制方式使得 PWM 设备能够在不直接改变电压或电流幅值的情况下,模拟出不同的电压或电流水平,从而实现更为灵活和精确的设备调控。

在 PWM 设备的配置中,有两个至关重要的参数需要用户设定:

  1. 频率(freq):该参数定义了 PWM 信号从一个上升沿(或下降沿)到下一个上升沿(或下降沿)所经历的时间周期,其单位为赫兹(Hz)。频率的高低将直接影响 PWM 信号的变化速度和稳定性。
  2. 占空比(duty):该参数描述了在一个完整的 PWM 信号周期内,有效电平(用户所指定的电平)所占的时间比例。占空比的变化将直接反映在 PWM 信号的平均电压或电流水平上,进而实现对被控设备的精细调节。

通过合理配置 PWM 设备的频率和占空比参数,用户可以实现对各种类型硬件设备的精确控制,包括但不限于电机转速调节、LED 亮度调整以及音频信号的模拟等。

下面是MicroPython库的machine.PWM类链接。

PWM 类 – 脉宽调制 — MicroPython latest documentation

1. machine.PWM类的构造对象

构造对象方法如下:

class machine.PWM(dest, *, freq, duty_u16, duty_ns, invert)

使用示例:pwm = machine.PWM( Pin(2), freq=1000 )

构造函数的参数描述如下:

参数

描述

dest

dest 是输出 PWM 的实体,通常是machine.Pin对象,但端口可能允许其他值 就像整数一样

freq

freq 应该是一个整数,用于设置 PWM 周期

duty_u16

duty_u16 将占空比设置为比率 。duty_u16 / 65535

duty_ns

duty_ns 设置脉冲宽度(以纳秒为单位)

invert

如果值为 True,则 invert 反转相应的输出

返回值:PWM类对象

2. machine.PWM类的方法

(1)对象初始化

方法原型如下:

PWM.init(freq, duty)

方法的参数描述如下:

参数

描述

freq

freq 应该是一个整数,用于设置 PWM 周期

duty

占空比(0~1023)

(2)关闭PWM设备

方法原型如下:

PWM.deinit()

禁用PWM输出。

获取或设置PWM输出频率

方法原型如下:

PWM.freq(value[])

方法的参数描述如下:

参数

描述

value

获取或设置 PWM 输出的当前频率。

  • 在没有参数的情况下,返回以 Hz 为单位的频率。
  • 使用单个 value 参数时,频率将设置为该值(以 Hz 为单位)
获取或设置PWM占空比

方法原型如下:

PWM.duty(value[])

方法的参数描述如下:

参数

描述

value

获取或设置 PWM 输出的占空比。

  • 在没有参数的情况下,返回(0~1023)的占空比。
  • 使用单个 value 参数时,占空比将设置为该值(0~1023)

三、硬件设计

1. 例程功能

实现ESP32的脉冲宽度调制(PWM)功能,用以控制LED灯实现从暗至亮,再由亮至暗的循环变化过程。该过程将周期性地重复进行。

2. 硬件资源

  • LED 灯:GPIO2 --> LED 【高电平:亮; 低电平:灭】

3. 原理图

四、软件设计

1. 程序流程图

2. 程序

from machine import PWM, Pin
import time

# pwm 实例化
pwm = PWM(Pin(2))

# 初始化PWM, 1000HZ
pwm.init(freq=1000, duty=0)


while True:
    # 循环调节 PWM 占空比
    for i in range(0, 1024):
        # PWM 占空比 增加
        pwm.duty(i)
        time.sleep_ms(1)

    for i in range(1023, -1, -1):
        # PWM 占空比 减少
        pwm.duty(i)
        time.sleep_ms(1)

五、下载验证

开发板载的LED灯的亮度会以一个平稳的速度从最暗变到最亮,然后再从最亮变到最暗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值