91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

ESP32C3 LED PWM控制器的使用方法

CHANBAEK ? 來源: FunIO ? 作者: FunIO ? 2023-07-23 11:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目前對于遙控雙發(fā)差速小飛機(jī)計(jì)劃采用如下架構(gòu):

圖片

遙控小飛機(jī)框圖

馬達(dá)控制要用到 pwm,今天把 esp32c3 的 pwm 跑一下。

簡介

esp32c3 中把 pwm 外設(shè)稱為“LED PWM 控制器”,共有 6 個(gè)通道,可分配到任意 GPIO 管腳:

  • 四個(gè)獨(dú)立定時(shí)器,可實(shí)現(xiàn)小數(shù)分頻
  • 波形的周期和占空比可配置,占空比精確度可達(dá) 14 位
  • PWM 輸出信號相位可調(diào)節(jié)
  • 可在 Light-sleep 模式下工作
  • 多種時(shí)鐘源選擇,包括 APB 總線時(shí)鐘、外置主晶振時(shí)鐘
  • 支持硬件自動(dòng)步進(jìn)式地增加或減少占空比,可用于 LED RGB 彩色梯度發(fā)生器

占空比自動(dòng)漸變是一個(gè)特色功能,用于呼吸燈或其它 LED 燈效會很方便,在官方文檔特意介紹說是 LED PWM 控制器。

使用方法

圖片

LED PWM控制器架構(gòu)

4 個(gè)定時(shí)器可獨(dú)立配置(可配置時(shí)鐘分頻器和計(jì)數(shù)器最大值),每個(gè)定時(shí)器內(nèi)部有一個(gè)時(shí)基計(jì)數(shù)器(即基于基準(zhǔn)時(shí)鐘周期計(jì)數(shù)的計(jì)數(shù)器)。每個(gè) PWM 生成器在四個(gè)定時(shí)器中擇一,以該定時(shí)器的計(jì)數(shù)值為基準(zhǔn)生成 PWM 信號。

下圖為定時(shí)器和 PWM 生成器的主要功能塊。

圖片

定時(shí)器和PWM生成器功能塊

LED PWM 控制器的每個(gè)定時(shí)器內(nèi)部都有一個(gè)時(shí)基計(jì)數(shù)器。上圖中時(shí)基計(jì)數(shù)器使用的時(shí)鐘信號稱為ref_pulsex。所有定時(shí)器使用同一個(gè)時(shí)鐘源信號LEDC_CLKx,該時(shí)鐘源信號經(jīng)分頻器分頻后產(chǎn)生ref_pulsex供計(jì)數(shù)器使用。

設(shè)置 LEDC 通道分三步完成。注意,與 ESP32 不同,ESP32-C3 僅支持設(shè)置通道為低速模式。

  1. 定時(shí)器配置,指定 PWM 信號的頻率和占空比分辨率。
  2. 通道配置,綁定定時(shí)器和輸出 PWM 信號的 GPIO。
  3. 改變 PWM 信號,輸出 PWM 信號來驅(qū)動(dòng) LED。可通過軟件控制或使用硬件漸變功能來改變 LED 的亮度。

另一個(gè)可選步驟是可以在漸變終端設(shè)置一個(gè)中斷。

圖片

LED PWM 控制器 API 的關(guān)鍵配置

首次 LEDC 配置時(shí),最好先配置定時(shí)器(調(diào)用函數(shù) ledc_timer_config()),再配置通道(調(diào)用函數(shù) ledc_channel_config())。這樣可以確保 IO 腳上的 PWM 信號自有輸出開始其頻率就是正確的。

定時(shí)器配置

要設(shè)置定時(shí)器,可調(diào)用函數(shù) ledc_timer_config(),并將包括如下配置參數(shù)的數(shù)據(jù)結(jié)構(gòu) ledc_timer_config_t 傳遞給該函數(shù):

  • 速度模式(值必須為 LEDC_LOW_SPEED_MODE
  • 定時(shí)器索引 ledc_timer_t
  • PWM 信號頻率(Hz)
  • PWM 占空比分辨率
  • 時(shí)鐘源 ledc_clk_cfg_t

頻率和占空比分辨率相互關(guān)聯(lián)。PWM 頻率越高,占空比分辨率越低,反之亦然。如果 API 不是用來改變 LED 亮度,而是用于其它目的,這種相互關(guān)系可能會很重要。時(shí)鐘源同樣可以限制 PWM 頻率。選擇的時(shí)鐘源頻率越高,可以配置的 PWM 頻率上限就越高。

圖片
esp32c3 ledc時(shí)鐘源特性

備注

1.如果 ESP32-C3 的定時(shí)器選用了 RC_FAST_CLK 作為其時(shí)鐘源,驅(qū)動(dòng)會通過內(nèi)部校準(zhǔn)來得知這個(gè)時(shí)鐘源的實(shí)際頻率。這樣確保了輸出 PWM 信號頻率的精準(zhǔn)性。

  1. ESP32-C3 的所有定時(shí)器共用一個(gè)時(shí)鐘源。因此 ESP32-C3 不支持給不同的定時(shí)器配置不同的時(shí)鐘源。

當(dāng)一個(gè)定時(shí)器不再被任何通道所需要時(shí),可以通過調(diào)用相同的函數(shù) ledc_timer_config() 來重置這個(gè)定時(shí)器。此時(shí),函數(shù)入?yún)⒌呐渲媒Y(jié)構(gòu)體需要指定:

  • ledc_timer_config_t::speed_mode 重置定時(shí)器的所屬速度模式 (ledc_mode_t
  • ledc_timer_config_t::timer_num 重置定時(shí)器的索引 (ledc_timer_t
  • ledc_timer_config_t::deconfigure 將指定定時(shí)器重置必須配置此項(xiàng)為 true

通道配置

定時(shí)器設(shè)置好后,請配置所需的通道(ledc_channel_t 之一)。配置通道需調(diào)用函數(shù) ledc_channel_config()。

通道的配置與定時(shí)器設(shè)置類似,需向通道配置函數(shù)傳遞包括通道配置參數(shù)的結(jié)構(gòu)體 ledc_channel_config_t 。

此時(shí),通道會按照 ledc_channel_config_t 的配置開始運(yùn)作,并在選定的 GPIO 上生成由定時(shí)器設(shè)置指定的頻率和占空比的 PWM 信號。在通道運(yùn)作過程中,可以隨時(shí)通過調(diào)用函數(shù) ledc_stop() 將其暫停。

改變 PWM 占空比

調(diào)用函數(shù) ledc_set_duty() 可以設(shè)置新的占空比。之后,調(diào)用函數(shù) ledc_update_duty() 使新配置生效。要查看當(dāng)前設(shè)置的占空比,可使用 _get_ 函數(shù) ledc_get_duty()。

另外一種設(shè)置占空比和其他通道參數(shù)的方式是調(diào)用 通道配置 一節(jié)提到的函數(shù) ledc_channel_config()。

傳遞給函數(shù)的占空比數(shù)值范圍取決于選定的 duty_resolution,應(yīng)為 0(2 ** duty_resolution) - 1。例如,如選定的占空比分辨率為 10,則占空比的數(shù)值范圍為 01023。此時(shí)分辨率為 ~0.1%。

圖片
常用配置頻率及精度

實(shí)例

/* LEDC (LED Controller) basic example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include < stdio.h >
#include "driver/ledc.h"
#include "esp_err.h"

#define LEDC_OUTPUT_IO          (5) // Define the output GPIO
#define LEDC_DUTY               (4095) // Set duty to 50%. ((2 ** 13) - 1) * 50% = 4095
#define LEDC_FREQUENCY          (5000) // Frequency in Hertz. Set frequency at 5 kHz

static void example_ledc_init(void)
{
    // Prepare and then apply the LEDC PWM timer configuration
    ledc_timer_config_t ledc_timer = {
        .speed_mode       = LEDC_LOW_SPEED_MODE,
        .timer_num        = LEDC_TIMER_0,
        .duty_resolution  = LEDC_TIMER_13_BIT,
        .freq_hz          = LEDC_FREQUENCY,  // Set output frequency at 5 kHz
        .clk_cfg          = LEDC_AUTO_CLK
    };
    ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));

    // Prepare and then apply the LEDC PWM channel configuration
    ledc_channel_config_t ledc_channel = {
        .speed_mode     = LEDC_LOW_SPEED_MODE,
        .channel        = LEDC_CHANNEL_0,
        .timer_sel      = LEDC_TIMER_0,
        .intr_type      = LEDC_INTR_DISABLE,
        .gpio_num       = LEDC_OUTPUT_IO,
        .duty           = 0, // Set duty to 0%
        .hpoint         = 0
    };
    ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));
}

void app_main(void)
{
    // Set the LEDC peripheral configuration
    example_ledc_init();
    // Set duty to 50%
    ESP_ERROR_CHECK(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, LEDC_DUTY));
    // Update duty to apply the new value
    ESP_ERROR_CHECK(ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0));
}

編譯后運(yùn)行,捕捉如下波形:

圖片

5kHz 50%占空比

修改下占空比:

ESP_ERROR_CHECK(ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, LEDC_DUTY-400));

編譯后運(yùn)行,捕捉如下波形:

圖片

5kHz 45.1%占空比

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

    關(guān)注

    243

    文章

    24618

    瀏覽量

    691126
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17804

    瀏覽量

    193624
  • 陀螺儀
    +關(guān)注

    關(guān)注

    44

    文章

    890

    瀏覽量

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

    關(guān)注

    116

    文章

    5874

    瀏覽量

    225804
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3368

    瀏覽量

    123801
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    基于XIAO ESP32C3的智能家居四路控制器設(shè)計(jì)

    今天小編給大家?guī)淼氖怯《鹊腗aker Technolab creation的基于ESP32C3的智能家居四路控制器,該控制器可以通過傳統(tǒng)的手動(dòng)開關(guān)按鈕、紅外遙控、智能手機(jī)進(jìn)行
    的頭像 發(fā)表于 01-02 10:53 ?4676次閱讀
    基于XIAO <b class='flag-5'>ESP32C3</b>的智能家居四路<b class='flag-5'>控制器</b>設(shè)計(jì)

    基于ESP32C3的智能小車設(shè)計(jì)

    你有沒有想過,從零開始親手制作一輛堅(jiān)固耐用的遙控越野車?今天,小編就帶你走進(jìn)一個(gè)融合機(jī)械、電子與物聯(lián)網(wǎng)的精彩DIY項(xiàng)目——一款由 Seeed Studio XIAO ESP32C3 強(qiáng)力驅(qū)動(dòng)的 3D打印4x4 RC漫游車!
    的頭像 發(fā)表于 06-04 11:11 ?2459次閱讀
    基于<b class='flag-5'>ESP32C3</b>的智能小車設(shè)計(jì)

    esp32c3項(xiàng)目采用wss_server例程,把wifi斷開的話esp32c3會重啟,為什么?

    esp32c3項(xiàng)目采用wss_server 例程,運(yùn)行后連接WiFi正常,但是如果之后把wifi斷開的話,esp32c3會重啟,監(jiān)視顯示“assert failed: tlsf_free
    發(fā)表于 06-06 07:29

    esp32c3是否能在40mhz運(yùn)行,功耗是多少?

    你好我想使用esp32c3開發(fā)低功耗設(shè)備,由外部電子開關(guān)控制1小時(shí)檢測一次傳感并上傳,考慮到芯片功耗我有幾個(gè)疑問; 1:esp32c3 在160mhz 80mhz下的正常工作電流是多
    發(fā)表于 06-20 06:17

    【DFRobot Beetle ESP32-C3開發(fā)板試用體驗(yàn)】WEBSOKET—PWMLED

    本帖最后由 華仔stm32 于 2022-6-1 09:57 編輯 【目的】展示ESP32作為web服務(wù)的,用ESP32C3寫一個(gè)websocket服務(wù),用網(wǎng)頁來實(shí)現(xiàn)
    發(fā)表于 06-01 08:11

    esp32c3連接wifi和tcp服務(wù)速度能否加快,esp8266 速度在5-7s左右,esp32c3能否加快?

    你好我想使用esp32c3開發(fā)低功耗設(shè)備,由外部電子開關(guān)控制1小時(shí)檢測一次傳感并上傳,考慮到芯片功耗我有幾個(gè)疑問;1:esp32c3 在160mhz 80mhz下的正常工作電流是多少
    發(fā)表于 02-17 06:44

    esp32c3不能操縱RTC引腳而只能保持它們或被喚醒嗎?

    我想在存根函數(shù)中操作(輸入,輸出)我的ESP32C3的RTC PINS。但我開始懷疑 esp32c3 是否有能力做到這一點(diǎn)……確實(shí),在功能存根中,我嘗試了以下方法但沒有成功:[size=150
    發(fā)表于 03-02 08:32

    esp32c3不能操縱RTC引腳而只能保持它們或被喚醒嗎?

    我想在存根函數(shù)中操作(輸入,輸出)我的ESP32C3的RTC PINS。但我開始懷疑 esp32c3 是否有能力做到這一點(diǎn)……確實(shí),在功能存根中,我嘗試了以下方法但沒有成功:[size=150
    發(fā)表于 04-14 07:30

    深入剖析esp32c3的系統(tǒng)底層啟動(dòng)

    riscv底層的愛好者來說,跳過ESP-IDF框架,直接像使用單片機(jī)一樣去使用ESP32C3更加有意思。本文的目的就是理解ESP32C3的裸機(jī)開發(fā)流程,像玩單片機(jī)一樣去使用這個(gè)riscv的mcu。 2.
    的頭像 發(fā)表于 07-06 10:38 ?1.4w次閱讀
    深入剖析<b class='flag-5'>esp32c3</b>的系統(tǒng)底層啟動(dòng)

    在Arduino IDE環(huán)境下用ESP32控制多路LED調(diào)光

    ESP32帶一個(gè)包含16通道LED PWM控制器,可配置以產(chǎn)生不同特性的PWM信號。項(xiàng)目開始之前需要先安裝Arduino IDE,連接妥當(dāng)后
    發(fā)表于 03-17 11:04 ?6050次閱讀

    ESP32 LED控制器

    電子發(fā)燒友網(wǎng)站提供《ESP32 LED控制器板.zip》資料免費(fèi)下載
    發(fā)表于 08-05 11:41 ?3次下載
    <b class='flag-5'>ESP32</b> <b class='flag-5'>LED</b><b class='flag-5'>控制器</b>板

    【DFRobot Beetle ESP32-C3開發(fā)板試用體驗(yàn)】WEBSOKET—PWMLED

    的,用ESP32C3寫一個(gè)websocket服務(wù),用網(wǎng)頁來實(shí)現(xiàn)控制板載LED燈亮度的例子。 【實(shí)現(xiàn)思路】1、ESP32建立webserve
    的頭像 發(fā)表于 11-28 14:11 ?2773次閱讀
    【DFRobot Beetle <b class='flag-5'>ESP32-C3</b>開發(fā)板試用體驗(yàn)】WEBSOKET—<b class='flag-5'>PWM</b>—<b class='flag-5'>LED</b>

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

    18 PWM控制B電機(jī) 4 A1 15 A2 17 B1 5 B2PWM控制電機(jī)方法參考—— PWM
    發(fā)表于 03-20 11:37 ?4次下載
    <b class='flag-5'>ESP32</b> <b class='flag-5'>PWM</b>驅(qū)動(dòng)電機(jī)

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

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