Arduino Nano ESD выходит из строя, несмотря на меры защиты от электростатического разряда
Добрый день!
Я только что столкнулся с проблемой в своем проекте, в которой я сам больше не могу разобраться. Поэтому я надеюсь, что кто-то здесь сможет мне помочь...
Сначала, я пытаюсь заменить контроллер сплит-кондиционера после того, как его микроконтроллер сгорел. Идея довольно проста: три датчика температуры, три реле и VFD для внутреннего вентилятора. Добавьте к этому три кнопки и небольшой дисплей.
Система построена следующим образом:
Проблема, с которой я столкнулся, заключается в том, что добавление «обведенной» секции, состоящей из отдельной панели пользовательского интерфейса с тремя кнопками и OLED-дисплеем размером 128,64 пикселя, приводит к случайным зависаниям кода Arduino, но ТОЛЬКО если на секцию высокого напряжения подано питание.
Если дисплей не подключен, система работает нормально, даже если компрессор запускается и выключается. То же самое происходит, когда дисплей подключен, но напряжение в сети отключено (т.е. питание по USB)
Любопытно, что это происходит только с дисплеем, подключенным к экранированному и заземленному ленточному кабелю длиной 10 см, тогда как два датчика температуры прикреплены стяжками к основному проводу питания на длине почти пять метров.
Я уже пробовал обычные методы защиты от электростатического разряда. Добавление ограничивающих диодов в корпус UI, конденсаторов на переключатели для гашения любых индуцированных скачков тока и добавление пары резисторов с низким сопротивлением к шине I²C (еще не на схеме). Весь кабель, соединяющий корпус UI с Arduino, экранирован изнутри, а также отдельной обмоткой из прочной алюминиевой ленты.
Высоковольтные и низковольтные секции схемы полностью разделены реле, системная земля, заземление экрана, заземление шасси и заземление сети закорочены. Arduino подключен только через один из своих контактов GND, поэтому никакое внешнее питание не может проходить через его заземляющую плоскость.
Тем не менее, как только подключается раздел пользовательского интерфейса, Arduino зависает, пока сторожевой таймер не сбросит его некоторое время спустя, а затем это повторяется через несколько минут.
На данный момент я перепробовал все, кроме обновления до настоящего контроллера ПЛК, и поэтому был бы очень признателен за любую помощь или советы по этой проблеме...
Вот снимок установки (я знаю про Wagos, но мне надоело каждый раз откручивать провода):
А это раздел пользовательского интерфейса с температурой, кнопкой температуры и питания, а также дисплеем:
Совет по безопасности: я сертифицированный электрик IT-систем с разрешениями на работу с хладагентами. Не убивайте себя проектами, связанными с сетевым напряжением
@TPoE, 👍0
Обсуждение1 ответ
Лучший ответ:
Итак... Я наконец-то разобрался. Потратив почти два дня на отладку этого странного случая, оказалось, что мой Arduino, по-видимому, сломался.
На короткое время я подключил Nano к ESP8266 с выходным расширением PCA9685 и сдвигателями уровня, чтобы попытаться выяснить, давал ли мне USB-кабель, который я подключил во время программирования, ложные показания при использовании последовательного порта для отладки. С этим ESP8266 все работало безупречно.
Затем мне стало интересно, с какими еще платами он будет работать, и я попробовал Arduino Leonardo (Atmega 32u4), а затем и сторонний Uno, который тоже работал.
Я был довольно удивлен, увидев, что это работает с тем, что по сути было просто Nano на большой плате. Подозревая нечестную игру со стороны моего старого Nano, я заказал замену, которая прибыла сегодня.
С той же программой и проводкой все работает безупречно, работая часами без сбоев.
Так что либо у меня все это время был сломанный контроллер, либо новый, который я купил, — это удачный чип, который лучше справляется с помехами, чем старый.
Теперь у меня в корзине с деталями есть Arduino nano с надписью «Не используйте I2C»
Я от всего сердца благодарю всех присутствующих за помощь!
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Питание светодиодной ленты - Сколько ампер?
- Arduino nano как клавиатура HID
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
Может быть, некоторые дополнительные, быстрые диоды на катушках реле, все неиспользуемые контакты на выходах, проверьте без чего-либо подключенного к релейным переключателям, возможно, вам понадобятся ячейки Бушеро на релейных переключателях. Вы можете использовать оптопары или попробовать SSR, @KIIV
Я добавил все идеи в схему. Несколько быстрых диодов Shotky на катушках реле, 0,1 мк + 150 Ом демпферы на всех переключателях реле переменного тока, а также конденсатор и диод 10 мк на реле постоянного тока, а также установка всех неиспользуемых выводов на ВЫХОД и НИЗКИЙ уровень. Но это не сильно помогло в решении проблемы. Arduino по-прежнему время от времени зависает с подключенным дисплеем, но без него работает нормально. Как ни странно, для зависания не требуется переключения реле, это просто происходит между ними. Но я действительно ценю вашу помощь!, @TPoE
SSR или оптопары были бы чем-то вроде перестройки платы с тоннами изоляции, поскольку в текущем дизайне нет места. Я все еще размышляю, принять ли плату, которая будет работать без пользовательского интерфейса, или действительно стиснуть зубы и начать все с нуля., @TPoE
Если это происходит даже без реле, то это может быть какая-то проблема с памятью, чрезмерное использование строк или что-то еще. Вы можете попробовать более сильную подтяжку на линии сброса. И проверить линию 5 В с помощью осциллографа или чего-то еще (также есть регистр причины сброса в AVR, вы можете попробовать проверить его). Это все, что я могу придумать, кроме переделки платы, @KIIV
Защита от электростатического разряда предназначена для защиты от сильного скачка напряжения, вызванного нерегулярным скачком напряжения или молнией, она не фильтрует шум, поступающий в цепь. Что делать, если вы отсоедините 5-метровый кабель для датчиков температуры (или только подключите два датчика температуры локально без кабеля), но подключите дисплей, он все равно будет висеть? 5-метровый датчик температуры, прикрепленный к основному проводу питания, — не очень хорошая идея., @hcheung
Я склонен думать, что 10 см (хотя мне кажется, что он длиннее 30 см) I2C должно быть в порядке, если только нет какой-то программной ошибки, вызывающей утечку памяти. Чтобы еще больше изолировать проблему, добавьте развязывающие конденсаторы 1 мкФ и 0,1 мкФ параллельно каждой из шин 5 В и подключите дисплей uint без кабеля, поможет ли это?, @hcheung
Кстати, все реле должны иметь диодное соединение параллельно катушке, чтобы предотвратить пусковой ток., @hcheung
Хорошо. Я проверил использование памяти с помощью библиотеки MemoryUsage, и, похоже, оно не пересекает отметку в 1500 байт ни в одной точке операции — с дисплеем или без него. Кроме того, скетч очень легкий. Он содержит библиотеку дисплея, преобразование температуры для термисторов, а также несколько if для включения и выключения реле. Используется всего несколько переменных., @TPoE
Я удалил датчики удаленной температуры из схемы и заменил их резистором 10k каждый непосредственно на плате. Он по-прежнему работает нормально без секции дисплея, но зависает через несколько секунд, если секция дисплея подключена. Конденсаторы для развязки линий дисплея мне не помогли, так как после их добавления дисплей отказался работать, к сожалению, Arduino также завис через несколько секунд. Напряжение на шинах питания стабильно на уровне 4,89 В с максимальной пульсацией 52 мВ на Arduino при запуске или выключении компрессора., @TPoE
@hcheung Чип ULN2003 имеет внутренние диоды, предназначенные именно для этого. Однако после предложения KIIV я также добавил дополнительные диоды Shotky над каждой катушкой реле, @TPoE
Линия 5 В, которая питает Nano, также переключается через реле обратно на VFD, так что, я полагаю, это больше, чем несколько мА. Я бы начал подозревать это. Вы обозначили два контакта как +5 В, но я полагаю, что это на самом деле один и тот же контакт. Однако, если вы используете Vin, то ему нужно около 7 вольт в зависимости от встроенного регулятора. Вы не можете использовать развязывающие конденсаторы на шине I2C. Это то, что вы имели в виду в своем комментарии выше, когда сказали, что он не работает? Я бы также подозревал код, хотя вы сказали, что он может быть стабильным в зависимости от того, что включено и как оно питается. Можете показать этот код?, @6v6gt
Обратная подача 5 В на VFD потребляет около 105 мА для управления логикой VFD. Производитель, по-видимому, реализовал внешний запуск/остановку, прерывая питание микроконтроллера VFD. И да, у Arduino есть только один вывод 5 В, к которому подключаются обе стороны. Было просто проще нарисовать схему, разделенную на две стороны для входов и выходов. Я знаю, что шина I2C не должна быть развязана, поскольку передача данных *технически* связана по переменному току с заземлением через конденсаторы, но я решил, что стоит попробовать, учитывая, что Arduino может подавать и отводить несколько мА через свои выводы., @TPoE