Ich habe kürzlich ein Problem mit dem EEPROM eines PIC16F877A gefunden, der zur Steuerung der Drehzahl eines Gleichstrommotors verwendet wird. Der Antrieb soll auch bei Stromausfall mit der zuletzt eingestellten Drehzahl arbeiten. Aber das Problem ist manchmal (nicht immer), dass nach dem Stromausfall die eingestellte Geschwindigkeit (die aus dem EEPROM gelesen wird) nicht mit der zuletzt eingestellten Geschwindigkeit übereinstimmt. Wenn dieses Problem auftritt, wird der Wert normalerweise auf den Standard-EEPROM-Wert 255 geändert (aber nicht immer, einige zufällige Werte auch). Was könnten die möglichen Ursachen sein?.
Nehmen wir an, Sie haben eine Art Linearregler, der Ihren PIC speist. Dieser Regler hat wahrscheinlich viel Headroom (sagen wir, er hat 12 V Eingang und 3,3 V Ausgang). Der Regler funktioniert gut, obwohl der Eingang beispielsweise nur 8 V beträgt.
Sie müssen diesen Abschaltpunkt wählen und ihn einem Komparator zuführen, der ein logisches Signal namens Power Good (PG) erzeugt. Dieses Signal geht aus, lange bevor der Regler nicht mehr regelt und der BSB einsetzt.
Wenn PG nicht vorhanden ist, sollten Sie keine EEPROM-Schreibvorgänge durchführen.
Sie sollten den Sollwert auch mit einem Kontrollwert speichern. Ein einfaches Schema besteht darin, das 1er-Komplement der Geschwindigkeit zu verwenden. Bei einer Geschwindigkeit von 0x88 ist das 1er-Komplement beispielsweise 0x77. In C:
typedef struct {
uint8_t speed;
uint8_t speed_complement;
} SetpointSlot;
Wenn ein Sollwert-Slot einen ungültigen Prüfwert hat, ignorieren Sie ihn einfach.
Sie sollten sogar mehrere SetpointSlots speichern - mindestens zwei. Wenn Ihr EEPROM seitenweise ist, dürfen die Slots keine Seiten überqueren und müssen sich über zwei Seiten erstrecken (oder mehr Seiten, wenn sie nicht alle auf zwei Seiten passen). Bei 2 Sollwerten haben Sie beispielsweise jeden auf einer eigenen Seite.
Beim Starten:
speed == ~speed_complement
).Beim Speichern eines neuen Werts gehen Sie wie folgt vor:
Ignacio Vazquez-Abrams
Jippie
raforanz
raforanz
Ignacio Vazquez-Abrams