Schwerpunkte

Mikrocontroller

Dual-Core-Controller sorgt für Unabhängigkeit

25. Februar 2020, 10:18 Uhr   |  Harsha Jagadish

Dual-Core-Controller sorgt für Unabhängigkeit
© chombosan | Shutterstock

Die Hardware von Dual-Core-Controllern ist komplex. Dafür vereinfachen sie die Software-Entwicklung. Funktionen, die sonst ineinander verzahnt sind, werden durch die Aufteilung auf zwei Cores unabhängig voneinander. Das hat viele Vorteile.

Embedded-Anwendungen werden immer komplexer und anspruchsvoller, um mehrere Ziele zu erreichen. Erstens müssen Anwendungen effizienter werden, was einen leistungsfähigen Controller erfordert, um ausgefeilte Algorithmen auszuführen. Zweitens sind die Embedded-Systeme durch die allgegenwärtige Internetverfügbarkeit standardmäßig vernetzt. Das dritte Ziel ist, die Kosten zu senken, indem verschiedene Funktionen wie die Sensorschnittstelle, Datenanbindung, Motorsteuerung, digital geregelte Leistungswandlung, Betriebs- und Datensicherheit (Safety & Security) in einen einzelnen Controller integriert werden. Ein derart hoher Integrationsgrad erfordert, dass unterschiedliche Experten bestimmte Funktionsbereiche oder Module bearbeiten und dann mehrere Funktionen in eine Endanwendung integriert werden. Bei multinationalen Unternehmen, deren Teams auf der ganzen Welt verteilt sind, ist es oftmals umso wichtiger, dass verschiedene Module separat entworfen und nahtlos integriert werden können, um das Entwicklungsrisiko und den -aufwand zu verringern.

Energieaufnahme senken

Bei Antriebssteuerungen hat sich die Branche von bürstenbehafteten Gleichstrommotoren mit einem Wirkungsgrad von 75 bis 80 % hin zu bürstenlosen Gleichstrommotoren (BLDC) oder neueren Permanentmagnet-Synchronmotoren (PMSM) gewandelt. Diese Motoren bieten mit 85 bis 90 % einen wesentlich besseren Wirkungsgrad, weniger Geräuschentwicklung und eine längere Lebensdauer. Die einfachen Richtungs- und Drehzahlregelungen eines bürstenbehafteten Gleichstrommotors lassen sich mit einem 8-Bit-Mikrocontroller der Einstiegsklasse umsetzen. Im Vergleich dazu ist die Steuerung eines sensorlosen BLDC- oder PMSM-Antriebs mit feldorientierter Regelung (FOC; Field Oriented Control) komplexer und rechenintensiver. Sie ermöglicht eine genaue Steuerung der vom Motor aufgenommenen Leistung über einen weiten Last- oder Drehzahlbereich und trägt dazu bei, den Wirkungsgrad deutlich zu verbessern. Zusätzliche Regelalgorithmen lassen sich entsprechend den Anwendungsanforderungen implementieren, zum Beispiel Rotorblockiererkennung und Wiederherstellung, Windmilling, PI-Schleifensättigung und Anti-Windup, Fluss-Schwächung und maximales Drehmoment pro Ampere. Diese Funktionen helfen, die Leistungsfähigkeit zu erhöhen, auf eine dynamische Belastung zu reagieren und den Gesamtwirkungsgrad zu steigern.

Alle diese Regeltechniken sind rechenintensiv und umfassen mathematische Berechnungen wie Dividieren, Multiplizieren, Quadratwurzeln und trigonometrische Operationen, die eine erhebliche Rechenleistung erfordern. Da diese Funktionen periodisch mit hoher Frequenz ausgeführt werden müssen, entfällt darauf ein großer Teil der Rechenzeit. Dadurch können andere zeitkritische Funktionen beeinträchtigt werden. Die Entwickler müssen sicherstellen, dass Funktionen wie Kommunikation, Sicherheitsüberwachung, System- und Verwaltungsfunktionen die zeitkritische Steuerung des Motors nicht beeinträchtigen. Die Herausforderung steigt bei digital geregelten Stromversorgungen, bei denen die zeitkritischen Regelkreisfunktionen mit einer noch höheren Frequenz ausgeführt werden müssen.

Umfangreiche Software

Noch anspruchsvoller werden die Systeme durch die Internet- oder Cloud-Anbindung. Die Systeme sollen von überall aus beobachtbar und steuerbar sein und ständig Informationen liefern. Das bedeutet, dass Embedded-Systeme mehrere Software-Stacks enthalten, zum Beispiel:

  • die Funktionen der Hauptanwendung – in unserem Beispiel die Motorsteuerung, die Verwaltung und die Benutzerschnittstelle,
  • die Netzwerkprotokolle für die Datenkommunikation und
  • die Sicherheitssoftware für IP-Schutz, Privatsphäre, Datenintegrität, Authentizität, Zugriffskontrolle, um Hacker-Angriffe zu vermeiden.
  • Wenn Fehlfunktionen zu Verletzungen führen können, muss auch die Software für funktionale Sicherheit ein Bestandteil dieser sicherheitskritischen Anwendungen sein.
  • Einige der Endanwendungen benötigen ein Variantenmanagement, so dass der Funktionsumfang des Gerätes an verschiedene Marktsegmente angepasst werden kann.

All diese Bedingungen erfordern, dass verschiedene Fachteams an der Entwicklung der jeweiligen Software-Stacks beteiligt sind und diese optimal und schnell in eine Endanwendung integrieren können. Experten aus verschiedenen Bereichen müssen sich abstimmen, um die Endanwendung aufzubauen und umzusetzen.

Entwickler von Embedded-Systemen haben oft nicht das Budget, um ein Design mit mehreren Controllern zu entwerfen, bei dem einzelne Software-Stacks mit wenig Koordinationsaufwand auf verschiedenen Mikrocontrollern ausgeführt werden. Ein einzelner Mikrocontroller mit hoher Integration ist daher die optimale Lösung. Dies senkt gleichzeitig die Kosten durch ein kompaktes Leiterplattendesign und eine geringere Anzahl externer Komponenten wie Quarzoszillatoren und passiver Bauelemente.

Microchip Technology
© Microchip

Bild 1: Blockdiagramm eines Dual-Core-Controllers mit unabhängigen Cores.

Herausforderungen während der Entwicklung

Um ausgeklügelte Algorithmen zu implementieren und mehrere Software-Stacks auszuführen, entscheiden sich Entwickler von Embedded-Systemen häufig für einen leistungsstärkeren Mikrocontroller. Die zeitkritische Ausführung, Entwicklung, Integration und das Testen mehrerer Software-Stacks sind jedoch anspruchsvoll. Oft wird dann auf einen einfachen Scheduler oder ein Echtzeit-Betriebssystem (RTOS) zurückgegriffen, um mehrere Tasks von verschiedenen Stacks auf einer Hochleistungs-CPU zeitversetzt zu planen und auszuführen.

Ein Scheduler oder ein RTOS fügen jedoch Overhead hinzu, der Rechenleistung und Speicherplatz benötigt. Die zeitliche Aufteilung erhöht auch den Switching-Overhead und verringert die effektive CPU-Auslastung. Das Szenario wird noch komplizierter, wenn zwei zeitkritische komplexe Regelkreise periodisch in einem präzisen und überlappenden Zeitintervall ausgeführt oder wenn zwei asynchrone sicherheitskritische Funktionen gleichzeitig in Echtzeit ausgeführt werden müssen. In solchen Fällen würde selbst eine noch leistungsfähigere MCU nicht immer den Systemanforderungen entsprechen.

Selbst wenn eine hochleistungsfähige Single-Core-MCU über genügend CPU-Bandbreite verfügt, um mehrere Software-Stacks aufzunehmen – möglicherweise zusammen mit einem RTOS – sind viele andere Designerwägungen zu berücksichtigen. Das Entwickeln, Integrieren und Testen mehrerer Software-Stacks erfordert ein hohes Maß an Koordination zwischen Fachleuten. Gefragt ist eine kompatible und modulare Softwarearchitektur, die Ressourcen dynamisch teilt und Informationen austauscht. Die Herausforderungen nehmen weiter zu, wenn Legacy-Software vorhanden ist.

  • Legacy-Software kann unterschiedliche Architekturen aufweisen, die entweder Polling- oder Interrupt-Mechanismen nutzt.
  • Legacy-Software kann die gleichen MCU-Ressourcen nutzen, die nun ohne Konflikte gemeinsam genutzt werden, um Gefahren wie Race-Conditions und Deadlock zu vermeiden.
  • Software-Elemente können mehrere gemeinsame globale Variablen und Funktionen mit gleichen Namen haben.
  • Jeder Stack kann bei einzelner Ausführung einwandfrei funktionieren. Bei der Integration kann es aber zu Fehlfunktionen kommen. Das Debuggen einer solchen integrierten Lösung wird dann äußerst schwierig, was die Entwicklungsdauer verlängert. Deshalb birgt die Wiederverwendung von Software-Stacks, die für eine Single-Core-MCU implementiert wurden auf einer Multi-Core-CPU ein erhebliches Entwicklungsrisiko.

Mehr Leistung mit Dual-Core

Ein Dual-Core-Controller trägt mit den folgenden Leistungsmerkmalen dazu bei, den Wirkungsgrad zu erhöhen sowie den Entwicklungsaufwand und die Kosten zu verringern:

  • Er bietet eine höhere Leistungsfähigkeit als ein ähnlicher Single-Core Controller, der mit der doppelten Taktfrequenz arbeitet – und er eignet sich für Anwendungen, bei denen zwei oder mehr zeitkritische Funktionen vorhanden sind.
  • Er vereinfacht die Software-Entwicklung mit zwei unabhängigen Cores, die folgendes ermöglichen: Geografisch verteilte Software-Entwicklung, Nahtlose Integration mit minimalem Koordinationsaufwand, Einfache Anpassung der Funktionen über mehrere Varianten einer Produktlinie hinweg.

Ein Dual-Core-Controller ermöglicht eine höhere Software-Integration, da unterschiedliche Funktionen auf zwei unabhängigen Cores ausgeführt werden können. Dies ist gerade dann von Vorteil, wenn eine Anwendung zwei zeitkritische Funktionen regelmäßig zu einem bestimmten Zeitpunkt oder als Reaktion auf asynchrone Ereignisse ausführen muss. Bei jeder zeitkritischen Funktion, die auf zwei unabhängigen Cores ausgeführt wird, gibt es keine Konflikte zwischen den Funktionen.

Dies verbessert die CPU-Auslastung, da der Overhead für den Kontextwechsel zwischen den Funktionen entfällt. Viele Dual-Core-Controller verfügen über spezielle Ressourcen, die den Switching- und Arbitrierungs-Aufwand weiter verringern. Einige Dual-Core-Controller verfügen auch über ein schnelles Programm-RAM (PRAM), das mit einem der Cores gekoppelt ist – normalerweise mit dem Slave-Core – was die Leistungsfähigkeit weiter verbessert. Somit bietet ein Dual-Core-Controller eine höhere Leistungsfähigkeit als ein ähnlicher Single-Core-Controller, der mit der doppelten Taktfrequenz arbeitet.

Microchip Technology
© Microchip

Bild 2: Blockdiagramm für eine komplexe Anwendung mit mehreren Funktionen.

Dual-Core-Controller vereinfachen die Entwicklung

Viele Dual-Core-Controller bieten Speicher, Peripherie und Debug-Unterstützung für jeden Core. Ein flexibles Ressourcen-Management ermöglicht außerdem die Zuweisung gemeinsamer Ressourcen zu einem der Cores gemäß den Anforderungen einer Anwendung (Bild 1).

Eine solche MCU-Architektur ermöglicht eine unabhängige Software-Entwicklung mit geringem Koordinationsaufwand zwischen Fachleuten und erleichtert die Integration. Ein Dual-Core-Controller vereinfacht insbesondere die Integration zweier Software-Stacks, die auf unterschiedlichen Architekturen basieren oder die Ressourcen einer ähnlichen MCU erfordern, die nun auf zwei unabhängigen Cores ausgeführt werden. Dies ist vergleichbar mit der Entwicklung der Stacks, die auf zwei verschiedenen Controllern ausgeführt werden – bietet jedoch mehr Leistungsfähigkeit, eine optimale Ressourcennutzung und geringere Kosten. Dadurch erübrigen sich alle Komplikationen, die mit der Integration des Stacks, der zeitgesteuerten Ressourcen-Teilung und den damit verbundenen Gefahren verbunden sind. Ein Dual-Core-Controller ermöglicht auch ein einfaches Debugging nach der Integration, da jeder Core über eigene Debug-Schnittstellen verfügt. Aufgrund der minimierten Abhängigkeiten zwischen den Stacks vereinfacht sich das Debugging erheblich, um Probleme isolieren und beheben zu können. Ein Dual-Core-Controller bietet so viele Vorteile, dass er das Entwicklungsrisiko und die Markteinführungsdauer deutlich reduziert.

Ein weiteres Szenario ist die Anpassung von Zusatzfunktionen ohne die Hauptfunktion zu ändern. Wenn die Hauptfunktion auf einem eigenen Core ausgeführt wird, ist sie unabhängig und bleibt unangetastet, während die benutzerdefinierten Funktionen auf einem anderen Core implementiert werden. Alle diese Funktionen eines Dual-Core-Controllers vereinfachen das Software-Design, auch wenn mehrere Teams beteiligt sind. Daher ist eine nahtlose Integration mit geringem Koordinationsaufwand möglich.

Dual-Core-Controller senken die Kosten

Um alle oben genannte Vorteile eines Dual-Core-Controllers praktisch umzusetzen, wurde ein kleines Experiment durchgeführt. In dieser Demo implementiert einer der Cores (meist der Slave-Core) einen FOC-Motorsteuerungs-Algorithmus, um einen BLDC-Motor anzusteuern.

Um eine grafische Benutzeroberfläche bereitzustellen, führt der andere Core (Master Core) den Grafik-Stack aus, der ein OLED-Display betreibt. Hinzu kommt die Systemfunktion, um Potentiometer und Taster zu verknüpfen, mit denen sich die Drehzahl und der Zustand des Motors regeln lässt (Bild 2). Um das einfache Design mit einer Dual-Core-MCU zu demonstrieren, wurden der Grafik-Stack und die Motorsteuerungs-Software von zwei verschiedenen Teams entwickelt, die geografisch getrennt waren.

Aufgrund der Flexibilität, eine unabhängige Software-Architektur beizubehalten, war der Koordinationsaufwand zwischen den beiden Teams sehr gering. Ein Team mit Fachkenntnissen in der Motorsteuerung konnte den FOC-Algorithmus schnell einbringen. Das andere Team hatte Erfahrung in der Entwicklung grafischer Benutzeroberflächen. Beide Teams konnten ihre Erfahrung in den jeweiligen Bereichen nutzen und das Projekt schnell abschließen. Lediglich für die Vereinbarung der Tastenfunktion und des Potentiometer-Status war eine geringe Koordination zwischen den beiden Cores erforderlich. Als erweitertes Experiment nutzten beide Teams bereits vorhandene Software-Bibliotheken, um die Motorsteuerung und die Grafikschnittstelle umzusetzen. Das Projekt konnte dadurch mit geringem Aufwand für die Integration zweier verschiedenen Legacy-Stacks in kurzer Zeit abgeschlossen werden. Aufgrund der hohen Leistungsfähigkeit des Cores stand auf beiden Cores noch viel CPU-Bandbreite zur Verfügung. Um die Grenzen zu erweitern, wurde auch eine OLED-Display-Schnittstelle zum Slave Core hinzugefügt, um dynamische Motorparameter anzuzeigen, ohne die Motorleistung zu beeinträchtigen. (jk)

Auf Facebook teilenAuf Twitter teilenAuf Linkedin teilenVia Mail teilen

Das könnte Sie auch interessieren

Software-Aufgaben mit Hardware lösen
RISC-V-Unterstützung für Sysgos PikeOS
NXP investiert in Kalray

Verwandte Artikel

Microchip Technology GmbH