Перейти к содержанию

Почему сенсорная кнопка ESP32 срабатывает сама?

Обновлено Редакция GAW

Сенсор касания ESP32 не чувствует прикосновение напрямую. Он заряжает и разряжает площадку и считает, сколько циклов поместилось в заданное время. Палец рядом увеличивает ёмкость, и число циклов меняется. Касание — это просто «число вышло за порог», поэтому всё, что шевелит число, может дать ложное срабатывание.

Причины и что делать

ПричинаПризнакЧто делать (ESP32 — в своей программе, S2 и S3 — в драйвере)
Порог близко к базовой линиисрабатывает редко, без видимой причиныпорог по измерениям на готовом изделии
Нет гистерезисакнопка «дребезжит» при касаниидва порога в программе; у S2, S3 — active_hysteresis
Нет подтвержденияодиночные выбросы дают нажатиенесколько измерений подряд; у S2, S3 — debounce_cnt
Медленный дрейф: температура, влажностьпорог «уезжает» со временемсвоя базовая линия в data_filter_fn; у S2, S3 — встроенная
Помехи по питаниюложные касания от зарядки или двигателяфильтр, развязка питания, короткий провод
Вода на панелисрабатывает от капельу ESP32-S2 и S3 — защита от воды

У ESP32 (сенсор версии 1) драйвер ESP-IDF задаёт канал абсолютным порогом abs_active_thresh, а фильтр у него программный, по таймеру, — в функцию data_filter_fn можно вписать своё сглаживание и слежение за базовой линией. Гистерезис active_hysteresis и счётчик debounce_cnt, которые ESP-IDF предлагает против дрожания и шума, относятся к S2 и S3 с аппаратным фильтром; на ESP32 их делают в программе (наш вывод из описания драйвера). По смыслу это то же подавление дребезга, что и у механической кнопки.

Помехи

Espressif предупреждает: сенсор ESP32 не прошёл испытание на кондуктивные помехи (CS), и область его применения ограничена. Наш вывод: устройство с сенсорными кнопками стоит проверять с тем блоком питания, с которым оно будет работать, а провод от вывода до площадки делать как можно короче — его ёмкость и наводки складываются с ёмкостью пальца.

Выводы

Каналы T1, T2, T3 и T5 у ESP32 — это GPIO0, GPIO2, GPIO15 и GPIO12, которые участвуют в выборе режима загрузки. Площадка с длинным проводом на них может мешать старту, см. выводы обвязки ESP32. Полная распиновка сенсорных каналов — на странице ESP32.

Похожие вопросы

Какой порог задать для touchRead?

Измерьте значение без касания и с касанием на готовом изделии и поставьте порог между ними, ближе к середине. У ESP32 при касании значение уменьшается, у S2 и S3 растёт, поэтому знак порога разный. У ESP32 драйвер ESP-IDF принимает абсолютный порог abs_active_thresh, у S2 и S3 — смещение от базовой линии; подстраивать порог под дрейф на ESP32 приходится программой (наш совет).

Почему кнопка срабатывает, когда устройство на зарядке?

Сенсор меряет крошечное изменение ёмкости, и помехи, пришедшие по питанию или общему проводу от сетевого адаптера, сдвигают результат. Espressif прямо пишет, что сенсор ESP32 не прошёл испытание на кондуктивные помехи, и область его применения ограничена. Помогают программный фильтр, гистерезис в своей программе, короткий провод к площадке и проверка с тем адаптером, с которым устройство будет работать (наш вывод).

Можно ли сделать сенсорную площадку под стеклом или пластиком?

Можно: сенсор реагирует на изменение ёмкости площадки, а не на контакт с металлом. Но чем толще покрытие, тем меньше разница между касанием и его отсутствием и тем ближе порог к шуму — значит, тем важнее гистерезис и фильтрация. Подбирают это на своём корпусе (наш вывод).

Источники

  1. Espressif. ESP-IDF Programming Guide v6.1: Capacitive Touch Sensor (ESP32) — сырые данные — число циклов заряда и разряда за фиксированное время, интервал meas_interval_us; у ESP32 (сенсор V1) канал настраивается полями abs_active_thresh (абсолютный порог), charge_speed, init_charge_volt и group, а фильтр — программный, по esp_timer, с полями interval_ms, data_filter_fn (своя функция фильтра) и user_filter_ctx; срабатывание по базовой линии плюс active_threshold, active_hysteresis и debounce_cnt описаны для общего случая и относятся к версиям кроме V1 (S2, S3: аппаратный фильтр и защита от воды)
  2. Espressif. ESP32 Technical Reference Manual v5.8, гл. 31 — сенсор касания ESP32 пока не прошёл испытание на кондуктивные помехи (CS), поэтому область применения ограничена; табл. 31.2-1 — выводы T0–T9

Нашли ошибку?