Realisierung einer Zustandsregelung mit Beobachter

Gast #4601878
Lesenswert?

Hallo liebes µC-Forum,
ich habe eine Zustandsregelung mit Beobachter entworfen und diese auch 
mit MatLab getestet. Hat alles super funktioniert. Jetzt wollte ich 
diese auf meinem µC programmieren und erzielte leider nicht die gleichen 
Ergebnisse wie in MatLab.

Für die Gleichung der Zustandsregelung habe ich die Formel aus dem 
Anhang verwendet. Um Diese auf meinem µC in C zu Programmieren habe ich
Funktionen für die Matrix/Vektor-Multiplikationen geschrieben um damit 
^x' auszurechnen. Anschließend wollte ich ^x' numerisch integrieren, um 
^x errechnen. w(t) ist Null.

1
Multiply_Matrix_Spalte(LC, x_real, x_dot_observer_1);
2
Multiply_Matrix_Spalte(A_BK_LC, x_observer, x_dot_observer_2);
3

4
x_dot_observer[0][0] = x_dot_observer_1[0][0] + x_dot_observer_2[0][0];
5
x_dot_observer[1][0] = x_dot_observer_1[1][0] + x_dot_observer_2[1][0];
6
x_dot_observer[2][0] = x_dot_observer_1[2][0] + x_dot_observer_2[2][0];
7
x_dot_observer[3][0] = x_dot_observer_1[3][0] + x_dot_observer_2[3][0];
8
  
9
x_observer[0][0] = x_observer[0][0] + x_dot_observer[0][0] * dt;
10
x_observer[1][0] = x_observer[1][0] + x_dot_observer[1][0] * dt;
11
x_observer[2][0] = x_observer[2][0] + x_dot_observer[2][0] * dt;
12
x_observer[3][0] = x_observer[3][0] + x_dot_observer[3][0] * dt;
13

14
Multiply_Spalte_Zeile(K, x_observer, &u);


Doch leider kommen für u(t) ganz andere Werte raus als in MatLab. Woran 
mag das liegen? Darf die verwendet Formel inklusive Integral nicht so 
"stumpf" betrachtet werden wie ich das tue?

MfG
Der Beobachter
Angehängte Dateien:
Gast #4601890
Lesenswert?

Hi,

gib mal bitte an welchen Datentyp die Arrays haben. Oder nutzt du 
Integer oder Fließkomma als Datentyp für die Arrays. Gib bitte auch an 
welchen uC du nutzt. Falls du Integer für die Matrix und Vektoren 
benutzt, musst du auf deinen Wertebereich achten. D.h bei signed int 
kann dein Wert max 32767 sein auch die Ergebnisse deiner Multiplikation 
und Addition dürfen nicht größer als 32767 sein.  Für negative Werte 
gilt natürlich -32768 als Max bzw. Min Wert.
Gast #4601900
Lesenswert?

Es scheint Du hast in MATLAB eine analoge Zustandsregelung simuliert. 
Die kann man schon auf einem uC programmieren, es kann dann aber zu 
numerischen Fehlern kommen. Die übliche Vorgehensweise ist, die 
Zustandsregelung in MATLAB zu diskretisieren mit einer Abtastzeit T z.B. 
mit Zero-order-Hold [Ad,Bd,Cd,Dd]=c2dm(A,B,C,D,T,'zoh')

Dann werden aus den Ableitungen Differenzen und man muss nicht mehr 
numerisch integrieren, es ist einfach eine do-while Schleife: x(n) = 
(Ad-BdKd) x(n-1) + Bd W R

Bei der Zustandsregelung per uC ist dann ja normalerweise ein 
physikalisches System angeschlossen und y(n) wird gemessen und nicht 
mehr simuliert. Der Beobachter soll dann eine Systemkopie mit Ausgang 
y^(n) erstellen, die für die Rückkopplung in die Regelung verwendet 
wird. Wenn das gemessene y(n) und das in MATLAB simulierte y(n) 
weitgehend übereinstimmen, dann sollte tatsächlich das u(n) vom uC mit 
dem aus MATLAB ähnlich sein.
Gast #4601915
Lesenswert?

Servus,
mithilfe der z-Transformation und Rücktransformation in die Zeitebene, 
hast dann nur eine Zeile vor dir:
uk=uk-1*K1 + K2*ek + K3*ek-1

Sowas in der Art. Und wenn du nicht weiter kommst: Matlab kann c-Code 
generieren.

mfg
Gast #4602475
Lesenswert?

chris_ schrieb:
> Die ist teuer und die
> Preisliste bekommt man nur mit Adressangabe:
Nö.

Preisliste für Heimgebrauch:
Matlab 105€
Toolboxen jeweils 29€
https://de.mathworks.com/store/link/products/home/new?s_iid=htb_buy_gtwy_cta4

Für Studenten:
Matlab-Suite: 69€
Matlab: 35€
Toolboxen jeweils 20€
https://de.mathworks.com/store/link/products/student/new?s_iid=htb_buy_gtwy_cta3

Standard:
Matlab: 2.000€
Toolboxen liegen zwischen 200€ und 3.000€
https://de.mathworks.com/store/link/products/standard/new?s_iid=htb_buy_gtwy_cta1

Für Bildungseinrichtungen:
Matlab: 500€
Toolboxen jeweils 200€
https://de.mathworks.com/store/link/products/academic/new?s_iid=htb_buy_gtwy_cta2

Die Toolbox MATLAB Coder findet man bei der Studenten Version, ganz 
unten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren