ESP32-Arduino PWM驱动

1 ESP32上的PWM资源

ESP32本身提供了两种PWM输出,分别是

1.1 LED PWM 控制器 (LEDC)

ESP32上提供最高16路 LEDC的PWM输出,其中8路为高速PWM,8路为低速PWM,而高低速通道都分别含有4个对应的高/低速时钟
在这里插入图片描述

该PWM输出主要针对LED的驱动(但实际应用中不限制)。这个针对是因为其预定义了类似逐渐增加占空比等操作,可以在不占用处理器资源的情况下,实现对亮度(幅值)和颜色(频率)的调控。

1.2 电机控制脉宽调制器 (MCPWM)

ESP32提供6个该PWM输出,含有两个MCPWM外设,每个外设可以提供3个PWM通道。
该PWM个人理解是包含更多高级的功能,但对于PWM波形的控制则相对没有LEDC的精细。
结构如下图所示,可以看到除了分频器、计时器、和操作器外,还包含了错误检测专用捕获模块(例如捕获电机转速等)
在这里插入图片描述

2 ESP32-Arduino使用PWM资源

首先,上述的两个资源并不都在ESP32-Arduino上提供支持,仅LEDC提供支持(查询支持的外设)。
因此我们下文主要集中在LEDC中。但参考上一篇blogESP32+Arduino+VS code开发环境搭建+BLINK,若确实需要MCPWM,可以考虑在程序中调用ESP-IDF的语法去使用,这应该是可能的。

2.1 LEDC的频率与解析度

与Arduino Uno板的8位固定PWM解析度不同,ESP32的PWM解析度是动态的,与设定相关。
解析度:即输出PWM波输出中,对时间的离散化精度,对应的结果,若是等频率,改变占空比以改变等效幅值的应用中,会得到更精细的等效电压输出。例如,对于UNO,8位的解析度,则最小的变化电压是1/256*3.3V=0.01289V,而若是10位的解析度,则为0.0032V。
解析度的解释
对于ESP32的LEDC输出,其最高解析度可以根据下式计算并向下取整,具体原因可参照下一节的解析。
[ l o g 2 ( 80 M H z P W M 输 出 频 率 ) ] f l o o r [log_2(\frac{80MHz}{PWM输出频率})]_{floor} [log2(PWM80MHz)]floor

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值