Gesponsert

Mikrocontroller Aufgabenbezogene Mikrocontroller vereinfachen komplexe Designs

Gesponsert von

Das Auslagern bestimmter Aufgaben von primären Mikrocontrollern oder Mikroprozessoren auf Task-spezifische Mikrocontroller kann den Entwicklungsprozess bei vielen Anwendungen vereinfachen

8- und 16-Bit-MCUs eignen sich für die Ausführung kleiner, spezialisierter Aufgaben – und können leistungsstarke Mikrocontroller und Mikroprozessoren damit gut unterstützen.
8- und 16-Bit-MCUs eignen sich für die Ausführung kleiner, spezialisierter Aufgaben – und können leistungsstarke Mikrocontroller und Mikroprozessoren damit gut unterstützen.
(Bild: Microchip)

Große 32-Bit-Mikrocontroller (MCUs) und Mikroprozessoren (MPUs), auf denen ein Echtzeitbetriebssystem (RTOS) läuft, kommen heute in immer mehr Anwendungen zum Einsatz. Ein einziger großer Mikrocontroller, der eine komplexe Anwendung ausführt, kann aber bei kleinen, wenig komplexen, jedoch zeitaufwendigen Verwaltungsaufgaben auf Probleme bei den CPU-Ressourcen stoßen. Kleinere 8- und 16-Bit MCUs können 32-Bit Bausteine von diesen Aufgaben entlasten; dies beschleunigt Innovationen und Entwicklungen im gesamten Mikrocontroller-Spektrum von 8- bis 32-Bit.

Viele Aufgaben lassen sich leichter bewältigen, wenn der 32-Bit-Baustein einige davon an untergeordnete Prozessoren auslagert. Diese können beispielsweise nur eine oder zwei dieser Aufgaben übernehmen, benötigen dafür aber kaum Überwachung. Dies setzt CPU-Ressourcen am Hauptprozessor frei, verringert die Softwarekomplexität und verbessert zugleich Leistung und Ausführungszeit.

Bildergalerie
Bildergalerie mit 10 Bildern

So lässt sich z.B. eine 8-Bit-MCU zur Erstellung eines E/A-Expanders nutzen. E/A-Expander sind keine komplexen Bausteine, aber sie beanspruchen durch häufige Bedienung von Interrupts viel CPU-Zeit. Die Nutzung einer speziellen MCU für diese Aufgabe senkt die E/A-Auslastung des größeren Bausteins und die Anzahl der dort zu bearbeitenden Interrupts. Zudem lässt sich der Funktionsumfang des E/A-Expanders in Software einstellen, so dass man ihn für die jeweilige Anwendung anpassen und abstimmen kann.

Der größte Vorteil eines E/A-Expanders auf Basis einer 8-Bit-MCU ist Flexibilität. Der Funktionsumfang eines E/A-Expander ASICs ist in den Baustein integriert, während das Verhalten der MCU durch die von ihr ausgeführte Software bestimmt wird. Dank dieser Flexibilität lässt sich die MCU-basierte Version an die Anforderungen der Endanwendung anpassen.

Implementierung des erweiterten E/A-Expanders

Intern nutzt der erweiterte E/A-Expander eine Lookup-Tabelle. Vor dem Lesen oder Schreiben erfolgt die Ausgabe einer virtuellen Adresse. Diese Adresse korreliert nicht mit Registern im Mikrocontroller – sie bezieht sich nur auf die Lookup-Tabelle. So lassen sich Funktionen transparent hinzu­fügen, die sich nicht in den Hardware-Registern des Mikrocontrollers befinden. Die Tabellen-Einträge kann man für bestimmte Zwecke auch problemlos neu anordnen. Ein weiterer Vorteil dieser Struktur: Man kann Berechtigungen zur Lookup-Tabelle hinzu­fügen. Um z.B. ein schreibgeschütztes Re­gister zu erstellen, lässt man einfach den Eintrag in der Lookup-Tabelle weg. Diese komplexere Struktur eignet sich auch für nicht-standardisierte Funktionen. Über die Funktion „MEM OP“ kann die MCU ihre aktuelle GPIO-Konfiguration (General-Purpose Input and Output) im Speicher ablegen oder laden. MEM OP kann die GPIO-Konfiguration auch auf die beim Kompilieren eingestellten Parameter zurücksetzen.

Optional lässt sich der Mikrocontroller so einstellen, dass er beim Einschalten gespeicherte Einstellungen lädt. Ist diese Funktion aktiviert, versucht der Mikrocontroller, die Einstellungen in der Konfiguration 0 zu laden. Schlägt die Prüfsummenvalidierung der Konfiguration fehl, kehrt die MCU zu den Konstanten vom Zeitpunkt der Kompilierung zurück. Falls nicht gewünscht, kann man diese Funktion in der Software deaktivieren. Als Vorteil bietet die MCU-basierte Lösung extreme Flexibilität. Anders als marktübliche ASICs lässt sich die MCU mit nicht-standardisierten, für die jeweilige Anwendung spezifischen Funktionalitäten konfigurieren. Diese Lösung wurde für die Universal-MCUs der Familie PIC16F15244 entwickelt. Der Quellcode ist auf Microchip Discover (discover.microchip.com) und Github verfügbar.

Spannungs/Frequenz-Wandler (V/F): Der Voltage-to-Frequency (V/F)-Wandler ver­anschaulicht den Einsatz von Hardware-Peripherie zum Erstellen einer Core-unabhängigen Funktion, die man sonst mit einer externen integrierten Schaltung realisieren müsste. Zu den größten Vorteilen dieser Konfiguration zählt, dass die Peripheriegeräte in der Software eingerichtet werden, was einfache Änderungen am Beispiel erlaubt. Ein weiterer Vorteil besteht darin, dass der Konverter im Mikrocontroller implementiert ist, was Stückliste und Platzbedarf für das Design reduziert.

MCU-basierter Ansatz weniger performant als analoge Lösung

Ein Problem des MCU-basierten Ansatzes: Er ist nicht so leistungsfähig wie die analoge Lösung, da die Auflösung des Ausgangs durch den ADCC begrenzt wird. Nominell hat der ADCC 12 Bit Auflösung, wurde aber für eine Oversampling-Auflösung von 14 Bit konfiguriert. Der integrierte, numerisch gesteuerte Oszillator (NCO) für die Ausgangsfrequenz-Synthese besitzt zudem eine endliche Auflösung; je nach dem vom ADC gemessenen Wert kann er an seinem Ausgang Jitter aufweisen. Die Implementation dieser Lösung besteht aus drei verschiedenen Peripherieblöcken – einem analogen Sampling-Block, einem Ausgangsoszillator-Block und einem Tastverhältnis-Generator.

Analoger Sampling-Block: Der analoge Sampling-Block übernimmt die Analog-Digital-Wandlung. Damit bei den Frequenzgrenzen des Bausteins eine Ausgabe von 100 kHz möglich ist, wurde der ADCC so konfiguriert, dass er mehrere Abtastwerte akkumuliert und dann einen Mittelwert bildet, um ein Oversampling-Ergebnis von 14 Bit zu erhalten. Ein Nachteil dieses Oversamplings ist das dem Ergebnis hinzugefügte zusätzliche statistische Rauschen. Dieses Rauschen lässt sich durch Mittelung des Oversamplings und Hinzufügen einer Hysterese kompensieren. Zur Realisierung der Hysterese nutzt man die Schwellenwert-Interrupt-Funktion des ADCC. Der Einfachheit halber beschränkt sich dieser Text auf das Beschreiben der Schwellenwert-Interrupt-Funktion.

Schwellwertüberschreitung löst Interrupt aus

Nach Abschluss der Berechnung des gemittelten Oversamples durch den ADCC wird der Ergebniswert mit einem Sollwertregister in der Peripherie verglichen. Ist die Differenz zwischen den beiden Werten größer oder kleiner als die eingestellten Schwellenwerte, löst dies einen Interrupt aus. Die CPU maskiert diesen Interrupt und bleibt davon unberührt, der Interrupt leitet jedoch eine DMA-Kopie des gemittelten Oversample-Ergebnisses in das ADCC-Sollwertregister weiter und aktualisiert damit den Mittenwert der Hysterese. Ohne Schwellwert-Überschreitung erfolgt kein DMA-Kopiervorgang und damit keine Aktualisierung des Ausgangs­oszillator-Blocks.

Ausgangsoszillator-Block: Der Ausgangsoszillator-Block dieser Lösung erzeugt ein Taktsignal bei der gewünschten Ausgangsfrequenz. Dieses Ausgangssignal ist intern mit dem Tastverhältnis-Generator verbunden, der die Frequenz des Ausgangssignals halbiert, aber ein Ausgangssignal mit einem Tastverhältnis von 50 Prozent erzeugt. Dadurch läuft der Ausgangsoszillatorblock mit der doppelten Frequenz des Ausgangssignals. Das Herzstück des Ausgangsoszillator-Blocks ist ein numerisch gesteuerter Oszillator (NCO). Der NCO-Peripheriebaustein fügt an der steigenden Flanke eines Eingangstaktes einen Inkrementwert zu einem Akkumulator hinzu. Aus dem Akkumulator-Überlauf lässt sich das Ausgangssignal der Peripherieschaltung ableiten. Im Datenblatt gibt es eine vollständige Erläuterung des NCO.

Numerisch gesteuerter Oszillator erzeugt Taktfrequenz

Hier wurde NCO2 so eingestellt, dass er intern die nötige Eingangstaktfrequenz erzeugt, um aus einem 14-Bit-Eingangs- ein Ausgangssignal von 100 kHz zu erhalten. Das 14-Bit-Ergebnis wird genutzt, da das systemeigene 12-Bit-Ergebnis des ADCC nicht ausreicht, um ohne eine externe Taktquelle ein 100 kHz Ausgangssignal zu erzeugen. Ändert sich die NCO2 Ausgangsfrequenz oder wird eine alternative Quelle genutzt, erfolgt eine Skalierung der Ausgangsfrequenz auf einen anderen Ausgangsbereich. Sinkt zum Beispiel NCO2 auf 1,28 MHz, liegt der Höchstwert des Ausgangssignals bei 10 kHz.

Tastverhältnis-Generator: Der Tastverhältnis-Generatorblock dieser Lösung erzeugt ein Ausgangssignal mit 50 prozentigem Tastverhältnis. Diese Funktion ist optional – das NCO-Ausgangssignal lässt sich direkt verwenden, allerdings variiert das Tastverhältnis dann viel stärker. Die Implementation dieses Generators erfolgt über eine der konfigurierbaren Logikzellen (Configurable Logic Cells, CLC). Die CLCs sind kleine Blöcke aus diskreter konfigurierbarer Logik, ähnlich wie eine einzelne Zelle eines Field Programmable Gate Arrays (FPGA). CLCs lassen sich als diskrete Logikgatter verwenden, z.B. AND-OR oder OR-XOR. Man kann sie auch als Latches oder Flip-Flops konfigurieren. In der vorliegenden Lösung wurde ein CLC als J-K-Flipflop mit Reset implementiert. J und K werden auf logisch HIGH gehalten. Der Ausgangs-Oszillatorblock dient als Taktgeber für das Flipflop. Jeder Eingangs-Taktimpuls bewirkt ein Umschalten am Ausgang, wodurch ein Tastverhältnis von 50 Prozent entsteht. Zu beachten ist, dass Frequenzschwankungen des Ausgangs-Oszillatorblocks das Tastverhältnis beeinflussen. Timer 6 arbeitet als astabiler „Watchdog“-Timer. Erzeugt das Ausgangssignal keine steigende oder fallende Flanke, so läuft der Timer über und generiert einen Taktimpuls für den CLC. Dies steuert den unteren Teil des Ausgangs­frequenzbereichs. Anstatt Gleichstrom zu erreichen, kippt der Ausgang mit der halben Frequenz des Timers, was einer Ausgangsfrequenz von 6 Hz entspricht. Zur Umsetzung des Beispiels entschied man sich wegen der großen Zahl verfügbarer Peripherieelemente für MCUs der PIC18-Q43 Familie. Der Quellcode dieses Projekts ist auf Microchip Discover (discover.microchip.com) und Github verfügbar.

Zusammengefasst eignen sich 8- und 16-Bit-MCUs hervorragend zum Ausführen spezieller Aufgaben – und können leistungsstarke Mikrocontroller und Mikroprozessoren gut unterstützen. Die Aufgaben sind nicht immer komplex, können aber zeitaufwändig oder zeitkritisch sein. Ihr Auslagern vereinfacht die Implementation von 32-Bit Bausteinen, verbessert die Zuverlässigkeit, verringert den Speicherbedarf und senkt den Stromverbrauch.

* Autor: Robert Perkel. Herr Perkel ist Application Engineer bei Microchip Technology Inc. in Chandler, Arizona.

(ID:48395332)

Jetzt Newsletter abonnieren

Verpassen Sie nicht unsere besten Inhalte

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung