Проблема в том, что при записи на выход ШИМ ESP32 я ожидаю непрерывную прямоугольную волну низкой частоты (1,25 кГц), а получаю регулярную/нерегулярную импульсную треугольную волну ШИМ с частотой импульсов 125 Гц (достаточно для человеческого глаза). чтобы увидеть его мерцающим.)
Есть ли способ обойти это?
Я попробовал для этого конфигурацию ниже:
ledc_timer_config_t ledc_timer_D = {
.duty_resolution = LEDC_TIMER_15_BIT,
.freq_hz = 1250,
.speed_mode = LEDC_HS_MODE,
.timer_num = LEDC_HS_TIMER_2,
.clk_cfg = LEDC_USE_APB_CLK,
};
Выход:
Я попробовал это и на низкой скорости и получил ту же проблему, если не проблему при компиляции через VS Code IDE.





Судя по рисунку, который вы показываете на графике, похоже, что вы используете неподходящее устройство для отбора проб и также осуществляете отбор проб с низкой частотой. Следы сигнала многоугольной формы указывают на то, что, вероятно, вы производите выборку на той же частоте, что и ШИМ-сигнал, или даже ниже. Я бы порекомендовал вам выполнить передискретизацию (скажем, в 16 раз быстрее), чтобы увидеть прямоугольные импульсы правильной формы.
Чтобы получить 16 сэмплов в прямоугольном сигнале частотой 1,25 кГц, вам нужно получить 24 kps, и вы все равно увидите градиенты между двумя разными семплами в сигнале, которые будут выглядеть скорее как трапеции, чем как прямоугольники. Если разрешение вашего ШИМ составляет 16 бит, у вас есть 65536 значений для его установки, а для точного измерения вам необходимо отбирать около 131 072 выборок x 1,25 кГц ≈ 170 Мбит/с. Только тогда вы получите выборку с полным разрешением.
Спасибо за это, попробуйте. В глубине души я удивлен, что при разрешении 15 бит частота дискретизации все еще слишком низкая для 1,25 кГц.