PID Servoelektronik

Hallo ihr Lieben,

ich möchte eine Servoelektronik aufbauen.
Der folgende Code ist aus der Pid Libary:

/********************************************************
* PID Basic Example
* Reading analog input 0 to control analog PWM output 3
********************************************************/

#include <PID_v1.h>

#define PIN_INPUT 0
#define PIN_OUTPUT 3

//Define Variables we'll be connecting to
double Setpoint, Input, Output;

//Specify the links and initial tuning parameters
double Kp=2, Ki=5, Kd=1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup()
{
 //initialize the variables we're linked to
 Input = analogRead(PIN_INPUT);
 Setpoint = 100;

 //turn the PID on
 myPID.SetMode(AUTOMATIC);
}

void loop()
{
 Input = analogRead(PIN_INPUT);
 myPID.Compute();
 analogWrite(PIN_OUTPUT, Output);
}

Ist der Code so schon fertig?
Wie schliesse ich das Poti und den Motor an?

#define PIN_INPUT 0 ( Ist das die Pin vom Poti?)
#define PIN_OUTPUT 3 ( Ist das die Pin vom Motor?)

Kann ich nur einen Motor direkt dranklemmen an Pin 3, weil lieber wäre mir ein Fahtenregler?

Dankesehr im Vorraus.

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Hi

Ki erscheint mir schwer groß - aber egal.
WAS hast Du vor?

Eine Regelung prüft laufend den aktuellen Zustand (Das wird der INPUT sein) und versucht, Das auf SOLL zu bringen.
Dafür wird der Ausgang entsprechend angesteuert - was dahinter passiert, ist der Regelung egal.
Irgendwie muß der OUTPUT also auf den INPUT zurück wirken.

Solange noch nicht Mal klar ist, Wen oder Was Du Wie oder Wieso und überhaupt, lautet die Antwort wohl ‘Häh?’

MfG

#define PIN_INPUT 0           ( Ist das die Pin vom Poti?)

#define PIN_OUTPUT 3        ( Ist das die Pin vom Motor?)

Reading analog input 0 to control analog PWM output 3
Nicht gelesen?

Ja, doch, ich bin etwas irritiert, weil Gleichstrommotoren über PWM geregelt werden. Ich möchte aber ein PWM Signal für einen Fahrtenregler.

Hi

@combie
Durchaus - nur ergibt Das - in meinem Kopf - noch Nicht Rundes!

@peter1984
Wie sieht denn das Signal aus, Welches der Gleichstrom-Motor aktuell aus geben soll (laut dem Sketch) - dieses Signal muß sich ja irgendwie durch die Geschwindigkeit ändern.
DAS sehe ich aber noch nicht - und ein Poti hat an einem DC-Motor nur was verloren, wenn Dieser eine Position anfahren soll - Spricht ein Servo.

MfG

peter1984:
Ja, doch, ich bin etwas irritiert, weil Gleichstrommotoren über PWM geregelt werden. Ich möchte aber ein PWM Signal für einen Fahrtenregler.

Ja, dann mach das doch!
Was behindert dich?

OK, ein paar Tipps könnte ich dir geben:

  • Doku zum PID Regler lesen, solange, bis verstanden
  • Ein schönes dickes, modernes, C++ Buch anschaffen und auswendig lernen
  • Einen Plan malen.

Danke Combie.

Danke postmaster-ino

Ich habe leider kein Oszi hier. Ja, ich möchte eine Position anfahren.

Ich dachte, ein Poti kommt an einen Analogpin, also A0 und nicht Pin0.

Meine Frage nochmal: Ist´s ein PWM Signal zum regeln eines Gleichstrommotors( Tastverhältnis von 0 bis 100%), oder ein PWM Signal für Fahrtenregler

Ich sag's noch Mal:
DAS, was Du ausgibst, wird's wohl sein.
Der PID-Regler gibt Dir aus der vorherigen und der aktuellen 'Position' einen Wert zurück.
Was Du Damit anstellst, ist dem Regler völlig wumpe.

Wenn besagtes Poti an einen wohl analogen Eingang kommt, muß Dieses aber mechanisch von dem angesteuerten Motor verdreht werden - sonst ist's keine Regelung sondern eine Steuerung - und der PID-Algorithmus schießt von einem Extrem ins Andere.

MfG

“DAS, was Du ausgibst, wird’s wohl sein”
Kann ich das bestimmen?

Wer sonst?

Meinst Du, wir sollten SO hier weiter machen?

Können Sie mir einen Tipp geben, wie ich das hinbekomme?

peter1984:
Ich dachte, ein Poti kommt an einen Analogpin, also A0 und nicht Pin0.

Das Analogpin kann auch als 0 "adressiert werden" außer A0.

Zusammenfassend.

Ein Gleichstrommotor wird mittels PWM in der Geschwindigkeit geregelt. Um die Drehrichtung zu ändern braucht es zusätzlich noch ein Drehrichtungssignal und als Ansteuerung einen H-Brücke.

Ein bürstenloser Gleichstrommotor kann durch einen Fahrtenregler angesteuert werden. Da braucht Du aber einen der in beide Richtungen den Motor dreht. Eine Ansteuerung erfolgt über die servo.h Bibliothek die mit der IDE geleifert wird.

Du brauchst aber für eine PID Regelung eine Positionsbestimmung des Motors bzw von dem was er antreibt bzw der (Umdrehungs)-Geschwindigkeit (je nachdem welche Regelung Du bauen willst).
Nur so weiß der PID-Regler wohin er regeln soll.

Wenn Du die Sollwert über einen Potentiometer einstellst aber keinen Istwert mißt brauchst Du keinen PID-Regler.

Grüße Uwe

Hallo Uwe, danke erstmal.

Ich dachte das Programm aus der Libary wäre komplett. Einen Auto Fahrtenregler habe ich hier rumliegen. Muss ich die servo.h in das Programm oben einfügen, um den Fahrtenregler anwenden zu können?

Ich dachte das Programm aus der Libary wäre komplett.

Ist es!

Es erfüllt allerdings wohl nicht deine Anforderungen, da es für ganz andere Anforderungen geschrieben wurde.

Also ist das Programm für eine Ansteuerung mit H-Brücke. Kann man das übersetzen für Fahrtenregler? Gibts evtl. eine passendere Libary?

Gruss

Du hältst mit notwendigen Angaben hinter dem Berg.

z.B.
Wo sollen "ist wert" und "soll wert" für deinen PID Regler herkommen?

Ansonsten, ich kenne deinen Fahrtregler nicht.
Woher soll ich also wissen, was dieser erwartet.

Ich versuch mich mal auszudrücken. Bitte korrigieren. Der ist-Wert kommt vom Poti. Der soll-Wert kommt von einer Fernsteuerung

Fein!

Und, was hindert dich jetzt?