Помехи на цифровых портах с подтягивающими резисторами
- Войдите на сайт для отправки комментариев
Здравствуйте уважаемые форумчане.
Я недавно начал заниматься Ардуинкой
Немного информации о моём "творении":
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 рублей фонит, подключил к ПК, все те же ложные срабатывания. Подразумеваю что ложное срабатывание идет от статического электричества. Вариант решения проблемы, которую описал Клапауций "много" лет назад, действительно поможет мне избавиться не только от помех по питанию, но и от воздействия статического электричества?
Минус конечно. Еще заметил, что тот же самый эффект (срабатывание прерывания) происходит при включение в розетку паяльника (не важно).
тоже важно - похоже, что халабуда хорошо ловит помехи по питанию.
смотрите свой блок питания на наличие блокировочных конденсаторов -электролиты и керамика.
так же - сам контроллер питать через дроссель 100 мкГн, параллельно керамика 0,1 мкФ перед и после дросселя.
снизить подтягивающее сопротивление на герконе с 10К до 2К - если продолжит сбоить.
У меня завалялся модуль DC-DC на LM2596 со всем необходимым... Отфильтрую 5В и если его характеристики не лгут, то должен подойти для пробы. Так как точно такой же модуль решил проблему с шипением радио в авто при включении видеорегистратора.
Кстати, ложные срабатвания были и на голой Ардуинке!
Всё понятно. Продолжайте эксперименты, мы будем наблюдать за вами.
Но для начала во втором скетче покажите, где программно подключаете резисторы.
P.S. проект-то как называется - "Пила-8"?
Всё понятно. Продолжайте эксперименты, мы будем наблюдать за вами.
Но для начала во втором скетче покажите, где программно подключаете резисторы.
P.S. проект-то как называется - "Пила-8"?
Почему Пила-8 ?
У автора ведь НАНО, поэтому Пила -328.
Beijo2908, ищите темы по подавлению дребезга кнопок
Всё понятно. Продолжайте эксперименты, мы будем наблюдать за вами.
Публичностью и поднятием своего собственного ЧСВ не занимаюсь :D
Хочу разобрать вопрос и подробно описал с чем имею дело, дабы исключить гадания на кофейной гуще.
во втором скетче покажите, где программно подключаете резисторы.
Вторым скетчем я показал что даже если пин будет притянут внешним резистором к GND, то Ардуина всё равно будет улавливать помехи и ложно срабатывать.
Я предпологал, из-за того что на входящем пине "1" согласно первому скетчу, Ардуинка улавливает помехи. Написал второй скетч для пробы, где на входящем пине "0" - помехи ни куда не делись, даже если к Ардуинке ни чего не подключено.
Beijo2908, ищите темы по подавлению дребезга кнопок
У меня даже на "голой", не подключенной ни к чему, Ардуинке идут ложные срабатывания от помех.
Думаю мой acdc тут ни при чем.
Думаю мой acdc тут ни при чем.
Ну как не причём, он вероятно и служит "транспортом". Получает помеху из сети, и по питанию передаёт её ардуине. Попробуйте для эксперимента запитать ардуино от аккмулятора, и пощёлкайте вашим пускателем. Будет ли ардуина реагировать? Скорее всего нет.
во втором скетче покажите, где программно подключаете резисторы.
Вторым скетчем вы показали, что пин болтается без подтяжки. Почему вы сами не хотите гадать на кофейной гуще, а нас заставляете это делать? Проблема эта ваша - хотите диагноза, относитесь к делу серьёзно, а не "на самом деле у меня ардуина на трёхкиловаттном моторе лежит, но это неважно".
Уважаемый, зашунтируйте все индуктивные нагрузки и контакты конденсаторами. Оттуда обычно помехи лезут.
Подключил "пустую" Ардуинку к телефону и загрузил обычный скетч минанием 13 светодида через кнопку. Действительно, помех нету.
Смущает одно что я сижу в помещении от которого в 5 метрах ПСУ, в 15 метрах подстанция на 6/0,4кВ 1000 кВА и в 150-200 метрах ГПП 110/6кВ. Полный букет))))
Поеду закупаться керамическими кондерами, дросселями, и ферритовыми съемным кольцами.
Мое упущение, не внимателен был.
Уважаемый, зашунтируйте все индуктивные нагрузки и контакты конденсаторами. Оттуда обычно помехи лезут.
Этим займусь в ближайшее время и отпишусь по итогу. Но если все при все шунтировать в моем цехе - сил и денег не хватит )))
надо не в цеху шунтировать, а только в вашей схеме. У меня ардуина установлена непосредственно на 1.5КВт моторе, а в радиусе 10м от нее еще десяток моторов разной мощности. Поначалу тоже были ложные срабатывания и зависоны. Поставил два электролита по 400 мкф на противоположные концы шины питания и добавил керамику "104" на все используемые входы. В итоге более полугода устойчивой работы
Спасибо. Взял ваш ценнейший опыт на заметку, в общем закупился:
Если все будет окау, буду заказывать радиокомпоненты пачками с Али.
Проблема решена!
Но решена она не теми методами что вычитал на этом и многих других форумах. Да, были подозрения на "неадекватное" питание, делал фильтры "кондер + дроссель + кондер"
менял блоки питания, питался от смартфона. Везде писали что фильтр решал проблемы многих но увы, не мне. От наводок и помех который видел пин Ардуино настроенный на вход через "PULLUP" меня данный фильтр не спасал, хоть убейся.
Всё равно при прикосновении к пину пальцем, любым металлическим предметом или при вкл\откл трансформатора на стенде рядом, Ардуино подавал сигнал на LOW модуль твердотельного реле OMRON согласно скетчу.
Давай пробовать разные варианты по питанию в том числе менял вход, выход и полярность местами:
Конденсатор керамический "104", дроссель 100мкГн
Да, это давало некий результат, на мои пальцы уже не срабатывало ни чего, но на металлические предметы и трансформатор все равно были ложные включения по наводкам.
Тут обратил внимание на
Попробовал у себя
И о боги... Больше ни каких ложных срабатываний!!! Я не поверил, взял пускатель ПМЕ4100 с кондером и резистором на катушке
и давай искрить перед Ардуино - реакции ноль! Больше ни каких ложных наводок через пальцы и металлические предметы!
Снял все фильтра на питание перед Ардуинкой - работает всё идеально.
Нарисовал общую схемку как выглядит на Ардуинке (4 пин - INPUT_PULLUP)
Может где-то этот метод решения есть и я открыл не Америку, но хоть убейте - не видел ни где... В инете не первый день))
Так же рекомендую ферритовый фильтр - посадить на питание перед Ардуинкой
Может где-то этот метод решения есть и я открыл не Америку, но хоть убейте - не видел ни где... В инете не первый день))
Уважаемый, зашунтируйте все индуктивные нагрузки и контакты конденсаторами.
Оттуда обычно помехи лезут.
Лучше индуктивности на постоянном токе "шунтировать" диодами, а переменный - варисторами.
А конденсаторы лучше на входы вешать.
Это пост я видел и не думал что он относится ко мне, не предал ему особого значения. У меня кнопка (реле) находится рядом и не в десятках сантиметрах. Более того, ложная наводка была если на входящий ПИН ни чего не цеплялось.
Проблема решена!
Попробовал у себя
Нарисовал общую схемку как выглядит на Ардуинке (4 пин - INPUT_PULLUP)
Можно эту схемку заново нарисовать? а то картинка уже недоступна
Можно эту схемку заново нарисовать? а то картинка уже недоступна
Посмотрите схемку-пример одного моего проекта https://yadi.sk/i/xJBJC8Ow-TPAhw
На пины D4 и D5 (настроены как INPUT) Ардуино установлены два керамических "104" кондера - С2 и С4. Они и отвечают за отсутствие помех.
Два резистора, установленные рядом - это вместо внутренней подтяжки, поэтому мои конденсаторы сидят на +5В.
Если вы будете использовать внутреннюю подтяжку (INPUT_PULLUP), то кондеры садить на GND.
Будут вопросы - пишите.
Интересно, зачем такие хитрости?
Конденсатору в общем-то все равно, к плюсу его подключают или к земле.
Интересно, зачем такие хитрости?
Конденсатору в общем-то все равно, к плюсу его подключают или к земле.
Ну, я ж у себя на схеме входящие пины подтягиваю к GND, соответственно с другой стороны у кондера будет +5В.
А внутренняя подтяжка МК подтягивает +5В, соответственно там у кондера GND. Думаю вы это и так знаете.
Просто возникает вопрос, по вашему рассуждению кондёр будет выполнять свою функцию даже, если его две ножки подключить к GND или к +5В? Что-то сомневаюсь.
конденсатор имеет несколько иное назначение, чем вы представляете. По этому, просто поверьте, если у вас нормальный источник напряжения - его внутренне сопротивление очень низкое и куда вы подключите конденсатор значения не имеет. Нюансы есть - постоянная времени RC.
в схеме из поста 18 вообще не имеет значения куда подключить конденсатор оптопары кнопок. в смысле к +U или GND (С2 и С4) хоть один к + другой к -.
Использую INPUT_PULLUP на пин D3, тоесть сразу уже +5В должно быть на пине. При включении ардуины происходит срабатывание как будто на землю кратковременно коротит. А потом уже от отвертки начинается помеха. А вообще делаю срабатывание кнопки на землю. То есть кондер 104 на землю сажать? Мне кажется надо на +5, т.к. на входе будет от кнопки земля.
Дык у тебя срабатывает от отвёртки когда МК в режиме ожидания нажатия кнопки. Поэтому надо на GND садить.
Можно эту схемку заново нарисовать? а то картинка уже недоступна
Смысл элементов D1, D3, R9, R18?
Здравствуйте. Я повторяю чужую схему с закрытым кодом. И там подтяжка к +5 1к. И помехи при увеличении частоты. Иногда есть иногда нет. Кондер попробовать подкинуть на пин и на минус?
Да, да. Попробуйте.
Вот у меня резистор подтягивет GND к пину. Ножка конденсатора 104 соответственно сидит на +5V.
Проверено личным опытом, помехи отсутствую вообще даже если рядом расположить магнитный пускатель (контактор) 3-ей величины к примеру.
Ну там просто по питанию в самой ардуине конденсаторы стоят, поэтому разницы особой нет на + или gnd.