War das auf dem Video eigentlich die maximale Geschwindigkeit? Wirkt für mich fast ein wenig langsam, wenn man berücksichtig, dass bei diesen Rädern nicht die volle Umdrehung in Vortrieb umgesetzt wird.
War das auf dem Video eigentlich die maximale Geschwindigkeit? Wirkt für mich fast ein wenig langsam, wenn man berücksichtig, dass bei diesen Rädern nicht die volle Umdrehung in Vortrieb umgesetzt wird.
Ja, das ist das Maximum bei Nennspannung des Motors. Ich kann den Motor noch etwas treten, das sollte kein Problem sein, aber doppelt so schnell wird er nicht mehr. Ich gebe Dir Recht, er ist etwas lahm. Aber die Vorteile dieses Motors haben den kleinen Nachteil mit der geringen Geschwindigkeit überwogen (dessen erster war, dass ich die Motoren noch rumliegen hatteWar das auf dem Video eigentlich die maximale Geschwindigkeit? Wirkt für mich fast ein wenig langsam, wenn man berücksichtig, dass bei diesen Rädern nicht die volle Umdrehung in Vortrieb umgesetzt wird.). Mir geht's ja auch nur um's Prinzip, dass das Ding dann etwas gemächlich sein wird, ist schon okay ...
Gruß
Malte
Das ist jetzt erstmal alles nur simuliert?
Also ich hab auf jeden Fall einen ordentlichen D-Anteil drin, da dieser die Schwingneigung gut unterdrückt. Wenn man den P- und I-Anteil hochschraubt, neigt der Regler nämlich stärker zum Schwingen, der D-Anteil dämpft das dann wieder etwas, daher finde ich den eigentlich ganz sinnvoll.
Womit sendest du eigentlich deine Sollwerte an den Regler, kannst du das auch über Matlab machen oder lädst du da dann nachher nur die Messwerte rein zum rechnen und darstellen?
AI - Artificial Idiocy
Hi,
Genau, das ist eine reine Simulation. Und da war der Vorteil, den der D-Anteil für die Regelgüte dann noch gebracht hat, wirklich minimal (beurteilt nach dem Summenfehler über alles). Falls Du Matlab hast, kannst Du mit dem Code auch rumspielen, dann siehst Du es. Kann auch vielleicht noch ein Bild dazu nachliefern. Wie groß der Unterschied zur Realität dann ist, weiß ich natürlich nicht. Das finde ich aber sehr spannend und freue mich insofern darauf, das jetzt auch auf der Motorelektronik zu implementieren. Ich habe leider gerade wenig Zeit, ich hoffe dass ich zwischendurch mal dazu komme. Ich habe auch noch das Problem, dass mein Sensorsignal ziemlich stark rauscht, ich muss da also noch auf eine gute Art filtern, ohne das System insgesamt deutlich träger zu machen.Das ist jetzt erstmal alles nur simuliert?
Also ich hab auf jeden Fall einen ordentlichen D-Anteil drin, da dieser die Schwingneigung gut unterdrückt. Wenn man den P- und I-Anteil hochschraubt, neigt der Regler nämlich stärker zum Schwingen, der D-Anteil dämpft das dann wieder etwas, daher finde ich den eigentlich ganz sinnvoll.
Im Moment ist das noch ganz stumpf gemacht, für die Kennlinien hab ich die Sollwerte hart in den Programmcode geschrieben. Es spricht ja aber grundsätzlich nichts dagegen, die über RS232 zu senden. Später möchte ich da ja I2C verwenden.Womit sendest du eigentlich deine Sollwerte an den Regler, kannst du das auch über Matlab machen oder lädst du da dann nachher nur die Messwerte rein zum rechnen und darstellen?
Gruß
Malte
Hab da wirklich gerade nochmal ein wenig mit herumgespielt und an den Reglerparametern gedreht. Hab auch mal einen Anti-Windup für den Integratoranteil wie bei mir eingebaut. Mir ist auch aufgefallen, warum du keinen D-Anteil brauchst: du hast deinen Regler auf Drehzahlebene aufgebaut, ich hingegen auf Positionsebene. Jedenfalls hab ich jetzt folgende Parameter verwendet:
Kp=50
Ki=3
Kd=1
Der Regler funktioniert jetzt schön zackig und ohne Überschwinger
![]()
Hier nochmal der ganze Code:
Code:clear all; close all; clc; if 0 % sprünge soll = [zeros(1, 100) ... ones(1, 200)*20 ... zeros(1, 100) ... ones(1, 200)*-40 ... zeros(1, 100) ... ones(1, 200)*60 ... zeros(1, 100) ... ones(1, 200)*80 ... zeros(1, 100)]; else % rampen soll = [-80:2:80 ... -80:1:80 ... -80:0.5:80 ... -80:0.25:80]; end % streckeneigenschaften v = 0.38; T1 = 13; % PID parameter Kp = 50; Ki = 3; Kd = 1; Ta = 1; % entspr. 2.048 ms % init u=0; y = 0; eSum = 0; eOld = 0; yOld = 0; for i = 1:length(soll) w = soll(i); %% PID e = w - y; if abs(u)<208 %Anti-Windup, Integrator abschalten wenn Ausgang in Begrenzung eSum = eSum + e; end P = Kp*e; I = Ki * Ta * eSum; D = Kd/Ta*(e - eOld); u = P+I+D; eOld = e; u(u>208) = 208; % max. stellwert u(u<-208) = -208; %% PT1 strecke y = yOld + 1/T1 * (v * u - yOld); yOld = y; %% doku y_(i) = y; u_(i) = u; w_(i) = w; e_(i) = e; P_(i) = P; I_(i) = I; D_(i) = D; end % darstellung disp(['Summenfehler: ' num2str(eSum)]) subplot(2, 1, 1) plot(soll, 'LineWidth', 2) hold on plot(y_, 'r', 'LineWidth', 2) set(gca, 'XLim', [0 length(y_)]) xlabel('Zeit [Ticks]') ylabel('Drehzahl') legend('soll', 'ist') subplot(2, 1, 2) plot(P_, 'LineWidth', 2) hold on plot(I_, 'g', 'LineWidth', 2) plot(u_, 'r', 'LineWidth', 2) set(gca, 'XLim', [0 length(y_)]) xlabel('Zeit [Ticks]') ylabel('Wert') legend('P', 'I', 'Stellwert')
AI - Artificial Idiocy
Hey,
Achso, sorry, haben wir da die ganze Zeit aneinander vorbeigeredet? Mir geht es erstmal nur um eine Drehzahlregelung, ist ja nur als Antrieb für die Räder gedacht. Eine Positionsregelung könnte man draufsetzen, ich würde die aber auf einer Drehzahlregelung aufbauen.Mir ist auch aufgefallen, warum du keinen D-Anteil brauchst: du hast deinen Regler auf Drehzahlebene aufgebaut, ich hingegen auf Positionsebene.
Gruß
Malte
Erstmal: Sehr cooles Projekt.
Mit welcher Regelfrequenz möchtest du denn arbeiten?
Bin gerade nämlich auf der Suche nach Sensoren für mein Projekt. Ich will einen ähnlichen Bot als Studienarbeit bauen, allerdings möglichst viel mit dem 3D Drucker arbeiten. Also werden die Räder gedruckt und mit Kugellager gelagert. Da das ganze Gebilde möglichst günstig und schnell reproduzierbar sein soll, werde ich beim Antrieb auf RC-Motor setzen und ihn untersetzen (muss erstmal evaluieren, ob mein 3D Drucker auch hinreichend genau und steif drucken kann). Deine Idee mit der separaten Regelelektronik für jedes Rad klingt sehr verlockend, habe mir das auch überlegt, allerdings will ich nicht nur die Drehzahl regeln, sondern auch die Drehung ( mittels Gyro ) um den Schlupf zu kompensieren.
MfG,
C_M
Lesezeichen