WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matlab PID Regler

 

siegfried-damsen
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 04.09.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2018, 10:21     Titel: Matlab PID Regler
  Antworten mit Zitat      
Hallo,

ich versuche eine "Ball on Plate" Apparatur zu programmieren. Also eine Plattform die mit zwei Motoren gesteuert wird und einen Ball in der Mitte balancieren soll. Die Koordinatenerfassung läuft über eine Kamera oberhalb der Platte.

Momentan fliegt der Ball immer runter. Die Platte lenkt den Ball immer Richtung Mitte aber fängt ihn nicht rechtzeitig wieder ab, sodass der Ball nach 4-5 mal hin und her rollen von der Platte geschaukelt wird.

Meine Vermutung ist, dass der PID - Regler in meiner Schleife (siehe code unten) nicht richtig "eingebaut" ist. In jedem neuen Schleifendurchgang werden die alten Regelungswerte einfach durch die neuen ersetzt anstatt sich auf zusummieren. Ich hoffe ich konnte das einigermaßen verständlich erklären.

Code:

%%Dimensionierung des PID Reglers%%

C=pid(0.32,0.25,0.25);


%%Motor Koordinaten um die Plattform grade zu stellen%%

z1=2020;                %%Motorstellwerte sind 0-4095%%
z2=2030;                %%Exakt Senkrecht stehen die Motoren bei 2042/2043. Mechanische Einflüsse sorgen für die Verschiebung%%

%%Anzahl der Schleifenwiederholung%%

n=20000;

%%Kamera laden%%

h=webcam;

%%Verbindungsaufbau zu den Motoren "MX64(port,Baudrate)"%%

Dynamixel=MX64(4,57600);

%%Beginn der Schleife%%

while n>1
   n=n-1;
a=h.snapshot;               %%Kameraschnappschuss laden%%
b=a(:,:,2)<60;              %%Farbanteile filtern%%
x=mean(sum(b,2));           %%Berechnung der Koordinaten des Balls%%
y=mean(sum(b,1));
[y,x]=find(b);
cxm=mean(x);                %%X-Koordinate des Balls%%            
cym=mean(y);                %%Y-Koordinate des Balls%%
cx=cxm-320;                 %%X-Koordinate bezogen auf die Plattformmitte%%
cy=cym-240;                 %%Y-Koordinate bezogen auf die Plattformmitte%%
dx= feedback(cx,C);         %%Regelungsfunktion in X-Richtung%%
dy= feedback(cy,C);         %%Regelungsfunktion in Y-Richtung%%
ex = dx.Denominator{1,1};   %%Addition der Kp, Ki und Kd Regelungsgrößen%%
fx = ex(1)+ex(2)+ex(3);
ey = dy.Denominator{1,1};
fy = ey(1)+ey(2)+ey(3);
gx=fx*0.5;             %%Mathematische Umrechnungen von Regelungsgrößen auf Motorstellgrößen%%
gy=fy;
h1=gy-gx;
h2=gx+gy;
i1=h1*(-1);
i2=h2*1;

j1 = i1 + z1;
j2 = i2 + z2;

 if(isnan(j1))              %%Wenn kein Objekt erkannt wird, stellen die Motoren die Plattform grade&&
   
Dynamixel.position(1,z1);
Dynamixel.position(2,z2);

    else
   
    Dynamixel.position(1,j1);
    Dynamixel.position(2,j2);
 end
end
Dynamixel.position(1,z1);
Dynamixel.position(2,z2);
clear

 
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.