Перейти к содержимому

Ограничение тока выхода GPIO для ESP32 без использования резисторов и ШИМ

Метки:

Добрый день, уважаемые читатели!

Однажды я написал статью, где рассказывал как работать с GPIO API на микроконтроллере ESP32. Рассказывал я про ESP-IDF, но, скорее всего, данное API будет доступно и из-под платформы Arduino32. Там я упоминал об одной довольно интересной функции –  gpio_get_drive_capability(), с помощью которой можно ограничивать ток, проходящий через каждую отдельную “ножку” микроконтроллера в определенных пределах. Дабы не листать статьи “туда-сюда”, я повторю отрывок текста из той статьи.


Для GPIO, работающих на выход, ESP32 позволяет задать максимальный ток через выход. Это может быть полезно в некоторых случаях, например можно ограничить ток через светодиод без использования резистора. Для этого воспользуйтесь функцией:

esp_err_t gpio_set_drive_capability (gpio_num_t gpio_num , gpio_drive_cap_t strength)

где:

  • gpio_num – идентификатор GPIO
  • strength – максимально допустимый ток

Режим gpio_drive_cap_t может принимать одно из нескольких значений:

  • GPIO_DRIVE_CAP_0 – слабый, до ~5мА
  • GPIO_DRIVE_CAP_1 – сильнее, до ~10мА
  • GPIO_DRIVE_CAP_2 – средний (по умолчанию), до ~20мА
  • GPIO_DRIVE_CAP_3 – максимальный, до ~40мА

Как видите, по умолчанию ток высокого уровня ограничен на уровне 20мА. В большинстве случаев вызывать данную функцию при настройке порта не требуется. Но если ваше устройство на ESP32 требует большего тока (например при управлении мощным биполярным транзистором), то вы можете столкнуться с “неправильным” поведением.

 


Но, честно говоря, до сегодняшнего вечера я не проверял, как работает эта функция, и работает ли вообще. Сегодня я решил исправить это упущение и провести следственный почти научный эксперимент. Схема предельно проста – подключаем светодиод к выводу GPIO12 напрямую, без использования токоограничительного резистора:

Светодиод нашел ещё старый, советский – АЛ307ГМ, который “держит” максимум 60мА по паспорту. Насколько мы помним, GPIO ESP32 рассчитаны на выходной ток 40мА при высоком уровне. То есть все в пределах нормы. Должно быть. А как на самом деле – выясним в процессе эксперимента.

 

Для тестирования быстренько набросал небольшую программку, ничего сложного:

Нажмите для увеличения

Заливаем в чип и… убеждаемся, что всё работает – смена яркости светодиода происходит каждые 5 секунд.

И это без использования PWM (ШИМ)! То есть никаких высокочастотных миганий светодиода.

Давайте измерим ток через светодиод в каждом из режимов:

То есть реальный ток составил:

  • GPIO_DRIVE_CAP_0около ~8,5мА
  • GPIO_DRIVE_CAP_1около ~17мА
  • GPIO_DRIVE_CAP_2 – (по умолчанию) около ~32,5мА
  • GPIO_DRIVE_CAP_3около ~58мА

Как видим, ограничение тока наступает при более высокий значениях, чем заявлено в документации. Связано это, по моему личному мнению, с тем, что в документации указаны рекомендованные токи при заданных режимах, а у меня получились по сути предельные. И ESP32 способен “потянуть” немного больше, чем заявленные 40мА, причем нагрева модуля я не заметил (впрочем, при максимальном токе мог нагреваться сам чип под крышкой).

 


Для чего это можно использовать?

Конечно же, это не полноценный стабилизатор тока. Это скорее ограничитель тока. Так как неизвестно, как он будет себя вести при изменении напряжения питания. Но для некоторых задач эта функция вполне может пригодится.

Самое простое применение этой функции – это ограничение максимального тока выхода если “что-то пошло не так”. Либо ограничение суммарного тока по всем выходам, если вы, например, подключили много светодиодов одновременно. Своего рода страховка от перегрузки чипа.

Можно, конечно, попробовать например подключать светодиоды “напрямую”, без использования резисторов. И при этом вроде бы имеется возможность регулировать их яркость без использования ШИМ-модуляции, например так можно было бы “притушить” светодиоды или светодиодные индикаторы в ночное время. Но для обычных индикаторных светодиодов 50мА – это всё таки слишком, поэтому реальный “диапазон регулировки” будет еще меньше (2 – максимум 3 ступени). Во-вторых, при таким подключении вся рассеиваемая мощность при ограничении тока будет оставаться внутри чипа и нагревать его, что не есть хорошо, а точнее – довольно плохо.

Но, например, если к выходу ESP подключен довольно мощный биполярный транзистор с сравнительно большим током базы, который управляет нагрузкой, то таким вот нехитрым способом наверняка можно регулировать мощность на последней. 

Если выход ESP32 используется для управления мощными КМОП-транзисторами, то тут следует помнить, что у некоторых из них входная емкость затвора может иметь вполне себе приличные значения – до тысяч пикофарад. И при переключении уровня на выходе ESP происходит перезаряд входной ёмкости подключенного MOSFET-а источником тока выхода. Скорость нарастания фронта здесь будет напрямую зависеть от выставленного тока на выходе – при 5мА напряжение будет нарастать медленно, а при 40мА – быстро. Соответственно будет изменяться и скорость изменения тока в нагрузке, которой управляет данный ключ. А также при этом общее потребление тока ключом тоже будет разное, ведь как известно, основное потребление КМОП схем происходит именно в моменты их переключения. Но скорость переключения нагрузки влияет на потери в силовых цепях в моменты переключения транзистора.

 


Ну а на этом данную заметочку можно и завершить. Благодарю за внимание. 

🔶 Полный архив статей вы найдете здесь

 


Пожалуйста, оцените статью:
[ 5 из 5, всего 7 оценок ]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *