Aufgrund ihres niedrigen Preises und ihrer erstaunlichen Fähigkeiten finden Mikrocontroller (MCU) ihren Weg in fast jede Anwendung, von riesigen Systems-on-Chip (SoC) in Automobilen bis hin zu winzigen 8-Bit-Controllern in Sensoren. Wenn Sie einmal eine Mikrocontroller-Familie für Ihre Anforderungen gefunden haben, werden Sie wahrscheinlich so lange wie möglich dabei bleiben, um die erworbenen Kenntnisse über den Prozessor, die Entwicklungsumgebung und die Debug-Tools optimal zu nutzen. Doch eines Tages werden Sie es mit einer Anwendung zu tun haben, die etwas anderes erfordert. An diesem Punkt macht sich der folgende Leitfaden für eine schnelle und erfolgreiche Erkundung des aktuellen Angebots an modernen Mikrocontrollern bezahlt!

Brauchen Sie einen Mikrocontroller?

Wenn es um Mikrocontroller geht, sind wir nicht arm an Optionen, und das ist nicht verwunderlich. Bei einem geschätzten Wachstum des Weltmarktes auf über 20 Milliarden Dollar (bis 2027) ist die Konkurrenz groß. Wer auf der Suche nach Mikrocontrollern ist, dürfte dies als positiv sehen. Die Konkurrenz veranlasst die Anbieter, ihre Produkte stats zu erneuern und eine reiche Palette von Bauteilen mit unterschiedlichen Fähigkeiten, Funktionen und Merkmalen anzubieten. Doch wie wählt man bei der Fülle der verfügbaren Optionen den optimalen Mikrocontroller für seine Anwendung aus?
Es ist zwar leicht, sich an Bitbreiten, Megahertz und Speichergrößen zu orientieren, aber allein mit diesen Parametern ist ein Vergleich verschiedener Produkte schwierig. Darüber hinaus erfordern viele Anwendungen ein bestimmtes spezielles Merkmal, zum Beispiel lange Batterielebensdauer, hohe Integration, makellose Sicherheit oder funktionale Sicherheit. Deshalb sollten Sie sich, bevor Sie sich auf die Suche nach Ihrem idealen Mikrocontroller gehen, Ihre allgemeinen Anforderungen überprüfen.

Definieren Sie die Erfordernisse Ihrer Anwendung klar und deutlich

Der erste Schritt besteht darin, die Erfordernisse des Produkts, das Sie entwickeln wollen, zu benennen. Dies umfasst Dinge wie:
 
  • Die Mensch-Maschine-Schnittstelle (HMI): Wollen Sie mechanische Drucktasten oder eine kapazitive Folie (Bild 1), monochrome oder farbige Displays, polyphone Töne oder vielleicht nur einen einfachen Summer?
  • Strombedarf: Soll das Gerät jahrelang mit einer CR2023-Batterie betrieben werden oder kann es mit einem Netzteil ausgestattet werden?
  • Schnittstellen: Muss das Gerät mit bestimmten Protokollen (USB, Ethernet, Modbus, CAN, I2C und/oder SPI) kompatibel sein?
  • Eingänge und Ausgänge: Benötigen Sie analoge Signale, und wenn ja, mit welcher Genauigkeit? Wie viele digitale Signale werden benötigt? Sind Zeitgeber und Zähler erforderlich?
  • Echtzeitfähigkeit: Die Steuerung bürstenloser Motoren und digitale Stromversorgungen erfordern Reaktionszeiten im Nanosekundenbereich, insbesondere unter Kurzschlussbedingungen. Dies kann spezielle Peripherie auf Ihrem Mikrocontroller erfordern.
  • Größe: Ist der Platz für Ihre Platine begrenzt, so dass die Größe und Art des verwendeten IC-Gehäuses eingeschränkt ist?
  • Herstellbarkeit: Sind Sie in der Lage, Bauteile in ihren verfügbaren Gehäusen zu löten, insbesondere während der Prototypenentwicklung?
  • Sicherheit: Ist eine sichere Programmierumgebung für den Umgang mit kryptografischen Verschlüsselungen erforderlich?
     
Microcontroller support for touch (Schurter)
Bild 1. Mikrocontroller bieten oft On-Chip-Unterstützung für Touch-Schnittstellen, können aber auch hohe Anforderungen an das Timing Ihrer Anwendung stellen (Quelle: Schurter).
Der nächste Schritt besteht darin, diese Liste zu überdenken und zu überlegen, was unbedingt im Mikrocontroller enthalten sein muss und was möglicherweise außerhalb des Chips untergebracht werden kann. Wenn für Ihr Produkt nur wenig Platz zur Verfügung steht, werden Sie einen hochintegriertes Controller benötigen. Haben Sie jedoch Platz auf der Platine und stellen hohe Anforderungen an den analogen Signalweg, werden Sie wahrscheinlich einen externen Analog-Digital- oder Digital-Analog-Wandler (ADC/DAC) bevorzugen.
Der Preis des Mikrocontrollers spielt natürlich eine Rolle bei der Entscheidungsfindung. Der Preis muss aber gegen die Kosten für externe Bausteine zur Implementierung von Funktionen, die auf dem Mikrocontroller nicht verfügbar sind, abgewogen werden. Außerdem können die Kosten für die Entwicklungszeit die Einsparungen bei den Bauteilen überwiegen, wenn es (zu) kompliziert wird, eine Funktion zu implementieren, die bereits in einem Controller-Typ eines anderen Herstellers bereits integriert ist.

Wie viele Bits und MHz? Welcher Mikrocontroller-Kern?

Vor einem Jahrzehnt und davor waren die Anzahl der Bits und der CPU-Kern wahrscheinlich das entscheidende Kriterium bei einer eingebetteten Mikrocontroller-Anwendung, vor allem in Bezug auf ihren Preis. Mit der zunehmenden Verbreitung von 32-Bit-Arm-Bausteinen sind Low-End-Cortex-M0-Bausteine jedoch fast so günstig wie 8-Bit-Mikrocontroller (Bild 2). Und obwohl die Transistoren immer kleiner werden, schrumpfen die für die Implementierung des Flash-Speichers verwendeten Zellen nicht im gleichen Maß. Daher ist es die Größe des nichtflüchtigen Flash-Speichers, die meist den Preis des Chips bestimmt, und nicht die Größe und Komplexität des Prozessors und seiner Peripherie.
 
Microcontroller, dev boards
Bild 2. Einige moderne 32-Bit-Mikrocontroller können genauso günstig sein wie 8-Bit-Alternativen.

Ob ein Mikrocontroller für Ihre geplante Anwendung geeignet ist, lässt sich meist gut anhand eines einfachen Projekts überprüfen, in dem kritische Codeabschnitte ausgeführt werden. Laden Sie den Code nach der Kompilierung auf den Mikrocontroller und verwenden Sie den Debugger, um festzustellen, wie viel Flash- und SRAM-Speicher benötigt wird. Durch zusätzliches Umschalten eines GPIO-Pins während der Ausführung und Überwachung dieses Ausgangs mit einem Oszilloskop oder Logikanalysator kann die Ausführungszeit für einzelne Codeabschnitte ermittelt werden.
Bevor Sie Zeit mit dem Kennenlernen einer bislang unbekannten Entwicklungsumgebung verschwenden, sollten Sie mögliche Mikrocontroller-Optionen mit Hilfe der EEMBC-CoreMark-Benchmarks vergleichen. CoreMark ist ein Satz von Anwendungsprogrammen, der vergleichbare Leistungsmessungen von Mikrocontroller-Prozessoren liefert. Da die Konfigurationseinstellungen einen Unterschied ausmachen können, werden die Ergebnisse sowohl mit dem Speicherort des Codes (Flash oder SRAM), der Version des verwendeten Compilers und der übergebenen Optionen als auch mit anderen relevanten Informationen aufgezeichnet (Bild 3). Die Benchmarks sind zwar keine perfekte Information, aber sie helfen dabei, eine Vorauswahl zu treffen.
 

CoreMark scores for microcontrollers
Bild 3. Die CoreMark-Ergebnisse von EEMBC bieten einen guten Ausgangspunkt für den Vergleich der relativen Leistung von Mikrocontrollern verschiedener Hersteller. (Quelle: EEMBC https://www.eembc.org/)

Wie viel Mikrocontroller-Speicher?

Der Speicherbedarf ist völlig abhängig von der Anwendung. Idealerweise sollte man einen vorhandenen Code kompilieren, um den Bedarf an Programmspeicher abzuschätzen. Der SRAM-Bedarf ist eigentlich schwieriger zu bestimmen, da die Stack-Nutzung nur zur Laufzeit ermittelt werden kann. Dank moderner Software-Entwicklungsumgebungen ist die erforderliche SRAM-Größe jedoch schnell und einfach zu ermitteln. Es lohnt sich auch, die Mikrocontroller-Familie von vornherein daraufhin zu untersuchen, ob später eine pinkompatible Variante mit weniger Flash und SRAM verwendet werden kann, insbesondere wenn Kostendruck besteht.
Die Verbraucher von heute erwarten, dass sie die Software ihrer Produkte aktualisieren können. Die meisten Geräte bieten einen geschützten Bereich für einen Bootloader, der immer verfügbar ist und eine Möglichkeit bietet, Firmware auf den Controller zu flashen. Wenn die letzte Version der Firmware als Fallback beibehalten werden muss, falls bei der Firmware-Aktualisierung etwas schief läuft, ist möglicherweise die doppelte Menge an Flash-Speicher erforderlich, um zwei Versionen des Codes zu speichern.
Schließlich „verbraucht“ sich der Flash-Speicher mit jedem Schreibvorgang. Zwar lässt die Lebensdauer eines Flash-Speichers für Code oder Programmspeichers in der Regel Zehntausende von Schreibzyklen zu (und wenn es auch nur den Code betrifft, ist das in Ordnung), aber wenn der Speicher auch für die Speicherung von Daten oder Konfigurationsinformationen verwendet wird, muss die maximale Anzahl der Schreibzyklen berücksichtigt werden. Wenn Daten in einem nichtflüchtigen Speicher gespeichert werden, sollte deshalb ein internes oder externes EEPROM verwendet werden (Bild 4).
 

Microchip EEPROM 25CSM04
Bild 4. Bei der Speicherung kritischer nichtflüchtiger Daten lohnt es sich, ein externes EEPROM in Betracht zu ziehen, wenn das interne EEPROM des Mikrocontrollers begrenzt ist. (Quelle: Microchip)

Wie viel Strom benötigt meine MCU?

Wenn eine Batterie für lange Zeit Ihre Anwendung versorgen soll, sollten Sie unbedingt viel Zeit darauf verwenden, den Strombedarf und die Stromsparmodi zu erkunden, die jeder Mikrocontroller bietet. Der Strombedarf hängt von vielen Faktoren ab, und jeder Hersteller hat clevere Stromsparmodi entwickelt, die aber auch die Funktionalität des Mikrocontrollers beeinflussen. So kann beispielsweise beim Aufwachen aus einem Schlafmodus ein Oszillator mit niedriger Frequenz verwendet werden, bis sich der Hauptoszillator stabilisiert hat. Dies verlangsamt aber die Code-Ausführung, was im Endeffekt  dazu führen kann, dass mehr Strom fließt wird als geplant. In dieser Entwicklungsphase kann die Wahl eines falschen Controllers die tatsächliche Lebensdauer der Batterie um 10 % oder mehr verkürzen (wie der Autor bitter erfahren musste!).
Auch hier ist es am besten, die Grundlagen Ihrer Anwendung in einer echten Schaltung zu testen. Dies ist jedoch leichter gesagt als getan. Viele Demoboards und Entwicklungskits machen es schwierig, den Mikrocontroller von den umgebenden Peripheriebausteinen und Chips zu trennen. Am besten ist es, selber ein einfaches Breakout-Board zu entwickeln, das nur den Mikrocontroller, Entkopplungskondensatoren und bei Bedarf einen Quarz enthält. Da die Stromaufnahme im Ruhemodus im Nanoampere-Bereich liegt, aber im aktiven Zustand in den Mikro- und Milliampere-Bereich springt, ist die Auswahl eines Messgerät, das im unteren Bereich genau ist und einen großen Dynamikbereich aufweist, keine leichte Aufgabe. Auf solche Messungen hat sich die Firma Qoitech mit seinem Otii Arc spezialisiert. Das Leistungsmessgerät kann auch die Entladung von Batterien simulieren, was sehr hilfreich sein kann (Bild 5).
 

Otii Arc
Bild 5. Der Otii Arc von Qoitech bietet den dynamischen Bereich, der für die genaue Messung der Stromaufnahme von Mikrocontrollern erforderlich ist.

Der Einfluss von Temperatur, Taktfrequenz und Versorgungsspannung auf die Stromaufnahme darf nicht vergessen werden. Je höher die Temperatur und die Taktfrequenz, desto höher ist der Strombedarf. Die Stromaufnahme steigt im Quadrat zur Versorgungsspannung, so dass die niedrigste zulässige Spannung gewählt werden sollte, bei der aber die Stabilität der Stromversorgung sorgfältig berücksichtigt werden muss. Wenn nämlich die Spannung zu stark abfällt, kann der Mikrocontroller in einen Brown-out-Zustand geraten.
Grundlegende technische „Marketing“-Daten von Mikrocontroller-Herstellern können ebenfalls irreführend sein. Die stromsparenden Mikrocontroller von Microchip bieten „9 nA sleep currents“. Eine solch niedrige Stromaufnahme kann jedoch einige Kompromisse erfordern. Der PIC24FJ256GA412 zum Beispiel behält den SRAM-Inhalt in seinem 60-nA-Deep-Sleep-Modus nicht bei. Zwar können kritische Daten in der Anwendung in zwei Registern (DSGPR0/1) gespeichert werden, aber das Aufwachen des Controllers und das Zurückschreiben der Daten dauert lange und benötigt deshalb viel Strom, was den Spareffekt wieder zunichtemachen kann. Daher muss das Leistungsprofil der gesamten Anwendung sorgfältig geprüft werden, um festzustellen, ob ein solcher Stromsparmodus überhaupt sinnvoll ist.
Schließlich bietet das EEMBC auch eine Reihe von „Ultra Low Power Benchmarks“ namens ULPMark. Es kann sich bei der Erforschung von Controllern lohnen, auch einen Blick darauf zu werfen (Bild 6).
 

ULPMark benchmark results comparing the low-power capability of popular MCUs.
Bild 6. EEMBC bietet auch ULPMark-Benchmark-Ergebnisse zum Vergleich der Stromsparfähigkeit gängiger Mikrocontroller.

Welche Peripherie auf dem Chip?

Weil bestimmte Busprotokolle eingetragene Warenzeichen bestimmter Hersteller waren/sind und auch aus anderen Gründen hat sich eine verwirrende Vielzahl digitaler Peripherie entwickelt. Die meisten modernen Mikrocontroller verfügen über eine oder mehrere UART-, I2C- und SPI-Schnittstellen. I2C kann jedoch auch als Two-Wire-Interface (TWI) bezeichnet werden, um ein Beispiel für eine solche „Verwirrung“ zu nennen. Unabhängig von ihrer Bezeichnung unterstützt TWI möglicherweise nicht die höheren Taktfrequenzen von I2C, den 10-Bit-Adressierungsmodus oder eignet sich nicht für den Einsatz in SMBus- oder PMBus-Applikationen. Das gleiche Risiko einer Funktionsabweichung gilt auch für UARTs und SPI. Auch hier gilt: Testen ist besser als vermuten, dass die gewünschte Funktionalität auch vorhanden ist!
On-Chip-Peripherie kann den Prozessor ebenfalls sehr stark beanspruchen, vor allem, wenn beim Empfang jedes Bytes ein Interrupt erzeugt wird. Wenn viele Datenübertragungen geplant sind, lohnt es sich, einen Mikrocontroller mit einem Direct-Memory-Access-Controller (DMA) zu wählen. Dieser kann mit dem Interrupt eines Peripheriebausteins verbunden werden, um eine feste Datenmenge direkt vom/zum SRAM von/zu einem Peripheriebaustein zu übertragen. Und erst wenn ein größerer Datenblock verarbeitet worden ist, wird der Prozessor unterbrochen, damit er die erforderliche Verarbeitung vornimmt. Bei einigen Mikrocontrollern kann der Prozessor auch in den Energiesparmodus versetzt werden, während der DMA-Controller selbstständig Daten hin- und herleitet.
Einige Mikrocontroller verfügen über hochspezialisierte Echtzeit-Steuerperipherie. Der TMPM375FSDMG von Toshiba zum Beispiel ist auf die Vektorsteuerung bürstenloser Motoren spezialisiert. Er verfügt über eine mathematische Vektor-Engine, einen dreiphasigen PWM-Block zur Pulsweitenmodulation und einen ADC, die alle nahezu autonom arbeiten. Der Prozessor selbst muss nur gelegentlich eingreifen, wenn sich die Geschwindigkeit ändert oder ein Fehler auftritt.
Analoge On-Chip-Peripheriefunktionen wie ADCs werden natürlich in derselben Technologie wie der Rest des Chips implementiert. Dies ist aber nicht immer ideal, was bedeutet, dass ADCs, DACs und Komparatoren möglicherweise nicht so „gut“ funktionieren wie Alternativen außerhalb des Chips. Die verfügbare Auflösung von ADCs und DACs sowie die Abtast-/Aktualisierungsraten können ebenfalls begrenzt sein. In solchen Fällen muss ein Kompromiss zwischen der gewünschten Leistung und anderen Faktoren wie Platz auf der Platine, Komplexität des Entwurfs und Kosten gefunden werden.

Unterstützung des Mikrocontroller-Entwurfs

Das Thema Unterstützung ist ein weites Feld, das von Entwicklungswerkzeugen und -platinen bis hin zu Softwarebibliotheken und Support von Drittanbietern reicht. Die meisten Mikrocontroller-Hersteller bieten auch Entwicklungsumgebungen und Compiler für ihre Controller an, und falls nicht, werden sie wahrscheinlich entweder von IAR, Segger oder anderen Tool-Anbietern unterstützt. Die Mikrocontrollerhersteller oder Drittanbieter bieten ebenfalls Hardware-Debugger an. Ein grundlegendes „Gefühl“ für eine Entwicklungsumgebung kann durch das Testen eines Evaluierungs- oder Entwicklungsboards gewonnen werden, da diese oft über einen integrierten, funktionsbeschränkten Debugger verfügen. Compiler sind in der Regel kostenlos erhältlich, allerdings mit Einschränkungen wie beispielsweise fehlendem Zugriff auf Optimierer oder Beschränkungen der Codegröße. Viele sicherheitsrelevante Anwendungen stellen hohe Anforderungen an die Dokumentation, so dass aus Gründen der Rückverfolgbarkeit voll lizenzierte Compiler und Tools erforderlich sind.
In den letzten Jahrzehnten haben die Hersteller von Mikrocontrollern erkannt, dass Softwarebibliotheken zur Unterstützung von Entwicklern eingebetteter Software unerlässlich sind. Zumindest sollten einige Bibliotheken zur Verfügung stehen, mit denen die meiste Peripherie initialisiert und verwendet werden kann. In vielen Fällen sind vollständige Software-Stacks, zum Beispiel USB oder TCP/IP verfügbar. Für anspruchsvollere Anwendungen werden auch Echtzeitbetriebssysteme wie freeRTOS auf die wichtigsten Prozessorarchitekturen portiert.
Ein weiterer wertvoller Anhaltspunkt für potenzielle Herausforderungen bei zukünftigen Entwicklungen ist die Durchsicht der Errata für den gewählten Mikrocontroller. Sollte die Liste überraschend lang und für einige der Probleme keine Abhilfe bekannt sein, ist es wahrscheinlich besser, Sie verbannen den Controller von Ihrer Auswahlliste. Es lohnt sich auch, in Foren nach dem Feedback anderer Nutzer zu suchen und herauszufinden, wie schnell und hilfreich der Anbieter Fragen beantwortet.


Haben Sie Fragen oder Kommentare?

Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Senden Sie eine E-Mail an den Autor unter stuart.cording@elektor.com oder an das Elektor-Team unter redaktion@elektor.de.