iX 11/2016
S. 132
Praxis
Embedded Computing
Aufmacherbild

Prototyping eingebetteter Systeme mit Open-Source-Hard- und Software

Musterbau

Wie Softwareentwickler benötigen Schaltungsdesigner geeignete Werkzeuge und Konzepte, um Prototypen eingebetteter Systeme zu entwickeln. Die Open-Source-Welt bietet dafür einen reichen Fundus.

Zwei große Trends bestimmen seit Jahren das Embedded Computing: Das Voranschreiten der Vernetzung, genannt IoT oder Internet der Dinge, erlaubt die Automatisierung und Fernsteuerung auch jenseits der industriellen Produktion. Zudem hat Open Source die Embedded-Welt erobert, aber nicht nur als Software, sondern auch in Form von Hardware (siehe Kasten „Vorteile von Open-Source-Hardware“). Das Spektrum reicht von Mikrocontroller-Boards samt Zusatzhardware über 3D-Drucker und 3D-Scanner bis hin zu analogen Synthesizern. Kombiniert man beide Trends miteinander, ist das Ergebnis ein exzellentes Ökosystem zum Bau von Prototypen.

Open-Source-Boards mit Microcontroller Units (MCUs) existieren als reine Mikrocontroller-Boards oder als symbiotische Boards (siehe Kasten „Auswahlkriterien für Mikrocontroller-Boards“). Letztere bestehen aus einer Mikrocontroller-Einheit und einer etwas stärker ausgelegten CPU. Auf der läuft meist ein Linux für umfangreichere oder komplexere Aufgaben, während die MCU Aufgaben bearbeitet, die eine klar definierte Reaktionszeit verlangen.

Die typische Mikroprozessor-Unit

Um das Prototyping eingebetteter Systeme auf Basis von Microcontroller Units zu verstehen, ist ein Blick auf eine typische MCU hilfreich. Ein solcher Mikrocontroller integriert nicht nur eine CPU, sondern auch Speicher und Schnittstellen nach außen, vereinigt also ein ganzes System on a Chip (SoC) in sich.

Die Bandbreite der CPU reicht von einem simplen 4-Bit- bis zu einem komplexen 64-Bit-Prozessor. Ein interner oder externer Taktgenerator ist für die Taktung zuständig. Der volatile Datenspeicher beherbergt die von einem Programm bearbeiteten Daten. Auf ROM, EPROM, EEPROM oder Flash-Speicher lässt sich die Firmware des Mikrocontrollers aufspielen beziehungsweise dessen Betriebsparameter speichern. Unterschiedliche externe Schnittstellen dienen dem Einlesen und der Ausgabe der Signale.

Digitale Ein- beziehungsweise Ausgänge kennen nur zwei Werte, HIGH (1) und LOW (0). Ein Arduino Uno mit einer Betriebsspannung von 5 V interpretiert Eingangssignale über 3,7 V als HIGH und Eingangssignale unter 1,5 V als LOW. Er gilt daher als sehr tolerant.

Zumindest einige der digitalen Ausgänge unterstützen im Normalfall Pulsweitenmodulation (PWM): Die Programmiererin spezifiziert den Anteil des Taktzyklus, an dem am betreffenden Ausgang eine 1 beziehungsweise eine 0 anliegen soll. Der Anteil des Taktes, an dem HIGH anliegt, heißt im Fachjargon Duty Cycle. Wenn in 50 Prozent des Taktes HIGH anliegt, sonst LOW, beträgt die am Ausgang durchschnittlich ausgegebene Spannung in etwa die Hälfte der Arbeitsspannung. Bei einem Duty Cycle von 25 Prozent liegt im Durchschnitt ein Viertel der Arbeitsspannung am Ausgang an. Mit PWM können Entwicklerinnen LEDs dimmen, unterschiedliche Töne generieren oder die Geschwindigkeit angeschlossener Motoren variieren, sprich beschleunigen und bremsen.

Analoge Ein- und Ausgänge verarbeiten auch ohne den Umweg über PWM beliebige Zwischenwerte. ADCs (Analog-Digital-Converter) überführen die gelesenen Signale der analogen Eingänge in Werte eines vorgegebenen Wertebereichs. Ein 10-Bit-ADC konvertiert die gemessene Spannung zu einem Wert zwischen 0 und 1023 (210 – 1). Bei einem 12-Bit-ADC variieren die von der MCU zurückgemeldeten Werte zwischen 0 und 4095 (212 – 1). Diese Eingänge dienen überwiegend zum Einlesen analoger Sensordaten.

Üblicherweise gibt es im Vergleich dazu nur relativ wenige analoge Ausgänge. Wie die Eingänge benötigen auch sie einen Converter, in diesem Fall einen Digital-Analog-Converter (DAC), der die digitalen Werte gemäß einer definierten Auflösung in analoge Signale wandelt.

Der Mikrocontroller als Steuerzentrale

FTDI-Boards versorgen das Mikrocontroller-Board mit Strom aus dem USB-Ausgang des Entwicklungs-PCs und dienen der Kommunikation zwischen Entwicklungsrechner und Mikro-controller-Board (Abb. 1).

Serielle Ports sowie UARTs (Universal Asynchronous Receiver/Transmitter) dienen zur Kommunikation der MCU mit der Außenwelt, auch mit der Entwicklungsumgebung. Die USB-Anbindung übernimmt ein spezieller Adapter, meist ein FTDI-Board (siehe Abbildung 1).

Für die Kommunikation mit Sensoren und Aktoren sowie mit anderen Bauelementen und Boards existiert eine ganze Phalanx weiterer Bussysteme. Genannt seien SPI (Serial Peripheral Interface), I2C (Inter-IC-Communication) und CAN (Controller Area Network).