Mehr "PS" für Arduino-Plattform Teil 2 Arduino32: Die jungen Wilden

Die seit mehr als zehn Jahren am Markt erfolgreiche Arduino-Plattform hat sich längst über die Maker-Szene hinaus im semiprofessionellen, aber auch im professionellen Umfeld etabliert. Arduino, Raspberry Pi sind tragende Säulen der Bewegung.

In DESIGN&ELEKTRONIK Ausgabe 5/2016 hatten wir schon einige 32-bit-Arduinos auf Basis von ARM-Cortex-M-CPUs sowie der Intel-Kandidaten Galileo und Edison vorgestellt. In diesem 2. Teil des Beitrags folgen weitere interessante Module sowie selbst ermittelte Benchmark-Ergebnisse für Rechenleistung und I/O-Performance.

Arduino/Genuino 101 (Intel Curie)

Mit dem »Curie-Modul« hat Intel ein IoT-Device auf den Markt gebracht, das sich wegen niedriger Stromaufnahme vor allem für batteriebetriebene Anwendungen eignen soll. Das Curie-Modul enthält einen Low-Power-32-bit-Mikrocontroller vom Typ Quark, 384 KB Flash (196 KB stehen Arduino Sketches zur Verfügung), 80 KB SRAM, einen Argonaut RISC Core (ARC) sowie BLE, 6-Achsen-Sensor (Beschleunigung, Lage) und eine Batterieladeschaltung (PMIC) [13].

Auf dem Quark-Core läuft ViperOS RTOS und unterstützt den Arduino-Core bei den übergeordneten Aufgaben. Für alle periphe¬ren Komponenten stehen entsprechende Libraries zur Verfügung:

  • CurieBLE (BLE-Modul)
  • CurieIMU (6-Achsen-Sensor)
  • CurieRTC (RTC)

Arduino/Genuino 101 ist das erste verfügbare Trägerboard für das Curie-Modul von Intel und bereichert damit die Arduino-Familie. Bild 5 zeigt ein Board mit der Modellbezeichnung »Genuino 101«, wie das Arduino-101-Board beim Vertrieb außerhalb der USA heißt.

UDOO Neo

UDOO Neo ist ein All-in-One-Low-Cost-Computer mit einem i.MX-6SoloX-Prozessor von Freescale für Android und Linux (Bild 6). Im Prozessor des UDOO Neo sind zwei unterschiedliche CPUs eingebettet – ein mit 1 GHz getakteter ARM Cortex-A9 und ein ARM Cortex-M4-Co-Prozessor, der mit 200 MHz getaktet werden kann.

Während der Cortex-A9 als Linux-Device wirkt, ermöglicht der Cortex-M4 den einfachen Zugang zu einer Arduino-Umgebung. Die Buchsenleisten erlauben das Kontaktieren von Arduino-Shields und von beliebigen I/Os. Aufgrund integrierter 9-Achsen-Bewegungssensoren und eines WiFi-&-Bluetooth-4.0-Moduls eignet sich das Board sehr gut für beliebige IoT-Projekte, auch für mobile. Im zu installierenden Linux-Image ist die komplette Arduino-IDE enthalten und die Entwicklung von Arduino-Sketches kann direkt auf dem Target erfolgen.

Arduino-Formfaktor

Dieser Abschnitt zeigt zwei Beispiele von Mikrocontroller-Hardware, welche die Arduino-Schnittstelle verwenden, um Arduino-Shields einsetzen zu können. Aber: Der eingesetzte Mikrocontroller wird nicht mit der Arduino-IDE programmiert.

Den Arduino-Formfaktor nutzen heute zahlreiche Hersteller für ihre Evaluation-Kits, wodurch sich eine gewisse Standardisierung eingestellt hat. Für das Rapid-Prototyping ist das von großem Vorteil, da auch später noch Komponenten gewechselt oder an konkrete Anforderungen angepasst werden können.

Mit dem »Arch Pro« von Seeed Studio und dem »STM32L476 Nucleo« sind zwei Mikrocontroller im Testfeld, die beide von der Plattform »ARM mbed IoT Device« [14] unterstützt werden.

Arch Pro

Kern des Arch-Pro-Boards von Seeed Studio ist ein LPC1768 von NXP (Cortex-M3). Mit dem weit verbreiteten Arduino-Formfaktor, den in Bild 7 die gelben Steckverbinder deutlich machen, und der einfachen Programmierbarkeit mit der Online-Entwicklungsumgebung, »mbed« stellt dieses Board eine interessante Alternative zu den originalen Arduinos dar.

Der 32-bit-Mikrocontroller arbeitet mit einer Taktfrequenz von 96 MHz und verfügt neben dem Arduino-Interface über ein großes Repertoire an (seriellen) Schnittstellen, darunter mehrere UARTs, I2C- und SPI-Interfaces bis hin zu USB und Ethernet [15].

STM32L476 Nucleo

Mit den preisgünstigen STM32-Nucleo-Boards liefert der Hersteller STMicroelectronics Prototypingboards, die die komplette Infrastruktur zur Evaluation eines der zahlreichen STM32-Mikrocontroller enthält. Die Boards haben einen ST-Link-Debugger/Programmierer an Bord, so dass es hierfür keiner zusätzlichen Komponenten bedarf. Die Nucleo-144- und Nucleo-64-Boards gewährleisten über das Arduino-Interface die Erweiterung durch Arduino-Shields.

Mit in die Untersuchung aufgenommen wurde ein STM32L476 Nucleo, dahinter verbirgt sich ein Ultra-Low-Power-Cortex-M4 mit Floating Point Unit (FPU). Der STM32L476-Mikrocontroller punktet mit niedriger Stromaufnahme bei zugleich hoher Rechenleistung und komplexer Peripherie (Bild 8).

STM32L476 Nucleo wird mit 80 MHz getaktet und weist 1 MB Flash Memory und 128 KB SRAM auf sowie eine Vielzahl von erweiterten I/Os und peripheren Komponenten wie 12-bit-A/D-Wandler mit 5 MSamples/s, zwei Komparatoren, zwei Operationsverstärker, zwei D/A-Wandler, RTC und mehrere Timer. Zusätzlich sind 24 kapazitive Touch-Kanäle und ein integrierter LCD-Treiber für 8x40- und 4x40-Text-LCDs vorhanden.

Benchmark-Ergebnisse

Wie eingangs erwähnt, wurden die hier betrachteten Mikrocontroller zwei einfachen Benchmarks unterzogen. Die Intel-Testkandidaten Galileo und Edison wurden jedoch nicht getestet, da sie wegen der Arduino-Emulation keine vergleichbaren Ergebnisse liefern würden. Nur so viel sei gesagt, dass durch die eingesetzten CPUs seitens der CPU-Performance sehr gute Werte zu erwarten sind. Bei der I/O-Performance sieht dies etwas anders aus, zumal hier die Ergebnisse zwischen einem Linux-System (prioritätsabhängiger Task-Switch) und einer Bare-Metal-Implementierung nicht mehr vergleichbar sind.

Die CPU-Performance der anderen Mikrocontroller war mit dem »Sieve (Sieb) of Eratosthenes« untersucht worden und zur Messung des Schaltverhaltens der digitalen I/O wurde eine Pulssequenz in einer Endlos-Schleife erzeugt, die dann vermessen werden konnte. Bild 9 zeigt die durch einen UDOO Neo erzeugte Pulssequenz und die gemessenen Werte für Periodendauer (T) und Frequenz (f). Beide Programme können auf der Sourceforge-Website (sourceforge.net/projects/arduinosources/files/Arduino32%20Benchmarks) heruntergeladen werden.

Die ermittelten Benchmark-Resultate sind in Tabelle 2 zusammengestellt. Die Resultate für den Arduino Uno sind zu Vergleichszwecken mit aufgenommen worden. Die gegenüber allen anderen untersuchten Mikrocontrollern herausragende I/O-Performance des Radino32 ist deutlich sichtbar. Verantwortlich für die erreichten Resultate ist die Optimierung der Bibliotheksroutinen. Dadurch benötigen die Aufrufe digitalWrite() und digitalRead() bei den relevanten Pins nur noch einen Taktzyklus.

Schlussbemerkung

Der vorliegende Beitrag zeigt, heute gibt es eine Reihe von leistungsfähigen Erweiterungen der klassischen Arduino-Familie auf der Basis von 32-bit-Mikrocontrollern oder Linux-Devices. In der Regel bauen diese Erweiterungen auf Cortex-M0+/M3/M4 auf und bieten daher weitgehende Kompatibilität mit Arduino-Libraries und -Shields


Wie am Beispiel des Radino32 gezeigt wurde, kann durch die Optimierung von Bibliotheksroutinen die I/O-Performance erheblich angehoben werden. Auch bei Galileo und Edison (Intel) wurde erst durch solche Maßnahmen ein vertretbares Schaltverhalten der GPIO erreicht. Verlässt man die Arduino-IDE und wendet sich der direkten Programmierung in C/C++ zu, wie dies beispielsweise sehr komfortabel mit der mbed-Plattform möglich ist, kann man zusätzlich Overhead vermeiden und eine weitere Performance-Steigerung erzielen.