Hardwareprogrammierung mit MATLAB/Simulink WARR-Workshop im WiSe 2014 von Martin Dziura ([email protected]) Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Teilnehmer / Teameinteilung Team Mitglied 1 Mitglied 2 Mitglied 3 1 Alexander Schmitt Martin Hacker Björn Wagner 2 Joachim Sturm Andreas Lindner 3 Sebastian Reigber Maximilian Bambauer 4 Jonas Pfisterer Thomas Lausenhammer 5 Daniel Bart Xaver Lamprecht 6 Alexander Frericks 7 Felix Rößler Philipp Neumann 8 Stefan Raab Yannick Apfel 9 Danel Eiringhaus Ralf Süss 10 Florian Ettemeyer Johannes Kugele Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Martin Schlecker Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Hardwareprogrammierung mit MATLAB/Simulink Schaltungsgrundlagen Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Digital vs. Analog Analoge Schaltung Veränderliche Spannungen Strom oft relevant Sensoren, Aktoren, Verstärker, … Digitale Spannung Zwei Spannungspegel (Low und High) Strom i.d.R. irrelevant Logikschaltungen (An/Aus), digitale Signale Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Digitale Schaltungen / Signale Die Digitale Information entspricht dem Spannungspegel. Die Bedeutung ist abhängig von der Beschaltung. Information Digital Pegel Spannung An 1 High > 0.7 * VCC Aus 0 Low < 0.2 * VCC undefiniert undefiniert undefiniert dazwischen Aus 1 High > 0.7 * VCC An 0 Low < 0.2 * VCC undefiniert undefiniert undefiniert dazwischen Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Pull-Up und Pull-Down Leere Leitung / floating µC R1 Pull-Up Widerstand typ. 10KOhm µC R2 Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Undefinierter Spannungspege l Pull-Down Widerstand typ. 10KOhm Definierter Spannungspege l Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Beschaltung von LEDs / Verbrauchern Möglichkeit 1: Direkt an den µC-Pin Vorteil: Einfach Nachteil: Hoher Strom durch µC (begrenzt auf 20mA!) Auslegung des Vorwiderstands: U = R·I und LED-Datenblatt Möglichkeit 2: Steuerung über Transistor Basiswiderstand-Berechnung: http://www.mikrocontroller.net/ articles/Basiswiderstand Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura LEDs dimmen mit PWM PWM: Puls-Weiten-Modulation Bei hoher Frequenz ergibt sich durch Kapazitäten und Trägheit der LED ein effektiver Strom abhängig von der Pulsbreite. Frequenz für LEDs ~200Hz Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Beschaltung von Tastern Beispiel: Schaltung gegen GND mit PullUp-Widerstand Alternative 1: Mikrocontroller hat einen internen PullUpWiderstand Alternative 2: Schaltung gegen VCC mit PullDown-Widerstand + Entprellen mit Kondensator + evtl. Operationsverstärker Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Hardwareprogrammierung mit MATLAB/Simulink Vorstellung der Workshop-Hardware Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura STM32 F4 Discovery Kernkomponenten • Entwicklungsboard mit STM32F4 Mikrocontroller • 168 MHz Betriebssfrequenz • Integrierter JTAG-Debugger Onboard-Peripherie • 4 User-LEDs • 1 User-Button, 1 Reset-Button • 3F-Motion-Sensor (LIS3DSH) • Mikrofon (MP45DT02) • Audio DAC (CS43L22) Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura STM32 F4 Discovery Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Mikrocontroller STM32F407 • Moderner Mikrocontroller min vielen Funktionen und Schnittstellen • Programmierung „von Hand“ wäre extrem aufwändig Abstraktionsebene notwendig! Bibliotheken für viele Sprachen Oder: Simulink-Blockset! Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Mikrocontroller-Familie STM32 Mehr Infos auf der Hersteller-Webseite www.st.com Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Waijung-Blockset verfügbar Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Hardwareprogrammierung mit MATLAB/Simulink Das Waijung Blockset Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Wer oder Was ist Waijung? Idee: • Verwendung von Simulink mit Simulink Coder und Targets Für den STM32F4 / STM32F0: • Waijung or ไวจัง (Thai slang for so fast) Problem: • Offizielle Unterstützung von MATLAB für Hardware ist rudimentär (nur einfaches I/O) Waijung-Features: • Zahlreiche Hardwaretreiber • Generiert C-Code aus Blöcken • Auto Compile and Download • Echtzeitfähiger Code • Nahtlos in Simulink integriert Lösung: • Custom oder User-Generated Blocksets für bessere Hardwareunterstützung Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Echtes Plug and Play! Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Beispiele für Waijung-Blöcke Konfiguration Block Target Setup muss in jedem Projekt als erstes hinzugefügt werden. Dieser initialisiert alle SimulinkEinstellungen und das Target. Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Einfache IO-Blöcke Einfache Ein- und Ausgabe von logischen Signalen erfolgt über ebenso einfache Blöcke: Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Hardwareprogrammierung mit MATLAB/Simulink Installation und Verwendung von Waijung (Live-Vorführung) Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Zeit für Fragen! Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Hardwareprogrammierung mit MATLAB/Simulink Übungsaufgaben zu Waijung Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Aufgabe 2-1: Installation Installiert das Waijung Blockset Alle notwendigen Dateien liegen auf dem Server unter /08_Kleinprojekte/Workshops/2014 Simulink Hardware/Software Befolgt exakt die Installationsanleitung http://waijung.aimagin.com/ (Get Started > Software Installation) a) b) c) d) Installieren des ST-Link Utility (und ggf. Treiber für Windows 8) Installieren des FTDI USB Driver Anschließen und Test der Verbindung (und ggf. Firmware-Update) Entpacken und Installieren von Waijung (als Administrator!) Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Aufgabe 2-2: Blinkende LEDs Bringt die vier User-LEDs auf dem Board zum Blinken Alle Datenblätter liegen auf dem Server unter /08_Kleinprojekte/Workshops/2014 Simulink Hardware/Datasheets Öffnet die Datei STF32F4-Discovery User Manual.pdf a) b) c) d) e) f) Findet heraus an welchen Port/Pin die vier LEDs liegen. Sind die LEDs Active Low oder Active High? Erstellt ein neues Projekt mit Waijung-Block Target Setup Fügt für die LEDs ein Output-Block hinzu und benennt die BlockPorts intuitiv (z.B. LED Grün, …) Verbindet den Source-Block Pulse Generator mit den LEDs Ladet euer erstes Simulink-Hardware-Programm auf das Board Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Aufgabe 2-3: Noch cooler blinkende LEDs Lasst die LEDs nun mit einem Sinus sanft blinken. Um die LED zu Dimmen benötigt ihr ein PWM-Signal. Verwendet hierfür den Block PWM Generator Veranschaulicht euch grafisch die Block-Parameter Switching frequency (Hz) und Sample Time In wie vielen Schritten kann das PWM das Signal auflösen, wenn die Einstellungen auf 100Hz und 1E-4s gesetzt sind? Wie können bei gleicher Auflösung 150Hz erreicht werden? Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München Termin 2 - 23. Oktober 2014 Hardwareprogrammierung mit MATLAB/Simulink - Martin Dziura Aufgabe 2-4: Inputs und State Machine 1. Lasst eure LEDs nun im Uhrzeigersinn auf und ab dimmen. Tipp: Ändert hierfür nur einen Parameter des Sinus-Blocks 2. Findet heraus an welchem Pin/Port der User-Button liegt und fügt dem Projekt einen entsprechenden Input-Block hinzu. Ist das Signal logisch 1 oder 0, wenn der Button gedrückt ist? 3. Ändert nun die Richtung des Blinkens (Gegenuhrzeigersinn), während der Button gedrückt ist. 4. Fügt dem Modell nun ein Stateflow-Chart mit zwei Zuständen für die beiden Richtungen hinzu. Das Modell soll die Richtung nun bei jedem Knopfdruck umschalten, der Knopf soll nicht mehr gedrückt gehalten werden. Verwendet den Block Edge Detector aus dem Blockset Simscape, um aus dem Button-Signal einen Event-Puls zu generieren. Wissenschaftliche Arbeitsgemeinschaft für Raketentechnik und Raumfahrt Lehrstuhl für Raumfahrttechnik Technische Universität München