ESP系列开发板(ESP-8266、ESP-32等)的PWM管脚可用情况

0. 前言

PWM(Pulse Width Modulation)即脉冲宽度调制,ESP系列芯片的PWM管脚可实现同频率、不同占空比的PWM波形输出, 常用于控制舵机转向角度、电机调速等功能。

为了选择合适的嵌入式开发板,我们需要知道开发板芯片的可用PWM管脚数量。注意这里说的是可用,有的管脚虽然支持PWM输出,但是被其它必要接口占用,为避免出现不可控情况而无法使用。本文对比了常见芯片ESP-8266、ESP-WROOM-32、ESP-32C3、ESP-32S3的可用PWM管脚数量。

1. PWM管脚对比

芯片类型GPIO数量PWM实际管脚数量PWM可用管脚数量淘宝参考价格
ESP-82661010810.8
ESP-WROOM-3234161616.1
ESP-32C3226412.9
ESP-32S3458829.9

对于各个芯片的GPIO数量,给出的是官方提供的数据,实际可用数量要少于这个数字,具体要看不同厂家开发板设计情况。

1.1 ESP8266管脚分布

 ESP-8266的全部10个IO口都设置为PWM输出,但是因为GPIO1和GPIO3作为调试串口的TX和RX,一般不做使用,所以ESP-8266一般可支持同时输出8路PWM输出。

1.2 ESP32管脚分布

ESP32有一个LEDC,原本设计用来控制LED,可以作简单的PWM输出。LEDC总共有16个路通道(0 ~ 15),分为高低速两组,高速通道(0 ~ 7)由80MHz时钟驱动,低速通道(8 ~ 15)由1MHz时钟驱动。

 1.3 ESP32-C3管脚分布

 PWM支持任意GPIO,最大支持4个PWM通道

  1.4 ESP32-S3管脚分布

 

  PWM支持任意GPIO,最大支持8个PWM通道

2. 芯片选型总结

1. 需要PWM管脚数量不多于8个时,ESP8266是性价比最高的方案;

2. 需要PWM管脚数量不多于16个时,ESP32是性价比最高的方案;

3. 需要PWM管脚数量不多于4个,但是有较多非PWM管脚控制需求,ESP32C3是性价比最高的方案。

注意:如果需要的PWM管脚数量超过16个,则需要考虑使用PCA9685-16路PWM舵机扩展模块。

3. 参考

ESP8266 Arduino开发之路(5)— 使用PWM实现LED呼吸灯_esp8266 pwm_Willliam_william的博客-CSDN博客ESP8266 Arduino开发之路(5)— 使用PWM实现LED呼吸灯一、前言ESP8266的PWM(Pulse Width Modulation)由FRC1在软件上实现,可实现同频率、不同占空比的最多8路的PWM波形输出。需要注意如下:PWM驱动接口不能跟硬件定时器接口函数同时使用,因为二者共用同一个硬件定时器;PWM驱动使用NMI中断,为最高优先级中断,可以保证PWM输出波形的准确度;不能将自动睡眠模式设置为Light Sleep,Light Sleep模式下停用CPU不能响应NMI中断_esp8266 pwmhttps://blog.csdn.net/qq_38113006/article/details/118228854ESP32C3-CORE开发板 - LuatOS 文档https://wiki.luatos.com/chips/esp32c3/board.htmlESP32S3-CORE开发板 - LuatOS 文档https://wiki.luatos.com/chips/esp32s3/board.html

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP32开发板是一款功能强大的物联网开发板,它集成了Wi-Fi和蓝牙功能,并且具有丰富的GPIO引脚,可以用于控制各种外部设备,包括舵机。 舵机是一种常用的电机,用于控制机械装置的角度。它通常由一个电机和一个内置的反馈机制组成,可以精确地控制角度位置。 要使用ESP32开发板控制舵机,你需要连接舵机到ESP32GPIO引脚,并编写相应的代码来控制舵机的角度。 以下是一般的步骤: 1. 硬件连接:将舵机的信号线连接到ESP32的一个GPIO引脚。同时,将舵机的电源线连接到适当的电源(通常是5V),并将舵机的地线连接到ESP32的地线。 2. 软件编程:使用适当的开发环境(如Arduino IDE)编写代码来控制舵机。你可以使用ESP32PWM功能来生成适当的脉冲信号,以控制舵机的角度。 以下是一个简单的示例代码,使用ESP32的Arduino库来控制舵机: ```cpp #include <Servo.h> Servo myservo; // 创建一个舵机对象 void setup() { myservo.attach(2); // 将舵机连接到GPIO引脚2 } void loop() { myservo.write(90); // 设置舵机角度为90度 delay(1000); // 等待1秒 myservo.write(0); // 设置舵机角度为0度 delay(1000); // 等待1秒 } ``` 在上面的示例中,我们使用Servo库来控制舵机。首先,在`setup()`函数中,我们将舵机连接到GPIO引脚2。然后,在`loop()`函数中,我们设置舵机的角度为90度,等待1秒,然后设置角度为0度,再等待1秒。这样就可以实现舵机的简单控制。 以上是一个简单的示例,你可以根据具体的舵机型号和需求进行相应的调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值