EEPROM-Ausdauer im Energiezähler?


7

Ich entwerfe einen Energiezähler für Stromabrechnungszwecke, indem ich einen analogen Energiezähler umwandle und die Anzahl der Impulse zähle, die von der LED des analogen Zählers abgegeben werden. Da die Stromversorgung jederzeit unterbrochen werden kann, muss die Anzahl der Impulse im nichtflüchtigen Speicher gespeichert werden. Ich habe die Datenblätter des Atmel EEPROM AT24C0X und die eingebauten EEPROMs von ATmega328 und PIC16F877A gesehen und festgestellt, dass alle eine READ / WRITE-Lebensdauer von maximal 1000000 haben.

Wie wird in diesem Zusammenhang das Problem der Lebensdauer des EEPROM in kommerziellen Energiezählern angegangen?


2
Könntest du keine andere Art von Sram verwenden? datasheets.maximintegrated.com/de/ds/DS1350W.pdf bietet unbegrenzte Lese- / Schreibzyklen und eine Aufbewahrungsdauer von 10 Jahren. Natürlich gibt es einfachere Chips, die SPI / andere serielle Verbindungen mit sehr geringen Pin-Zahlen verwenden
Grady Player

Antworten:


16

Ich würde nicht jedes Ereignis in das EEPROM schreiben. Die meiste Zeit haben Sie Strom, also halten Sie die Live-Zählung im RAM.

Die Menge an Energie, die benötigt wird, um den Live-Wert vom RAM zum EEPROM zu speichern, ist ziemlich gering. Verwenden Sie einen Kondensator, um genügend Energie zu speichern, um das Mikro lange genug zu betreiben, nachdem ein Stromausfall festgestellt wurde, um die Live-Daten in das EEPROM zu kopieren, und schalten Sie es dann sauber aus. Sie sollten höchstens ein paar 10s ms benötigen, vielleicht nur ein paar ms. Sie müssen auch in der Lage sein, einen Stromausfall früh genug zu erkennen, damit sich noch Energie in der Kappe befindet, um die saubere Abschaltsequenz durchzuführen. Dies sollte jedoch nicht schwer sein.

Nehmen wir zum Beispiel an, das Mikro benötigt 20 mA bei 3,3 V (das ist für diese Art von Anwendung eigentlich ziemlich hoch) und das Herunterfahren dauert 20 ms. Das ist (20 mA) (3,3 V) (20 ms) = 1,3 mJ. Eine auf 12 V geladene 470-µF-Kappe hält beispielsweise 34 mJ. Angenommen, Sie halten die Kappe normalerweise auf 12 V aufgeladen und erkennen einen Stromausfall, wenn sie auf 11 V abfällt. Zu diesem Zeitpunkt sind noch 28 mJ übrig. Um 2 weitere mJ herauszuholen, muss es nur auf 10,6 V abgelassen werden.

Dies sind nur Zahlen, die ich als Beispiel aus der Luft gezogen habe. Eine 16-V-Kappe mit 470 µF wäre keine große Sache für das Gerät, aber selbst das ist in diesem Fall eindeutig mehr als notwendig. Es geht darum zu zeigen, dass diese Methode durchaus machbar ist.


2
+1, Mikros sind schnell und können blitzschnell reagieren. Der schwierige Teil in meinem Kopf ist ironischerweise, weil Sie es mit einem langsamen 60-Hz-Leistungssignal zu tun haben. Es müsste genügend Headroom zwischen Laden / Entladen und dem, was auch immer Ihr LDO-Eingang ist, um zuverlässig auszulösen.
Nick T

+1; das war meine unmittelbare Reaktion und ich fing an, es als Kommentar zu posten; dann habe ich deins gesehen. Wenn Sie Probleme haben, dies zu visualisieren, stellen Sie sich die Kappe und die Stromerkennung als "Mikro-USV" vor, die dem "Computer" (dem Messgerät) signalisiert, dass er sauber heruntergefahren werden soll, bevor die USV leer wird.
Keshlam

8

Die Lösung des Problems ist relativ einfach. Sie akkumulieren die Impulszahl an einem regulären RAM-Speicherort. Anschließend kopieren Sie alle 10 Minuten den aktuellen Wert des RAM-basierten Zählers in das EEPROM. Mit dieser Strategie hält ein EEPROM mit einer Lebensdauer von einer Million Zyklen etwa 19 Jahre. Für die meisten Produkte ist dies ein guter Vergleich zum erwarteten Produktlebenszyklus.

Wenn Sie einen plötzlichen Stromausfall haben, verlieren Sie höchstens 10 Minuten an Impulsakkumulation.

Es gibt eine zusätzliche Strategie, die für diese Art der Anwendung von EEPROM berücksichtigt werden sollte. Aufgrund der Möglichkeit eines plötzlichen Stromausfalls und einer möglichen Beschädigung des EEPROM-Schreibvorgangs sollten Sie die Daten immer mit einem einfachen 1-Byte-XOR-Prüfcode im EEPROM speichern, damit Sie die EEPROM-Daten als gut validieren können. Wenn Sie dann alle 10 Minuten die Daten speichern, speichern Sie ZWEI Kopien der Daten und des Prüfcodes. Stellen Sie sicher, dass eine Kopie vollständig gespeichert ist, bevor Sie mit der zweiten Kopie beginnen. Der Grund für das Speichern der beiden Kopien besteht darin, dass bei einem Stromausfall beim Schreiben einer Kopie die andere Kopie noch vorhanden ist. In dem Fall, dass der erste Speichervorgang beschädigt wird, behält die zweite Kopie die Daten des vorherigen 10-minütigen Speichervorgangs bei.

Lesen Sie bei jedem Start Ihres Mikrocontrollers die erste Kopie der Daten aus dem EEPROM in den RAM-Arbeitsbereich und überprüfen Sie den Prüfcode. Wenn die Prüfung in Ordnung ist, fahren Sie mit dem normalen Produktbetrieb fort. Wenn die erste Prüfung schlecht ist, lesen Sie die zweite Kopie der Daten aus dem EEPROM ein und überprüfen Sie sie. Wenn diese Kopie in Ordnung ist, können Sie mit dem normalen Betrieb fortfahren. Für den unwahrscheinlichen Fall, dass die beiden Prüfcodes fehlerhaft sind, müssen Sie Ihren Zählerwert auf Null zurücksetzen und dann das Home Office über ein Problem informieren.

Wenn Ihr Produkt einen normalen vom Benutzer initiierten Ein- / Ausschaltvorgang hat, können Sie die Daten in diesem Fall im Rahmen Ihrer normalen Ausschaltsequenz im EEPROM speichern. Damit dies effektiv ist, muss die Ausschaltanforderung als Signal an den Mikrocontroller gesendet werden, damit dieser alle Details der letzten Sekunde wie diese ausführen kann. Anschließend führt eine separate, vom Firmware gesteuerte Ausgabe des Mikrocontrollers die Aktion zum Ausschalten der Stromversorgung aus.

Ich habe dieses Schema in mehreren kommerziellen Produkten mit gutem Erfolg verwendet. Es liegt etwas außerhalb des Rahmens dieser Antwort, den einfachen 1-Byte-XOR-Prüfcode zu erörtern, mit dem die Datengültigkeit aus dem EEPROM überprüft wird. Das heißt, ich kann diesen Algorithmus mit jedem teilen, der interessiert ist.


Der Energiezähler wird mit Strom versorgt. Es gibt keine Gewissheit, wann der Strom ausfällt. Wie gehe ich bei einem Stromausfall mit der Situation um?
Debidutta Pattanaik

1
Sie behandeln es so, wie ich es in meiner Antwort ausführlich beschrieben habe. Wenn die Stromversorgung höchstens ausfällt, verlieren Sie die Akkumulation der Impulszahl seit dem letzten EEPROM-Speichervorgang. Dieses Schema mag einigen Leuten inakzeptabel erscheinen, weil Sie einige Zählungen verlieren können, aber Sie müssen das gegen die Häufigkeit abwägen, mit der der Stromausfall auftritt.
Michael Karas

2
Wenn das von mir beschriebene einfache EEPROM-Schema "nicht gut genug" ist, müssen Sie auf einen externen seriellen RAM zurückgreifen, der von einer Batteriezelle oder einem Super-Cap gesichert wird. Da viele Produkte eine RTC-Funktion haben, kann es vorteilhaft sein, den RTC-Chip auszuwählen, der einige RAM-Zellen enthält, die für diese Art der Parameterspeicherung verwendet werden können.
Michael Karas

1
Ja, Sie haben Recht - WENN Sie 1000 plötzliche Leistungsverluste haben. In der Regel ist dies jedoch nicht der Fall, und der geringe Verlust lässt sich leicht über die Kosten komplexerer Produktdesigns rechtfertigen, bei denen eine Sicherungsstrategie vom Typ Batterie oder Supercap für einen RAM verwendet wird. Supercaps sind teuer und finnisch und Batterien müssen ausgetauscht werden - beides ist negativ für ein Produkt, das Sie gerade entwickeln.
Michael Karas

1
Als Verbraucher wird die Tatsache, dass Sie gerade meinen Strom abgeschaltet haben, nicht gemildert, wenn Ihnen die letzten 10 Minuten Strom nicht in Rechnung gestellt werden.
Nick T

3

Ich erinnere mich, dass ich aus der Ferne einen Atmel Application Note zu diesem Thema gelesen habe. Siehe AVR101 über die Technik der Hochleistungs-EEPROM-Speicherung unter Verwendung eines Ringpuffers und Bereitstellung eines Rücksetzschutzes.


3

1.000.000 Löschzyklen sind eine Menge, aber Sie können das schnell ausbrennen, wie Sie festgestellt haben. Bei einmal pro Sekunde gemessenen Werten würde dies in 11,6 Tagen erreicht werden.

Wie bereits erwähnt, ist das Speichern im RAM und das gelegentliche Schreiben in das EEPROM eine Möglichkeit.

Eine andere Möglichkeit ist die Verwendung von FLASH EEPROM. Bei FLASH kommt es nur auf die Anzahl der Löschvorgänge an. Sie können viele Male schreiben und 1s ohne Strafe in 0s verwandeln. Wenn Sie nur wenige Messwerte und relativ viel FLASH-Speicherplatz haben, können Sie Datensätze verwenden.

Löschen Sie die Daten und lassen Sie alle 0xFFs.

Für Schreibvorgänge: Schreiben Sie nacheinander in den EEPROM-Bereich. Wenn Sie voll sind, löschen Sie alles und beginnen Sie von vorne. Wenn Ihr Datenwert alle 0xFFs ist, müssen Sie ihn um ein LSB ändern, um zu vermeiden, dass er wie ein leerer Datensatz aussieht. In Ihrem Fall wäre das sowieso ein Überlauf.

Zum Lesen: Suchen Sie nach dem Datensatz all-0xFFs und sichern Sie einen. Wenn Sie das Ende erreichen und kein All-0xFF-Datensatz vorhanden ist, ist dies die letzte Position.

Die FLASH-Ausdauer ist normalerweise geringer ... sagen wir 100.000. Ein einfacher 1-Mbit-FLASH hätte jedoch mit dieser Methode genügend Speicherplatz für fast 104 Jahre Speicherplatz.

Für ein kommerzielles Produkt wie dieses sollten Sie bei EEPROM-Schreibvorgängen die Sicherheit eines Stromausfalls haben. Fügen Sie entweder eine Stromausfallerkennung und genügend Backup-Leistung (Supercap, was auch immer) hinzu, um einen Schreibvorgang abzuschließen ... oder führen Sie die Schreibvorgänge ausfallsicher aus. Zu diesem Zweck können Sie das EEPROM in zwei Hälften teilen, beim Schreiben zwischen den Hälften wechseln und eine CRC mit dem Datensatz schreiben. Beim Lesen wird auf beiden Seiten nach dem neuesten Datensatz mit einem gültigen CRC gesucht. Die Hälften müssen aus Sicherheitsgründen mit einem Löschblock ausgerichtet sein.

Die Energieversorger wollen jedoch in der Regel mehr als nur den gesamten Stromverbrauch. Überlegen Sie, wie viele Zählungen / Sekunde Sie erhalten, und speichern Sie diese Zahlen ebenfalls. Die meisten Versorgungsunternehmen berechnen gewerblichen Kunden auch die maximale Leistung, die sie in einem bestimmten Intervall von etwa 15 Minuten benötigen.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.