Почему сенсорная кнопка 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 не прошёл испытание на кондуктивные помехи, и область его применения ограничена. Помогают программный фильтр, гистерезис в своей программе, короткий провод к площадке и проверка с тем адаптером, с которым устройство будет работать (наш вывод).
Можно ли сделать сенсорную площадку под стеклом или пластиком?
Можно: сенсор реагирует на изменение ёмкости площадки, а не на контакт с металлом. Но чем толще покрытие, тем меньше разница между касанием и его отсутствием и тем ближе порог к шуму — значит, тем важнее гистерезис и фильтрация. Подбирают это на своём корпусе (наш вывод).
Источники
- 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: аппаратный фильтр и защита от воды)
- Espressif. ESP32 Technical Reference Manual v5.8, гл. 31 — сенсор касания ESP32 пока не прошёл испытание на кондуктивные помехи (CS), поэтому область применения ограничена; табл. 31.2-1 — выводы T0–T9
Нашли ошибку?
Смотрите также
- Сенсор касания ESP32 (touch)Встроенные ёмкостные входы ESP32 для сенсорных кнопок
- ESP32: выводы и GPIO34 GPIO: функции, свободные выводы, только входы, флеш-память, strapping, JTAG, токи
- Strapping-выводы ESP32Какие GPIO читаются при сбросе: загрузка, напряжение флеш-памяти, JTAG — для ESP32, S2, S3, C2, C3, C5, C6, H2, P4
- Дребезг контактовСерия переключений вместо одного при нажатии кнопки