meine Frage lautet wie folgt. Ich habe einen Motor den ich mittels Potentiometer steuer. Die Drehzahl krieg ich auch ausgelesen.
Nun will ich meinen 2. Motor mit einem PID-Regler genauso schnell laufen lassen. Hat jemand eine Idee diesbezüglich? Probiere schon die ganze Zeit herum, jedoch krieg ich es nicht gebacken. Hab es mit der PID Bibliothek versucht.
Habe dann als Input meine gemappte Drehzahl (auf 155) genommen und als Output den Pin 10 (Da ist auch mein Motor- angeschlossen. Motor + ist auf dem Breadboard auf +.
Ich hab's versucht so gut wie möglich in einem Bild darzustellen. Siehe Anhang.
Motor 1 wird mittels Potentiometer gesteuert (AnalogWrite Potentiometer Value). Motor 2 soll nun die Drehzahl von Motor 1 erkennen und mittels PID-Regler das gleiche Signal erhalten. Wenn ich demnach via Poti die "Drehzahl" änder, dann soll Motor 2 das wieder erkennen und sich um den Wert einpendeln.
Bin da etwas überfragt.
Der Setpoint sollte demnach analogRead(0); sein.
Mein Output ist der Wert den mein Motor 2 hat.
Was ist denn dann mein Input? Es sieht so aus, als wäre mein Setpoint und mein Input analogRead(0)...
Ein PID Regler benötigt einen Sollwert und einen Istwert.
Istwert kann in Deinem Fall ein Tacho oder ein Drehzahl Encoder sein. Hast du ja aber anscheinend nicht.
Was man machen könnte;
Motor 1 läuft im Stellbetrieb und es gibt einen Iswert.
Der Sollwert für Motor 2 könnte dann der Istwert von Motor 1 sein. Dan nennt man dann Master Slave oder Kaskade. Dann kann man den Sollwert von Motor 2 fur den Aufbau eines Regelkreises für Motor 2 benutzen und den Istwert des Motor 2 als Istwert für den Regelkreis verwenden.
Ich würde in deinem Fall den eingelesen wert des Potis als Stellgröße für beide Antriebe benutzen mehr wird ohne Drehzahl Erfassung beider Antriebe nicht drinn sein.
"Istwert kann in Deinem Fall ein Tacho oder ein Drehzahl Encoder sein. Hast du ja aber anscheinend nicht.
Was man machen könnte;"
Also die Drehzahl vom ersten Motor hab ich ja. Wird ermittelt via Hall-Effekt-Sensor. Drehzahl 2 hab ich nicht. Hab das nicht so ganz verstanden. Könntest du das in Code schreiben eventuell? muss kein funktionierender sein. Nur zum Verständnis in Logik
Ich würde mal den Motor 2 so auswählen, dass er die gleiche Drehzahl wie Motor 1 hat. Dann wüsste ich ja analog die Drehzahl von Motor 2, würde ich jetzt mal denken.
Ja das stimmt schon. Ich muss die Drehzahl herausfinden. Bzw. die Spannung sollte auch reichen, wenn ich eine Kennlinie habe. Weißt du, wie ich die Spannung herauskriegen kann? Welcher Sensor wäre da geeignet?
Ich habe gerade leider nur einen Hallsensor und einen Lüfter da. Benutze halt so einen mini DC motor und der hat ja nur ne mini welle von 2mm oder so. Da kann ich leider keinen Magneten platzieren. Sollte dann morgen einen Hallsensor kaufen und einen lüfter irgendwo aufgabeln der gebaucht ist. Dann sollte es gehen.
Ich denke, dass ich erstmal versuche einen Motor an einem fixen Setpoint zu regeln (bsp: Setppoint = 150);
Mal schauen ob ich wenigstens das hinkriegen werde >.>
Wenn das klappt, sollte es mit zwei Motoren auch klappen.
RedOne1990:
Ich würde mal den Motor 2 so auswählen, dass er die gleiche Drehzahl wie Motor 1 hat. Dann wüsste ich ja analog die Drehzahl von Motor 2, würde ich jetzt mal denken.
Wenn das so wäre dann brauchst Du nur beide Motore gleich ansteuern und dann drehen sie sich gleich schnell. is aber nicht so.
Die Drehzahl hängt außer von den Motorcharakteristiken auch von der Last ab.
Um Motor 2 regeln zu können dann mußt Du wissen
a) wie schnell er drehen soll (Hallsensor von Motor1) und
b) wie schnell er sich tatsächlich dreht (Hallsensor an Motor 2) damit die regelung Motor 2 regeln kann.
Es gibt keinen "Arduino UNO r3 Elegoo". Das ist kein orginaler Arduino sondern ein Nachbau von Elegoo und darf deswegen den Namen "Arduino" nicht tragen.
So hab nun Drehzahl von Motor 1 und Drehzahl von Motor 2 vorhanden.
Wenn ich mir, nachdem ich den Parameter Kp, erneut rpm_2 anschaue, also die Drehzahl vom motor 2 erhalte ich einen wert von über 100.000, obwohl die Drehzahl vlt. 100 U/min ist. Ich frage mich wieso das passiert? Außerdem kriegt der Motor nicht genügend saft.