Arduino esp32 引脚 PWM

esp32 引脚 PWM

参考连接1
参考连接2
PWM一般指脉冲宽度调制。

PWM是Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式。

其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此学习PWM具有十分重要的现实意义。

在这里插入图片描述
扩展资料:

PWM应用包括焊接、家用电器、电机驱动器、个人电子产品、逆变器、电动车、不间断电源、太阳能发电、音频放大器和汽车加热器。一般而言,在使用开关电源且无需复杂高级拓扑结构的情况下,建议使用简单的通用PWM控制器。

在许多应用中使用合理的PWM控制器有助于缩短开发时间,而且还可以借助一系列可靠的设计来增强对电源设计的信心。PWM的最后一个优点是它可以用于多个设计,这样采购团队便可大批量采购元件。

通用PWM控制器的生产工艺从双极技术发展到如今的Bi-CMOS技术,其关键设计参数得到了大幅改进

代码环节

/*
* ESP32使用PWM实现呼吸灯程序
*/

/* 设置led输出引脚号 */
uint8_t led_pin = 2;
uint8_t led_ch = 1;

void setup() 
{            
    Serial.begin(115200);
    delay(10); 

    /* 1. 使用ledc通道1,设置频率为1kHz,分辨率为10位 */
    double f = ledcSetup(led_ch, 1000, 10);  
    Serial.print("F=");Serial.println(f); /* 打印实际设置的频率*/

    /* 2. 将LED引脚绑定到ledc通道1 */
    ledcAttachPin(led_pin, led_ch);

    /* 3. 设置ledc通道占空比为512/1024=50% */
    ledcWrite(led_ch, 511);
}

void loop() 
{
    uint8_t dir = 0;
    uint32_t pwmval = 255;
    while(1)
        {
            if(dir) pwmval++;                 // dir==1  pwmval递增
            else pwmval--;                    // dir==0  pwmval递减
            if( pwmval == 0 ) dir=1;          // pwmval降低至0后,方向为递增
            if( pwmval >= 500) dir=0;         // pwmval递增到500后,方向改为递减
            ledcWrite(led_ch, pwmval);           // 修改占空比
            if( pwmval==0 ) delay(500);    // 在LED熄灭时等待300ms
            delay(5);
        }
}

这样你的灯就会呼吸了以呼吸的方式来了解pwm

posted @ 2022-11-29 20:30  Yang-blackSun  阅读(88)  评论(0编辑  收藏  举报  来源
1 3