-
Die
vorliegende Erfindung betrifft allgemein den Stromverbrauch in einem
Mikrocontroller und insbesondere eine Vorrichtung und ein Verfahren
für die
Taktsteuerung in Operationsmodi mit einem niedrigen Stromverbrauch.
-
Ein
niedriger Stromverbrauch wird zu einem immer wichtigeren Parameter
für Mikrocontroller-Systeme.
Der aktive Stromverbrauch in einem Mikrocontroller-System wird normalerweise
durch die Schaltaktivität
in dem Schaltungsaufbau bestimmt und ist proportional zu der an
der digitalen Logik angelegten Taktfrequenz. Analoge Module weisen
einen im wesentlichen fixen Stromverbrauch auf, der bei niedrigen
Frequenzen oder in Modi mit geringem Stromverbrauch bestimmend sein
kann. Getaktete Peripheriemodule in dem Mikrocontroller-System sind
gewöhnlich
in ungetakteten Ruhemodi mit einem extrem geringen Stromverbrauch
nicht verfügbar,
sodass Anwendungen getaktete Modi mit höherem Stromverbrauch verwenden
müssen.
-
Herkömmliche
Lösungen
zur Reduktion des Stromverbrauchs in einem Mikrocontroller erfordern, dass
der Takt für
die CPU oder für
Peripheriemodule ausgeschaltet wird, wozu gewöhnlich ein oder mehrere Ruhemodi
in dem Mikrocontroller implementiert sind. Diese Lösung kann
ausgeweitet werden, bis alle Takte und analogen Modle ausgeschaltet
wurden und nur ein Leckstrom bleibt, der gewöhnlich um mehrere Größenordnungen
kleiner als der aktive Strom ist. Der Nachteil dieses herkömmlichen
Ansatzes liegt darin, dass die Funktionalität des Geräts reduziert wird, weil die
meisten Peripheriemodule für den
Betrieb mit einem laufenden Takt ausgerichtet sind.
-
Die
hier angegebenen Implementierungen sorgen für eine Reduktion des Stromverbrauchs
in einem Mikrocontroller, indem sie einen Takt in dem Mikrocontroller
für eines
oder mehrere Peripheriemodule in Reaktion auf ein internes oder
externes Auslöseereignis
aktivieren, sodass das eine oder die mehreren Peripheriemodule auf
Ereignisse reagieren können,
während
sie in einem Ruhemodus mit einem geringen Stromverbrauch betrieben
werden. In einigen Implementierungen geben ein oder mehrere Peripheriemodule
in einem Mikrocontroller ein Taktanforderungssignal zu einem Takterzeuger
in dem Mikrocontroller. In Reaktion auf das Taktanforderungssignal
reaktiviert der Takterzeuger eine oder mehrere Schwingungsquellen.
Der Takterzeuger nimmt die Takterzeugung nur für das eine oder die mehreren anfordernden
Peripheriemodule auf, um den Stromverbrauch in dem Mikrocontroller
auf ein Minimum zu reduzieren und die anderen Module in dem Mikrocontroller
nicht zu stören.
-
Das
hier angegebene Schema zur Reduktion des Stromverbrauchs bietet
verschiedene Vorteile gegenüber
herkömmlichen
Techniken zur Reduktion des Stromverbrauchs. Das hier angegebene
Schema zur Reduktion des Stromverbrauchs gestattet, dass Peripheriemodule
in einem Mikrocontroller-System weiterhin
in Ruhemodi mit extrem geringem Stromverbrauch reagieren können, wodurch
Anwendungen mit einem geringerem Stromverbrauch ermöglicht werden.
Das hier angegebene Schema zur Reduktion des Stromverbrauchs kann
in Verbindung mit den meisten bestehenden Peripheriemodulen verwendet werden.
Das hier angegebene Schema zur Reduktion des Stromverbrauchs ist
mit geringen Implementierungskosten und einer geringen Komplexität verbunden.
-
1 ist
ein Blockdiagramm, das ein beispielhaftes Mikrocontroller-System
zum Implementieren einer Taktsteuerung in Betriebsmodi mit einem geringen
Stromverbrauch zeigt.
-
2 ist
ein schematisches Blockdiagramm, das die Verwendung einer asynchronen
Logik in dem Mikrocontroller-System
von 1 zeigt.
-
3 ist
ein Blockdiagramm, das ein beispielhaftes Mikrocontroller-System
mit einer darin implementierten Taktsteuerung für einen Analog-Digital-Wandlerbetrieb
(ADC) mit einem geringen Stromverbrauch zeigt.
-
4 ist
ein Blockdiagramm, das ein beispielhaftes Mikrocontroller-System
mit einer darin implementierten Taktsteuerung für eine I2C-Adressen-Übereinstimmungserfassung
mit einem geringen Stromverbrauch zeigt.
-
5 ist
ein Flussdiagramm, das einen beispielhaften Taktsteuerungsprozess
für eine
Reduktion des Stromverbrauchs zeigt.
-
Das
in dem Blockdiagramm von 1 gezeigte beispielhafte Mikrocontrollersystem 100 implementiert
eine Taktsteuerung in Betriebsmodi mit einem geringen Stromverbrauch.
In einigen Implementierungen kann das System 100 eine Schwingungsquelle 102,
einen Takterzeuger 104, ein oder mehrere Peripheriemodule 106 (nur
ein Peripheriemodul ist gezeigt), einen Event-Handler 108,
eine CPU 110, ein oder mehrere Module 112 mit
einem extrem geringen Stromverbrauch, einen Echtzeit-Zähler (RTC) 114 und
einen oder mehrere externe Unterbrecher 116 umfassen.
-
Der
Takterzeuger 104 steuert (z. B. aktiviert) die Schwingungsquelle 102,
die einen Quelltakt (z. B. CLK_CPU) für die CPU 110 und
Quelltakte (z. B. CLK0) für
ein oder mehrere Peripheriemodule 106 erzeugt. Die Schwingungsquelle 102 kann
ein beliebiger Typ von Schwingungsquelle sein, wobei es sich etwa
um einen Hochgeschwindigkeits-Kristall-Oszillator, einen internen
RC-Oszillator oder einen Phasenregelkreis handeln kann.
-
Der
Quelltakt für
die CPU 110 und die Quelltakte für die Peripheriemodule 106 können in
einem Ruhemodus mit einem geringen Stromverbrauch gestoppt werden,
um einen extrem niedrigen Stromverbrauch für das Mikrocontroller-System 100 vorzusehen.
Während
des Betriebs in dem Ruhemodus mit einem geringen Stromverbrauch
gestattet der Event-Handler 108, dass die getakteten Peripheriemodule 106 auf
interne und/oder externe Ereignisse reagieren, wenn die Peripherietakte
gestoppt sind. In einigen Implementierungen umfasst der Event-Handler 108 einen
Schaltungsaufbau, der zu jedem Peripheriemodul 106 und
zu dem Takterzeuger 104 hinzugefügt werden kann, um das Erzeugen, Senden
und Empfangen von Auslöseereignissen
und Taktanforderungen zu unterstützen.
-
In
einem Modus mit einem extrem geringen Stromverbrauch kann ein bestimmtes
Peripheriemodul 106 (z. B. das Peripheriemodul 0) ein Wecksignal zu
dem Event-Handler 108 senden, um anzugeben, dass das Peripheriemodul 106 einen
Takt zum Betreiben einer Anwendung und/oder Ausführen einer Operation anfordert.
In Reaktion auf das Wecksignal sendet der Event-Handler 108 ein
Taktanforderungssignal (z. B. CLK_REQ0) zu dem Takterzeuger 104. In
Reaktion auf das Taktanforderungssignal steuert oder aktiviert der
Takterzeuger 104 die Schwingungsquelle 102, um
einen Quelltakt zu dem Takterzeuger 104 zu geben. Der Quelltakt
wird durch den Takterzeuger 104 verwendet, um einen Takt
mit einer gewünschten
Frequenz für
das anfordernde Peripheriemodul 106 (z. B. das Peripheriemodul
0) zu erzeugen. In einigen Implementierungen umfasst der Takterzeuger
einen Schaltungsaufbau (z. B. einen Verstärker, eine Taktteilungsschaltung)
für einen
Betrieb mit dem durch die Schwingungsquelle 102 vorgesehenen
Quelltakt, um einen Takt für
das anfordernde Peripheriemodul mit gewünschten Eigenschaften (z. B.
einer gewünschten
Frequenz) vorzusehen.
-
Das
Peripheriemodul 106 kann den Takt zum Ausführen einer
Operation verwenden. Wenn die Operation abgeschlossen ist, kann
das Peripheriemodul 106 die CPU 110 unter Verwendung
eines Interrupt-Signals (IRQ0) wecken. Weil die Schwingungsquelle 102 bereits
läuft,
können
alle Takte in dem Mikrocontroller-System 100 schnell aktiviert werden.
-
2 ist
ein schematisches Blockdiagramm, das die Verwendung einer asynchronen
Logik in dem Mikrocontroller-System 100 von 1 zeigt. 2 zeigt
die durch das System 100 verwendeten Taktsteuerfunktionen
für eine
Reduktion des Stromverbrauchs. Die Taktsteuerfunktionen können unter
Verwendung von verschiedenen Konfigurationen und Schaltungseinrichtungen
implementiert werden. In einigen Implementierungen können die
Funktionen des Mikrocontroller-Systems 100 für die Reduktion des
Stromverbrauchs konzeptuell durch die Schwingungsquelle 102,
den Takterzeuger 104, das Peripheriemodul 106 und
den Event-Handler 108 beschrieben werden. Die Funktionen
des Event-Handlers 108 können konzeptuell durch einen
Flip-Flop 118 (z. B. einen SR-Flip-Flop) oder ein ODER-Gatter 120 beschrieben
werden. Die Funktionen des Takterzeugers 104 können konzeptuell
durch ein Gatter 122 und ein Gatter 124 beschrieben
werden.
-
In
dem Ruhemodus mit einem extrem geringen Stromverbrauch kann ein
internes oder externes Auslöseereignis
durch das Peripheriemodul 106 und den Event-Handler 108 empfangen werden.
Das Auslöseereignis
erfordert, dass das Peripheriemodul 106 eine Operation
ausführt.
Weil das Peripheriemodul 106 ein getaktetes Peripheriemodul
ist und weil sich das Mikrocontroller-System 100 in dem
Ruhemodus befindet, werden die Schwingungsquelle 102 und
der Takterzeuger reaktiviert, um den Takt für das Peripheriemodul 106 zu
erzeugen. In herkömmlichen Systemen
werden alle Quelltakte für
alle Peripheriemodule und die CPU reaktiviert, auch wenn nur ein einzelnes
Peripheriemodul einen Takt anfordert. Dies hat einen unnötigen Stromverbrauch
zur Folge. In dem System 100 empfängt jedoch nur das anfordernde
Peripheriemodul 106 einen Takt, wodurch eine Reduktion
des Stromverbrauchs ermöglicht
wird.
-
In
einigen Implementierungen ist der Event-Handler 108 ein
asynchroner Logik-Block, der in einer Hardware-Beschreibungssprache (z. B. RTL (Register
Transfer Language)) beschrieben werden kann und zusammen mit einem
Schaltungsaufbau für das
Peripheriemodul 106 vorgesehen ist. Der Event-Handler 108 registriert,
wann ein Ereignis auftritt. Diese Registrierung löst ein Taktanforderungssignal
(CLK_REQ) für
den Takterzeuger 104 aus, wodurch angegeben wird, dass
das Peripheriemodul 106 (Peripheriemodul 0) einen Takt
für seinen
Betrieb anfordert. In der gezeigten beispielhaften Konfiguration
wird das Ereignissignal in das ODER-Gatter 120 zusammen
mit einem durch das Peripheriemodul 106 erzeugten OPERATION_GESTARTET-Signal eingegeben,
um anzugeben, dass das Peripheriemodul 106 seinen Takt
verwendet. Durch ein Auslöseereignis
oder den Betrieb des Peripheriemoduls 106 wird der Flip-Flop 118 gesetzt.
Die Ausgabe des Flip-Flops 118 ist CLK_REQ0 für das Peripheriemodul 106.
CLK_REQ0 wird in ein UND-Gatter 124 zusammen mit dem Takt
(CLK) aus der Schwingungsquelle 102 eingegeben. Wenn beide
Signale hoch ausgegeben werden (z. B. logisch ,1'), wird CLK0 zu dem Peripheriemodul 106 gegeben.
Es ist zu beachten, dass der asynchrone Logik-Block in 2 auf eine
beliebige Anzahl von getakteten Peripheriemodulen erweitert werden
kann.
-
Der
Takterzeuger 104 wird mit einem asynchronen Logik-Block erweitert,
der dem Event-Handler 108 ähnlich ist, wodurch sichergestellt
wird, dass eine aktuell gewählte
Schwingungsquelle 102 erneut aktiviert wird. Der Takterzeuger 104 nimmt
die Takterzeugung erneut auf, aber nur für das anfordernde Peripheriemodul 106,
sodass der Stromverbrauch auf ein Minimum reduziert wird und die
anderen Module in dem System 100 nicht gestört werden.
In der gezeigten beispielhaften Konfiguration empfängt das ODER-Gatter 122 in
dem Takterzeuger 104 Taktanforderungssignale von dem Event-Handler 108 und erzeugt
in Reaktion darauf ein Aktivierungssignal. Das Aktivierungssignal
wird durch die Schwingungsquelle 102 empfangen und veranlasst,
dass die Schwingungsquelle 102 erneut aktiviert wird und
den Takt CLK erzeugt.
-
Nachdem
CLK0 erneut aktiviert wurde, kann das Peripheriemodul 106 den
Betrieb wieder aufnehmen. Dabei können ein oder mehrere Signale
zu dem Event-Handler 108 ausgegeben und/oder unterdrückt werden,
um anzugeben, dass CLK0 verwendet wird. Zum Beispiel kann ein OPERATION_GESTARTET-Signal
ausgegeben werden und kann ein OPERATION_ABGESCHLOSSEN-Signal unterdrückt werden,
um anzugeben, dass das Peripheriemodul 9 eine Operation gestartet
hat und CLK0 verwendet. Nachdem die Operation abgeschlossen wurde,
kann das Peripheriemodul 106 die CPU 110 mit einem
Interrupt-Signal (IRQ) aufwecken, das alle Takte schnell aktivieren
kann, weil die Schwingungsquelle bereits läuft. Wenn alternativ hierzu
das Ergebnis der Operation keinen Interrupt erzeugt, kann das Peripheriemodul 106 das OPERATION_ABGESCHLOSSEN-Signal
zu dem Event-Handler 108 ausgeben, der wiederum die Taktanforderung
CLK_REQ0 zu dem Takterzeuger 104 unterdrückt. Der
Takterzeuger 104 entfernt dann CLK0 zu dem Peripheriemodul 106 und
deaktiviert die Schwingungsquelle 102, sodass das System 100 zu
dem Ruhemodus mit einem geringen Stromverbrauch zurückkehrt,
ohne dass die CPU 110 jemals aufgeweckt wird. Das System 100 bleibt
also in dem Ruhemodus mit einem geringen Stromverbrauch, bis ein
neues Auslöseereignis
auftritt.
-
Das
System 100 gestattet, dass eine beliebige Anzahl von Peripheriemodulen
gleichzeitig Takte anfordern. Die Schwingungsquelle 102 wird
aktiv, wenn wenigstens ein Peripheriemodul einen Start seines Taktes
anfordert.
-
3 ist
ein Blockdiagramm, das ein beispielhaftes Mikrocontroller-System 300 zeigt,
das eine Taktsteuerung für
einen ADC-Betrieb mit geringem Stromverbrauch implementiert. Das
Peripheriemodul in diesem Beispiel ist ein ADC 308, der durch
ein Ereignis von dem RTC 314 ausgelöst wird, der durch einen 32-kHZ-Oszillator
mit extrem niedrigem Stromverbrauch getaktet wird. Der ADC 308 überwacht
einen On-Chip-Temperatursensor 304 und
ist eingerichtet, um die CPU 310 zu wecken, wenn die Temperatur über einen
bestimmten durch den Benutzer programmierbaren Schwellwert steigt. Weil
sich die Temperatur langsam verändert,
ist der RTC 314 eingerichtet, um jeweils nach einer Sekunde
ein Auslöseereignis
(z. B. ein Weckereignis) zu erzeugen. Der Modus mit einem geringen
Stromverbrauch weist einen Stromverbrauch von 1 μA auf, wenn der RTC 314 und
der 32-kHz-Oszillator laufen. In dieser beispielhaften Anwendung
werden die Schwingungsquelle 302, der Takterzeuger 306 und der
Event-Handler 312 wie mit Bezug auf 2 beschrieben
betrieben.
-
In
dieser beispielhaften Anwendung weist der ADC 308 während des
Betriebs (mit dem Takterzeuger 306 und der Schwingungsquelle 302)
einen Stromverbrauch von 500 μA
und eine Wandlungszeit von 10 μs
auf. Ohne den Event-Handler 312 und den Takterzeuger 306,
die die asynchrone Logik für
die Taktsteuerung vorsehen, wird der ADC 308 in einem reaktiven
Ruhemodus betrieben, der einen Stromverbrauch von ungefähr 501 μA aufweist.
Mit dem Event-Handler 312 und dem Takterzeuger 306,
die eine asynchrone Logik für
die Taktsteuerung vorsehen, kann der ADC 308 in jeder Sekunde
nur für
10 μA betrieben
werden, was einen durchschnittlichen Stromverbrauch von 1 μA + 500 μA·10 μs = 1,005 μA ergibt.
Der zusätzliche
Stromverbrauch des ADC 308 ist also vernachlässigbar.
-
4 ist
ein Blockdiagramm eines beispielhaften Mikrocontroller-Systems 400,
das die Taktsteuerung für
eine I20-Adressübereinstimmungs-Erfassung
mit einem niedrigen Stromverbrauch implementiert. I2C (inter-integrierte
Schaltung) ist ein serieller Computerbus mit mehreren Mastern, der
verwendet wird, um Peripheriemodule mit niedriger Geschwindigkeit
mit einem Motherboard, einem eingebetteten System oder einem Mobiltelefon
zu verbinden.
-
In
dieser beispielhaften Anwendung kann ein Auslöseereignis eine Startbedingung
auf einem I2C-Bus sein. Die Startbedingung geht einer beliebigen
Adresse auf dem Bus voraus und gestattet, dass ein I2C-Slave-Peripheriemodul 406 ungetaktet
bleibt, bis die Startbedingung auftritt. Der Event-Handler 410 kann
mit einem asynchronen Schaltungsaufbau erweitert werden, um den
Takt niedrig zu betreiben, während
auf den Start des Peripherietakts CLK0 gewartet wird. Die Startbedingung
löst den
Event-Hanlder 410 aus, der eine Taktanforderung (CLK_REQ0) zu
dem Takterzeuger 404 gibt. CLK0 wird aktiviert, sobald
die Schwingungsquelle 402 reaktiviert wurde. Das I2C-Peripheriemodul 406 signalisiert,
dass der Takt benötigt
wird, bis die vollständige
Adresse von dem Bus empfangen wurde. Dabei kann durch einen Startbedingungs-Detektor 412 bestimmt
werden, ob die Adresse mit der Adresse des Slave-Peripheriemoduls 406 übereinstimmt.
Wenn die Adresse übereinstimmt,
wird die CPU 408 geweckt, während ansonsten die Taktanforderung
unterdrückt
oder entfernt wird und das System 400 zu dem Modus mit
einem niedrigen Stromverbrauch zurückkehrt und auf die nächste Startbedingung
wartet. In dieser beispielhaften Anwendung werden die Schwingungsquelle 402,
der Takterzeuger 404 und der Event-Handler 412 wie
oben mit Bezug auf 2 beschrieben betrieben.
-
Wie
in diesen Beispielen gezeigt, ermöglicht das hier angegebene
Schema zur Reduktion des Stromverbrauchs, dass ein beliebiges Peripheriemodul
in einem Modus mit einem niedrigen Stromverbrauch aktiv ist, ohne
dass der Stromverbrauch für den
Modus mit einem niedrigen Stromverbrauch nennenswert erhöht wird
oder eine komplexere Software erforderlich ist. Es können also
mehr Anwendungen in Ruhemodi mit einem niedrigen Stromverbrauch betrieben
werden, ohne dass dadurch der Stromverbrauch erhöht wird. Dank dieses Aufbaus
kann der oben genannte asynchrone Logik-Block in bestehende Peripheriemodule
und Takterzeuger integriert erden, ohne dass deren Aufbau komplexer
vorgesehen werden muss oder ein andersartiger Aufbau vorgesehen
werden muss. Der asynchrone Logik-Block kann mit minimalen Kosten
in den meisten bestehenden Mikrocontroller-Systemen implementiert werden, sodass
der hier beschriebene Aufbau vielseitig und nützlich angewendet werden kann.
-
5 ist
ein Flussdiagramm, das einen beispielhaften Taktsteuerungsprozess 500 zur
Reduktion des Stromverbrauchs zeigt. In einigen Implementierungen
beginnt der Prozess 500, wenn ein Event-Handler eines Peripheriemoduls
ein internes oder externes Auslöseereignis
registriert, das mit dem Peripheriemodul assoziiert ist (502).
In Reaktion auf das registrierte Auslöseereignis wird ein Taktanforderungssignal
durch den Event-Handler unter Verwendung von zum Beispiel einem
asynchronen Logik-Block erzeugt (504). In Reaktion auf
das Taktanforderungssignal wird eine Schwingungsquelle reaktiviert
(506). Ein Peripherietakt wird für das anfordernde Peripheriemodul
unter Verwendung der reaktivierten Taktquelle erzeugt (508).
-
In
der vorliegenden Anmeldung werden viele spezifische Implementierungsdetails
beschrieben, wobei die vorliegende Erfindung jedoch nicht auf diese
Implementierungsdetails beschränkt
ist, die lediglich für
die hier beschriebenen Ausführungsformen spezifisch
sind. Bestimmte Merkmale, die in dieser Beschreibung im Kontext
von verschiedenen Ausführungsformen
beschrieben werden, können
auch in einer alternativen Ausführungsformen
gemeinsam implementiert werden. Umgekehrt können bestimmte Merkmale, die
hier im Kontext einer bestimmten Ausführungsform beschrieben werden,
auch separat in verschiedenen Ausführungsformen oder in beliebigen
anderen Kombinationen implementiert werden. Und obwohl die Merkmale
hier in bestimmten Kombinationen beschrieben und auch derart beansprucht werden,
können
auch ein oder mehrere der Merkmale aus einer beanspruchten Kombination
ausgegliedert werden und kann die beanspruchte Kombination auf eine
Teilkombination oder eine Variation einer Teilkombination modifiziert
werden.