ESP32 & GPIO12 input mode

На данной плате выведен GPIO12 выведен для использования в проектах. При попытке подключить на данный фазу энкодера - плата перестает загружаться. На сколько понял, при загрузке esp32 как-то проверяет уровень на этом пине и это влияет на загрузку программы из флеш. Есть ли какие-то способы отключить эти внутренние проверки и использовать пин для ввода сигнала энкодера?

Нету.

Поменяй местами с каким-то другим пином.

если нужен энкодер то берёшь такой и горя не знаешь, пины не занимает, сидит на I2C, вдобавок получаешь ещё три пина которые можно использовать по разному

Свободные только 34, 35, 36 и 39. Я правильно понимаю, что могу использовать эти пины установив внешнюю подтяжку к 3,3в? В плане использование аппаратного счетчика pcnt.

i2c только один канал выведен. На нем датчик расстояния и критический датчик угла наклона (bno055) с которого нужно максимально быстро получать данные.

Зачем для энкодера аппаратный счетчик? Ты его 2000+ оборотов вращать собираешься?)

1 оборот колеса - более 1000 импульсов. Точнее пока не скажу. Характеристики редуктора нужно выяснить. А чем плох аппаратный счетчик?

зы. При скорости 3 м/сек, нужно около 15 оборотов или более 15к импульсов в секунду

Если так, то да - аппаратный. У меня только простые энкодеры, с такими и не работал.

Это ваша самобеглая ванька-встанька так носится!? :open_mouth:
Если это про те двигатели, то там энкодер даёт типа 11 имп. на оборот двигателя. Плюс(умножить) редуктор можно глянуть в заказе(а ссылку можно?)

Да, это она. Двигаться она будет медленнее. Но для балансировки нужно иметь запас по скрости.

На шаговых моторах что-то не получилось у нас. При скорости 1,5 м/сек он уже падал. Быть может это сказались 800 имп/на оборот или еще что. С коллекторными моторами тоже не все просто. Пробовали ими управлять при помощи ШИМ. Начинает медленно вращать мотором при скважности близкой к 30%. И правый и левый моторы имеют свою кривую зависимости от скважности. Но до этого пока не дошли. Вероятно самый простой способ ввести коэф для каждого мотора и сдвинуть минимальные обороты map(…)

Но с учетом наличия на моторах энкодеров, думаю этот вопрос получится решить.

Программа получается довольно большой. Поддержка serial команд, поддержка блютус команд… В в общем уже разрослась десяток модулей. И все это в среде freertos.

Пересмотрели множество видео. И авторы советуют опрашивать гироскоп с частотой около 100 Гц. Подняли частоту i2c до 1 МГц. Укладываемся как раз в 10 мс. Но еще расчет ПИД регуляторов и опрос датчика расстояния (тоже по i2c).

Будем решать задачи по мере их возникновения.

Пока я понял, что можно использовать пины 34-36, 39 для подключения энкодеров. Завтра будет проверять.

Да. Похоже на то. Мы купили пару таких моторчиков. Они еще в пути. На них указано 530 об/мин. Судя по табличке - редуктор едет 1:19.

Какой сейчас стоит - не известно. Мальчишкам в клубе дали.

Двигатель-редуктор MOEBIUS 37-520 12В

Это имеющийся моторчик

на каком ядре собираете проект?

esp32/FreeRTOS. В среде arduino ide.

Не выдержал и подключил к этим пинам энкодеры. Резисторы подтяжки внешние не подключал.

При инициализации библиотеки - есть варнинги, что данные пины не умеют input pullup.

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

Работает.

Ну вот видишь - решение простое было ))

FREERTOS там по умолчанию, Core какой ветки 2.xx или 3.xx

Как это проверить и в чем отличия?

Странный вопрос, 3.хх - более поздняя версия с кучей доработок, исправлений и новых багов

Отключить - нельзя, использовать - можно. (Эти пины проверяет ROM. Я , кстати, только недавно писал про комбинации, которые могут намертво завесить устроййство. Судя по всему ты как раз на такое и налетел.)

Вместо этого нужно следовать простому алгоритму.

Обычно, если что-то цепляют на т.н. boot-strapping пины, то алгоритм такой:

  1. Подключенное устройство пока обесточено
  2. Загружаем CPU, стартует скетч.
  3. Скетч разрешает Power UP подключенного устройства
  4. Скетч работает с устройством.

Иначе, если power up устройства случается одновременно с powerup процессора, то есть вероятность, что подключенное устройство дернет эти пины вверх или вних и может произойти что угодно. Можно , например, сжечь процессор, при удачном выборе условий.

Важно состояние пинов лишь на момент загрузки. После загрузки - пофигу. Ну или просто используй другой пин.

PS: Шпаргалка:

bootstrapping пины на ESP32 это пины 1,2,5,12 и 15

Отсутствуют: 24 28 29 30 31
Зарезервированы (лучше не трогать) (SPI FLASH, SPI RAM): 6 7 8 9 10 11
В принципе доступны: 0 1 2 3 4 5 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 32 33 34 35 36 37 38 39 (29 pins)
Пины 56 и 48 - виртуальные. Используются как constant 0 и constant 1 source в GPIO Matrix.
Пины 34..39 работают только на вход

хороший выбор. и примеров куча там понаписана в ESP-IDF.