芯片:esp32s3
開發(fā)環(huán)境:espidfv4.4
一、官網(wǎng)相關(guān)資料
1)LED 控制器 (LEDC) 主要用于控制 LED,也可產(chǎn)生 PWM 信號(hào)用于其他設(shè)備的控制。 該控制器有 8 路通道,可以產(chǎn)生獨(dú)立的波形來驅(qū)動(dòng) RGB LED 等設(shè)備。
LED PWM 控制器可在無需 CPU 干預(yù)的情況下自動(dòng)改變占空比,實(shí)現(xiàn)亮度和顏色漸變(因?yàn)檫@個(gè)功能,單獨(dú)作為一個(gè)外設(shè)?)
2)設(shè)置 LEDC 通道分三步完成。注意,與 ESP32 不同,ESP32-S3 僅支持設(shè)置通道為低速模式。
-
定時(shí)器配置 指定 PWM 信號(hào)的頻率和占空比分辨率。
-
通道配置 綁定定時(shí)器和輸出 PWM 信號(hào)的 GPIO。
-
改變 PWM 信號(hào) 輸出 PWM 信號(hào)來驅(qū)動(dòng) LED。可通過軟件控制或使用硬件漸變功能來改變 LED 的亮度。
另一個(gè)可選步驟是可以在漸變終端設(shè)置一個(gè)中斷。(嘛意思)
二、配置流程
1)定時(shí)器結(jié)構(gòu)體配置l edc_timer_config_t->ledc_timer_config()
要設(shè)置定時(shí)器,可調(diào)用函數(shù) ledc_timer_config(),并將包括如下配置參數(shù)的數(shù)據(jù)結(jié)構(gòu) ledc_timer_config_t 傳遞給該函數(shù):
-
速度模式(值必須為
LEDC_LOW_SPEED_MODE
)對(duì)于ESP32s3 -
定時(shí)器索引 ledc_timer_t
-
PWM 信號(hào)頻率
-
PWM 占空比分辨率
頻率和占空比分辨率相互關(guān)聯(lián)。PWM 頻率越高,占空比分辨率越低,反之亦然。如果 API 不是用來改變 LED 亮度,而是用于其它目的,這種相互關(guān)系可能會(huì)很重要。更多信息詳見 頻率和占空比分辨率支持范圍 一節(jié)。
2)通道配置ledc_channel_config_t ->ledc_channel_config()
定時(shí)器設(shè)置好后,請(qǐng)配置所需的通道(ledc_channel_t 之一)。配置通道需調(diào)用函數(shù) ledc_channel_config()。
需向通道配置函數(shù)傳遞包括通道配置參數(shù)的結(jié)構(gòu)體 ledc_channel_config_t 。
在選定的 GPIO 上生成由定時(shí)器設(shè)置指定的頻率和占空比的 PWM 信號(hào)。
在通道運(yùn)作過程中,可以隨時(shí)通過調(diào)用函數(shù) ledc_stop() 將其暫停。
3)改變pwm占空比
1、軟件設(shè)置
ledc_set_duty() :設(shè)置新的占空比
ledc_update_duty() :使新配置生效
ledc_get_duty():獲取當(dāng)前占空比
通過ledc_channel_config(),配置時(shí)的結(jié)構(gòu)體
占空比數(shù)值范圍:0
- (2 ** duty_resolution) - 1
2、硬件設(shè)置(??)
LED PWM 控制器硬件可逐漸改變占空比的數(shù)值
1.使能漸變->ledc_fade_func_install()
之后用下列可用漸變函數(shù)之一配置:
-
ledc_set_fade_with_time()
-
ledc_set_fade_with_step()
-
ledc_set_fade()
最后用 ledc_fade_start() 開啟漸變。
如不需要漸變和漸變中斷,可用函數(shù) ledc_fade_func_uninstall() 關(guān)閉
4)改變pwm頻率
-
通過調(diào)用函數(shù) ledc_set_freq() 設(shè)置頻率??捎煤瘮?shù) ledc_get_freq() 查看當(dāng)前頻率。
-
通過調(diào)用函數(shù) ledc_bind_channel_timer() 將其他定時(shí)器綁定到該通道來改變頻率和占空比分辨率。
-
通過調(diào)用函數(shù) ledc_channel_config() 改變通道的定時(shí)器
5)中斷
在 ledc_channel_config_t 中選取參數(shù) ledc_intr_type_t ,在漸變完成時(shí)觸發(fā)中斷。
要注冊(cè)處理程序來處理中斷,可調(diào)用函數(shù) ledc_isr_register()。這個(gè)漸變是嘛
6)頻率和占空比分辨率支持范圍
1、驅(qū)動(dòng)led:5K頻率,13位分辨率
2、提供時(shí)鐘:40M
3、報(bào)錯(cuò):超過占空比和頻率范圍,占空比分辨率通常用 ledc_timer_bit_t 設(shè)置
7)官方示例
使用 LEDC 改變占空比和漸變控制的實(shí)例請(qǐng)參照 peripherals/ledc/ledc_fade。
使用 LEDC 基本實(shí)例請(qǐng)參照 peripherals/ledc/ledc_basic。
三、上手敲代碼
1)使用 LEDC 基本實(shí)例請(qǐng)參照 peripherals/ledc/ledc_basic。非常簡單
1、readme:該示例使用5 kHz的固定PWM頻率,占空比為50%,并輸出GPIO引腳
2、結(jié)構(gòu)體配置:定時(shí)器和通道
// Prepare and then apply the LEDC PWM timer configuration
ledc_timer_config_t ledc_timer = {
.speed_mode = LEDC_MODE, //esp32s3只支持低速率
.timer_num = LEDC_TIMER, //LEDC_TIMER_0
.duty_resolution = LEDC_DUTY_RES,//13bit
.freq_hz = LEDC_FREQUENCY, // Set output frequency at 5 kHz
.clk_cfg = LEDC_AUTO_CLK//auto就能用
};
// Prepare and then apply the LEDC PWM channel configuration
ledc_channel_config_t ledc_channel = {
.speed_mode = LEDC_MODE,//同樣低速
.channel = LEDC_CHANNEL,//通道0
.timer_sel = LEDC_TIMER,//timer0,和定時(shí)器結(jié)構(gòu)體參數(shù)一致
.intr_type = LEDC_INTR_DISABLE,//關(guān)閉中斷
.gpio_num = LEDC_OUTPUT_IO,//綁定io5
.duty = 0, // Set duty to 0%
.hpoint = 0
};
結(jié)構(gòu)體初始化:ledc_timer_config(&ledc_timer),ledc_timer_config(&ledc_timer)
3、調(diào)整占空比,兩步走
ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, LEDC_DUTY):設(shè)置新占空比
ledc_update_duty(LEDC_MODE, LEDC_CHANNEL):更新應(yīng)用
2)使用 LEDC 改變占空比和漸變控制的實(shí)例請(qǐng)參照 peripherals/ledc/ledc_fade。
1、readme:不啦不啦,沒介紹,四個(gè)通道,四種模式
* LEDC 1: Fade up / increase intensity
* LEDC 2: Fade down / decrease intensity
* LEDC 3: Keep a stable intensity
* LEDC 4: LED is not on
2、appmain:配置了n個(gè)結(jié)構(gòu)體,參考上一個(gè)歷程,基本一樣配置->初始化
有一點(diǎn)不一樣:添加了esp32的高速模式(還不知道效果)
多了了個(gè)參數(shù).flags.output_invert = 1:反轉(zhuǎn)IO,極性反轉(zhuǎn)?
3、控制占空比方法位上面提到的硬件控制
1.ledc_fade_func_install(0);:安裝,參數(shù)嘛意思,還設(shè)置了一個(gè)回調(diào)?
4、用到的幾個(gè)函數(shù)
ledc_set_fade_with_time(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0, LEDC_TEST_FADE_TIME);
ledc_fade_start(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, LEDC_FADE_NO_WAIT);
max_fade_time_ms:最后一個(gè)參數(shù),像是在給定時(shí)間范圍內(nèi)達(dá)到目標(biāo)值
ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0);
ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
照貓畫虎就完了,都給你封裝好了文章來源:http://www.zghlxwxcb.cn/news/detail-742402.html
總結(jié),用起來很方便,只有幾個(gè)函數(shù),熟悉就能用文章來源地址http://www.zghlxwxcb.cn/news/detail-742402.html
到了這里,關(guān)于ESP32S3學(xué)習(xí)——LEDC LED PWM 控制器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!