Zum Inhalt springen

Mikrocontroller Status
persistent speichern

Oft möchte man nach dem Ausschalten den Status des Programms oder des Controllers speichern, damit beim nächsten Einschalten an der gleichen Stelle weitergemacht werden kann. Wie dies einfach realisiert werden kann, beschreibt dieser Artikel

Einleitung

Häufig möchte man den Zustand des Controllers nach dem Abschalten der Betriebsspannung erhalten, oder bestimmte Einstellungen sollen bis zum nächsten Einschalten erhalten bleiben.

Viele Mikrocontroller bieten dafür ein integriertes EEPROM. Diese sind in der Regel nicht besonders groß, reichen aber für die meisten Anwendungen aus. Leider sind diese persistenten Speicher nur begrenzt beschreibbar und die Grenze ist bei unbedachter Speicherstrategie schnell erreicht. Wenn das EEPROM dann im Betrieb versagt, ist das Problem nicht mehr zu lösen.

Schreibt man die Daten nach jeder Änderung weg, dann summieren sich die Schreibzyklen mit der Zeit sehr schnell. Hinzu kommt, daß der Controller durch die zeitaufwendigen Schreibzugriffe stark ausgebremst wird. Es wäre also sinnvoll, die Daten einmalig, kurz vor der Abschaltung zu speichern.

Dieser Artikel stellt mögliche Lösungen vor, diskutiert die damit verbundenen Probleme und versucht die Vor- und Nachteile der einzelnen Lösungen herauszustellen.

Ausgangssituation

Zwei Probleme gilt es zu lösen. Zum einen muß die Spannung für den Controller so lange aufrecht erhalten werden, bis dieser die Daten gespeichert hat, was je nach Menge der Daten einige Zeit in Anspruch nehmen kann. Schreibvorgänge in das EEPROM sind sehr langsam und liegen typischerweise im Millisekunden-Bereich (pro Byte). Des weiteren muß ein Signal für den Controller erzeugt werden, das den Speichervorgang auslöst.

Das erste Problem ist leicht durch einen Pufferkondensator zu lösen, der die Betriebsspannung aufrecht hält, wobei die Kapazität abhängig von Last und Zeit ist. Sie kann mit folgender Formel errechnet werden:

C=((IL*t)loge(UCU0)*UC)

Sollen beispielsweise bei einer Versorgungsspannung (U0) von 5V nach 35ms (t) noch 4V (UC) anliegen, benötigt man bei einem Laststrom vom 5mA einen Kondensator von 196 µF. Bei einer Last von 50mA sind das dann schon 2000 µF.

Für die Erzeugung des Auslösers für die Speicherung muß ein Betriebsspannungsabfall frühzeitig erkannt werden. Je früher dieser Abfall erkannt wird, desto länger kann die Pufferzeit des Kondensators genutzt werden.

Hierfür bietet sich die Verwendung eines Komparators an, der die Betriebsspannung mit einer stabilen Referenzspannung vergleicht. Die Referenzspannung muß dazu so lange stabil bleiben, bis die abfallende Betriebsspannung unter die Referenzspannung gefallen ist.

Eine stabile Referenzspannung liefert der Pufferkondensator. Die Eingangs- (Meß-) und Referenz-(Puffer-) Spannung dürfen sich allerdings nicht gegenseitig beeinflussen und werden durch eine Diode voneinander entkoppelt. Der Komparator erhält keine Mitkopplung, da eine Hysterese hier nicht gebraucht und eher störend wirkt. Dadurch liefert der Komparator in der Begrenzung einen sauberen Impuls mit steilen Flanken.

Lösung

In [1] wird eine Lösung vorgestellt, die schon ganz gut ist. Abbildung 1 zeigt den Schaltplan.

Schaltplan Elektor
Abbildung 1 – Schaltplan Elektor

Dort wird ein Komparator eingesetzt, dem die Eingangsspannung vom Netzteil über den Spannungsteiler R1/R2 direkt zugeführt wird. Der Teiler R1/R2 ist so dimensioniert, daß dem Komparator an seinem nicht invertierenden Eingang etwa die Hälfte der Netzteilspannung zugeführt wird. Der Kondensator C2 glättet die Spannung ein wenig um Nulldurchgänge zu eliminieren.

Der Pufferkondensator liegt hinter der Entkopplungs-Diode und glättet die Spannung für den Spannungsregler. Über den Spannungsteiler R3/R4 wird davon die Referenzspannung abgeleitet, die dem invertierenden Eingang des Komparators zugeführt wird. Sie muß etwas kleiner sein als die Meßspannung. Der Komparator liefert dann im Betrieb einen High-Pegel an seinem Ausgang.

Beim Abschalten sinkt die Ausgangsspannung des Netzteils schneller als die Referenzspannung, die vom Pufferkondensator gehalten wird. Die Diode D1 verhindert die Entladung des Kondensators über das Netzteil. Sinkt der Pegel am nicht invertierenden Eingang unter den am invertierenden Eingang, kippt der Komparator und erzeugt eine fallende Flanke an seinem Ausgang. Da der Begrenzungspegel über den Widerstand R5 auf die Betriebsspannung des Controllers gezogen wird, kann das Signal direkt zum Controller geführt werden.

Das funktioniert soweit ganz gut, aber …

Die Diode liegt im Versorgungszweig. An ihr fallen 0,7 V ab. Dadurch reduziert sich der Regelbereich des Spannungsreglers, was allerdings auch dessen Verlustleistung reduziert. An der Diode wird je nach Last, zusätzliche Leistung verbraucht und in Wärme umgesetzt.

Die Dimensionierung der Spannungsteiler ist kritisch, da die zu überwachende Spannung stark pulsiert. Eine stärkere Glättung an dieser Stelle würde aber die Pufferung aushebeln. Der Pufferkondensator müßte deutlich größer bemessen werden, weil die Funktionalität darauf basiert, daß die Spannung vor der Diode schneller abfällt als dahinter. Die Auslösung durch den Komparator würde erheblich verzögert, was wiederum noch mehr Pufferkapazität erfordern würde. Auch die Störanfälligkeit ist durch die fehlende Glättung ziemlich groß.

Durch die Pufferung der Spannung vor dem Regler, wird der Pufferkondensator schneller entladen, da auch die Verlustleistung des Reglers zur Entladung des Puffers beiträgt, was wieder eine hohe Pufferkapazität erfordert.

Setzt man anstelle eines einfachen Netzteils ein Schaltnetzteil ein, was einige Vorteile mit sich bringt, funktioniert das Ganze nicht mehr. Die meisten Schaltnetzteile haben am Ausgang einen ziemlich großen Glättungskondensator, sodaß die Spannung beim Abschalten nur sehr langsam sinkt. Die Pufferung nützt dann nichts mehr, es sei denn, man versucht einen noch größeren Pufferkondensator einzusetzen, was dann jedoch zu sehr langen Abschaltzeiten führt.

Verbesserte Lösung

Wird der Komparator hinter den Regler verschoben, ergeben sich eine Reihe von Vorteilen:

  • Der Regler entkoppelt selbst die Referenzspannung, die hinter dem Regler abgegriffen wird. Die Diode kann entfallen und daraus folgt…
    • Der Spannungsregler verfügt über einen größeren Regelbereich. Das bedeutet, daß die Spannung hinter dem Regler noch stabil ist, während der Spannungsabfall vor dem Regler bereits im Gange ist.
    • Es tritt keine Verlustleistung an der Diode auf
  • Der Puffer für die Versorgungsspannung des Controllers liegt hinter dem Regler und folglich…
    • Die Verlustleistung des Reglers trägt nicht zur Entladung des Puffers bei
    • Die Referenzspannung für den Komparator wird nicht durch den Puffer sondern durch den Regler aufrecht und stabil gehalten.
    • Der Puffer wird nur noch zur Versorgung des Controllers benötigt. Die Kapazität reduziert sich dadurch erheblich.
    • Die Meßspannung kann geglättet werden, was die Störanfälligkeit reduziert. Die Kapazität des Glättungskondensators ist für die Funktion unerheblich und unabhängig vom Pufferspeicher

Die Funktionalität beruht nicht mehr darauf, daß die Meßspannung schneller abfällt als die Referenzspannung, die durch den Puffer noch ein wenig aufrecht erhalten wird. Bei dieser Variante, wird die Referenzspannung durch den Regler bereit gestellt und der Komparator führt eine Messung der Eingangsspannung gegen die Referenz durch. Dabei ist es unerheblich, wie schnell die Spannung abfällt. Sobald sie die Referenzspannung unterschreitet, löst der Komparator aus.

Verbesserter Schaltplan
Abbildung 2 – Verbesserter Schaltplan

Voraussetzung ist hier lediglich, daß die Schwelle für die Messung im Regelbereich des Reglers liegt, sodaß der Regler noch arbeitet, wenn die Schwelle unterschritten wird. Deshalb spielt es keine Rolle, wie schnell die Spannung abfällt und wie groß der Glättungskondensator bemessen ist. Es lassen sich also neben klassischen linearen Netzteilen auch Schaltnetzteile verwenden.

Die Funktionalitäten sind klarer voneinander getrennt. Der Spannungsabfall wird durch die Messung des Komparators detektiert und ist völlig entkoppelt von der Pufferkapazität, die nur noch für den Controller zum Speichern benötigt wird.

Bei dieser Lösungsvariante ist aber zu beachten, daß die Spannung hinter dem Regler niemals größer werden darf, als vor dem Regler, was zu dessen Zerstörung führen würde. Im Schaltplan ist eine Sicherheits-Diode im Rückkopplungszweig des Reglers eingefügt. Ist die Kapazität des Glättungskondensators vor dem Regler bekannt, genügt es auch, hinter dem Regler eine kleinere Kapazität zu verwenden. Dann kann die Diode entfallen.

Die Schaltung in Abbildung 2 hält die Spannung nach Auslösung durch den Komparator bei einem Laststrom von 5mA noch ca. 17ms. Die Eingangsspannung wird durch den ersten Spannungsteiler auf etwa 4,5V halbiert, während die Referenzspannung hinter dem Regler abgegriffen wird und mit R3/R4 auf etwa 4,1V eingestellt wird. Der Komparator kippt also, wenn die Eingangsspannung auf 8,2V gefallen ist (Regelbereich 9V – 7V). Der Kondensator C1 verbessert die Ausgangssignal-Flanke und verhindert eine fallende Flanke beim Einschalten.

Das Ausgangssignal des Komparators kann direkt vom Controller verarbeitet werden, da es auf VCC-Pegel liegt.

Abbildung 3 – Komparator Eingänge bei der Abschaltung
Abbildung 4 – Komparator Ein- und Ausgang

Das Oszilloskop zeigt in Abbildung 3, daß die Spannung vom Netzteil nur sehr langsam abfällt (Kanal 1). Die Messung wurde mit einer Last von 100mA durchgeführt. Nach etwa 3,5ms unterschreitet die Spannung, die zu diesem Zeitpunkt noch stabile Referenzspannung von 4,1V (Kanal 2), was zum Kippen des Komparators führt. Nach etwa 10ms (Cursor 2) fällt die Eingangsspannung aus dem Regelbereich heraus und der Regler kann die Ausgangsspannung nicht mehr halten.

In Abbildung 4 ist zu erkennen, daß der Komparator nach weiteren 45ms wieder zurück kippt (Kanal 2), weil die Pufferspannung auf Grund des kleineren Kondensators etwas steiler abfällt. Das ist aber kein Problem, weil nur die fallende Flanke am Controller ausgewertet wird.

Die Pufferspannung steht lange genug um das Speichern sicher abzuschließen. Die Last von etwa 100mA während der Messung sorgt hier für den schnellen Abfall. Im Betrieb ist eine solche Last eher untypisch. In der Interrupt-Routine sollten vor dem Speichern immer alle Verbraucher abgeschaltet werden um die Pufferkapazität klein halten zu können.

Da der Controller abhängig von der CPU-Frequenz auch noch bei Spannungen bis 1,8V (AVR) arbeitet, würde selbst bei dieser hohen Last genügend Zeit zum Speichern der Daten verbleiben.

Software

Die vom Komparator erzeugte Flanke wird an einen Controller-Pin gelegt und löst dort einen externen Interrupt (INT0/INT1) aus. Dieser muß entsprechend konfiguriert sein (Listing 1).

Die Interrupt-Service-Routine (ISR) sollte zunächst alle Verbraucher abschalten um den Laststrom zu reduzieren und dann die zu sichernden Daten in das EEPROM schreiben. Nach dem Speichern sollten alle Interrupts deaktiviert werden, damit ggf. weitere Impulse nicht zur erneuten Ausführung der ISR führen. Abschließend kann der Controller dann noch in den Power-Down Modus geschaltet werden, sodaß ab diesem Zeitpunkt keine weiteren Befehle mehr ausgeführt werden.

Analog-Komparator und ADC

Viele Mikrocontroller bringen einen integrierten Analog-Komparator und/oder Analog-Digital-Converter (ADC) mit. Beide können für die Überwachung der Versorgungsspannung genutzt werden, wodurch eine Reihe externer Bauelemente eingespart werden kann.

Die AVR-Controller stellen zudem eine interne Bandgap-Referenz von 1,1V zur Verfügung, die als Referenzspannung genutzt werden kann. Dann wird nur ein Pin für die Meßspannung benötigt. Da die interne Bandgap-Referenz an den nicht invertierenden Eingang des Komparators geschaltet ist, arbeitet der Komparator invers. Die Meßspannung muß durch einen Spannungsteiler auf einen Wert knapp über der Bandgap-Referenz eingestellt werden. Unterschreitet die Meßspannung dann die Referenzspannung, kippt der Komparator und setzt das Flag (ACO). Dieses Flag löst dann den Komparator-Interrupt aus, wenn das so konfiguriert wurde. Die externe Beschaltung reduziert sich damit lediglich auf den Spannungsteiler R1/R2, da die gesamte Funktionalität Controller-intern abgebildet wird. (Siehe auch LED-Dimmer mit natürlichem Steuerungsverhalten). In Listing 2 ist die Konfiguration des internen Komparators eines ATtiny13 dargestellt.

Auch ein ADC kann zur Messung verwendet werden, indem ständig die anliegende Meßspannung konvertiert und mit einem digitalen Referenzwert verglichen wird. Das kostet allerdings durch die häufigen Vergleiche und ständigen Konvertierungen sehr viel Controller-Performance.

Listings

Listing 1 – Initialisierung des externen Interrupts INT0
ISR( INT0_vect )
{
	// shutdown any load


	// save data
	eeprom_busy_wait();
	eeprom_write_block(&data, &ee_data, sizeof(data));
	
	// disable interrupts and shutdown MCU
	GIMSK = 0x00;
	MCUCR |= (1<<SM1) | (0<<SM0) | (1<<SE);
	sleep_cpu();		// power down...
	sleep_disable();
}

int main(void)
{
	// other initialization 


	// init interrupt
	MCUCR = (1<<ISC01);	// set falling edge for INT0
	GIMSK = (1<<INT0);	// activate INT0 Interrupt

	sei();

}

Listing 2 – Initialisierung des internen Komparators
ISR( ANA_COMP_vect )
{
	// shutdown any load


	// save data
	eeprom_busy_wait();
	eeprom_write_byte(&ee_data, data);
	
	// disable interrupts and shutdown MCU
	GIMSK = 0x00;
	MCUCR |= (1<<SM1) | (0<<SM0) | (1<<SE);
	sleep_cpu();		// power down...
	sleep_disable();
}

int main(void)
{
	// other initialization 


	// adc / analog comparator init
	ADCSRB = (0<<ACME);	// disable mux
	ACSR = (1<<ACBG) | (1<<ACIE) | (1<<ACIS1) | (1<<ACIS0);// init comp
	DIDR0 = (1<<AIN1D);	// disable digital input buffer
	_delay_loop_2(10000);	// wait for bandgap reference
	ACSR |= (1<<ACI);	// clear waiting interrupts

	sei();

}

Quellenverweise

  1. R. Reusch, Schnell noch speichern, Elektor Februar 2012, Elektor Verlag – Spannungsausfallerkennung zum Speichern der Daten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Wählen Sie den Stern *

DSGVO Cookie Consent mit Real Cookie Banner