本文源码已经上传至csdn:

程序源码如下;

 #define LEDC_IO_0    (2)

 esp_err_t app_main()
{
ledc_timer_config_t ledc_timer = {
//set timer counter bit number
.bit_num = LEDC_TIMER_13_BIT,
//set frequency of pwm
.freq_hz = ,
//timer mode,
.speed_mode = LEDC_HIGH_SPEED_MODE,
//timer index
.timer_num = LEDC_TIMER_0
};
ledc_timer_config(&ledc_timer); ledc_channel_config_t ledc_channel = {
//set LEDC channel 0
.channel = LEDC_CHANNEL_0,
//set the duty for initialization.(duty range is 0 ~ ((2**bit_num)-1)
.duty = ,
//GPIO number
.gpio_num = LEDC_IO_0,
//GPIO INTR TYPE, as an example, we enable fade_end interrupt here.
.intr_type = LEDC_INTR_FADE_END,
//set LEDC mode, from ledc_mode_t
.speed_mode = LEDC_HIGH_SPEED_MODE,
//set LEDC timer source, if different channel use one timer,
//the frequency and bit_num of these channels should be the same
.timer_sel = LEDC_TIMER_0
};
//set the configuration
ledc_channel_config(&ledc_channel); //initialize fade service.
ledc_fade_func_install(); while() {
printf("LEDC fade up\n");
ledc_set_fade_with_time(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, , );
ledc_fade_start(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, LEDC_FADE_NO_WAIT);
vTaskDelay( / portTICK_PERIOD_MS); printf("LEDC fade down\n");
ledc_set_fade_with_time(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, , );
ledc_fade_start(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, LEDC_FADE_NO_WAIT);
vTaskDelay( / portTICK_PERIOD_MS); /*printf("LEDC set duty without fade\n");
ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 1000);
ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0);
vTaskDelay(2000 / portTICK_PERIOD_MS); printf("LEDC set duty without fade\n");
ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0, 0);
ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_0);
vTaskDelay(2000 / portTICK_PERIOD_MS);*/
}
}

    esp_idf中提供 了LEDC来产生pwm信号,LEDC主要是用来做灯控的,因为其比pwm功能更加丰富,说以esp-idf并没有提供pwm相关的模块。

    1、5-15行设置一个LEDC计时器,bit_num设置定时器位数,freq_hz设置定时器平率,speed_mode设定工作模式(目前只能设定高速),timer_num表示使用的定时器号(esp32有四个通用的定时器,号数为0~3) 。我们通过调用ledctimerconfig()来完成这一工作,

    2、17-33行设置LEDC通道,值得注意的是,esp32有16个通道可以产生脉冲信号,其中通道0~通道7是高速通道,通道8~通道15是低速通道,目前只支持高速通道。duty设置pwm占空比,intr_type设置中断方式。最后通过ledc_channel_config()完成,

    3、while循环中是循环输出打印信息,并控制pwm由0~100或者控制pwm由100~0。,其中ledc_set_fade_with_time有四个参数,分别为

      (1)speed_mode:目前只支持高速模式,即LEDC_HIGH_SPEED_MODE.

      (2)channel:上面定义使用的通道号,0~7。

      (3)target_duty:目标占空比,灯亮度的调节靠调节占空比实现,该参数表示占空比将从当前值逐渐变化到该设定值。

      (4)max_fade_time_ms:渐变时间。表示等占空变化到设定值所用的时间,单位是ms。

实验现象:

  LED等连接到GPIO 2,可以看到LED灯从暗到亮变化,在从亮到暗变化,每次变化时长为2s,并且转换时,minicom上回输出打印信息。

相关知识:LED Control相关函数的API接口

使用pwm进行呼吸灯的设计的更多相关文章

  1. ZYNQ自定义AXI总线IP应用——PWM实现呼吸灯效果

    一.前言 在实时性要求较高的场合中,CPU软件执行的方式显然不能满足需求,这时需要硬件逻辑实现部分功能.要想使自定义IP核被CPU访问,就必须带有总线接口.ZYNQ采用AXI BUS实现PS和PL之间 ...

  2. 【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯

    实验原理: STM32的定时器有PWM功能,iCore4的蓝色LED连接在定时器的输出接口上, 可以通过定时器的PWM输出控制LED的亮度,从而实验呼吸灯的功能. 核心代码: int main(voi ...

  3. STM8S PWM 应用 呼吸灯

    //主功能接受:使用MCU STM8S105C6 的PWM通道2 PC2 来做呼吸灯 已经验证OK,呵 //呵,这个PWM设置刚開始用还是有点麻烦,由于是自己摸索.花点时间.还是解决了 . //所用子 ...

  4. 【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯

    实验指导书及代码包下载: http://pan.baidu.com/s/1dEnH5dB iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  5. PWM(脉宽调制)——LED特效呼吸灯设计

    简述PWM PWM--脉宽调制信号(Pulse Width Modulation),它利用微处理器的数字输出来实现,是对模拟电路控制的一种非常有效的技术,广泛应用于测量.通信.功率控制与变化等许多领域 ...

  6. [FPGA]Verilog利用PWM调制巧妙完成RGB三色彩虹呼吸灯(给简约的题目以美妙的解答)

    概述 实现彩虹呼吸灯 题目就是这么简短,但这是目前我碰到的最有意思的一道题目,因为他有无数种解决方法,并且每一种都是那么高级或者巧妙,比如 可以利用3路不同初相的PWM调制信号驱动三颗RGB灯重叠呼吸 ...

  7. 利用PWM脉宽调制实现呼吸灯

    1.设计目标 完成一个呼吸灯,从亮到灭的时间为2秒,从灭到亮的时间为2秒,以此不断往复. 2.设计步骤 2.1设计分析 利用PWM(脉冲宽度调制)实现led灯亮度的变化,只需要改变占空比就可以实现,具 ...

  8. STM8S003F3通过PWM波实现三基色呼吸灯(转)

    源: STM8S003F3通过PWM波实现三基色呼吸灯

  9. 浅浅的分析LED呼吸灯的实现和PWM的关系

    前言 在本周,我们在python课上做了一个实验,用ARDUINO使小LED灯模仿出呼吸灯的效果,实验进行的很成功,但是机器当仅输出高/低电平的时候是怎么样才能做到渐亮渐暗(输出电压)的变化呢?在这里 ...

随机推荐

  1. QTP 学习 - 参数化

  2. py库: arrow (时间)

    arrow是个时间日期库,简洁易用.支持python3.6 https://arrow.readthedocs.io/en/latest/ arrow官网api https://github.com/ ...

  3. Openface 入门

    Openface 简单入门 背景 Openface是一个开源的人脸识别框架,同类软件产品还有 seetaface ,DeepID等,当然,如果算上商业的产品,那就更多了. Openface人脸比对结果 ...

  4. TCARS: Time- and Community-Aware Recommendation System(时间感知和社区感知推荐系统)

    随着用户在物品上产生了大量行为,推荐系统成为了线上系统的重要组成部分.推荐系统算法使用用户对物品的行为信息以及上下文数据为每个用户推荐一组物品.算法根据用户之间及物品之间的相似度建立.本文介绍了一个基 ...

  5. E0264 Unable to execute '"/usr/bin/codesign" ...'

    E0264 Unable to execute '"/usr/bin/codesign" ...' http://docwiki.embarcadero.com/RADStudio ...

  6. Caffe:如何将图片数据转换成lmdb文件

    1 图片信息的转换 在caffe中经常使用的数据类型是lmdb或leveldb;不是常见的jpg,jpeg,png,tif等格式;因此,需要进行格式转换,通过输入你自己的图片目录(下有的大量图片)转换 ...

  7. JavaScript: For , For/in , For/of

    For: define: The for statement can customize how many times you want to execute code Grammar: for (c ...

  8. 【原】The Linux Command Line - Workiing with commands

    ● type – Indicate how a command name is interpreted● which – Display which executable program will b ...

  9. tensorflow报错error,tf.concat Expected int32, got list containing Tensors of type '_Message' instead

    参考:https://stackoverflow.com/questions/41813665/tensorflow-slim-typeerror-expected-int32-got-list-co ...

  10. extJs学习的资源

    http://www.qeefee.com/zt-extjs   Ext JS 6 入门学习资料大全(2016-12-14)   cddnExtJS学习:http://blog.csdn.net/co ...