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!
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?
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.
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
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.
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.
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!
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.
@ 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!
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)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.