Сгорает Arduino | Настраиваемое реле давления

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
Всем привет! Недавно я погрузился в программирование на ардуино. Меня больше всего интересует создание уникальных девайсов для быта/мастерской. В радиоэлектронике я понимаю средне, программирование на C++ учил в школе, сейчас вспоминаю.
Возникла необходимость в настраиваемом реле давления.
Было куплено:
-Ардуино Нано
-дисплей TM1637 с десятичными точками (пока не понимаю как управлять точками через библиотеку GyverTM1637)
-модуль реле (временно, в будущем планирую управлять через мосфет)
-датчик давления до 1.2МПа
Вот такой код я написал, сразу после ночной смены на заводе)):
#define CLK 3       //пин дисплей
#define DIO 2       //пин дисплей
#define P A6        //пин сенсор давления
#define BTNDN 10    //пин кнопки буст снизить
#define BTNUP 11    //пин кнопки буст поднять
#define BTN 12      //пин кнопки просмотр ставки и макс значения
#define RELAY 4     //пин реле бустконтроллера
#define DEBOUNCE 100//антидребезг кнопок, миллисекунды

int pressure = 0;
int maxpress = 0;
boolean flag, btn;
unsigned long t;
unsigned long t1;
int set = 200;      //ставка давления 200 это ~1 бар относительного давления

#include "GyverTM1637.h"
GyverTM1637 disp(CLK, DIO);

void setup() {
  disp.clear();
  disp.brightness(7);
  pinMode(13, OUTPUT);                //13 пин используется для светодиодной индикации
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

}

void loop() {
  for (int i = 0; i < 32000; i++) {   //просто "вечный" цикл, создан чтобы организовать пропуск обработки первого значения с датчика, так как оно высокое, из-за этого это значение ложно записывается в maxpress
    pressure = analogRead(P);         //считывание датчика давления
    pressure = map(pressure, 0, 4095, 0, 1200);
    pressure = constrain(pressure, 0, 1200);
    if (i == 0) pressure = 0;         //пропуск обработки первого считанного значения
    if (pressure > maxpress) maxpress = pressure;

    if (!digitalRead(BTN)) {          //просмотр ставки и макс значения
      if (millis() - t > 500) {
        flag = !flag;
        t = millis();
      }
      if (flag) {
        digitalWrite(13, HIGH);
        disp.displayInt(set);
      }
      else {
        digitalWrite(13, LOW);
        disp.displayInt(maxpress);
      }
    }
    else disp.displayInt(pressure);   //отображения давления при отпущеных кнопках
    if (pressure > set && (millis() - t1 > 250)) {  //включение и задержка реле
      digitalWrite(RELAY, HIGH);
      t1 = millis();
    }
    if (pressure < set && (millis() - t1 > 250)) {  //отключение и задержка реле
      digitalWrite(RELAY, LOW);
      t1 = millis();
    }
    if (!digitalRead(BTNDN) && (millis() - t > DEBOUNCE)) {   //снизить ставку
      set -= 5;
      t = millis();
      disp.displayInt(set);
      digitalWrite(13, HIGH);
      delay(DEBOUNCE);
      digitalWrite(13, LOW);
    }
    if (!digitalRead(BTNUP) && (millis() - t > DEBOUNCE)) {   //поднять ставку
      set += 5;
      t = millis();
      disp.displayInt(set);
      digitalWrite(13, HIGH);
      delay(DEBOUNCE);
      digitalWrite(13, LOW);
    }
    delay(50);        //задержка считывания, думаю в ней нет необходимости
  }

}
Подключил я всё вот так:
schematic_diagram_block.png
При питании от USB всё работало супер. В гараже подключил к компьютерному БП (переделан, добавлена регулировка напряжения и защита от КЗ). Выставил ~12.4В.
Вроде всё работало как и должно, я дал компрессором давление в датчик ~1.5бар. Реле не щёлкало, светодиод питания горел, но светодиод, который загорается при активации реле еле светился. Потом я заметил что индикация на дисплее не горит. И всё. Ардуина не подаёт признаков жизни, не шьётся. Питание есть и 5В, и 3.3В. Похоже сам проц. Пока некогда сесть посмотреть осцилографом подробнее есть ли признаки жизни.
Я ничего не понял. Всё проверил. Всё подключено верно.
Решил попробовать с LGT8F328P. Зашил её. Проверил ещё раз. При питании через USB всё работает как и должно. Дома подключил к регулируемому БП. БП имеет трансформатор, далее регулятор вроде на XL4015. Выставил ~12.4В. Всё работает супер. Я довольный. Реле щёлкает, когда ртом надую. Я просто счастлив. LGT8F328P love forever!
Решил попробовать запитать от аккумулятора от шуруповёрта (в будущем планируется питать от авто аккума). Я его сам собирал.
Напряжение аккума 11.6В. Подключаю и тишина. Вроде даже какой-то дымок пошёл. Но я кратковременно тыкнул. Полярность точно не перепутал. Думаю ладно, подключал обратно к регулируемому БП светодиод питания на миллисекунду мигнул и LGT8F328P окончательно погасла. При питании от USB тишина, признаков жизни не подаёт.
Я расстроен. Решил зарегаться и спрашивать у более опытных. Что не так. Где я допустил ошибку?
Есть мысль что нужно было к А6 подключать датчик через резистор 100 Ом. Но как его отсутствие повлияло.
Ребята, я без понятия. Убивать ещё Ардуино я не хочу. Это просто финансово для меня больно.
Подскажите, пожалуйста в чём я не прав.
Спасибо.
Извиняюсь, возможно я допустил ошибки при создании темы. Правила читал (честно), но всё же, первый раз пишу здесь.
Всем мир!
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Нужно использовать БП на 5 вольт и подавать питание напрямую к 5V, Vin - не использовать, линейный стабилизатор на ардуине не справляется с большими токами!
 

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
@IamNikolay, Я понимаю, что стоковый стаб даёт максимум 500мА. Но здесь ситуация интересная. Реле кушает максимум 40мА. Датчик - не более 10мА. Дисплей - 40мА. Тем более всё работало от трансформаторного регулируемого БП (мощность 20Вт если что). А от мощных источников (аккум, БП компа) ардуина умирает.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@MarKruT, если интересно - можете замерять все токи и напряжения при различных источниках питания. Если хотите решить проблему - добавьте внешний стабилизатор/блок питания на 5 вольт
 

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
@IamNikolay, Я подумал, что если так и будут ардуины гореть, то поставлю внешний стаб на 5В. Но всё-таки решил проверить ещё раз на LGT8F328P. Проверил, летально...
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@MarKruT, стабилизаторы 1117 (на ардуине) выпускают разные производители и их характеристики различаются.
Если БП компьютерный/регулируемый, то можно сразу с него +5 взять.
 

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
@IamNikolay, LGT8F328P Я подключал только к трансформаторному регулируемому БП (20Вт). Всё работало супер. Потом я подключил к аккумулятору от шуруповёрта с напряжением 11.6В и у AMS1117 снесло крышу это как минимум. Ардуино Нано я подключал к другому БП переделанному из ATX БП. Я выставил примерно 12.5В и Ардуино Нано умерла. Что конкретно не знаю так как всё выглядит целым, а проверить настроения нет, да и дел сегодня было много, не до этого.
На сколько я понимаю, при умершем стабе всё равно LGT8F328P должна работать от питания по USB. Питание 5В приходит. 3.3В нет. Тишина...
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@MarKruT, не обязательно, если стабилизатор сгорел и вход с выходом закоротил, то контроллер сгорит однозначно, а если стабилизатор закоротил вход с землей, то контроллер может уцелеть
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Весело это читать. У меня реле на 12 Вольт кушали 40, на 5 - 80. Я бы для начала взял dcdc или 7805 и не надеялся на стабилизатор Ардуино. И да, интересно что за датчик давления. Не может ли встроенная схема при подаче питания на выход подавать слишком напряжение больше напряжения питания? Я привык к тому, что аналоговые датчики давления делаются по принципу токовой петли, так как могут быть установлены на любом расстоянии от контроллера.
По поводу вечного цикла в коде ничего не понял. Раз в 32000 надо пропускать одно значение? Неужели нельзя было просто один раз считать давление в setup? Проверьте ещё модуль реле. При отключении питания реле куда с катушки улетает заряд? Через паразитный диод мосфита прямо в цепь питания Ардуино минуя все стабилизаторы?
 

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
Ребята, я нашёл одну ошибку в коде. Я не инициализировал пин реле (4) как выход. Но это ладно.
На Ардуино Нано стаб вроде может вытянуть 0.5А. На LGT8F328P до 0.8А.
Но допустим там наполовину меньше. Всё равно должно было хватить.
LGT8F328P я только подключил к аккумулятору. Буквально коснулся на миллисекунду крокодилом плюса и со стабилизатора пошёл дымок. Это мне не понятно. Стаб должен работать, как говорит даташит, при до 15В на входе.
Понятное дело, что я сейчас могу добавить в схему L7805 и если надо ULN2803 или мосфет. Или же заменить реле на модуль с мосфетом (просто к нему подключать нагрузку чуть сложнее). Учусь типо на ошибках. Но до сих пор не до конца ясно как так просто на ровном месте выгорают ардуины. Ведь от трансформаторного регулируемого БП на 20Вт всё работало
 

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
@rkit, что за "регулятор тока удержания"? Не слышал о таком…
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,413
976
58
Марий-Эл
Бред. Нет в китайщине регулятора тока удержания.
Вы имели в реле или устройство управляющее реле?

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

Есть двухобмоточные электромагниты. Одна обмотка рабочая, вторая для удержания. Питание подаётся на обе обмотки, после сработки снимается питание с рабочей обмотки.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Стаб должен работать, как говорит даташит, при до 15В на входе
Это где такое нашли?!
Выше уже писал:
стабилизаторы 1117 (на ардуине) выпускают разные производители и их характеристики различаются.
Нужно смотреть даташит производителя стабилизатора, а не первый попавшийся!
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Здесь вообще важен момент включения. В данном конкретном случае. Когда подключение к блоку питания, то скорей всего сперва собирается цепь питания, потом врубается блок питания. В случае с аккумулятором может быть эффект дребезга. Оптопара имеет свою ёмкость, при первом включении может быть кратковременное включение реле.... Включение отключение... Напруга в момент отключения реле может спокойно убить контроллер. Мы в школе реле запускали в режим пищалки.... Реле при включении сама себя размыкала. Контакты параллельные обмотки реле подводили к дверной ручки... Один напрямую, другой незаметно через прозрачный скотч, шарахало конкретно. А тут реле прямо в цепи питания МК... Просто изначально неверно организована цепь питания МК и реле.
 

bort707

★★★★★★✩
21 Сен 2020
3,064
912
интересно что за датчик давления. Не может ли встроенная схема при подаче питания на выход подавать напряжение больше напряжения питания?
не может. Там внутри обычный резистивный делитель. При давлении ноль выдает 10% от VCC, при полном диапазоне - порядка 90% от питания.
Я себе тоже реле давления на таком сделал, 4 года работает на компрессоре
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137

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

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
@viktor1703, очень полезный пост. Прям супер полезная информация. Блестяще сведения! Ещё что нить очень важное вычитал?
 
  • Вау +0
Реакции: viktor1703

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
Так ребята, я смотрю тут грубости всплывают. Не надо так.
Мой главный, на данный момент, вопрос для знатоков звучит так:
Почему всё исправно работало от трансформаторного регулируемого БП ~12.6В (мощность до 20Вт) и почему мгновенно погасло при подключении к аккумулятору шуруповёрта 11.6В. Стабилизатор труп, от USB питания проц не заводится. Значит похоже не только стаб принёс себя в жертву.
Это была вторая ситуация. В ней использовалась LGT8F328P.
Первая ситуация отличается тем, что использовалась Arduino Nano на Atmega328P и в качестве БП был переделанный компьютерный ATX. В нём добавленна регулировка напряжения до ~15В и защита от КЗ. Напряжение было выставлено около 12.5В. Моя сборка на макетке работала какое-то время , кроме реле, а потом погасла. От USB питания проц не заводится.
Вот такие у меня имеются вопросы.
Кто давно варится в теме ардуино, жду ваши ответы сформулированные из знаний и опыта.
Спасибо!
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Да никаких грубостей. Я уже ничего не понимаю. Сейчас Вы говорите о том, что и от БП ардуино сдохла, при этом модуль реле не был подключен? Правильно я Вас понял?
 

MarKruT

✩✩✩✩✩✩✩
20 Авг 2022
14
5
@DAK, нужно было обязательно пропускать первое считанное значение. На тот момент (напомню я был после ночной смены на заводе и так себе соображал) я не придумал ничего проще как воспользоваться циклом. Хотя на данный момент я вижу ваш вариант на много проще.
По поводу реле, если я правильно вас понял, то у меня реле питается от 5В. Поэтому если случайно 5В попадёт на цифровой пин, по идее ничего страшного. Но как это может произойти я не очень понимаю. В мосфете диод стоит, вроде, между Истоком и Стоком. Так что на управляющий пин 5В попадать вроде не должно, так как он подключён к Затвору мосфета. Возможно я не до конца понял вас, извиняюсь.
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Нет, всё не так, сигнал и цифрового пина идёт на оптопару. никак там ничего не попадёт. Но вот у Вас не просто от 5 вольт питается, просто реле параллельно питанию МК (между ними нет ничего). Как только реле выключается обмаотка катушки становится источником питание (на доли секунды), импульс начинает идти в питающую цепь через паразитный диод мосфита. этот выброс мог бы убить МК.
UPD:
Всё зависит от схемы модуля, возможно там есть дополнительный диод для защиты от этого выброса.