当前位置: 首页 > news >正文

ESP8266 PMW使用的简单介绍

前言

呼吸灯是常见的LED应用。LED呼吸灯的流程是缓缓点亮LED灯,再缓缓熄灭LED灯。在夜色下,缓慢闪烁的LED显得格外迷人。 如何使用ESP8266MOD实现此效果, 这里简单地总结一下。

一、PWM单元介绍

ESP8266有四个PWM输出接口,分别是:PWM0(GPIO12)、PWM1(GPIO15)、PWM2(GPIO14)、PWM3(GPIO4)。由于PWM接口是由软件来实现的,因此用户可自行拓展(最大可拓展8个,详细请参考ESP8266 SDK的pwm.h文件)。

PWM可调节的周期在1000us~10000us,即100HZ~1KHZ之间。
二、PWM配置流程介绍

1.首先对PWM的占空比、周期以及PWM通道进行配置。

2.配置系统定时器,将呼吸灯运行程序配置成每30ms运行一次,以刷新PWM的占空比。
三、相关API介绍
1、pwm_init
API 介绍    -    -
功能介绍    初始化PWM配置    -
函数原型    void pwm_init(uint32 period, uint32 *duty, uint32 pwm_channel_num, uint32 (*pin_info_list)[3]);    -
参数介绍    period    PWM周期
    -    *duty    各PWM通道的占空比
    -    pwm_channel_num    需要使用的PWM通道数量
    -    (*pin_info_list)[3]    使用的PWM通道的GPIO参数

uint32_t io_info[ ][ 3 ] =
{
/** 该参数在ESP8266 SDK的user_light.h中 */
{ PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM }, 
};

uint32_t duty[] = {0};

/** 配置PWM的周期为1000us,占空比为0,PWM通道数量为1 */
pwm_init( 1000, duty, 1, io_info );

2、pwm_start
API 介绍    -    -
功能介绍    更新PWM配置    
函数原型    void pwm_start(void)    
注释    在PWM参数配置完成后需要调用该函数    
3、pwm_set_duty
API 介绍    -    -
功能介绍    设置某PWM通道的占空比    -
函数原型    void pwm_set_duty(uint32 duty, uint8 channel)    -
参数介绍    duty    新的PWM通道占空比
-    channel    需要设置的PWM通道(从零开始算)

示例:

/** 设置PWM通道1的占空比为100 */
pwm_set_duty( 100, 0 );

/** 使PWM配置生效 */
pwm_start();

4、pwm_get_duty
API 介绍    -    -
功能介绍    获取某通道的占空比的数值    -
函数原型    uint32 pwm_get_duty(uint8 channel)    -
参数介绍    channel    需要设置的PWM通道(从零开始算)
返回值    该通道的占空比    -
5、pwm_set_period
API 介绍    -    -
功能介绍    设置某PWM通道的周期    -
函数原型    void pwm_set_period(uint32 period, uint8 channe)    -
参数介绍    period    新的PWM通道周期
-    channel    需要设置的PWM通道(从零开始算)

示例:

/** 设置PWM通道1的周期为100us */
pwm_set_period( 100, 0 );

/** 使PWM配置生效 */
pwm_start();

6、pwm_get_period
API 介绍    -    -
功能介绍    获取某通道的周期    -
函数原型    uint32 pwm_get_period(uint8 channel)    -
参数介绍    channel    需要设置的PWM通道(从零开始算)
返回值    某通道的周期    -

 #include "ets_sys.h"
   #include "osapi.h"

   #include "user_light.h"
   #include "gpio.h"

   #include "user_interface.h"

   static os_timer_t os_timer;

   /** 呼吸灯运行程序 */
   void ESP8266_PWM_RUN( void )
   {
       /** PWM占空比变量 */
       static u8 set_duty = 0;

       /** 占空比加减标志 */
       static bool f = true;
       if ( f == true )
       {
           if ( ++set_duty >= 100 )
           {
               f = false;
           }
       }
       else
       {
           if ( --set_duty <= 0 )
           {
               f = true;
           }
       }

       /** 更新PWM通道0的占空比 */
       pwm_set_duty( set_duty, 0 );
       pwm_start();
   }

   /** 初始化PWM配置、系统定时器配置 */
   void ESP8266_PWM_Init( void )
   {
   //    struct pwm_param pwm_config;
       uint32_t io_info[ ][ 3 ] =
       {
           { PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM }, 
       };

       uint32_t duty[ ] = { 0 };

   //    pwm_config.duty[ 0 ] = 0;
   //    pwm_config.freq = 0;
   //    pwm_config.period = 1000;

       pwm_init( 1000, duty, 1, io_info );

       /** 配置定时器每30ms执行一次ESP8266_PWM_RUN()函数 */
       os_timer_disarm( &os_timer );
       os_timer_setfn( &os_timer, (ETSTimerFunc *) ( ESP8266_PWM_RUN ), NULL );
       os_timer_arm( &os_timer, 30, true );
   }

   /** 用户初始化程序,根据测试该程序只运行一次 */
   void user_init(void)
   {
       ESP8266_PWM_Init();
   }

http://www.hskmm.com/?act=detail&tid=30846

相关文章:

  • DevEco Testing全面解析:HarmonyOS测试框架与实战指南 - 教程
  • 本周第一单 多晶硅
  • 加州新规要求AI必须表明其AI身份
  • 详细介绍:【rabbitmq 高级特性】全面详解RabbitMQ TTL (Time To Live)
  • 第三台中转机实现远程scp文件到远程
  • 单片机使用同一硬件定时器实现多周期定时功能
  • 低代码平台底层协议设计
  • 基于海思Hi3798MV200 Android7.0达成电影播放蓝光导航功能
  • Vue 低代码平台渲染引擎设计
  • 2025 年热处理钎焊炉工装夹具厂家推荐榜:钎焊炉用耐热钢工装夹具厂家,聚焦品质与适配,助力企业高效生产
  • 实用指南:基于Spring Boot与SSM的社团管理系统架构设计
  • 请求超时重试封装
  • Emacs常用的一些快捷键,记不住的,方便查询!!
  • Microsoft Visual C++,Microsoft Visual Studio for Office Runtime,Microsoft Visual Basic Runtime等下载
  • 2025 年耐热钢厂家及热处理工装设备厂家推荐榜:多用炉/真空炉/台车炉/井式炉/箱式炉/耐热钢工装厂家,聚焦高效适配,助力企业精准选型
  • 实用指南:如何进行WGBS的数据挖掘——从甲基化水平到功能通路
  • python对接印度尼西亚股票数据接口文档
  • Webpack优化
  • 2025年舒适轮胎厂家最新权威推荐榜:静音耐磨,驾驶体验全面升级!
  • 2025年耐磨轮胎厂家最新推荐排行榜,矿山耐磨轮胎,工程耐磨轮胎,重载耐磨轮胎公司推荐!
  • Map做数据缓存
  • Python基于 Gradio 和 SQLite 开发的简单博客管理平台,承受局域网手机查看,给一个PC和手机 互联方式
  • RK3576+gc05a2
  • 2025 年工业表面处理领域喷砂机厂家最新推荐排行榜,涵盖智能自动化可移动等类型设备优质厂家
  • 2025.10.14
  • 行列式按多行或列展开
  • 2025 年化妆品代工厂最新推荐排行榜:OEM/ODM/ 私人定制等服务优选企业指南
  • SCANIA中国EDI对接供应商指南:快速完成上线的最佳方案
  • 2025 年模板厂家最新推荐榜单:覆盖塑钢 / 水沟 / 现浇 / 拱形骨架等多类型,精选优质厂家助力工程高效采购
  • RequestldleCallback