ESP32-S3 IDF编程第六课:硬件PWM —— 让LED呼吸、舵机听话
ESP32-S3 IDF编程第六课:硬件PWM —— 让LED呼吸、舵机听话
上节课我们用硬件定时器实现了精确1秒闪烁。但你有没有想过:如果把定时器再升级一下,让它能控制”亮多久、灭多久”的比例,会是什么效果?这就是这节课的主角——PWM(脉宽调制)。
你可能会说:”PWM不就是方波吗?我直接用定时器中断配合GPIO翻转也能模拟啊!”没错,第四课我们确实可以这样干,但有两个致命问题:
- CPU累死:哪怕只是50Hz的舵机信号,每秒100次中断翻转GPIO,CPU就围着它转。
- 波形不准:中断被其他高优先级任务抢占,波形就会抖,舵机就会”帕金森”。
ESP32-S3有一个专门的硬件模块叫 LEDC(LED PWM Controller),它本质是”带比较输出的硬件定时器”,配置完就不用CPU管了,波形稳得像老狗。
这节课你会学到
- PWM的三个核心参数:频率、占空比、分辨率——彻底搞懂它们的关系。
- ESP32-S3的LEDC模块深度解析(为什么只有低速模式、内部结构、时钟树)。
- LED呼吸灯实验——用正弦函数实现丝滑呼吸效果。
- 舵机控制实战——驱动SG90,精准控制角度,附校准秘籍。
- 常见坑点:频率与分辨率互斥的数学原理、占空比更新时机、ESP32-S3与ESP32的LEDC差异。
硬件接线
- LED呼吸灯:LED正极接 GPIO4(串220Ω电阻),负极接GND。
- 舵机实验:SG90舵机信号线接 GPIO5,电源接5V,GND接GND(注意:舵机要从开发板的5V引脚取电,别用3.3V,电流不够会抽搐)。
PWM深度解析:从波形到数学
什么是PWM?一张波形图胜过千言万语
假设我们要让LED呈现50%亮度,GPIO输出的波形是这样的:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 EndianKun 端序君!
评论


