Modulo-4-Zähler

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
  1. Neues Modell öffnen.
    • Hier brauchen wir ein Clock-Generator für das Clock-Signal
    • Ausserdem zwei J-K-Flip-Flop-Blöcke
    Simulink 03 01.jpg
  2. Um erst mal generell das Zählen von 0 bis 4 zu erreichen, baut man das Model wie folgt auf:
    Simulink 03 02.jpg
  3. Beim Kompilieren erhalten wir momentan allerdings einen Fehler und folgendes bekommen wir zu sehen:
    Simulink 03 03.jpg
  4. Beim Überprüfen können wir sehen, dass ein Boolean-Wert erwartet wird, wir aber mit der Konstante standardmäßig einen double-Wert ausgeben.
    Simulink 03 04.jpg
  5. Wie hätten wir das verhindern können? Antwort: Entweder die Dokumentation über Hilfe-Button aufrufen oder:
    Simulink 03 05.jpg
  6. Durch Doppelklicken auf das dortige J-K-FlipFlop-Model öffnet sich dann das finale Submodel mit elementaren Simulink-Blöcken, die das J-K-FlipFlop-Modell abbilden.
  7. Doppelklicken auf die Wahrheitstabelle verrät uns, dass nur Boolesche Werte erwartet werden.
    Simulink 03 06.jpg
  8. Das Gliedern eines Models in Submodule sorgt für Übersichtlichkeit und sollte angewendet werden. Die folgenden Folien erklären, wie es geht
  9. Wir markieren in unserem Model alle Blöcke, die sinnvoll zusammenpassen und erzeugen ein Subsystem durch auswählen des „Create Subsystem“ im DropDown-Menü (Öffnen per Rechtsklick auf Auswahl)
    Simulink 03 07.jpg
  10. Öffnet man das Submodel, so sieht man, das anstelle des Clock-Blockes (welches wir aussen vor gelassen haben), ein Input erzeugt wurde).
    Simulink 03 08.jpg
  11. Die Input- und Output-Blöcke sind die Schnittstellen zwischen Funktionen und Subfunktionen. Sie sind quasi die Anschlüsse für die „Leitungen“
  12. Es gibt auch Submodels, die durch triggern oder Ereignisse (Interrupts) aufgerufen werden können. Ein Beispiel für ein getriggertes Submodel hatten wir vorhin schon, das J-K-FlipFlop, das stets auf den fallenden Flanken des Clock-Signals ausgeführt wird.
    Simulink 03 09.jpg
  13. Kommen wir zum Prüfen, ob die Block- Anordnung überhaupt unsere Zählsequenz erzeugt.
  14. Klassischerweise würden wir dazu Scopes anlegen. Für jedes Signal erst mal eines (weil jedes Scope nur eine Anschlussleitung hat)
  15. Problem: Jedes Signal ist in einem eigenem Fenster. Die Signale sind sehr schwer zu vergleichen
    Simulink 03 10.jpg
  16. Eine Alternative ist, den Scope Manager zu benutzen.
    Simulink 03 11.jpg
  17. Der Manager wird über Tools aufgerufen. In der Rubrik “Viewers“ die Substruktur Simulink öffnen, Scope auswählen und mit dem Button „Attach to model >>“ einbinden. Damit wird ein globales Scope erzeugt.
  18. Über den Button „Edit Signal connection for selection“ kann man nun alle verfügbaren Signale dem Scope zuweisen.
    Simulink 03 12.jpg
  19. Die mit dem globalen Scope verknüpften Signale, werden mit einer farbigen Brille über der jeweiligen Leitung im Editor angezeigt.
    Simulink 03 13.jpg
  20. Mit einem Doppelklick auf eine der Brillen lässt sich das Scope-Fenster öffnen.
  21. Jetzt hat man immerhin alle Graphen in einem Fenster. In unserem Fall ist es aber dennoch unglücklich, da sich die Graphen teilweise überlagern. Was man hier noch braucht, sind diverse Offsets.
    Simulink 03 14.jpg
  22. Abhilfe kann hier das Erstellen eines Submoduls sein, um sich sein Display selber zu basteln:
    Simulink 03 15.jpg
  23. Subsystem-Block aus der Bibliothek einbinden und dann mit einer Anordnung wie hier rechts zu sehen füllen.
    Simulink 03 16.jpg
  24. Als Ergebnis bekommt man dann dieses Display-Submodel.
    Simulink 03 17.jpg
  25. Tipp: Blöcke, die nichts mit dem eigentlichen Ablauf eines Programmes zu tun haben (Kommentare, Titel,…), am besten graphisch wie in diesem Beispiel abheben lassen -> sorgt für mehr Übersichtlichkeit
  26. Jetzt haben wir auch ordentlich vergleichbare Kurvenverläufe:
    Simulink 03 18.jpg
  27. Optional: Wenn ihr Scopes automatisch beim Ausführen des Programms öffnen wollt, kann man bei den globalen Parameter-Fenster des Models in der Startsequenz folgenden Code hinzufügen: set_param('<Modelname>/<Submodelname>/Scopename','Open','on');
    Simulink 03 19.jpg
  28. Tipp: Hier werden Befehle via Callbacks mit Matlab verknüpft. Somit kann man z.B. Parameter (wie Axeneinstellungen) überall im Programmablauf einbringen
  29. Um unsere Aufgabe zu vervollständigen, nutzen wir am besten noch zwei AND-Operatoren. Damit wird das Endsignal erst ausgegeben, wenn auch das Clocksignal wieder auf high ist.
    Simulink 03 20.jpg
  30. Das Display muss aufgrund des zusätzlichen Signals natürlich angepasst werden.
  31. Hierfür einfach das Display-Submodel öffnen, die Anzahl der Eingänge des Mux auf 4 erhöhen (c), einen weiteren Input mit Converter hinzufügen (a) und das Offset-Array anpassen(b).
    Simulink 03 21.jpg
  32. Und siehe da: Fertig!
    Simulink 03 22.jpg

Simulink .mdl Dateien



→ zurück zum Hauptartikel: Einführung in Simulink