CHAPTER 08 / FIELD GUIDE
ADC 与 PWM:旋钮调光
把模拟输入变成可控输出。
两个方向的转换
ADC 把输入电压转换成数字;PWM 则通过快速开关控制平均作用。PWM 不是让 GPIO 输出真正连续的中间电压。LED 的视觉亮度也不与占空比严格线性。
电位器接线
两端分别接 3V3 和 GND,中间滑动端接 GPIO1。不确定滑动端时,断电测阻值:两个固定端之间约 10 kΩ,中间端到任一固定端随旋转改变。GPIO1 在 S3 上对应 ADC1 通道 0。
理解频率、分辨率和占空比
这里选 5 kHz、10 位 PWM,使用 0–1023 的保守占空比计数范围。频率越高,能选择的分辨率越受时钟限制。ESP32-S3 的 LEDC 使用 low-speed 模式。
实验工程 · 04_knob
先读取一次作为滤波初值,每 10 ms 采样;七份旧值加一份新值,降低读数抖动。
打开 main.c · 查看公共驱动 lab.c · 下载全部工程
#include "lab.h"
#include "esp_log.h"
void app_main(void) {
adc_init();
pwm_init();
int filtered=adc_read_raw();
int64_t log_at=0;
for(;; ) {
filtered=(filtered*7+adc_read_raw())/8;
pwm_set(filtered*1023/4095);
if(now_ms()-log_at>=500) {
log_at=now_ms();
ESP_LOGI("knob","raw=%d",filtered);
}
vTaskDelay(pdMS_TO_TICKS(10));
}
}做一次小记录
记录旋钮左端、中点、右端的 raw 和亮度;再移除滤波比较波动。滤波越强,显示越稳,但变化越慢。中点不一定正好是 2048,这可以成为测量与校准的讨论起点。
停下来想一想
把 5 kHz 改成 10 kHz,同时保持 50% 占空比,LED 会一定亮一倍吗?
查看推导与答案
不会。理想情况下平均导通比例不变。改变频率改变的是每秒开关次数,改变占空比才直接改变导通时间占比。
本章验收
本章一手资料
卡住时可以直接向我提问:附上章节号、工程名、接线和第一条错误日志。