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

Нужна помощь Помехозащищенность выносной кнопки

hc2hunter

Member
Кода увы нет, использую как всегда прошивку готовую, от WiFi-IOT. :(
Но тут я пробовал уже перебрать все возможные варианты сборок на разных SDK, и даже пробовал на базе RTOS. Глюк всегда одинаков. И больше похож на схемотехнический, нежели программный.

Да, было с самого начала.
Блок питания электроники использую на +5. Менял совершенно на другой, и другого типа, не помогло. На выходе него перед регулятором 3.3 поставил электролит на 1500 мкФ 16в, не отразилось на работе вообще никак.

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

Кстати, сами герконы подключены обычной UTP. Это не ошибка? Взял обычную витушку 8-ку и выделил в ней 3 пары под геркончики, ну и протянул до бака.
Витуха примерно метр получилась.
 

nikolz

Well-known member
Кода увы нет, использую как всегда прошивку готовую, от WiFi-IOT. :(
Но тут я пробовал уже перебрать все возможные варианты сборок на разных SDK, и даже пробовал на базе RTOS. Глюк всегда одинаков. И больше похож на схемотехнический, нежели программный.

Да, было с самого начала.
Блок питания электроники использую на +5. Менял совершенно на другой, и другого типа, не помогло. На выходе него перед регулятором 3.3 поставил электролит на 1500 мкФ 16в, не отразилось на работе вообще никак.

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

Кстати, сами герконы подключены обычной UTP. Это не ошибка? Взял обычную витушку 8-ку и выделил в ней 3 пары под геркончики, ну и протянул до бака.
Витуха примерно метр получилась.
понимаю в чужой монастырь со своим уставом не ходят,
но я бы измерил количество воды в бочке емкостным датчиком и не использовал ацп.
---------------
АЦП используется в работе WiFi и возможно вы некорректно его используете.
использую АЦП лишь для измерения напряжения питания, в самом начале программы.
 

hc2hunter

Member
понимаю в чужой монастырь со своим уставом не ходят,
но я бы измерил количество воды в бочке емкостным датчиком и не использовал ацп.
---------------
АЦП используется в работе WiFi и возможно вы некорректно его используете.
использую АЦП лишь для измерения напряжения питания, в самом начале программы.
Да нет, отчего же не ходят... Я вполне лоялен к любой критике и советам, не являясь глубоким специалистом в микроэлектронике.
Расскажите, пожалуйста, про емкостной датчик и что использовать тогда вместо АЦП? Несколько Gpio IN ?

А как используется АЦП в работе WiFi и зачем так сделано?
И как можно использовать АЦП некорректно? Я подобрал резисторы так, чтобы на нем ни при каких обстоятельствах не появлялось напряжение выше 0,92в, да и номиналы взял, чтобы токи были поменьше.
В солнечной станции (другой проект) по аналогичному принципу у меня прекрасно работает АЦП и меряет напряжение на аккумуляторе 18650.

Тут я допускаю, что какая-то статика попадает на АЦП. Но какая? И можно ли как-то предохраниться, поставив, скажем, какие-то доп. ёмкости на вход АЦП?


Вообще, пока я решил проблему очень грубо и тупо...
Взял и вставил проверку на значение АЦП=1024. Как только такая фигня случается - делаю reboot()
 

nikolz

Well-known member
Да нет, отчего же не ходят... Я вполне лоялен к любой критике и советам, не являясь глубоким специалистом в микроэлектронике.
Расскажите, пожалуйста, про емкостной датчик и что использовать тогда вместо АЦП? Несколько Gpio IN ?

А как используется АЦП в работе WiFi и зачем так сделано?
И как можно использовать АЦП некорректно? Я подобрал резисторы так, чтобы на нем ни при каких обстоятельствах не появлялось напряжение выше 0,92в, да и номиналы взял, чтобы токи были поменьше.
В солнечной станции (другой проект) по аналогичному принципу у меня прекрасно работает АЦП и меряет напряжение на аккумуляторе 18650.

Тут я допускаю, что какая-то статика попадает на АЦП. Но какая? И можно ли как-то предохраниться, поставив, скажем, какие-то доп. ёмкости на вход АЦП?


Вообще, пока я решил проблему очень грубо и тупо...
Взял и вставил проверку на значение АЦП=1024. Как только такая фигня случается - делаю reboot()
некорректно используется АЦП не аппаратно а программно.
Возможно у вас все нормально, программы же нет.
Кроме того не понятно зачем у вас АЦП используется если измеряете три точки с помощью герконов
т е схема дискретная почему бы не читать код герконов
 

hc2hunter

Member
Кроме того не понятно зачем у вас АЦП используется если измеряете три точки с помощью герконов
т е схема дискретная почему бы не читать код герконов
Да, идея верная. Сходу наверное я просто не додумался до нее и теперь просто GPIO экономлю...
Их ведь не так много, а смотрите что получается:
gpio0 - датчик температуры воды
gpio2 - лампочка-индикатор состояния/работы девайса
gpio1,3 - под SPI отдан, на них висит BME280 и дисплей
gpio4,5 - кнопки принудительного включения реле насоса и тэна
gpio 12,13 - сами реле
gpio 14,15 - логические gpio, используются во встроенном в прошивке интерпретаторе как статусные пины. Кроме того gpio15 он вообще как input не очень... Он же определяет тип загрузки девайса и обычно висит на земле через резистор.

вот и остается только ADC...
я могу, конечно, высвободить от кнопок gpio4,5 , а сами кнопки переделать как раз через ADC (аналоговые кнопки).
и опять же где гарантия не нарваться на этот странный глюк?
 

nikolz

Well-known member
Да, идея верная. Сходу наверное я просто не додумался до нее и теперь просто GPIO экономлю...
Их ведь не так много, а смотрите что получается:
gpio0 - датчик температуры воды
gpio2 - лампочка-индикатор состояния/работы девайса
gpio1,3 - под SPI отдан, на них висит BME280 и дисплей
gpio4,5 - кнопки принудительного включения реле насоса и тэна
gpio 12,13 - сами реле
gpio 14,15 - логические gpio, используются во встроенном в прошивке интерпретаторе как статусные пины. Кроме того gpio15 он вообще как input не очень... Он же определяет тип загрузки девайса и обычно висит на земле через резистор.

вот и остается только ADC...
я могу, конечно, высвободить от кнопок gpio4,5 , а сами кнопки переделать как раз через ADC (аналоговые кнопки).
и опять же где гарантия не нарваться на этот странный глюк?
Вы посмотрите на форуме, я рассказывал как кучу кнопок подключить к одному пину.
Можно и ваши герконы включить по такому же принципу.
Прикиньте сколько пинов у вас освободится.
Но придется делать прогу чтения кнопок и чтения герконов
 

nikolz

Well-known member
относительно глюка.
расскажите подробнее что и как и когда
возможно будет понятно в чем проблема
 

hc2hunter

Member
относительно глюка.
расскажите подробнее что и как и когда
возможно будет понятно в чем проблема
Да вот вообще никаких нюансов...
Снимаю девайс, несу на стол. Включаю. Соответственно, к нему ничего не подключено вообще.
Сбоку корпуса торчит колодочка 6 штырьков (на 3 датчика). Схемка выше. 3 пина - земля, 3 пина - датчики. Вон в положении MAX как раз черный джампер на фото.
насос блок управления.jpg
Просто замыкаю их отверточкой или пинцетом. На экране соответственно он у меня рисует сколько "воды в баке". Обрабатывает данные каждую секунду.

И в один прекрасный момент опс... и он постоянно думает что у него ADC=1024 (максимум воды). В этот момент он перестает пинговаться. Хотя автономно работает по-прежнему прекрасно. Можно, например, включать кнопками реле. Дисплей тоже видно что отрисовывается. Меняется температура с датчиков, аптайм... Но на ADC (датчики уровня воды) уже не реагирует никак...

-----

Буду признателен, если ткнете носом с ссылочку, где вы подключали к одному GPIO несколько кнопок.
Написать подпрограмму я в принципе тоже могу, т.к. в прошивке WiFi-IOT есть интересная фича - интерпретатор. Некий встроенный язык команд, чтобы можно было писать свои скрипты и запускать их с определенным интервалом. Именно через интерпретатор я обрабатываю датчики, отрисовываю на экран бачок с водой, и ребучу модуль если вдруг случается ADC=1024.
 

nikolz

Well-known member
Да вот вообще никаких нюансов...
Снимаю девайс, несу на стол. Включаю. Соответственно, к нему ничего не подключено вообще.
Сбоку корпуса торчит колодочка 6 штырьков (на 3 датчика). Схемка выше. 3 пина - земля, 3 пина - датчики. Вон в положении MAX как раз черный джампер на фото.
Посмотреть вложение 7447
Просто замыкаю их отверточкой или пинцетом. На экране соответственно он у меня рисует сколько "воды в баке". Обрабатывает данные каждую секунду.

И в один прекрасный момент опс... и он постоянно думает что у него ADC=1024 (максимум воды). В этот момент он перестает пинговаться. Хотя автономно работает по-прежнему прекрасно. Можно, например, включать кнопками реле. Дисплей тоже видно что отрисовывается. Меняется температура с датчиков, аптайм... Но на ADC (датчики) уже не реагирует никак...


Буду признателен, если ткнете носом с ссылочку, где вы подключали к одному GPIO несколько кнопок.
Написать подпрограмму я в принципе тоже могу, т.к. в прошивке WiFi-IOT есть интересная фича - интерпретатор. Некий встроенный язык команд, чтобы можно было писать свои скрипты и запускать их с определенным интервалом. Именно через интерпретатор я обрабатываю датчики, отрисовываю на экран бачок с водой, и ребучу модуль если вдруг случается ADC=1024.
про это будем думать.
------------------
пока расскажу про емкостной датчик. Упрощенно
---------------------
я делал датчик для измерения заполнения бутылки
сам датчик элементарный
два провода(пластины) изолированных.
между ними промежуток
это конденсатор
между проводами у нас есть вещество с диэлектрическими свойствами
для воздуха это 1 для воды это 81
погружая в воду мы изменяем объем пространства между проводами заполненный воздухом
в результате емкость меняется
измеряем ее и получаем количество воды в бутылке, пластиковой бочке
если бочка железная то надо один провод.
Примерно так
 

hc2hunter

Member
в результате емкость меняется
измеряем ее и получаем количество воды в бутылке, пластиковой бочке
если бочка железная то надо один провод.
Эм... да. Все понятно. Но куда сгружать данные о емкости? Опять же ADC нужен?
Или из нескольких GPIOIN городить дискретную шаговую логику типа 0,1,2,3 ?
 

nikolz

Well-known member
Эм... да. Все понятно. Но куда сгружать данные о емкости? Опять же ADC нужен?
Или из нескольких GPIOIN городить дискретную шаговую логику типа 0,1,2,3 ?
емкость измеряется через пин
путем измерения либо периода либо частоты (зависит от реализации метода)
 

nikolz

Well-known member
относительно вашего глюка
у вас ESP всегда активно?
можете сделать прошивку с отключенным wifi заблокировать передачу и подключение.
и повторить свой эксперимент с включением герконов
 

hc2hunter

Member
Да, ESP работает пожизненно. Спящие режимы не используются.
В принципе могу в самой прошивке сделать "WiFi disable". Тогда она останется наедине с собой )))

Но и вернуть к жизни видимо придется уже только перепрошивкой... Или изобрести какую-нибудь фигню, чтобы WiFi включался как-то через нажатие какой-нибудь кнопки )
 

hc2hunter

Member
Да, ESP работает пожизненно. Спящие режимы не используются.
В принципе могу в самой прошивке сделать "WiFi disable". Тогда esp останется наедине с собой )))

wifi.PNG

Но и вернуть к жизни видимо придется уже только перепрошивкой... Или изобрести какую-нибудь фигню, чтобы WiFi включался как-то через нажатие какой-нибудь кнопки )

В принципе, уже написал подробное письмо изобретателю прошивки МаксуMS. Может что-то ответит путное...
 

hc2hunter

Member
В общем, ответил мне создатель прошивки WiFi-IOT.
Пишет, что работа WiFi зависит от ADC программным образом (заложено в SDK), а ADC в свою очередь зависит от калибровки. Поэтому дополнительно при прошивке модуля рекомендуется зашивать калибровочную таблицу, цитирую из документации:
Прошивка файла ESP INIT DATA
Рекомендуется прошить в модуль файл esp_init_data_default.bin с калибровками по умолчанию, эти настройки влияют на работу wifi и adc. В большинстве случаев модули работают корректно без этого файла. Последние SDK могут вообще не запускаться без данного файла.

Адрес прошивки файла зависит от установленного размера flash памяти:
0x7c000 для 512 kB.
0xfc000 для 1 MB.
0x3fc000 для 4 MB.
0xffc000 для 16 MB.

Так же данные настройки можно загрузить подав GET команду http://[IP]/configinit?def=1 , последние SDK сами прописывают данные настройки.
Правда, по его мнению выскакивание ADC в 1024 это глюк контроллера, не должно такого быть. По поводу того, что на совершенно двух разных контроллерах глюк проявился - разводит руками.

Скажу честно, не пробовал это делать, на старой схеме, где ADC использовал в качестве измерителя уровня воды. Т.к. схему уже переделал на битовую маску по GPIO4-5, а ADC теперь использую для кнопок управления. На столе пока все работает превосходно, сегодня попробую установить контроллер на насос.

Вот схемка измерения воды. Датчики на герконах пришлось ориентировать кого куда - часть поплавками вверх, часть вниз, а то если делать все совсем красиво, то 2-мя gpio никак не отделаться...
схема герконы форум.png
 

=AK=

New member
Последовательно с входным пином (т.е. с пином АЦП) поставьте резистор, скажем, 1к. У вас наносекундные помехи отшибают процессору рога. Ситуация аналогичная той, что у вас былa раньше, но вы, похоже, так ничему и не научились.
 

hc2hunter

Member
Последовательно с входным пином (т.е. с пином АЦП) поставьте резистор, скажем, 1к.
Ну как не научился... Чему-то учусь постепенно... :(
Но просто от ADC такого симптома не ожидал.

А не просветите, какого рода именно возникновение этих помех в цепи ADC ? Откуда они там берутся. Ведь глюк происходит вовсе не в моменты работы насоса или тэна или щелканья релюшками. А просто так... при срабатывании герконов. Неужели их "дребезг" контактов может ADC доводить до суицида?
 

=AK=

New member
Ну как не научился... Чему-то учусь постепенно... :(
Но просто от ADC такого симптома не ожидал.

А не просветите, какого рода именно возникновение этих помех в цепи ADC ? Откуда они там берутся. Ведь глюк происходит вовсе не в моменты работы насоса или тэна или щелканья релюшками. А просто так... при срабатывании герконов. Неужели их "дребезг" контактов может ADC доводить до суицида?
Механические контакты дребезжат, будь то геркон или пинцет. Создают маломощные помехи очень крутыми фронтами.
 

nikolz

Well-known member
Ну как не научился... Чему-то учусь постепенно... :(
Но просто от ADC такого симптома не ожидал.

А не просветите, какого рода именно возникновение этих помех в цепи ADC ? Откуда они там берутся. Ведь глюк происходит вовсе не в моменты работы насоса или тэна или щелканья релюшками. А просто так... при срабатывании герконов. Неужели их "дребезг" контактов может ADC доводить до суицида?
можно сделать на герконах к одному пину.
Рисовать схему лень.
Нарисуйте сами,
расскажу на пальцах,
как я синтезирую такие схемы.
------------------------------------
Итак начнем.
Идея таких схем состоит в том, что мы коммутируем герконом или кнопкой RC цепочку к пину.
Все герконы подключаются к одному пину, а второй конец каждого геркона через RC цепочку (R параллельно C) подключаем на землю.
для вашего случая все RC цепочки одинаковые
когда бочка заполняется герконы последовательно включаются снизу вверх и наоборот выключаются когда бочка опустошается
В результате к пину подключаются: нет, одна или параллельно две или три или ...надцать RC цепей.
----------------------
В программе мы реализуем следующий алгоритм
Включаем пин на вывод и выводим импульс .
Длительность зависит от величины C .
Для начала хватит 10 мкс.
После этого переключаем пин на ввод и измеряем время от High до Low на пине
Измерять можно прерыванием, либо прямым измерением по циклу.
Для различного числа включенных герконов получите различное время.
можете и десять герконов поставить.
-------------
аналогично делается и с кнопками, но там другая логика так как кнопки включаются одиночно.
Поэтому и схема будет другой, но пин будет один для надцать кнопок.
---------------
Успехов
 

nikolz

Well-known member
можно делать схемы в которых напряжение будет меняться в обратную сторону т е емкость будет заряжаться.
 
Сверху Снизу