Помехи на цифровых портах с подтягивающими резисторами

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

Здравствуйте уважаемые форумчане.

Я недавно начал заниматься Ардуинкой

Немного информации о моём "творении":

AC-DC - блок питания за 150 рублей

tRL - Модуль двухканального твердотельного реле на OMRONах

uRL - индукционное реле с катушкой на ~220В

//-------- CONST-анты --------
#define tRL_ch_1 2 //Твердотельное реле Канал1 *************
#define tRL_ch_2 3 //Твердотельное реле Канал2
#define uRL 4 //Индукционное реле управления
#define andr 300 //Время антидребезга механических контактов
#define ozhid_1 10000 //Время ожидания перед разрешением работы ЭПЧ *************
#define ozhid_2 450000 //Время ожидания для полного отключения ПЧ *************
#define on LOW //Включение по низкому уровню
#define off HIGH //Отключение по высокому

//-------- ПЕРЕМЕННЫЕ --------
bool sig_uRL = 0; //Переменная сигнала для uRL
bool flag1 = 0; //Переменная для контроля пуска ПЧ
bool flag2 = 0; //Переменная для пуска в работу ЭПЧ
bool flag3 = 0; //Переменная для запрета повторного пуска ПЧ при его работе
bool flag4 = 0; //Переменная для контроля работы ЭПЧ
bool flag5 = 0; //Переменная для времени ожидания перед отключением ПЧ
unsigned long time_andr = 0; //Переменная для #define andr
unsigned long time_ozhid_1 = 0; //Переменная для #define ozhid_1
unsigned long time_ozhid_2 = 0; //Переменная для #define ozhid_2

//-------- ФУНКЦИЯ НАЧАЛЬНОЙ НАСТРОЙКИ --------
void setup() {
  digitalWrite(tRL_ch_1, off);
  digitalWrite(tRL_ch_2, off);
  pinMode(tRL_ch_1, OUTPUT); // Пин 2 как выход
  pinMode(tRL_ch_2, OUTPUT); //Пин 3 как выход
  pinMode(uRL, INPUT_PULLUP); //Пин 4 как вход
  //delay(1000);
}

//-------- ФУНКЦИИ ОБРАБОТКИ СИГНАЛОВ --------
void loop() {
  sig_uRL = !digitalRead(uRL); //Инвертирование сигнала
  pusk_PCH();
  rabota_EPCH();
  ostanovka_PCH_timer();
}

void pusk_PCH(){
  if (sig_uRL == 1 && flag1 == 0 && flag3 == 0 && millis() - time_andr > andr){
    flag1 = 1;
    time_andr = millis();
  } else if (sig_uRL == 0 && flag1 == 1 && millis() - time_andr > andr){
    flag1 = 0;
    flag2 = 1;
    flag3 = 1;
    flag5 = 1;
    digitalWrite(tRL_ch_1, on); //Запуск ПЧ
    time_andr = millis();
    time_ozhid_1 = millis();
    time_ozhid_2 = millis();
  }
}

void rabota_EPCH(){
  if (sig_uRL == 1 && flag2 == 1 && flag4 == 0 && millis() - time_andr > andr && millis() - time_ozhid_1 > ozhid_1){
    flag4 = 1;
    digitalWrite(tRL_ch_2, on); //Запуск ЭПЧ
    time_andr = millis();
    flag5 = 0;
  } else if (sig_uRL == 0 && flag4 == 1 && millis() - time_andr > andr){
    flag4 = 0;
    flag5 = 1;
    digitalWrite(tRL_ch_2, off); //Остановка ЭПЧ
    time_andr = millis();
    time_ozhid_2 = millis();
  }
}

void ostanovka_PCH_timer(){
  if(flag5 == 1 && millis() - time_ozhid_2 > ozhid_2){
    flag5 = 0;
    flag3 = 0;
    flag2 = 0;
    digitalWrite(tRL_ch_1, off); //Остановка ПЧ
    //delay(5000); *************
  }
}

В дальнейшем Arduinka будет дополнятся доп. функциями, но сейчас не об этом.

Arduino и две релюшки находятся на 4-5 см друг от друга.

В моём скетче видно что я использую PULLUP и инвертирую сигнал. Но почему-то возникают помехи на входящем пине, в результате ложное срабатывание схемы. Схема может сработать даже от обычного прикосновения пальца руки с пином. Железяку прислоню от кусачек - схема срабатывает.

Давай штурмовать инет, к вам залетел на форум. Везде пишут что для исключения воздействия помех нужно подцепить подтягивающие резисторы программно или аппаратно. У меня программно от +5В. Далее написал по быстрому

bool flag =0;
void setup() {
  pinMode(4, INPUT);
  pinMode(13, OUTPUT);
}
void loop() {
  flag = digitalRead(4);
  if(flag == 1){
    digitalWrite(13, HIGH);
    delay(5000);
    digitalWrite(13, LOW);
  }
}

собрал, но и в этом случае идет ложное срабатывание. Взял Arduino UNO и там тоже самое.

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

Клапауций пишет:

cactous пишет:

Минус конечно.  Еще заметил, что тот же самый эффект (срабатывание прерывания)  происходит при включение в розетку паяльника (не важно).

тоже важно - похоже, что халабуда хорошо ловит помехи по питанию.

смотрите свой блок питания на наличие блокировочных конденсаторов -электролиты и керамика.

так же - сам контроллер питать через дроссель 100 мкГн, параллельно керамика 0,1 мкФ перед и после дросселя.

снизить подтягивающее сопротивление на герконе с 10К до 2К - если продолжит сбоить.

У меня завалялся модуль DC-DC на LM2596 со всем необходимым... Отфильтрую 5В и если его характеристики не лгут, то должен подойти для пробы. Так как точно такой же модуль решил проблему с шипением радио в авто при включении видеорегистратора.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

Кстати, ложные срабатвания были и на голой Ардуинке!

sadman41
Offline
Зарегистрирован: 19.10.2016

Всё понятно. Продолжайте эксперименты, мы будем наблюдать за вами.

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

P.S. проект-то как называется - "Пила-8"?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

sadman41 пишет:

Всё понятно. Продолжайте эксперименты, мы будем наблюдать за вами.

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

P.S. проект-то как называется - "Пила-8"?


Почему Пила-8 ?
У автора ведь НАНО, поэтому Пила -328.

ВН
Offline
Зарегистрирован: 25.02.2016

Beijo2908, ищите темы по подавлению дребезга кнопок

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

sadman41 пишет:

Всё понятно. Продолжайте эксперименты, мы будем наблюдать за вами.


Публичностью и поднятием своего собственного ЧСВ не занимаюсь :D
Хочу разобрать вопрос и подробно описал с чем имею дело, дабы исключить гадания на кофейной гуще.
sadman41 пишет:

во втором скетче покажите, где программно подключаете резисторы.


Вторым скетчем я показал что даже если пин будет притянут внешним резистором к GND, то Ардуина всё равно будет улавливать помехи и ложно срабатывать.
Я предпологал, из-за того что на входящем пине "1" согласно первому скетчу, Ардуинка улавливает помехи. Написал второй скетч для пробы, где на входящем пине "0" - помехи ни куда не делись, даже если к Ардуинке ни чего не подключено.
ВН пишет:

Beijo2908, ищите темы по подавлению дребезга кнопок


У меня даже на "голой", не подключенной ни к чему, Ардуинке идут ложные срабатывания от помех.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

Думаю мой acdc тут ни при чем.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Beijo2908 пишет:

Думаю мой acdc тут ни при чем.

Ну как не причём, он вероятно и служит "транспортом". Получает помеху из сети, и по питанию передаёт её ардуине. Попробуйте для эксперимента запитать ардуино от аккмулятора, и пощёлкайте вашим пускателем. Будет ли ардуина реагировать? Скорее всего нет.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Beijo2908 пишет:
sadman41 пишет:

во втором скетче покажите, где программно подключаете резисторы.

Вторым скетчем я показал что даже если пин будет притянут внешним резистором к GND, то Ардуина всё равно будет улавливать помехи и ложно срабатывать. Я предпологал, из-за того что на входящем пине "1" согласно первому скетчу, Ардуинка улавливает помехи. Написал второй скетч для пробы, где на входящем пине "0" - помехи ни куда не делись, даже если к Ардуинке ни чего не подключено.

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

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, зашунтируйте все индуктивные нагрузки и контакты конденсаторами. Оттуда обычно помехи лезут.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

dimax пишет:

Подключил "пустую" Ардуинку к телефону и загрузил обычный скетч минанием 13 светодида через кнопку. Действительно, помех нету.
Смущает одно что я сижу в помещении от которого в 5 метрах ПСУ, в 15 метрах подстанция на 6/0,4кВ 1000 кВА и в 150-200 метрах ГПП 110/6кВ. Полный букет))))
Поеду закупаться керамическими кондерами, дросселями, и ферритовыми съемным кольцами.
sadman41 пишет:

Мое упущение, не внимателен был.
mykaida пишет:

Уважаемый, зашунтируйте все индуктивные нагрузки и контакты конденсаторами. Оттуда обычно помехи лезут.


Этим займусь в ближайшее время и отпишусь по итогу. Но если все при все шунтировать в моем цехе - сил и денег не хватит )))

b707
Offline
Зарегистрирован: 26.05.2017

Beijo2908 пишет:
Этим займусь в ближайшее время и отпишусь по итогу. Но если все при все шунтировать в моем цехе - сил и денег не хватит )))

надо не в цеху шунтировать, а только в вашей схеме. У меня ардуина установлена непосредственно на 1.5КВт моторе, а в радиусе 10м от нее еще десяток моторов разной мощности. Поначалу тоже были ложные срабатывания и зависоны. Поставил два электролита по 400 мкф на противоположные концы шины питания и добавил керамику "104" на все используемые входы. В итоге более полугода устойчивой работы

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

b707 пишет:

Спасибо. Взял ваш ценнейший опыт на заметку, в общем закупился:

Если все будет окау, буду заказывать радиокомпоненты пачками с Али.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

Проблема решена!

Но решена она не теми методами что вычитал на этом и многих других форумах. Да, были подозрения на "неадекватное" питание, делал фильтры "кондер + дроссель + кондер"

менял блоки питания, питался от смартфона. Везде писали что фильтр решал проблемы многих но увы, не мне. От наводок и помех который видел пин Ардуино настроенный на вход через "PULLUP" меня данный фильтр не спасал, хоть убейся.

Всё равно при прикосновении к пину пальцем, любым металлическим предметом или при вкл\откл трансформатора на стенде рядом, Ардуино подавал сигнал на LOW модуль твердотельного реле OMRON согласно скетчу.

Давай пробовать разные варианты по питанию в том числе менял вход, выход и полярность местами:

Конденсатор керамический "104", дроссель 100мкГн

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

Тут обратил внимание на

b707 пишет:
и добавил керамику "104" на все используемые входы. В итоге более полугода устойчивой работы

Попробовал у себя

И о боги... Больше ни каких ложных срабатываний!!! Я не поверил, взял пускатель ПМЕ4100 с кондером и резистором на катушке

и давай искрить перед Ардуино - реакции ноль! Больше ни каких ложных наводок через пальцы и металлические предметы!

Снял все фильтра на питание перед Ардуинкой - работает всё идеально.

Нарисовал общую схемку как выглядит на Ардуинке (4 пин - INPUT_PULLUP)

Может где-то этот метод решения есть и я открыл не Америку, но хоть убейте - не видел ни где... В инете не первый день))

Так же рекомендую ферритовый фильтр - посадить на питание перед Ардуинкой

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Beijo2908 пишет:

Может где-то этот метод решения есть и я открыл не Америку, но хоть убейте - не видел ни где... В инете не первый день))

Это потому, что Вы не искали. Причем, даже в соседних темах этого раздела (написано лишь позавчера) : http://arduino.ru/forum/apparatnye-voprosy/inputpullup-dlya-knopok#comment-428841

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

mykaida пишет:

Уважаемый, зашунтируйте все индуктивные нагрузки и контакты конденсаторами.
Оттуда обычно помехи лезут.

Лучше индуктивности на постоянном токе "шунтировать"  диодами, а переменный - варисторами.
А конденсаторы лучше на входы вешать.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

andriano пишет:
Это потому, что Вы не искали. Причем, даже в соседних темах этого раздела (написано лишь позавчера) : http://arduino.ru/forum/apparatnye-voprosy/inputpullup-dlya-knopok#comment-428841

Это пост я видел и не думал что он относится ко мне, не предал ему особого значения. У меня кнопка (реле) находится рядом и не в десятках сантиметрах. Более того, ложная наводка была если на входящий ПИН ни чего не цеплялось.

vs74rus
Offline
Зарегистрирован: 02.10.2019

Beijo2908 пишет:

Проблема решена!

и добавил керамику "104" на все используемые входы. В итоге более полугода устойчивой работы

Попробовал у себя

Нарисовал общую схемку как выглядит на Ардуинке (4 пин - INPUT_PULLUP)

Можно эту схемку заново нарисовать? а то картинка уже недоступна

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

vs74rus пишет:

Можно эту схемку заново нарисовать? а то картинка уже недоступна


Посмотрите схемку-пример одного моего проекта https://yadi.sk/i/xJBJC8Ow-TPAhw
На пины D4 и D5 (настроены как INPUT) Ардуино установлены два керамических "104" кондера - С2 и С4. Они и отвечают за отсутствие помех.
Два резистора, установленные рядом - это вместо внутренней подтяжки, поэтому мои конденсаторы сидят на +5В.
Если вы будете использовать внутреннюю подтяжку (INPUT_PULLUP), то кондеры садить на GND.
Будут вопросы - пишите.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Beijo2908 пишет:
Два резистора, установленные рядом - это вместо внутренней подтяжки, поэтому мои конденсаторы сидят на +5В. Если вы будете использовать внутреннюю подтяжку (INPUT_PULLUP), то кондеры садить на GND. Будут вопросы - пишите.

Интересно, зачем такие хитрости?

Конденсатору в общем-то все равно, к плюсу его подключают или к земле.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

andriano пишет:

Интересно, зачем такие хитрости?

Конденсатору в общем-то все равно, к плюсу его подключают или к земле.


Ну, я ж у себя на схеме входящие пины подтягиваю к GND, соответственно с другой стороны у кондера будет +5В.
А внутренняя подтяжка МК подтягивает +5В, соответственно там у кондера GND. Думаю вы это и так знаете.
Просто возникает вопрос, по вашему рассуждению кондёр будет выполнять свою функцию даже, если его две ножки подключить к GND или к +5В? Что-то сомневаюсь.

Гриша
Offline
Зарегистрирован: 27.04.2014

Beijo2908 пишет:
Просто возникает вопрос, по вашему рассуждению кондёр будет выполнять свою функцию даже, если его две ножки подключить к GND или к +5В? Что-то сомневаюсь.

конденсатор имеет несколько иное назначение, чем вы представляете. По этому, просто поверьте, если у вас нормальный источник напряжения - его внутренне сопротивление очень низкое и куда вы подключите конденсатор значения не имеет. Нюансы есть - постоянная времени RC.  

в схеме из поста 18 вообще не имеет значения куда подключить конденсатор оптопары кнопок. в смысле к +U или GND (С2 и С4) хоть один к + другой к -.

vs74rus
Offline
Зарегистрирован: 02.10.2019

Beijo2908 пишет:
Посмотрите схемку-пример одного моего проекта https://yadi.sk/i/xJBJC8Ow-TPAhw На пины D4 и D5 (настроены как INPUT) Ардуино установлены два керамических "104" кондера - С2 и С4. Они и отвечают за отсутствие помех. Два резистора, установленные рядом - это вместо внутренней подтяжки, поэтому мои конденсаторы сидят на +5В. Если вы будете использовать внутреннюю подтяжку (INPUT_PULLUP), то кондеры садить на GND. Будут вопросы - пишите.

Использую INPUT_PULLUP на пин D3, тоесть сразу уже +5В должно быть на пине. При включении ардуины происходит срабатывание как будто на землю кратковременно коротит. А потом уже от отвертки начинается помеха. А вообще делаю срабатывание кнопки на землю. То есть кондер 104 на землю сажать? Мне кажется надо на +5, т.к. на входе будет от кнопки земля.

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

vs74rus пишет:

Дык у тебя срабатывает от отвёртки когда МК в режиме ожидания нажатия кнопки. Поэтому надо на GND садить.

SLKH
Offline
Зарегистрирован: 17.08.2015

Beijo2908 пишет:
vs74rus пишет:

Можно эту схемку заново нарисовать? а то картинка уже недоступна

Посмотрите схемку-пример одного моего проекта https://yadi.sk/i/xJBJC8Ow-TPAhw На пины D4 и D5 (настроены как INPUT) Ардуино установлены два керамических "104" кондера - С2 и С4. Они и отвечают за отсутствие помех. Два резистора, установленные рядом - это вместо внутренней подтяжки, поэтому мои конденсаторы сидят на +5В. Если вы будете использовать внутреннюю подтяжку (INPUT_PULLUP), то кондеры садить на GND. Будут вопросы - пишите.

Смысл элементов D1, D3, R9, R18? 

vs74rus
Offline
Зарегистрирован: 02.10.2019

Beijo2908 пишет:
Поэтому надо на GND садить.
Спасибо, работает как часики. 

Pavel38fm
Offline
Зарегистрирован: 27.04.2021

Здравствуйте. Я повторяю чужую схему с закрытым кодом. И там подтяжка к +5 1к. И помехи при увеличении частоты. Иногда есть иногда нет. Кондер попробовать подкинуть на пин и на минус?

Beijo2908
Beijo2908 аватар
Offline
Зарегистрирован: 07.02.2019

Да, да. Попробуйте.

Вот у меня резистор подтягивет GND к пину. Ножка конденсатора 104 соответственно сидит на +5V.

Проверено личным опытом, помехи отсутствую вообще даже если рядом расположить магнитный пускатель (контактор) 3-ей величины к примеру.

Morroc
Offline
Зарегистрирован: 24.10.2016

Ну там просто по питанию в самой ардуине конденсаторы стоят, поэтому разницы особой нет на + или gnd.