Forum: Mikrocontroller und Digitale Elektronik Realisierung einer Zustandsregelung mit Beobachter


von Der Beobachter (Gast)


Angehängte Dateien:

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

von volksvorg (Gast)


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.

von Der Beobachter (Gast)


Lesenswert?

Hey,
die Arrays sind vom Datentyp float. Als µC verwende ich einen PIC18f2550 
und als Compiler XC8.

MfG
Der Beobachter

von Lothar (Gast)


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.

von aSma>> (Gast)


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

von chris_ (Gast)


Lesenswert?

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

Aber nur, wenn Du die passende Toolbox hast. Die ist teuer und die 
Preisliste bekommt man nur mit Adressangabe:
https://de.mathworks.com/campaigns/products/ppc/google/matlab-toolbox-price-request.html

von Kaj (Gast)


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.

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
Noch kein Account? Hier anmelden.