• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Помогите понять принцип ESPшки. Может я вообще не туда полез?

kab

New member
Да, и кстати: конденсатор - это всё-таки не фильтр. Фильтр - это RC-цепочка.
For all!

Не хочу никого обидеть, но, похоже, книги по теории радиотехники я читал здесь один. Чтобы не разводить флуд в чужой теме, я могу несколько подробнее донести "популярную" радиотехнику до желающих в отдельной теме. Чтобы таких технически безграмотных заявлений на сайте не было:
конденсатор - это всё-таки не фильтр. Фильтр - это RC-цепочка
Но буду заниматься этим не для того, чтобы переубедить @rst, а чтобы донести до тех, кому эти вопросы действительно интересны. Поэтому жду пожеланий от других, стоит этим заниматься или нет?

А @rst я посоветую перечитать С. Лема:
- Это неправда, что драконов не существует. Они существуют, только с вероятностями нулевыми, отрицательными и чисто мнимыми. (с) - цитирую по памяти - возможны неточности...
 

=AK=

New member
Но вот то чувак про дребезг меня порадовал:)))) Кондеи у него не при чём:) Мне прям даже ну ооооочень интересно, какой у него то способ?:)
Он совершенно прав. Вешать конденсатор параллелно контактам кнопки - это безграмотность и сущее безобразие, хотя многие так делают.

Есть законы коммутации, которые изучают в курсе ТОЭ. Установка кондера параллельно кнопке идет вразрез со вторым законом коммутации (законом сохранения заряда). Вследствие установки кондера начинают обгорать контакты кнопки, а в момент замыкания цепь генерирует помехи, поскольку в цепи кнопки кратковременно циркулируют большие токи. Величина этих токов плохо определена, она зависит от внутреннего сопротивления кондера, сопротивления контакта и сопротивления проводников. Контур, по которому циркулируют эти токи, образует резонатор, излучающий достаточно мощную электромагнитную волну на определенной частоте, определяемой в основном геометрией этого контура.

Но програмистам ТОЭ не преподают, поэтому они по невежеству лепят на контакты кондеры. Особенно смешно, когда они это делают "для подавления дребезга", поскольку для этого навешивают кондеры большoй емкости.
 

=AK=

New member
Чтобы таких технически безграмотных заявлений на сайте не было:
Чтобы RC-фильтр помог от дребезга, надо согласовать его с параметрами этого дребезга. Быстрее всего дребезг в тактильных кнопках, там импульсы порядка миллисекунд. Медленнее всего дребезжат контакторы, сотни миллисекунд. Чтобы подавить дребезг "среднестатистической кнопки" надо давить импульсы длительностью примерно 20-50 мс, то есть, для RC-фильтра первого порядка надо иметь постоянную времени порядка 100 мс и более.

Если взять кондер емкостью 0.1 мкФ, то с сопротивлением 100 кОм получим постоянную времени всего 10 мс, что недостаточно. Так что с кондером 0.1 мкФ резистор должен быть порядка 1 МОм и более, или же надо кондер ставить больше.

Короче, бред получается: чтобы аппаратно давить дребезг емкость и сопротивление должны иметь довольно экзотические величины, а с теми величинами, которые все ставят "от фонаря", помогают все эти танцы с бубном именно так, как и положено помагать танцам с бубном, то есть, как мертвому припарки. :D
 

pvvx

Активный участник сообщества
Вам в начале сказали что есть три решения два на WIFI -это протоколы tCP и UDP и один на ESP-NOW.
... агрессивно начали кричать что это х... и зачем какие-то сервера.
Ещё не начали, а надо-бы.
Есть такие простые тесты, типа iperf который наглядно показывает сколько теряется UDP пакетов (Measure packet loss) в городcком шуме WiFi...
Величина потерь обычно варьируется в пределах потерь каждого дцатого пакета в зависимости от скорости их передачи и шумов на канале. WiFi - это вам не экранированный провод. :p
Ваши советы исходят не из практики. Когда попробуете и сравните, хотя-бы TCP, то получите совершенно другие цифры и скорости передачи, т.к. данный протокол отработан и не имеет отсебятенных ожиданий подтверждений, оперируя которыми у вас выйдет гораздо хуже и сама передача дольше, пока вы на UDP не имитируете TCP :)
Для передач real-time есть RTP на основе UDP. Но он гораздо сложнее TCP и ещё не реализован на ESP.
Пользователь разобьет устройство об стенку, если оно будет передавать нажатия кнопок по UDP через WiFi, а так-же если задержка обработки до подтверждения исполнительным механизмом или какой другой явно видимой реакцией будет более 200 мс.
 
Последнее редактирование:

kab

New member
Он совершенно прав. Вешать конденсатор параллелно контактам кнопки - это безграмотность и сущее безобразие
С этим я не спорю - хотя повторяю, если устройство хоббийное, то разработчик-любитель берет риск на себя. Давайте считать, что это решение осознанное. :)Вы же его проинформировали:)...

А в чём безграмотность-то?
Только два примера и вопрос:

1. Посмотрите классические схемы лампового двухкаскадного усилителя или транзисторного (на транзисторах одинаковой проводимости). Подумайте, зачем там и там конденсаторы между каскадами? Объясняю, чтобы отрезать постоянную составляющую сигнала. Говоря более "книжным языком", в данном случае конденсатор - это фильтр, отрезающий нулевую гармонику.Обратите внимание - конденсатор последовательно с входом.

2. Более близкий этому сайту пример - задумайтесь, зачем, в некоторых случаях, при проектировании устройства, точнее, при проектировании цепей питания устройств рекомендуют параллельно контактам питания включать даже два конденсатора - сколько-то микрофарад и сколько-то пикофарад. Вы мне можете сказать, что микрофарадный сглаживает достаточно длительные просадки напряжения, а пикофарадный нейтрализует высокочастотные наводки. И я с Вами соглашусь - и добавлю, что это и есть описание работы фильтра (двух фильтров). Не забываете ли Вы ставить и резисторы, чтобы эти конденсаторы превратились в "настоящие" фильтры, настоящие RC-цепочки? Этот вопрос был риторическим, с элементами сарказма.

3. Перейдём к более общему случаю - просто конденсатор в какой-то цепи. Фильтр это или нет, по Вашему определению? А теперь посмотрите внимательнее, если конденсатор стоит не просто так, а работает - то он через какую-то цепь заряжается, а через какую-то - разряжается. И этим цепям заряда - разряда соответствует какое-то внутреннее сопротивление (даже, если оно близко к нулю - ничто не мешает просчитывать фильтр по формуле RC-цепочки). Т. е. конденсатор всегда (от слова "всегда") находится в окружении сопротивлений и всегда является составной частью RC-цепочки, т. е. фильтром - по Вашему определению.
Всё то же касается и индуктивности.
А вот с резисторами вопрос становится философским (вспомните Лема с его драконами). Одиночный резистор (и просто провод,и выключатель, как крайние случаи резистора) - это тоже фильтры, но неинтересные, так как их частотная характеристика представляет собой константу, от частоты не зависящую. Легко догадаетесь, что для выключателя (кнопки) в зависимости от его состояния эта константа равна либо 0, либо 1.
 
Последнее редактирование:

kab

New member
Чтобы подавить дребезг "среднестатистической кнопки" надо давить импульсы длительностью примерно 20-50 мс, то есть, для RC-фильтра первого порядка надо иметь постоянную времени порядка 100 мс и более.
У меня данных по дребезгу "среднестатистической кнопки" нет, но сказанное Вами слабо вяжется с утверждением @rst, что для устранения дребезга достаточно опрашивать кнопку с частотой 50 Гц. Это означает, что за 20 мс гарантированно заканчивается вся пачка дребезга. А, соответственно, длительность единичного импульса дребезга на порядок-два - меньше 20 мс
 

rst

Member
И этим цепям заряда - разряда соответствует какое-то внутреннее сопротивление (даже, если оно близко к нулю - ничто не мешает просчитывать фильтр по формуле RC-цепочки). Т. е. конденсатор всегда (от слова "всегда") находится в окружении сопротивлений и всегда является составной частью RC-цепочки, т. е. фильтром - по Вашему определению.
Вот Вы сами себе и ответили. ;)
Исходная моя фраза как раз и означала, что рассмотрение конденсатора (в отрыве от сопротивления, каким бы оно ни было - отдельным резистором или внутренним сопротивлением самого кондёра или окружающих цепей) как фильтра - неверно. Если не знать про сопротивление, то как можно посчитать постоянную времени? А если она неизвестна - о каком фильтре можно вообще говорить?
 

kab

New member
Вы передёргиваете. Где я такое писал??? Перечитайте ещё раз моё сообщение.
Ваша цитата
В нормально реализованной процедуре программного подавления дребезга это можно сделать либо как Вы описали, либо просто опрашивая кнопки с некоей фиксированной частотой с периодом заведомо больше максимального времени дребезжания контактов. Обычно хватает 50Гц.
50Гц - это разве не 1 опрос в 20 мс?
 

kab

New member
как можно посчитать постоянную времени? А если она неизвестна - о каком фильтре можно вообще говорить?
:)Можно(иногда нужно) говорить! - Как о фильтре с неизвестной постоянной времени!
Если Вы что-то не знаете (не умеете рассчитать точно) - то это не повод утверждать, что этого объекта не существует и нечего о нём сказать нельзя/"не стоит". Кроме методов точного расчета, в жизни существуют методы качественной оценки, методы практического подбора и т. д. и т. п.
А потом, еще существуют такие понятия как практический опыт, интуиция и просто удача :)
 

=AK=

New member
1. конденсаторы между каскадами... в данном случае конденсатор - это фильтр, отрезающий нулевую гармонику.Обратите внимание - конденсатор последовательно с входом.
Конденсатор вместе с входным сопротивлением следующего каскада образуют ФВЧ фильтр первого порядка. Это тоже RC-фильтр. Вам уже говорили, что (на низких частотах) представлять отдельный кондндесатор в качестве "фильтра" - это нонсенс.

2. Более близкий этому сайту пример - задумайтесь, зачем, в некоторых случаях, при проектировании устройства, точнее, при проектировании цепей питания устройств рекомендуют параллельно контактам питания включать даже два конденсатора - сколько-то микрофарад и сколько-то пикофарад. Вы мне можете сказать, что микрофарадный сглаживает достаточно длительные просадки напряжения, а пикофарадный нейтрализует высокочастотные наводки. И я с Вами соглашусь - и добавлю, что это и есть описание работы фильтра
Вы, как говорится, "слышали звон". Конденсатор сам по себе имеет паразитные параметры - в первую очередь внутреннее сопротивление и индуктивность выводов. Поэтому отдельный конденсатор сам по себе тоже является последовательным RLC - фильтром, имеющим резонанс на некоторой частоте. Конденсатор большой емкости резонирует на частоте порядка единиц-десятков мегагерц, конденсатор малой емкости - на частоте порядка десятков-сотен мегагерц. Два конденсатора в питании включают параллельно для того, чтобы нивелировать вредное влияние их паразитных параметров и получить сравнительно низкий импеданс цепи питания в широком спектре частот. Если бы не паразитные параметры, все бы ставили один большой кондер и не парились.

Но к проблеме подавления дребезга контактов, которая существует в области частот единиц-сотен герц, все эти субгигагерцовые проблемы и паразитные характеристики относятся продольно-фиолетово. :D
 
Последнее редактирование:

=AK=

New member
У меня данных по дребезгу "среднестатистической кнопки" нет, но сказанное Вами слабо вяжется с утверждением @rst, что для устранения дребезга достаточно опрашивать кнопку с частотой 50 Гц. Это означает, что за 20 мс гарантированно заканчивается вся пачка дребезга. А, соответственно, длительность единичного импульса дребезга на порядок-два - меньше 20 мс
Я лично опрашиваю кнопки с периодом 10 мс и загоняю результат в 8-битный сдвиговый регистр (программный, конечно). Когда в нем все "0" - считаю, что кнопка в одном состоянии (скажем, нажата), когда все "1" - в другом (отжата), все другие значения - в неопределенном (дребезг). Это значит, что дребезг с любыми импульсами длительностью до 80 мс будет отфильтрован. Сколько будет длиться дребезг - не имеет значения, хоть час.

Соответственно, это прекрасно вяжется с утверждением @rst, который опрашивает кнопки в два раза реже, если он усредняет, не 8 значений, а 4. Результат будет практически тот же.
 

kab

New member
Конденсатор вместе с входным сопротивлением следующего каскада образуют ФВЧ фильтр первого порядка. Это тоже RC-фильтр. Вам уже говорили, что представлять отдельный кондндесатор в качестве "фильтра" - это нонсенс.


Вы, как говорится, "слышали звон". Конденсатор сам по себе имеет паразитные параметры - в первую очередь внутреннее сопротивление и индуктивность выводов. Поэтому отдельный конденсатор сам по себе тоже является последовательным RLC - фильтром, имеющим резонанс на некоторой частоте. Конденсатор большой емкости резонирует на частоте порядка единиц-десятков мегагерц, конденсатор малой емкости - на частоте порядка десятков-сотен мегагерц. Два конденсатора в питании включают параллельно для того, чтобы нивелировать вредное влияние их паразитных параметров и получить сравнительно низкий импеданс цепи питания в широком спектре частот. Если бы не паразитные параметры, все бы ставили один большой кондер и не парились.

Но к проблеме подавления дребезга контактов, которая существует в области частот единиц-сотен герц, все эти субгигагерцовые проблемы и паразитные характеристики относятся продольно-фиолетово. :D
Я сознательно упростил некоторые нюансы (на которые указали Вы), но как раз эту мысль и попытался донести - в реальной схеме не бывает условий, чтобы конденсатор не являлся частью какого-либо фильтра.

"представлять отдельный кондндесатор в качестве "фильтра" - это нонсенс."
- :)отдельный -это как? отпаянный от схемы и лежащий в коробке? Теоретически его передаточная частотная характеристика считается тоже. Но согласен, что в этом случае расчеты становятся чисто академическими.
 

kab

New member
Я лично опрашиваю кнопки с периодом 10 мс и загоняю результат в 8-битный сдвиговый регистр (программный, конечно). Когда в нем все "0" - считаю, что кнопка в одном состоянии (скажем, нажата), когда все "1" - в другом (отжата), все другие значения - в неопределенном (дребезг). Это значит, что дребезг с любыми импульсами длительностью до 80 мс будет отфильтрован. Сколько будет длиться дребезг - не имеет значения, хоть час.

Соответственно, это прекрасно вяжется с утверждением @rst, который опрашивает кнопки в два раза реже, если он усредняет, не 8 значений, а 4. Результат будет практически тот же.
Я понял Ваш алгоритм - ничего против не имею. Хочу только уточнить момент:
- Вы осознаёте, что этим алгоритмом Вы ловите не момент замыкания/размыкания контактов, а момент замыкания/размыкания плюс время продолжительности дребезга плюс 80 мс на анализ?
Согласен, что эти задержки не всегда критичны...
На Вашу кнопку надо давить обстоятельно, не спеша...:)
 

pvvx

Активный участник сообщества
50Гц - это разве не 1 опрос в 20 мс?
В стандартном рекламном случае для подписки на платный сервис MQTT, 20 мс не выйдет. Это только хороший пинг до удаленного сервера MQTT или местного, если используется Arduino IDE, да и обычно сервера MQTT (и многие другие, бесплатные) хранят записи с ID указывающем счетчик секунд, когда им пришло сообщение. В итоге если за секунду пришло несколько записей/точек для графика , то будет отображена только последняя или другие приколы... Но суть не в этом, а как пример включения лампочки через контакт у ESP8266 и внешний MQTT вы будете ожидать значительное время и давить какой-то дребезг в таком детском устройстве не имеет смысла. Вам придется заняться эмуляцией-визуализацией отработки контакта для пользователя, а потом вывода сообщения "ждите исполнения" :)
По этому кондер там и/или резистор - совершенно без разницы. Но не вешайте большие электролиты - при отключении питания они будут разряжаться на внутренний диод вывода, который не рассчитан на питание всей ESP8266 :)
 

=AK=

New member
- Вы осознаёте, что этим алгоритмом Вы ловите не момент замыкания/размыкания контактов, а момент замыкания/размыкания плюс время продолжительности дребезга плюс 80 мс на анализ?
Ессно. Вы вообще любитель задавать риторические вопросы. Не в обиду будет сказано, раньше это называлось "резонерством".:D
 

pvvx

Активный участник сообщества
Берите случай с энкодером. В STM32 всё есть аппаратное. В RTL серии "B" есть счетчик длительности активного сигнала в 16 бит (режим таймера) с задаваемой частотой счета и с авто-сохранением по окончанию импульса замеров хоть по DMA или вызова прерывания и т.д...
В ESP8266, обычно, после реакции на кнопку надо передать это изменение и во время цикла передачи (от сотен мс) ничего другого, кроме прерываний по фронтам с их отслеживаемой программно сменой ничего не сделать - никаких программных сдвиговых регистров. Т.к. по срабатыванию кнопки (первого фронта) время до действа уже пошло и давить кого-то некогда.
Так-же поглядите, как делают прием с счетчика воды на ESP8266 - прикручивают внешнюю микросхему :) Без неё у ESP8266 проблем с автономностью по питанию...
 
Последнее редактирование:

rst

Member
50Гц - это разве не 1 опрос в 20 мс?
А предыдущее предложение читать не пробовали? И разницу между "обычно", "как правило" и "гарантированно" тоже не понимаете?
Обычно 50Гц - означает, что я обычно использовал данную частоту опроса и в своей практике не встречал кнопок с бОльшим временем дребезга. Но я не знаю за все возможные существующие в природе кнопки.
 
Последнее редактирование:

pvvx

Активный участник сообщества
А предыдущее предложение читать не пробовали? И разницу между "обычно", "как правило" и "гарантированно" тоже не понимаете?
Гарантированно делает стандартный UART - отслеживает до 3-х точек в импульсе длительностью в один бит (baud), а если длительность активного уровня большая (больше символа со старт/стопами/parity) - выдает специальное прерывание об этом событии.
Ну а т.к. у таких аппаратных устройств существует какое-то стробирование, по которым они сдвигают входной уровень, то кондер нужен для подавления более коротких импульсов - будет немного меньше ошибок. Если там стоит проверка на фронты, то тоже может немного помочь... как простейший фильтр от статического эл-ва, наведенного на кнопку, но есть спец. элементы для этого :)
 
Последнее редактирование:
Сверху Снизу