У меня есть эта проблема в текущем проекте.
То, как я с этим справляюсь, - это сохранение значения счетчика в оперативной памяти. Я добавил немного аппаратного обеспечения, чтобы микроконтроллер мог обнаружить низкое исходное входное напряжение питания. Если это так, он останавливает свою работу, сохраняет значение действующего счетчика в EEPROM, а затем ожидает просмотра необработанного напряжения питания. Если он возвращается, с некоторым гистерезисом, то микро по существу перезапускается. В противном случае, если питание продолжит снижаться, микро в конечном итоге остановится. При следующем перезапуске значение счетчика загружается из ЭСППЗУ, затем снова используется в оперативной памяти в ОЗУ до следующего отключения питания.
Это не займет много времени, чтобы записать небольшое значение в EEPROM. Скорее всего, в вашей существующей системе электропитания достаточно накопителя энергии, чтобы вы могли обнаружить понижение напряжения, и при этом у вас достаточно гарантированного времени работы до того, как питание микропроцессора упадет ниже рабочего порога или порога записи EEPROM.
В моем случае единственным дополнительным оборудованием был диод Шоттки, предотвращающий всасывание заряда источника постоянного тока из локального резервуара на пути вниз, и два резистора в качестве делителя напряжения, чтобы микроконтроллер мог считывать необработанное входное напряжение. Остальное прошивка.
Важно отметить, что вы должны следить за напряжением на входе любого конечного источника питания, а не за прямым напряжением питания микро. К тому времени, когда последний становится низким, может быть уже слишком поздно. Надеемся, что существует диапазон напряжений, который ниже худшего случая, когда все работает правильно, и выше того, что требуется для блока питания микро, чтобы гарантировать регулируемое напряжение для микро. В моем случае источником питания микро был стабилизатор напряжения, питаемый от 48 В, поэтому существует большой диапазон, который ниже нормального, но где микро все еще может работать надежно.