Auflösung des Widerspruchs, im ausgeruhten Zustand:...warum sollte das nicht gehen:
https://docs.arduino.cc/learn/built-...raries/eeprom/
Eproms sind UV-Löschbar. Sowas hat der ATmega328 nicht und es würde auch dem Zweck nicht entsprechen.
Den internen EEprom zu verwenden ist eine andere Sache und wäre möglich.
Weitere Überlegung:
Ob man das unbedingt benutzen sollte, ist nicht ganz klar. Es kommt vor allem auf die Menge der zu schreibenden Daten an. Nach Recherche hat der interne immerhin 100.000 Schreibzyklen pro Byte mit insgesamt 1024 Byte. Wie viele Positionsänderungen sollen denn gespeichert werden? Wenn es 1 Pro Konfiguration ist: absolut kein Problem. Je nach Schreibhäufigkeit sollte man sich eine Strategie bezüglich des Schreibens ausdenken, um die Lebensdauer zu verlängern (Wear Leveling). Man könnte ein Speichermenge als Ringpuffer nutzen. Beispielsweise 512Byte für 2Byte Positionsdaten. Das erhöht die Lebensdauer auf 100.000 x 256.
---
Die ursprüngliche Diskussion hat sich durch die kritischen Anmerkungen zum EEPROM und die terminologische Verwirrung von meinem Vorschlag entfernt.
Meine Lösung basiert auf einer proaktiven, verschleißarmen Speicherung während der Aktion und einer passiven Reaktion bei Stromausfall.
Wann speichern? Bei sicherer Spannungsversorgung. Die aktuelle Position wird sofort im externen Flash gespeichert, nachdem der Schrittmotor seine Bewegung abgeschlossen hat.
Der W25Q80 SPI Flash ist günstig, bietet 1 MB Speicherplatz und schont das interne EEPROM. Kein eventuelles Risiko des Totalausfalls des ATmega328P-PU bei unsicherer Speicherung während Stromausfalls im internen EEPROM.
Wear Leveling: Die einfache Implementierung eines Ringpuffers im Speicher verteilt die Schreibzyklen über Tausende von Sektoren und sorgt für eine praktisch unbegrenzte Lebensdauer (in Verbindung mit der hohen Speicherkapazität und den im Verhältnis extrem geringen Datenmengen).
Stromausfall während der Bewegung:
Wenn der Stromausfall während der Verstellung des Motors oder des Speicherns auftritt, ist die tatsächliche Position des Motors grundsätzlich unsicher und die gespeicherte Daten könnten korrupt sein. Ein Goldcap würde den ATmega und Speicher am Laufen halten und für eine sichere Speicherung im letzten Moment sorgen, aber er könnte keine korrekte Position des Motors speichern, da diese physikalisch bereits verloren ist.
Neustart und Wiederherstellung:
Startverhalten: Beim nächsten Start liest der ATmega den letzten gültigen Datensatz aus dem Flash.
Sicherheitsmodus: Sollte der Motor durch den Stromausfall manuell verstellt worden sein, reicht die Speicherlösung allein nicht aus. Dann muss das System entweder eine Referenzfahrt durchführen (z.b. zurück zum Endschalter) oder einen Absolutwert-Encoder verwenden.
Da das Programm nicht wissen kann ob der Motor seine Position noch erreicht hat, wäre nach dem Neustart eine Referenzfahrt das sichere Szenario (ohne Absolutwert-Encoder).
Deep Power-Down Mode des W25Q80RVSNJM: Die typische Stromaufnahme beträgt <1µA bei einer Versorgungsspannung von 2.7V bis 3.6V. Damit passt der Flash perfekt zum ATmega328P im Power-Down Mode. Um eine Batterie zu schonen wäre es sinnvoll den Atmega328P-PU mit 3.3V zu betreiben. Mit 8MHz internem Oszillator oder externen 8MHz (was die Stabilität verbessert).
Lesezeichen