搜索
bottom↓
回复: 0
打印 上一主题 下一主题

《ESP32-S3使用指南—MicroPython版 V1.0》第十三章 PWM实验

[复制链接]

出0入234汤圆

跳转到指定楼层
1

1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729



第十三章 PWM实验


       在ESP32-S3上,PWM功能主要由machine模块提供,通过设置PWM频率(每秒高电平脉冲数)和占空比(一个周期内高电平时间比例)实现对特定设备的控制。例如,使用PWM控制LED灯亮度时,需要先初始化PWM对象并设置频率和占空比。频率影响PWM信号扫描速度,占空比则控制高电平脉冲时间长度,从而影响LED灯亮度。
       本章分为如下几个小节:
       13.1 PWM脉宽调制技术
       13.2 machine.PWM类
       13.3 硬件设计
       13.4 软件设计
       13.5 下载验证

       13.1 PWM脉宽调制技术
       PWM是脉冲宽度调制的缩写,它是通过对一些列脉冲的宽度进行调制,等效出所需要的波形,对模拟信号电平进行数字编码,也就是说,通过调节占空比的变化调节信号、能量等编号。占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,如方波的占空比为50%。
       在第八章实现的LED灯闪烁,500ms亮与500ma灭循环,信号的波形图图下所示。

图13.1.1 信号波形图

       上图中,占空比为50%的方波。如果把延时时间缩短,时间越短LED灯闪烁的越快。当时间足够短的时候,从人眼的角度来看,LED保持常亮,并不会感觉到LED闪烁。如果我们在一个时间足够短的周期内调节高低电平的时间比例,也就是控制高低电平的占空比,就可以达到控制LED灯亮度的目的了,这就是PWM控制。不同占空比效果如下图所示。

图13.1.2 PWM控制

       PWM占空比受到两个因素影响,频率和占空比。例如PWM的控制周期为100ms,其中25ms被设置为高电平,75ms被设置为低电平,则占空比就是25/100=25%。值得注意的是,在MicroPython中,ESP32-S3的占空比(duty)并不是百分比取值,而是一个分辨率的形式,其取值范围为0~1023。

       13.2 machine.PWM类
       machine.PWM 类是 machine 模块下的一个硬件类,用于指定 PWM 设备的配置和控制,提供对 PWM 设备的操作方法。PWM是一种对模拟信号电平进行数字编码的方式。PWM 设备可以通过调节有效电平在一个周期信号中的比例时间来操作设备。PWM 设备有两个重要的参数:频率(freq)和占空比(duty)。频率是指从一个上升沿(下降沿)到下一个上升沿(下降沿)的时间周期,单位为 Hz。占空比是有效电平(通常为电平)在一个周期内的时间比例。

       1,machine.PWM类的构造对象
       在 MicroPython 中PWM的构造对象方法如下:
  1. class machine.PWM(pin,freq,duty)
  2. 使用示例:pwm = machine.PWM(Pin(1),freq = 1000)
复制代码
       该构造函数的参数描述,如下表所示。

表13.2.1 machine.PWM构造函数参数描述

       返回值:PWM对象。

       2,machine.PWM类的方法

       ①:PWM对象初始化。
       其方法原型如下:
  1. pwm.init(freq, duty)
复制代码
       该方法的参数描述,如下表所示。

表13.2.2 UART.init方法参数描述

       ②:关闭PWM设备。
       其方法原型如下:
  1. pwm.deinit()
复制代码

       ③:设置频率。
       其方法原型如下:
  1. pwm.freq([value])
复制代码
       该方法的参数描述,如下表所示。

表13.2.2 PWM.freq方法参数描述

       ④:设置占空比。
       其方法原型如下:
  1. pwm.duty ([value])
复制代码
       该方法的参数描述,如下表所示。

表13.2.2 PWM.duty_u16函数参数描述

       13.3 硬件设计

       1. 例程功能
       本章实验功能简介:实现LED由暗变亮,再从亮变暗,依次循环。

       2. 硬件资源
       1)LED灯
              LED-IO1

       2)独立按键
              BOOT-IO0

       3)PWM

       3. 原理图
       本章实验使用的PWM为ESP32-S3的片上资源,因此并没有相应的连接原理图

       13.4 软件设计

       13.4.1 程序流程图
       程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:


图13.4.1.1 程序流程图

       13.4.2 程序解析
       本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。PWM实验main.py源码如下:
  1. from machine import Pin,PWM
  2. import time


  3. """
  4. * @brief       程序入口
  5. * @param       无
  6. * @retval      无
  7. """
  8. if __name__ == '__main__':
  9.    
  10.     pwm = PWM(Pin(1),freq = 1000)
  11.    
  12.     while True:
  13.         # 渐亮
  14.         for i in range(0,1024):
  15.             pwm.duty(i)
  16.             time.sleep_ms(1)
  17.         # 渐暗
  18.         for i in range(1023,0,-1):
  19.             pwm.duty(i)
  20.             time.sleep_ms(1)
复制代码
       这示例代码使用ESP32的PWM功能,通过循环改变PWM占空比的方式,控制LED灯的亮度在0-1023之间变化,然后从1023-0之间变化,实现LED灯的亮度会以一个平稳的速度从最暗变到最亮,然后再从最亮变到最暗。

       13.5 下载验证
       下载代码完成后,ESP32-S3开发板上LED灯的亮度会以一个平稳的速度从最暗变到最亮,然后再从最亮变到最暗。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 06:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表