Как настроить PWM-сигнал 25 кГц на ESP-WROOM-32?

Я хочу управлять одним выводом ESP-WROOM-32, чтобы иметь ШИМ-сигнал 25 кГц. Как мне это сделать в студии Arduino? Я успешно скомпилировал программу "привет, мир" для такого устройства в студии Arduino, теперь какие шаги мне нужно предпринять? (Другие библиотеки? Исходный код?)

К вашему сведению: я хотел бы сделать то же самое, что предусмотрено в настройке частоты ШИМ до 25 кГц, но не на микроконтроллере AVM, а на ESP32. Существует множество объяснений оригинальным ардуино и ESP8266, использующим бит-бит в различных формах. Но как я могу это сделать на ESP-WROOM-32, не используя битовый стук, но встроенный ШИМ?

Предыстория: Я хотел бы управлять стандартным ШИМ-вентилятором 12 В с помощью этого сигнала. Насколько я узнал, я просто могу подключить контакт к ШИМ-входу вентилятора. Я просто, кажется, не могу понять, как создавать такие высокочастотные ШИМ-сигналы на ESP32: - / Пожалуйста, помогите!

, 👍2

Обсуждение

вы сказали, что составили программу "привет, мир" для этого устройства .... вы не сказали, удалось ли вам загрузить программу в устройство и запустить ее ..... вы успешно запустили программу "привет, мир" на устройстве?, @jsotola

Конечно, я так и сделал. Если бы это было проблемой, я бы задал другой вопрос., @Regis May

почему вы используете Arduino Studio? вам действительно удалось установить пакет ядра esp32 в эту прекращенную среду разработки?, @Juraj

Это прекращено??? Да, тем временем я скачал набор инструментов Espressif. Я думаю, что ledc, похоже, происходит оттуда. Сначала я должен решить проблемы со схемой, прежде чем смогу предпринять что-либо еще с помощью какого-либо программного обеспечения. (См. ниже.) Я займусь этим в следующие выходные., @Regis May


2 ответа


6

Очень просто настроить ШИМ-сигнал на любой желаемой частоте, с любым желаемым разрешением, при условии, что вы не превышаете максимальную "полосу пропускания": частота, умноженная на разрешение, должна быть меньше половины тактовой частоты устройства.

Полное объяснение в отношении ESP-IDF доступно здесь. В статье объясняются тонкости всех каналов и их конфигурации. Должен признаться, я прочитал не все, потому что мое заявление было очень простым.

В setup ()код, необходимый для создания экземпляра ШИМ-сигнала на канале chan на частоте freqс разрешением в битах, равен:

double ledcSetup(uint8_t chan, double freq, uint8_t bit_num)

Код для подключения канала chan к выходному pin-коду:

void ledcAttachPin(uint8_t pin, uint8_t chan)

В цикле () или иным образом установите режим рабочего цикла для данного канала, используя:

void ledcWrite(uint8_t chan, uint32_t duty)

Я рекомендую ознакомиться с esp32-hal-ledc.c в основных файлах, которые вы установили, что позволило вам запрограммировать ESP32 в Arduino Studio. Вам не нужно включать какие-либо файлы, чтобы получить вышеуказанную функциональность, но всегда полезно немного знать о том, что происходит за кулисами.

Несколько вещей, которые следует отметить, если чтение основного кода слишком утомительно:

  • значение chan может быть только от 0 до 15, и функция вернет 0, если вы попытаетесь ввести число за пределами этих границ;
  • вы не можете подключить ШИМ-выход ко всем выводам GPIO, так как некоторые из них являются только входными, а другие могут иметь второстепенные функции, которые вам нужны;
  • duty-32-разрядный тип, но максимальное значение определяется разрешением, которое вы использовали для bit_num. Например, если значение bit_num равно 8, то диапазон пошлин составляет от 0 до 255. Я не знаю, что произойдет, если вы поставите большее число: пошлина может остаться на уровне 100%, или пошлина может быть замаскирована таким образом, что запись 256 совпадает с 0, 257 равно 1 и т. Д.

Как только вы освоите это, ESP32 включает функцию "затухания", при которой рабочий цикл изменяется от x% до y% за z миллисекунд. Для этого в Интернете есть несколько учебных пособий.

ЗАКЛЮЧИТЕЛЬНОЕ ПРИМЕЧАНИЕ:

Если вы еще этого не сделали, взгляните на спецификации ШИМ-вентиляторов Intel. В нем говорится, что вам нужен источник с открытым коллектором или открытым сливом, предоставляемый, в вашем случае, ESP32. Есть вероятность, что ШИМ-штифт втянут до 5,25 В внутри вентилятора; это повредит ESP32, если вы просто соедините их вместе. Аналогично, выход тахометра подтягивается до 12 В. Это убьет ESP32, если вы подключите его напрямую к вентилятору.

,

Большое вам спасибо за любезную помощь. Выглядит хорошо! Я нашел документацию о LEDC, но не для платформы Arduino. Один вопрос: я видел, как многие люди подключали выходной вывод непосредственно к ШИМ-входу вентилятора. Поэтому я сделал то же самое. Чтобы быть очень осторожным, я использовал резистор 220 Ом между вентилятором и ESP32, так как мне было интересно, действительно ли это так. Теперь я читаю об этом принципе открытого слива, о котором вы говорите. Я не понимаю этого прямо сейчас. Я собираюсь прочитать об этом подробнее, прежде чем будет иметь смысл задать вопрос., @Regis May

Кстати: Ссылка на спецификации вентилятора не работает., @Regis May

Отредактировано для рабочей ссылки., @CharlieHanson

@RegisMay Взгляните на запись в Википедии для Open Collector. Это то же самое, что и открытый сток, но для транзистора, а не для МОП-транзистора: транзисторы имеют коллекторы, эмиттеры и базы, в то время как FET имеют стоки, источники и вентили., @CharlieHanson

У меня есть. Я просто (пока) не понимаю этой концепции. Я понимаю физические принципы, но (пока) не знаю, как и почему они используются, поскольку мне не хватает достаточных знаний о вариантах использования и о том, какие проблемы будут точно решены. Но я работаю над этим., @Regis May

открытый слив просто означает, что он подключается и отключает GND, вместо того, чтобы мигать положительным напряжением., @dandavis

Да, я понимаю основной принцип, но мне все недостаточно ясно, чтобы на самом деле понять, как самостоятельно построить конечную схему, включая выбор необходимых резисторов и их значений. Спасибо вам за это, я немного почитаю, а затем вернусь к этому проекту в следующие выходные., @Regis May

@RegisMay У тебя получилось?, @Gene Pavlovsky


3

Я знаю, что это старая тема, но в данный момент я тоже занят ею.

Чтобы убедиться, что ESP32 не получает большого напряжения от ШИМ-входа, вы должны измерить на ШИМ-входе, если сигнал не превышает 3 В3, в противном случае вам понадобится резисторный делитель или работа с транзистором между ними, чтобы уменьшить сигнал. У меня около 3 В3, поэтому я могу напрямую подключить ESP32 к вентилятору, но, как и вы, я вставил между ними резистор серии (330) для дополнительной защиты. Если этот вход составляет около 5,25 В, и вы подключаете его к ESP32, он, вероятно, напрямую не сломается, но это зависит от входного сопротивления вентилятора и от того, какой ток может принимать внутренний защитный диод в ESP32.

Для сигнала тахометра это очень просто, просто подключите его с помощью съемного резистора (10 К) к нужному напряжению, которое вы хотите. В моем случае я подключу его к 3V3, потому что ESP32 работает на 3V3. Контроллер вентилятора опускает его при вращении.

Я использую эту схему в качестве руководства, ШИМ-вход:

Выход открытого коллектора тахогенератора:

Веб-сайт: Контроллер вентилятора

Надеюсь, это поможет, просто в качестве справки.

,

На самом деле я все еще не завершил этот проект. До сих пор мне нужно было сосредоточиться на разных вещах, но я окончательно продолжу заниматься этим в ближайшем будущем. Поэтому большое вам спасибо за этот ответ!, @Regis May