Arduino записывает в память и автоматически выключается (через MOSFET)
Хотелось бы попросить вас помочь с проектированием схемы.
У меня есть и atmega328p, с определением напряжения на его Vin (Vcc). Я сделал делитель напряжения, и его выход я подключил к аналоговому контакту. И хотелось бы, чтобы при падении напряжения ниже определенного уровня (4,5В) сам отключался (atmega328p).
Как я уже сказал, определение напряжения не является проблемой (есть делитель напряжения), программирование его также не представляет проблем, но я думаю, что программирую его так:
Обнаружение напряжения на аналоговом выводе A0, если напряжение ниже определенного уровень (4,5 В), записать в память и отправить на цифровой вывод 3 «НИЗКИЙ» (0) логическое состояние.
Это отключит МОП-транзистор, и Atmega потеряет заземление (GND) и выключится, но у меня есть подтягивающий резистор, который, когда Atmega выключается, берет на себя инициативу и устанавливает затвор на MOSFET на высокий уровень (транзистор включится), и Atmega включается, затем выключается, и это будет выполняться бесконечно, пока не останется питание для включения Atmega.
Я хочу использовать суперконденсатор (2,2 Ф, 5,5 В) для его питания при потере основного входа и дать Atmega время для записи в память и постепенного выключения.
Я добавляю схему, чтобы лучше рассмотреть проблему.
Я знаю, что нет кристалла, конденсаторов и прочего, чтобы сделать его надежным и полнофункциональным, но это не является предметом данного вопроса. Это первый скетч, который не завершен.
Я знаю некоторые микросхемы, которые могут обнаруживать напряжение и переводить его выход в какое-то логическое состояние (1 или 0), например MAX809 (803 или 810) и т. д., и, конечно, это мой запасной план, но я хочу спросить у вас есть отличная идея сделать это без каких-либо специальных микросхем и проще? Я также думал о каком-нибудь операционном усилителе или, может быть, тиристоре, я не знаю......
Можете ли вы помочь мне с идеей или, лучше, со схемой, как это сделать? Спасибо.
@Vasekdvor, 👍1
Обсуждение2 ответа
Было бы проще просто отключить процессор с помощью программного обеспечения, когда вы будете готовы к выключению:
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
cli();
sleep_enable();
sleep_bod_disable();
sei();
sleep_cpu();
Спасибо, я знаю, но я не хочу спать, я хочу полностью отключить питание. Я знаю это, вы можете спросить, почему, но, пожалуйста, просто примите, что так и должно быть., @Vasekdvor
Вы должны использовать P-канальный МОП-транзистор (который обычно выключен с помощью подтягивающего резистора), и Arduino отвечает за его поддержание во включенном состоянии:
На этой схеме M1 обычно выключен. Вы нажимаете и удерживаете SW1, и Arduino получает питание. Первое, что он делает, это включает GPIO. Это включает M2, который, в свою очередь, переводит затвор M1 LOW, включая его. Теперь вы можете отпустить M1, и Arduino останется включенным. Если вы хотите выключиться, просто выключите GPIO, отключив M2, что затем позволит R1 снова поднять затвор M1, отключив питание.
Такая договоренность означает:
- Вы можете контролировать входное напряжение выше 5 В (благодаря тому, что M2 фактически переключает силовой МОП-транзистор)
- Вы получаете мягкий переключатель для включения питания.
- Ток, потребляемый цепью управления, по сути представляет собой входное напряжение, разделенное на сопротивление R1 (вы можете безопасно увеличить его, если хотите уменьшить потребление тока — 1 МОм вполне подойдет).
- Вы можете разместить всю остальную схему на стороне Arduino M1, чтобы при выключении питания отключалось питание (во избежание чрезмерного разряда батарей)
- Вы переключаете VCC, а не GND (переключение GND может вызвать всевозможные проблемы).
спасибо, я понял, это работает нормально, но я хочу автоматически включать Arduino (без переключателя) при восстановлении питания. Если мы используем блок питания (вместо аккумулятора). При отключении питания все это означает автоматическое сохранение данных в памяти (для питания Atmega на это время имеется суперконденсатор), выключение Atmega и при восстановлении питания автоматическое включение Atmega. еще раз и прочитать данные и так далее......., @Vasekdvor
Похоже, вам нужен правильный PMIC (или создать его с небольшим MCU). Может быть, добавить небольшой 8-контактный ATTiny для управления питанием..., @Majenko
Лично я в этой ситуации обычно использую PIC10F200-I/OT. Действительно маленький, очень маломощный, очень дешевый, его очень сложно программировать, имея всего 256 слов инструкций и 16 байт ОЗУ. Хотя идеально подходит для чего-то вроде простого PMIC..., @Majenko
Я думаю, что не смогу этого избежать (используя PMIC или любую другую специальную микросхему). Я подумал, можно ли создать его с простым дизайном, но беспокоюсь, что для этого мне действительно понадобится специальная микросхема., @Vasekdvor
Вполне возможно создать схему для этого, но эта схема будет значительно сложнее с добавлением автоматического включения питания - и, вероятно, будет стоить дороже, чем PMIC или небольшой микроконтроллер с низким энергопотреблением. Вот почему существуют PMIC — потому что они дешевле и удобнее, чем пытаться свернуть собственную схему., @Majenko
Хорошо, поэтому я останусь при своем запасном плане: я буду использовать MAX809 для включения/выключения транзистора, но, посмотрев на него, я могу использовать вашу схему, в которой я подключу выход MAX809 к затвору транзистора M1. Тогда у меня будут преимущества, которые вы написали, но в этой ситуации мне придется использовать MAX810 (у которого инвертированный выход по сравнению с 809), @Vasekdvor
- Функция freeMemory() из библиотеки memoryfree не возвращает уменьшенное значение в arduino UNO
- Библиотека MemoryFree, демонстрирующая нестандартное поведение..!
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Как очистить кучу памяти в esp32
- SIM800C, CPIN: НЕ ГОТОВ (КОД ОШИБКИ: +CME ОШИБКА: 10)
- Последовательная печать из флэш-памяти (F() macro, PROGMEM, sprintf_P, SPTR)
- Atmega328p — переход на низкое энергопотребление 1,8 В с использованием генератора 4 МГц — прошивка загрузчика
- Можно ли использовать WiFi и Bluetooth/BLE в одном проекте ESP32?
Вы должны использовать MOSFET канала ap и переключать питание, а не землю. Приду домой, нарисую тебе схему., @Majenko
@Majko Спасибо, я ценю это, но я уже подумал об этом и думаю, что это будет та же ситуация, но со всеми обратными логическими состояниями. Если я правильно думаю, то на МОП-транзисторе p-канала, когда на базе высокий уровень, полевой транзистор ВЫКЛЮЧЕН, и наоборот. Итак, если во время работы Atmega я отправлю НИЗКИЙ уровень на базу, транзистор ВКЛЮЧЕН, и все в порядке, но когда я хочу выключить Atmega, Atmega отправит ВЫСОКИЙ уровень на базу, транзистор ВЫКЛЮЧЕН, а подтягивающий резистор зафиксирует его ВЫСОКИМ ( пока крышка не разрядится), но когда питание восстанавливается, резистор сохраняет его ВЫСОКИМ, и Atmega не запускается., @Vasekdvor
если я использую понижение вместо повышения, то, когда есть силовой транзистор, он вытягивается резистором и включается (хорошо). Когда я хочу выключить транзистор, atmega отправит HIGH на базу транзистора, и транзистор выключится (хорошо), но когда atmega умрет, на базе транзистора больше не будет HIGH, и понижающий резистор включит транзистор, и у нас тот же цикл, что и с текущей схемой. Извините, я использую BASE, я знаю, что у MOSFET есть GATE, а не BASE...., @Vasekdvor
Хитрость заключается в том, чтобы Arduino поддерживала систему включенной, а не приказывала ей выключаться., @Majenko
Просто вопрос: вы используете Arduino со стабильным опорным напряжением или с VCC? если вы используете VCC в качестве эталона и используете делитель напряжения для обнаружения VCC, вы никогда не увидите никаких изменений..., @frarugi87
@frarugi87 да, я знаю это, я забыл об этом упомянуть. Я буду использовать внутренний аналоговый источник опорного напряжения 1,1 В., @Vasekdvor