www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Echtzeit-Simulation mit Simulink?


Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann man Simulink irgendwie dazu überreden? Mit Echtzeit meine ich hier
nicht, was man normalerweise in unseren Kreisen darunter versteht,
sondern dass eine Simulation auch wirklich in der Geschwindigkeit
abläuft wie in Echt. Also, z.B. dass eine Zeitkonstante von 3s auch
tätsächlich erst nach 3s erreicht wird und nicht so schnell wie der
Rechner kann. Oder, dass ein Rechteck von 0.1Hz aus dem "Pulse
Generator" auch wirklich 10s für eine Periode braucht, und nicht nur
im Computer.

Gruß, Thomas

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich hat auch im neuen Elektor (Aprilheft) gewundert, dass man mit
Matlab in Echtzeit DRM-Signale demodulieren kann - offensichtlich
gehts. Das sind immerhin NF-Signale um 12 kHz Mittenfrequenz, mit der
Soundkarte digitalisiert. Wäre schön, wenn das auch mit dem kostenlosen
Matlab-Clone Octave ginge.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

was definierst du als Echtzeit? Was du mit Simulink machst, ist eine
Simulation, d.h. die eigentliche Berechnung deines Modells dauert für
Simulink 0 Sekunden. Was Simulink macht:
- berechne alle Blöcke und liefere ein Ergebnis
- gehe zum nächsten Berechnungsschritt (abhängig vom Solver, variable
oder fixed step)
- friere die Simulationszeit ein
- berechne alle Blöcke und liefere ein Ergebnis
- gehe zum nächsten Berechnungsschritt
- usw...

Gehst du dann auf ein reales System (z.B. eine Autobox von dSPACE als
Regler) mit einer realen Strecke welches geregelt werden soll (z.B. ein
Motor oder Flugzeug) über, ist das Verhalten u.U. ein ganz anderes, weil
dort dann die Rechenzeit des Reglers auf der Autobox miteingeht.

Grüße,
Ralf

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

hier mal was zum Hintergrund, damits etwas klarer wird:
Ich arbeite mit dem "Embedded Target for Motorola MPC555". Damit habe
ich eine Regelung aufgebaut, die in Echtzeit auf dem Tagret läuft. Diese
Regelung kommuniziert über CAN mit einem Simulink Model, von wo aus sich
Regelparameter, Sollwertvorgabe und Sampling-Time zur Laufzeit ändern
lassen. Außerdem lassen sich dort über ein Scope Verlauf von Istwert
und Stellgröße visualisieren.
Bis jetzt ist es so, dass ich den Sollwert von Hand ändern muß, indem
ich eine Constant-Source editiere (alles zur Laufzeit). Nun will ich
aber statt der Konstant-Quelle ein Rechtecksignal verwenden, welches
alle 5s die Führungsgröße ändert. Das Problem dabei ist, dass Simulink
sowas nicht in "Echtzeit" macht, sondern so schnell wie der Rechner
kann. Und das ist nunmal so schnell, dass meine Hardware davon
garnichts mitbekommt, egal wie lange ich die Periodendauer wähle. Alles
was ich will ist also, dass die Zeit in Simulink genauso schnell abläuft
wie unsere Reelle Zeit, und nicht dass wie im Moment auf der x Achse des
Scopes die 10s Periodendauer zwar richtig angezeigt wird, diese aber in
Wirklichkeit nur vielleicht 1ms dauert.
Das ganze ließe sich zwar sehr einfach als Echtzeitmodel fürs Target
generieren, kommt aber für mich nicht in Frage, da ich Regelprozess und
Benutzervorgaben strikt voneinander trennen will. So lassen sich dann
auch ohne Neucompillierung schnell änderungen vornehmen.
Wenns gar nicht anders geht benuzte ich halt die empfangenen CAN
Messages als Zeitbasis (die werden vom Target in Echtzeit alle 1ms
verschickt) und bastel mir daraus meine "Echtzeit" in Simulink.

Rock'n'Roll,
Thomas

Autor: Björn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simulink lässt sich mit dem Real Time Target in Echtzeit betreiben.
Dafür wird ein extra Kernl gestartet der mit dem eigentlichen OS nichts
mehr zu tun hat.
Das die Sampling Rate begrenzt ist, versteht sich von selbst.
Zwei Links um einen Eindruck zu gewinnen:

http://www.mathworks.com/access/helpdesk/help/toolbox/rtwin/
http://www.mathworks.com/products/rtwt/

Björn

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In welchen Preislagen bewegt man sich eigentlich, wenn man Matlab in
Verbindung mit solch spezieller Hardware nutzen möchte, auf der Seite
sind die Preise leider nicht frei zugänglich.

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Björn
Danke für den Tip, werd mir das morgen mal anschauen. Aber nur dafür
wieder ne Toolbox deren Fähigkeiten kaum genutzt werden zu
registrieren, das werd ich wol kaum rechtvertigen können.
Dabei bräuchte Simulink ja einfach nur die Simulationszeit mit der
Systemzeit abzugleichen, das würde mir ja völlig reichen. Ich denke,
dass ein solches Feature gerade auch im Bildungsbereich für
anschaulichen Unterricht sinnvoll währe.

@Alex
Auf der Homepage ganz oben, links neben dem Suchfenster auf Store
klicken, da kannst du dir die Preise anschauen. Da ist aber immer noch
was drinn, wir zahlen z.B. als Hochschule nur 500€ für ein embedded
Target, laut Preisliste währen es 700€.
Aber damit ist es dann noch nicht getan, erst müssen noch die ganzen
Abhängigkeiten aufgelöst werden. So setzen die ganzen Targets den
"Realtime Workshop" und den "Realtime Workshop embedded Coder"
voraus, die kosten uns auch nochmal jeweis 500€. Kommerzielle Lizenzen
sind deutlich teurer. Und dann braucht man natürlich noch nen Compiler,
in meinem Fall Metrowerks CodeWarrior. Ich meine der kostet gut 7000€
für kommerzielle Nutzung!

Rock'n'Roll,
Thomas

Autor: Björn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du dir nicht ein Clock-Signal aus dem Target generieren lassen
und darüber dann deine Sollgröße "triggern"??? Hab so etwas ähnliches
mal mit einem VR-Tracking-System und UDP gemacht. Das hat eigentlich
ganz gut geklappt.

Björn

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich zitiere mich mal selber:

"Wenns gar nicht anders geht benuzte ich halt die empfangenen CAN
Messages als Zeitbasis (die werden vom Target in Echtzeit alle 1ms
verschickt) und bastel mir daraus meine "Echtzeit" in Simulink."

;)
Genauso mach ichs jetzt auch, aber ganz sauber find ich das ja nicht.

Gruß, Thomnas

Autor: Björn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Punkt für dich ;-) Hab ich wohl überlesen ;-)))

Das Einzige was mir noch einfallen würde, wäre ne S-Function zu
schreiben, sich dort die Systemzeit zu holen und die dann so lange in
eine Schleife zu schicken, bis Systemzeit = Sampelperiod. Sauber ist
das aber auch nicht und mit Echtzeit hat das schon gar nichts zu tun.
Und wenn man noch nie etwas mit S-Functions in C gemacht hat, auch
nicht mal eben in ner halben Stunde erledigt.
Garantierte Echtzeit gibt es - AFAIK - nur mit dem RTW.

Björn

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, läuft. Ich benutze jetzt den CAN Message-Trigger, der immer
ausgelöst wird wenn eine CAN Nachricht mit bestimmter ID ankommt um
eine Matlab Function aufzurufen. Diese Funktion erhöht dann jedes mal
den Wert einer Variablen um 0.001 (1ms ist die Abtastrate meiner
Regelung).
Damit steht mir dann in Simulink eine ziemlich genaue Uhr zur
Verfügung. Diese verhaspelt sich zwar schonmal wenn der Rechner mal
wieder was besseres zu tun hat, das ist aber für meine Zwecke egal und
bei geringerer Zeitauflösung verschwindet das Problem völlig.
Hat jemand ne Ahnung, wie man in Matlab an die Systemzeit kommt?
>>time [tab]
liefert nichts, und ein bischen genauer als
>>date
sollte es dann schon sein... ;)
Das "Real-Time Windows Target" werde ich mir aber auch noch
anschauen, villeicht ist das ja doch was für uns.

Gruß,
Thomas

Autor: M. Doering (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

probiers mal mit getdate().
Da bekommst du Datum + Zeit.
Ich glaube so gar Millisekunden "genau".

Gruß

Matze

Autor: Marco Pfister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

Um eine Simulation in Echtzeit laufen zu lassen bieten wir, die Firma
SisNova Enginering GmbH (www.sisnova.ch), ein ganz einfaches tool an,
das sisRealTime for Simulink. Es ist primär für die RealTime Simulation
mit DAQ Karten gedacht, wir bieten aber auch eine "abgespeckte
Version" für Zeitsynchronisation unter Simulink an. Im Gegensatz, zu
dem von The Mathworks angebotenen RealTime Windows Target, brauch unser
Lösung den RealTime Workshop nicht. Was natürlich auch die
Softwareanschaffungskosten um Faktoren günstiger macht.

Freundliche Grüsse

Marco Pfister
CEO
SisNova Engineering GmbH

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch eine genial einfache Lösung:
http://www.mathworks.com/support/solutions/data/1-...

Autor: Marco Pfister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Lösung ist zwar sehr einfach, ist jedoch nur für sehr langsame
Samplezeiten geeignet. Die SampleZeit wird nicht genau abgetastet da
unter Windows noch andere Prozesse laufen. Bei unserer Lösung wird der
Timer ganz genau eingehalten, deshalb sind auch SampleZeiten bis 500 us
möglich. Unser Timer läuft im Kernel mode

Freundliche Grüsse

Marco Pfister

Autor: elektroroboter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich bin neu in Target und mich würd interresieren,
wie man die "Echtzeitsimulation in Target durchführt.

Danke für antworten!

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tut mir leid, aber ich versteh deine Frage nicht.
Du arbeitest also mit dem "Embedded Target for Motorola MPC555"?
Was genau willst du jetzt machen? Programme auf dem Target laufen immer
in Echtzeit.
Gib uns mehr Infos, dann kann dir villeicht auch geholfen werden...

Autor: Weinga-Unity (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Interessantes Thema, beschäftige mich auch gerade mit so was
ähnlichem.

Ich habe für die UNI gemeinsam mit einem Kollegen ein Projekt gemeacht
(uC-LTI), in dem auf einem ATMega8 LTI-Systeme berechnet werden.
Funktionen: Mehrere Systeme, Systeme verlinken, verlinken der Ein- und
Ausgänge, Messung der Ein- und Ausgänge. Das alles kann über die
serielle Schnittstelle RS232 gemacht werden. Abtastzeiten is man ab 4ms
dabei. System 6. Ordnung (Tiefpass->Sys 4. Ordnung->Tiefpass) haben wir
mit 9ms bereits laufen gehabt. Neben 4 realen AD-Eingängen und 2 realen
AD-Ausgängen existieren auch noch 2 virtuelle Eingänge, die über die
RS232 gesetzt werden können -> Ersparniss eines Signalgenerators.

PC-Seitig gibts standalone Programme mit GUI für WIN32 und LINUX
(Screenshot im Anhang), dann eine Matlab-Version und eine
SCICOS-Version. Man hat am PC eine INI-Datei, in der steht, wieviele
Systeme, Systemmatrizen A,B,C,D und die Verlinkungsinformationen ADC1
auf Eingang von System 2 usw. Daraus werden dann die Workspace-Daten
generiert, die über die RS232 an da Board in einen Buffer im RAM
geschrieben werden.

Die Echtzeitfähigkeit in Matlab erzwingen wir so, dass beim Messpaket
eben der Berechnungszyklus mitgeliefert wird und daraus mit der
Abtastzeit der Zeitpunkt bestimmt werden kann (wird für die
Messaufnahme verwendet).

Jetzt wäre es interessant, wie man z.B. in Simulink einen Block
gestalten kann, der das System wiederspiegelt mit den Ein- und
Ausgängen, das System aber wirklich dann mit den Daten gefüttert wird.
Beispiel: uCLT-Simulink-Block verbunden mit Scope-> Oszilloskop

Von Matlab aus funktionierts. Man sagt messen 10 sekunden lang, dann
noch Eingangsvektoren für die virtuellen Eingänge mit Zeitindizes und
das tuts.

Ginge das wie beschrieben in Simulink? Wenn ja, wie? Schlagwörter,
Links, alles ist erwünscht außer Kritiken wie, warum nehmt ihr keinen
DSP (es ging im Projekt darum, was man mit möglichst wenig Hardware und
Resourcen alles machen kann; wie wir gesehen haben anscheinend doch ne
Menge; Haben mit dem System bereits Praktikums-Projekte nachgebaut, die
auf der UNI mit DSPACE gemacht wurden).


mfg Weichinger Klaus

Autor: elektroroboter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zitat:

"Tut mir leid, aber ich versteh deine Frage nicht.
Du arbeitest also mit dem "Embedded Target for Motorola MPC555"?
Was genau willst du jetzt machen? Programme auf dem Target laufen
immer
in Echtzeit.
Gib uns mehr Infos, dann kann dir villeicht auch geholfen werden..."

Ich will mit "TARGET 3001!" eine beliebige Simulation durchführen.
Wenn man nun den Graphen startet, dann soll z.B. die Spannungslinie
erst nach 20 Sekunden die 20 Sekunden Markierung erreicht haben.

Danke für Antworten

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na da bist du aber hier völlig falsch, mach am besten einen eigenen
Thread im "µC & Elektronik" auf.

@Klaus
interessantes Projekt, gibt es dazu eine Homepage oder sowas? Seh ich
das richtig, dass das Teil einfach nur ne Strecke unter
Echtzeitbedingungen simulieren soll? Werden daran dann Regler getestet,
oder wie verwendet ihr das im Praktikum?
Wie ihr das in Simulink machen könnt kann ich euch leider nicht sagen,
villeicht mit ner C S-Function.

Autor: Thomas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist da grad noch was eingefallen:
Ich hab zwar keine Ahnung von Target3001, aber soviel ich weiß ist die
Simulation SPICE basierend. Dann könntest du deine Echtzeitsimulation
vergessen.

Autor: Weinga-Unity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Thomas

Hallo! Ja, es wird einfach ein LTI-System in am AVR abgebildet und die
Elektronik verhält sich dann wie das überspielte LTI-System.

Im Praktikum werden dann z.B. Zustandsbeobachter+Zustandsregler aber
auch PID implementiert und getestet an der realen Strecke. Wie gesagt,
auch höhere Ordnungen möglich.

Ne, ne Homepage gibts leider nicht.

mfg Weichinger Klaus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.