第10章 PWM呼吸灯实验

第十章 PWM呼吸灯实验

1. 导入

PWM 是脉冲宽度调制, 简称脉宽调制。 它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 PWM 主要用于输出不同频率、 占空比(一个周期内高电平出现时间占总时间比例) 的方波。 以实现固定频率或平均电压输出。 频率固定, 改变占空比可改变输出电压, 如下所示:

屏幕截图 2024 08 07 101750

2. 硬件设计

本实验使用到硬件资源如下:

  • LED模块

  • ESP32 GPIO

LED模块电路前面已介绍,此处不再重复

本章实验使用 ESP32 的 IO15 引脚, 接线如下所示:

3. 软件设计

3.1 MicroPython函数使用

PWM 可以通过 ESP32 所有 GPIO 引脚输出。 所有通道都有 1 个特定的频率,从 1 到 40M 之间(单位是 Hz) 。 占空比的值为 0 至 1023 之间。

PWM 在 machine 的 PWM 模块中, 我们也是只需要了解其构造对象函数和使用方法即可。

屏幕截图 2024 08 07 102408

PWM 使用方法如下:

屏幕截图 2024 08 07 102442

3.2 代码分析

from machine import Pin, PWM
import time

led1 = PWM(Pin(15), freq=1000, duty=0) # 参数说明:Pin(15) 控制的引脚;freq=1000 频率;duty=0 初始占空比

# 主函数
if __name__ == '__main__':
    duty_value = 0 # 初始占空比
    fx = 1 # 1 正序,0 逆序
    while True:
        if fx == 1: # 正序
            duty_value += 10 # 增加 10 度
            if duty_value > 1010: # 最大值 1010
                fx = 0 # 切换方向
        else:
            duty_value -= 10 # 减少 10 度
            if duty_value < 10: # 最小值 10
                fx = 1 # 切换方向
        led1.duty(duty_value) # 设置占空比
        time.sleep_ms(10)       

关于PWM调节部分的代码我们可以分析一下:

  • if fx == 1::当fx为1时,PWM占空比增加。
    • duty_value += 10:增加10。
    • if duty_value > 1010::当占空比大于1010时,切换方向。
    • fx = 0:设置fx为0,表示下一次应逆向减少占空比。
  • else::当fx为0时,PWM占空比减少。
    • duty_value -= 10:减少10。
    • if duty_value < 10::当占空比小于10时,切换方向。
    • fx = 1:设置fx为1,表示下一次应正向增加占空比。

更新PWM占空比和延迟:

  • led1.duty(duty_value):设置PWM的占空比。
  • time.sleep_ms(10):延迟10毫秒,以控制占空比变化的速度。

注意事项:

  • 在实际使用中,duty_value的范围通常是0到1023(对于12位PWM分辨率)。因此,这里的最大值1010和最小值10都是为了避免超出范围。
  • LED亮度会周期性地从较低亮度逐渐增加到较高亮度,然后再逐渐减少,形成一个“呼吸灯”的效果。

2024.8.21 第一次修订,后期不再维护

posted @ 2024-08-21 13:20  hazy1k  阅读(24)  评论(0编辑  收藏  举报