mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Zustandsmodell (Regelung) auf C8051


Autor: Paul (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich bin absoluter Neuling auf dem Gebiet der Mikrocontroller. Bin mir 
nicht mal sicher ob ich im richtigen Forum bin...

Hier meine Frage: Ich habe ein Zustandsmodell für ein inverses Pendel 
aufgestellt und den Rückführvektor sowie den Vorfilter erfolgreich 
berechnet. Jetzt habe ich alles in den z-Bereich (diskret) umgerechnet 
und freue mich das es in der Simulation (Matlab/SImulink) stabil 
funktioniert.
Jetzt kenne ich es aus anderen Sachverhalten, dass man mit dem 
RealTimeWorkshop einfach den C-Code eines Subsystems Compilieren kann, 
aufs C8051 hochlädt und fertig ist der Braten.

Falls die Frage jetzt bissl blöd ist, sei mir das verziehen. Wie bekomme 
ich jetzt die Zustandsregelung auf den µC? Was muss ich compilieren, wie 
läuft es? Woher weiß der Controller, was er machen soll?
Danke!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Simulink Modell weiss ja gar nicht wie deine Peripherie aussieht - 
und wir auch nicht.

Selbst wenn Du C-Code heraus bekommst, wirst Du nicht um eine händische 
Einbettung in ein Programmgerüst deiner spezifischen Hardware kommen.
Dazu gehören Initialisierung, Ports aufsetzen  usw.

Hast Du denn einen C-Kompiler, ein uController Board, die 
Motoren/Sensoren schon zusammen?

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das Rahmenprogramm und die Ports usw. ist schon klar.

Aber was soll der µC denn mit den Eingängen machen? Irgendwie muss ich 
den diskreten Rückführvektor und den Vorfilter ja abarbeiten. Das ist 
mir irgendwie noch nicht so klar.

Autor: Whitespace (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst bei jedem Abtastschritt (z.B. durch einen Timerinterrupt 
ausgelöst) auf dem uC folgendes berechnen:

u = P*soll - ft1*phi - ft2*phi_strich - ft3*p - ft4*p_strich - ft5*l;

Also einfach das, was das Blockschaltbild in Simulink auch berechnet.

Wobei ft1..ft5 deine berechneten Konstanten des Rückführvektors, soll 
der Sollwert (in deinem Blockschaltbild die Konstante mit 0)
und der Rest deine Systemzustände, sind, die du z.B. durch Messungen 
(Drehwinkelgeber, etc.) bestimmen musst.

u musst du wieder ausgeben. Wie und wohin musst auch du wissen.

Wie du deinen Sollwert und deine Zustände in den uC bekommst, das hängt 
von deiner Aufgabenstellung ab und von deiner Hardware, aber dazu hast 
du nichts geschrieben.

Dabei gehe ich mal davon aus, dass das System nicht im uC implementiert 
werden soll (geht auch), sondern ein physikalisch vorhandenes System 
ist, das du regeln willst. (Hätte sonst ja nicht viel Sinn, weil die 
komplette Simulation nur vom PC auf den uC verlagert werden würde ohne 
wiklich etwas reales zu regeln.)

   mfg Whitespace

Autor: beobachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleine Frage:

Misst du den kompletten Zustandsvektor (5 Größen) oder nicht?

Falls nicht brauchst du noch ein etwas zur Zustandsrekonstruktion z.B. 
Beobachter oder Kalmanfilter.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem sieht dein System sehr Zeitkontinuierlich aus.
Aus einem uController kannst Du aber nur in diskreten Zeitabständen die 
aktuellen Messdaten aufnehmen und für die Berechnung der 
Zustandsregelung verwenden.
Daher musst Du deine Regelung in Simulink so anpassen, dass Sie stabil 
im Zeitdiskreten läuft.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Vielen Dank für die Antworten! Ich merke ihr habt Ahnung. War nämlich 
alles ungefähr das was ich benötige! Zustandsbeobachter ist korrekt, 
brauch ich auf jeden Fall, weil ich nur 2 der 5 Dinge messen kann. Ich 
hab bei der Suche etwas gefunden.

http://www.imrtweb.ethz.ch/users/geering/PRAKTIKA/Pendel.pdf

Das müsste doch in etwa genau so laufen, oder?

Vielen Dank!

Autor: beobachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, prinzipiell.

Wahrscheinlich brauchst du nur ein Integrator und den Beobachter für 4 
Zustände. Beides zeitdiskret.

Alternativ kannst du versuchen einfach 2 Differenzierer zu verwenden um 
auf die Geschwindigkeiten zu kommen.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Whitespace:

Vielen Dank für die "Formel". Ich verstehe langsam wie es laufen könnte.
Allerdings ist mir die ganze Sache mit dem Zustandsbeobachter nicht so 
klar. In Lunze oder Unbehauen sind da fiese Matrizen aufgeschrieben. 
Keine Ahnung wie das im µC umgesetzt werden soll.

Gibt es irgendwo eine einfache verständlcihe Version wie man einen 
Zustandsbeobachter in C umsetzen kann!?

Danke!

Autor: beobachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Beobachter besteht nun mal aus "fiesen" Matrizen.
Naja so fies ist es nicht.... du musst nur Matrizen addieren, 
subthrahieren und multiplizieren (also nichts "kompliziertes")

Bei dieser niedrigen Ordnung kannst du es direkt ausrechnen,  also 
elementweise ohne Matrizen Rechnung explizit zu programmieren.

Aber evtl kannst du einen "reduzierten" Beobachter nehmen, der ist 
(evtl) einfacher zu implementieren. (im Lunze ist es drin, Unbehauen 
habe ich nicht  zur Hand)

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.