news 2026/6/15 16:32:08

esp32s3-pwm介绍与stm32的不同原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
esp32s3-pwm介绍与stm32的不同原理

1.ESP32-S3 最多可同时生成20 路独立 PWM 波形,由 LEDC 和 MCPWM 模块共同提供。

  • LEDC 模块:8 个独立通道,对应 8 路 PWM 波形。
  • MCPWM 模块:2 个单元各含 6 路输出,总计 12 路 PWM 波形。

2.通道就是独立输出 PWM 波形的硬件单元,LEDC 的 8 个通道虽然独立输出,但会共用 4 个定时器,同一定时器下的通道 PWM 周期是相同的;MCPWM 的通道独立性更强,不仅波形独立,还能灵活配置互补、死区等专属功能。

3.MCPWM 是Motor Control PWM(电机控制脉宽调制器),专为电机控制、数字电源等高要求场景设计;LEDC 是LED Control(LED 控制器),主打 LED 调光与基础 PWM 输出。两者核心区别如下:

核心定位与通道数

  • MCPWM:2 个独立单元(MCPWM0/1),每单元 3 个操作器,每操作器 2 路 PWM,总计12 路独立输出,支持互补 / 独立模式。
  • LEDC:1 个控制器,8 路独立通道,共用 4 个定时器,每通道绑定 1 个定时器生成波形。

4.选MCPWM:需要互补 PWM、死区、故障保护、输入捕获,或用于电机 / 电源等高要求控制。

LEDC:仅需基础 PWM 或 LED 渐变,追求简单配置与低 CPU 负载。

5.具体来说:

  1. STM32 定时器 PWM:核心是ARR(自动重装载值,决定周期)+CCRx(捕获比较值,决定占空比),定时器计数到 CCRx 翻转电平,到 ARR 复位,本质是单阈值控制高低电平切换。
  2. ESP32 MCPWM 模块:用period(周期值)+cmp_a/cmp_b(两个比较阈值),可以灵活生成两路互补 PWM,还能通过两个阈值的差值设置死区;LEDC 模块虽然日常用duty(占空比)配置,但底层也是基于定时器周期和比较阈值的双参数逻辑,只是封装得更简单,在两个阈值之间才会输出高电平。

6.频率:就是你说的一秒产生的 PWM 波形个数,和周期成反比,频率越高波形周期越短。

分辨率:不是单纯的计数范围,而是计数范围对应的调节精细度,计数范围越大,分辨率越高。比如 16 位定时器计数范围 0-65535,比 8 位定时器 0-255 的分辨率高,能实现更细腻的周期或占空比调节。

占空比:有效电平的持续时间就叫占空比

#include <stdio.h> #include "driver/gpio.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/ledc.h" // //初始化gpio引脚 // void ledc_flash_init(){ // gpio_config_t ledc_cfg={ // .pin_bit_mask=(1<<(GPIO_NUM_15)), // .mode=GPIO_MODE_OUTPUT, // }; // gpio_config(&ledc_cfg); // } void ledc_breath_init(){ //初始化ledc寄存器 ledc_timer_config_t lec_timer={ .clk_cfg=LEDC_AUTO_CLK,//选择时钟源,自动选择时钟 .duty_resolution=LEDC_TIMER_12_BIT,//确定计数范围,4095(2的12次方-1) .freq_hz=5000,//1s产生多少PWM波形 .speed_mode=LEDC_LOW_SPEED_MODE,//时钟速度模式,ledc限制为低速模式 .timer_num=LEDC_TIMER_0,//选择那个时钟作为输出,一共有四个来源 }; ledc_timer_config(&lec_timer); //初始化PWM通道,输出pwm波 ledc_channel_config_t ledc_channel={ .channel=LEDC_CHANNEL_0, .duty=0,//有效电平的持续时间,这个是初始化 .gpio_num=GPIO_NUM_15, .speed_mode=LEDC_LOW_SPEED_MODE, .timer_sel=LEDC_TIMER_0, }; ledc_channel_config(&ledc_channel); //启动硬件的渐变功能 ledc_fade_func_install(0); } void app_main(void) { ledc_breath_init(); while (1) { ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE,LEDC_CHANNEL_0,4095,2000); //等渐变完成函数才会结束 ledc_fade_start(LEDC_LOW_SPEED_MODE,LEDC_CHANNEL_0,LEDC_FADE_WAIT_DONE); ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE,LEDC_CHANNEL_0,0,2000); //等渐变完成函数才会结束 ledc_fade_start(LEDC_LOW_SPEED_MODE,LEDC_CHANNEL_0,LEDC_FADE_WAIT_DONE); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:56:17

全网最全专科生AI论文网站TOP10:开题报告文献综述必备工具

全网最全专科生AI论文网站TOP10&#xff1a;开题报告文献综述必备工具 2026年专科生AI论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断发展&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上五花八门…

作者头像 李华
网站建设 2026/6/15 14:18:26

深度学习毕设项目推荐-基于机器学习的印刷体数字和字母识别基于python深度学习的印刷体数字和字母识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 15:27:28

深度学习毕设项目推荐-基于人工智能python深度学习的猫狗表情识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/31 3:59:10

用这4招,优雅的实现Spring Boot 异步线程间数据传递

Spring Boot 自定义线程池可以实现异步开发&#xff0c;在实际开发中需要在父子线程之间传递一些数据&#xff0c;比如用户信息&#xff0c;链路信息等等比如用户登录信息使用ThreadLocal存放保证线程隔离&#xff0c;代码如下&#xff1a;/*** description 用户上下文信息*/ p…

作者头像 李华
网站建设 2026/6/15 13:03:00

ArcGIS汉化不成功的解决方案

很多粉丝朋友在ArcGIS10.X系列安装出现了不能汉化的问题&#xff0c;即使是在装了汉化包的情况下。今天我们来做一个总结&#xff01; &#xff08;ArcGIS Pro汉化不成功查看&#xff1a;ArcGIS Pro或ArcGIS汉化不了&#xff1f;汉化包装不上&#xff1f;&#xff09; ArcGIS的…

作者头像 李华