Как настроить PWM-сигнал 25 кГц на ESP-WROOM-32?
Я хочу управлять одним выводом ESP-WROOM-32, чтобы иметь ШИМ-сигнал 25 кГц. Как мне это сделать в студии Arduino? Я успешно скомпилировал программу "привет, мир" для такого устройства в студии Arduino, теперь какие шаги мне нужно предпринять? (Другие библиотеки? Исходный код?)
К вашему сведению: я хотел бы сделать то же самое, что предусмотрено в настройке частоты ШИМ до 25 кГц, но не на микроконтроллере AVM, а на ESP32. Существует множество объяснений оригинальным ардуино и ESP8266, использующим бит-бит в различных формах. Но как я могу это сделать на ESP-WROOM-32, не используя битовый стук, но встроенный ШИМ?
Предыстория: Я хотел бы управлять стандартным ШИМ-вентилятором 12 В с помощью этого сигнала. Насколько я узнал, я просто могу подключить контакт к ШИМ-входу вентилятора. Я просто, кажется, не могу понять, как создавать такие высокочастотные ШИМ-сигналы на ESP32: - / Пожалуйста, помогите!
@Regis May, 👍2
Обсуждение2 ответа
Очень просто настроить ШИМ-сигнал на любой желаемой частоте, с любым желаемым разрешением, при условии, что вы не превышаете максимальную "полосу пропускания": частота, умноженная на разрешение, должна быть меньше половины тактовой частоты устройства.
Полное объяснение в отношении 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
Я знаю, что это старая тема, но в данный момент я тоже занят ею.
Чтобы убедиться, что ESP32 не получает большого напряжения от ШИМ-входа, вы должны измерить на ШИМ-входе, если сигнал не превышает 3 В3, в противном случае вам понадобится резисторный делитель или работа с транзистором между ними, чтобы уменьшить сигнал. У меня около 3 В3, поэтому я могу напрямую подключить ESP32 к вентилятору, но, как и вы, я вставил между ними резистор серии (330) для дополнительной защиты. Если этот вход составляет около 5,25 В, и вы подключаете его к ESP32, он, вероятно, напрямую не сломается, но это зависит от входного сопротивления вентилятора и от того, какой ток может принимать внутренний защитный диод в ESP32.
Для сигнала тахометра это очень просто, просто подключите его с помощью съемного резистора (10 К) к нужному напряжению, которое вы хотите. В моем случае я подключу его к 3V3, потому что ESP32 работает на 3V3. Контроллер вентилятора опускает его при вращении.
Я использую эту схему в качестве руководства, ШИМ-вход:
Выход открытого коллектора тахогенератора:
Веб-сайт: Контроллер вентилятора
Надеюсь, это поможет, просто в качестве справки.
На самом деле я все еще не завершил этот проект. До сих пор мне нужно было сосредоточиться на разных вещах, но я окончательно продолжу заниматься этим в ближайшем будущем. Поэтому большое вам спасибо за этот ответ!, @Regis May
- Сдвиг уровня ШИМ от 3,3 В до 5 В
- ESP 32 изменение частоты вместо рабочего цикла
- Светодиодная панель ESP32 с регулируемой яркостью и MOSFET
- Использование контактов IN1/IN2 для ШИМ вместо ENA в L298N
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
вы сказали, что составили программу "привет, мир" для этого устройства .... вы не сказали, удалось ли вам загрузить программу в устройство и запустить ее ..... вы успешно запустили программу "привет, мир" на устройстве?, @jsotola
Конечно, я так и сделал. Если бы это было проблемой, я бы задал другой вопрос., @Regis May
почему вы используете Arduino Studio? вам действительно удалось установить пакет ядра esp32 в эту прекращенную среду разработки?, @Juraj
Это прекращено??? Да, тем временем я скачал набор инструментов Espressif. Я думаю, что ledc, похоже, происходит оттуда. Сначала я должен решить проблемы со схемой, прежде чем смогу предпринять что-либо еще с помощью какого-либо программного обеспечения. (См. ниже.) Я займусь этим в следующие выходные., @Regis May