0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32學(xué)習(xí)筆記:PWM

CHANBAEK ? 來源:跳動的字節(jié) ? 作者:曉宇 ? 2023-07-14 14:56 ? 次閱讀

今天我們來玩兒PWM。

概述

脈寬調(diào)制(PWM)是一種可以自由控制的產(chǎn)生可控數(shù)字信號波形的技術(shù),說直白一點(diǎn)就是占空比不同的數(shù)字信號,下面用一幅圖簡單介紹一下微控制器實(shí)現(xiàn)PWM的原理:

圖片

我們以STM32內(nèi)部的定時(shí)器講一講原理,如上圖,當(dāng)TIMER向上計(jì)時(shí)時(shí),計(jì)數(shù)值會跟比較通道的CCR去比較,如果低于比較值,通道輸出高電平,高于比較值,則輸出低電平,這個(gè)只是打個(gè)比方,具體輸出什么可以自由配置。到設(shè)置的最大值之后,重新從0開始計(jì)時(shí),如此不停的循環(huán),就產(chǎn)生了PWM信號了。我們?nèi)绻刂撇煌恼伎毡?,就可以控制輸出的平均電壓,也就可以控制燈的亮度了?/p>

圖片

ESP32 不同于普通的PWM,它這里叫LED PWM,主要用于控制LED的亮度與顏色,當(dāng)然,也可以用于其它用途,一共有16路通道,8路高速8低速,這16路通道可以分配給任意一個(gè)IO(某些只有輸入功能的除外)。

圖片

16個(gè)通道,根據(jù)速度分,分為兩組,每組有4個(gè)定時(shí)器對應(yīng)8個(gè)通道,兩個(gè)通道共享一個(gè)定時(shí)器,所以,最多能輸出8個(gè)不同頻率的PWM。

硬件

PWM輸出引腳可以分配給任意一個(gè)IO,如下圖所示,紅框內(nèi)的為可配置PWM的引腳,GPIO34-35,GPIO36,GPIO39除外。

圖片

軟件

分配通道到GPIO引腳

確定好要使用的PWM通道PWM_Ch,綁定到GPIO_Pin。

ledcAttachPin(GPIO_Pin, PWM_Ch);

頻率,分辨率設(shè)置

配置選擇通道的PWM頻率,分辨率可以設(shè)置1位到16位,比如我們設(shè)置成8位,占空比范圍就是0-255,設(shè)置成10位,就是0-1023這樣,函數(shù)也很簡單。

/*
* PWM_Ch   PWM通道 0-15
* PWM_Freq PWM頻率 
* PWM_Res  PWM分辨率 1-16
* */
ledcSetup(PWM_Ch, PWM_Freq, PWM_Res);;

設(shè)置占空比

直接寫入對應(yīng)占空比即可在對應(yīng)IO上輸出PWM。

ledcWrite(PWM_Ch, DutyCycle);

完整程序

#define LED_GPIO   4
#define PWM1_Ch    0
#define PWM1_Res   10
#define PWM1_Freq  1000
 
int PWM1_DutyCycle = 0;
 
void setup()
{
  ledcAttachPin(LED_GPIO, PWM1_Ch);
  ledcSetup(PWM1_Ch, PWM1_Freq, PWM1_Res);
}
 
void loop()
{
  while(PWM1_DutyCycle < 1023)
  {
    ledcWrite(PWM1_Ch, PWM1_DutyCycle++);
    delay(10);
  }
  while(PWM1_DutyCycle > 0)
  {
    ledcWrite(PWM1_Ch, PWM1_DutyCycle--);
    delay(10);
  }
}

我們這里使用1kHz的PWM頻率,將PWM通道0綁定到GPIO4,選擇10位的分辨率,我們可以看下視頻,PWM變化還是非常絲滑的。然后在主循環(huán)中將占空比逐漸從最小到最大,再從最大到最小,一直循環(huán)。

對于ESP32,還有專門用于電機(jī)控制的脈寬調(diào)制器PWM,后面我們項(xiàng)目中再細(xì)說,整體來說使用還是非常簡單的,大家快去試一試吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7596

    瀏覽量

    151744
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5196

    瀏覽量

    214371
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356772
  • 脈寬調(diào)制
    +關(guān)注

    關(guān)注

    3

    文章

    219

    瀏覽量

    38359
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    971

    瀏覽量

    17417
收藏 人收藏

    評論

    相關(guān)推薦

    利用ESP32 PWM信號控制LED的亮度

    在本教程中,我們將討論ESP32 開發(fā)板的 PWM(脈沖寬度調(diào)制)引腳。ESP32 開發(fā)板的所有 GPIO 引腳(Power、GND、Tx、Rx 和 EN 除外)均可用于獲取 PWM
    的頭像 發(fā)表于 08-12 15:21 ?1.7w次閱讀
    利用<b class='flag-5'>ESP32</b> <b class='flag-5'>PWM</b>信號控制LED的亮度

    ESP32單片機(jī)學(xué)習(xí)筆記

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 03 - MCPWM脈沖輸出/PCNT脈沖計(jì)數(shù)前言,繼續(xù)上一篇的內(nèi)容。因?yàn)樯弦黄獎偤脤?shí)驗(yàn)了iic和spi,形成一對。接下來講pwm另起一篇。一、電機(jī)
    發(fā)表于 08-23 08:47

    ESP32ESP-IDF學(xué)習(xí)筆記

    ESP32ESP-IDF 學(xué)習(xí)筆記(六)【I2C數(shù)據(jù)總線(I2C)】文章目錄ESP32ESP
    發(fā)表于 02-22 07:30

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X
    發(fā)表于 11-14 09:06 ?6次下載
    <b class='flag-5'>ESP32</b> 開發(fā)<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學(xué)習(xí)</b> Window 窗口控件 X

    [ESP32]學(xué)習(xí)筆記02

    [ESP32學(xué)習(xí)筆記02]使用ViusalStudio2017開發(fā)ESP32、按鍵輸入檢測前言一、安裝Visual Studio 2017二、配置開發(fā)環(huán)境1.安裝ViusalGDB2.
    發(fā)表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>02

    [ESP32]學(xué)習(xí)筆記04

    Analog-to-Digital Converter(模數(shù)轉(zhuǎn)換器)的使用今天我們學(xué)習(xí)ESP32提供的ADC外設(shè)的使用,ESP32的每個(gè)ADC單元都支持兩種模式,單次讀取和連續(xù)讀取(DMA),本次
    發(fā)表于 12-22 19:02 ?9次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>04

    SPI主線協(xié)議——ESP32學(xué)習(xí)筆記

    目錄SPI主線協(xié)議——ESP32學(xué)習(xí)筆記零、前言一、什么是SPI?二、通信過程?三、極性和相位四、總結(jié)SPI主線協(xié)議——ESP32學(xué)習(xí)
    發(fā)表于 12-22 19:23 ?18次下載
    SPI主線協(xié)議——<b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    ESP32_PWM學(xué)習(xí)總結(jié)

    esp32——PWM學(xué)習(xí)總結(jié)什么是PWMesp32中初始化配置定時(shí)器配置通道配置修改輸出占空比方式使用軟件改變
    發(fā)表于 12-22 19:39 ?12次下載
    <b class='flag-5'>ESP32_PWM</b><b class='flag-5'>學(xué)習(xí)</b>總結(jié)

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器一、模擬數(shù)字轉(zhuǎn)換器 ADC編程指南:Analog to Digital Converter。數(shù)據(jù)手冊: ESP32 技術(shù)參考手冊
    發(fā)表于 01-17 13:18 ?11次下載
    <b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 04 - ADC和定時(shí)器

    ESP32上的深度強(qiáng)化學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《ESP32上的深度強(qiáng)化學(xué)習(xí).zip》資料免費(fèi)下載
    發(fā)表于 12-27 10:31 ?0次下載
    <b class='flag-5'>ESP32</b>上的深度強(qiáng)化<b class='flag-5'>學(xué)習(xí)</b>

    ESP32 PWM驅(qū)動電機(jī)

    ESP32 尋跡模塊測試 尋跡模塊測試 所選設(shè)備 ESP32使用PWM 示例代碼 尋跡模塊測試 所選設(shè)備 ’ ESP32 引腳 說明 16 需要先拉低在拉高,才能驅(qū)動電機(jī) 13
    發(fā)表于 03-20 11:37 ?4次下載
    <b class='flag-5'>ESP32</b> <b class='flag-5'>PWM</b>驅(qū)動電機(jī)

    如何使用ESP32的LEDC進(jìn)行PWM控制?

    LEDC(LED控制器)是ESP32中的一個(gè)功能強(qiáng)大的PWM(脈沖寬度調(diào)制)控制器。
    發(fā)表于 05-19 11:14 ?2610次閱讀
    如何使用<b class='flag-5'>ESP32</b>的LEDC進(jìn)行<b class='flag-5'>PWM</b>控制?

    如何在ESP32中使用PWM

    ESP32 SoC 滿載了非常有用的外設(shè),PWM 就是其中之一。是的。ESP32 的芯片中有一個(gè)專用的 PWM 硬件模塊。脈寬調(diào)制或簡稱PWM
    的頭像 發(fā)表于 07-13 11:14 ?3604次閱讀
    如何在<b class='flag-5'>ESP32</b>中使用<b class='flag-5'>PWM</b>

    ESP32學(xué)習(xí)筆記:雙核

    今天我們來說說ESP32 for Arduino 的雙核。
    的頭像 發(fā)表于 07-15 16:16 ?5188次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:雙核

    ESP32學(xué)習(xí)筆記:WiFi

    今天我們來說說ESP32 的WiFi。
    的頭像 發(fā)表于 07-15 16:20 ?4104次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:WiFi