Проблемы с прерываниями исходящими от RTC DS3231 и помехами источника питания
Несколько месяцев назад я разработал устройство, способное обнаруживать наводнение в замкнутом пространстве и выполнять некоторые операции в случае (закрытие клапанов, выдача акустической и Bluetooth-сигнализации и т. Д.).
Через 8 часов он пытается снова открыть клапаны и возобновить нормальный цикл. Arduino UNO всегда находится в спящем режиме (это устройство остается активным 7/24). Он просыпается каждую минуту (@ sec.00), чтобы обнаружить наличие воды, проверяет в течение 4 циклов (4 минуты) наличие воды-если датчики включены - и затем, после того, как выдал сигналы тревоги и закрыл клапаны, он просыпается через 8 часов, чтобы снова открыть клапаны и вернуться в свой нормальный режим проверки.
Он работал и работает безупречно, когда его оставляют работать на столе. Я пробовал это почти месяц. Проблема возникла, когда я установил его на место, потому что есть водяной насос (автоклав, около 1,5 л. с., 1 фаза), подключенный к той же линии питания, которая-конечно - запускается всякий раз, когда кто-то открывает водяной клапан дома.
Всякий раз, когда он запускается, Arduino немедленно просыпается, и 1-минутный (или 8-часовой) цикл ожидания останавливается.
Я попытался использовать несколько колпачков на линии питания 12 В (около 3000uF, 50Vl в общей сложности) и фильтр EMI между линией питания и моим устройством, но ничего не изменилось.
Я сделал несколько модов на программном обеспечении, проверяя, совместим ли час и минута пробуждения с правильно рассчитанным и установленным временем пробуждения на Arduino, и храня флаг тревоги с часом и минутой пробуждения в EEPROM, чтобы управлять той же проверкой, проходит ли Arduino аппаратный сброс или выключен/включен.
Я подозреваю, что проблема возникает из-за того, что прерывание RTC активируется, когда IRQ-контакт опускается из ВЫСОКОГО состояния. Есть способ установить DS3231, чтобы всегда оставаться в низком состоянии, и выдавать ВЫСОКИЙ уровень только для прерываний?
Есть ли у кого-нибудь какое-нибудь электрическое предложение? Я использую этот китайский импульсный ИБП/источник питания 12 В, подключенный к свинцовой батарее 12 В-7 Ач, которая не обеспечивает никаких перебоев.
@rorox64, 👍1
Обсуждение0
- Использование millis() и micros() внутри процедуры прерывания
- Подсчет импульсов с прерыванием
- Устранение дребезга кнопки с помощью прерывания
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Почему необходимо использовать ключевое слово volatile для глобальных переменных при обработке прерываний в ардуино?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Использование поворотных энкодеров с прерываниями смены контактов
- Arduino непрерывно считывает значение АЦП с помощью прерывания
Я не знаю, как задать вам уточняющие вопросы по этому поводу без того, чтобы они также неявно содержали ответ: лучшая попытка показать проводку и выяснить, отключаете ли вы детектор отключения UNO., @timemage
Большое вам спасибо за ваш ответ. Я немного озадачен. мой источник питания выдает около 10 А (@13,4 В), и он подключен к большой 12 В-7 амперам (4,5 фунта) новой свинцовой батарее (*) для Arduino (на выводе VIN+заземление) + a 7805. 7805 подает пару датчиков воды (менее 5 мА каждый), DS3231RTC, 3 светодиода плюс плата relais (2 relais, около 55 мА каждый при возбуждении), конечно, все основания соединены вместе. (*) https://www.amazon.it/gp/product/B071JMHMN6/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1 Я еще не нарисовал схему подключения, но я сделаю это как можно скорее, @rorox64
Вероятно, это помогло бы увидеть его в диаграмме. В вашей "настройке ()" вы можете сделать что-то вроде мигания светодиода с легко узнаваемым рисунком, чтобы, если ваш Arduino UNO сбросится, вы могли бы очень четко определить это?, @timemage
ДА. Обычно я не пишу диаграмм для очень простых схем, но это, конечно, просто моя ошибка. В передней части моего устройства есть 3 основных светодиода, я мигаю ими всеми в течение 1/2 секунды в функции настройки. Они не загораются во время этих странных "перезагрузок". Я верю, что происходит что-то другое, например, неожиданное пробуждение, которое происходит как раз тогда, когда в линии питания возникает временный шум. Я подготовил новую фирму. версия (которую я попробую завтра), в которой я всегда проверяю дату и время после пробуждения, считывая их с EEPROM, в которой я пишу в случае наводнения, непосредственно перед сном., @rorox64
Сегодня я провел другие тесты: 1) Arduino не выдает последовательные сообщения после этих странных сбросов - это хорошо видно по мигающим светодиодам, которые продолжают работать - для получения сообщений необходимо сбросить Arduino (закрыть/снова открыть последовательное окно в IDE или нажать сброс).; 2) смена линии электропередачи ничего не меняет - я подключил ее к другой линии электропередачи, полностью изолированной от исходной, и проблема сохраняется; 3) если оставить его включенным только от большой батареи, это ничего не изменит (!), когда Arduino начнет работать, проснется! ...ЭМИ? Я соединил все основания с землей, @rorox64
Без компилируемого кода и диаграммы мне не о чем спрашивать, говорить или делать., @timemage
Я бы предположил, что это EMI. Можете ли вы перекрутить и экранировать линии питания от большой батареи к Arduino? У вас есть осциллограф? Вы можете попробовать проверить, есть ли скачок напряжения 5 В на Arduino, когда насос начнет работать., @PimV