Forum: Mikrocontroller und Digitale Elektronik Regelkreis für Modellbauservo


von Günther (Gast)


Lesenswert?

Hi, ich möchte ein Modellbauservo selber bauen. Der Testaufbau ist 
folgender: Die Platine eines Modellbauservos wird ersetzt durch einen 
Arduino mit Fahrtenregler. Ich werde aus dem PID Regler nicht schlau, 
aber vlt. kann jmd. von euch einen funktionierenden Sketch hochladen?

Gruss

: Verschoben durch Moderator
von Andreas B. (bitverdreher)


Lesenswert?

"Selbstbauen", aber Sketch kopieren. Aha.

von Hans Dampf (Gast)


Lesenswert?

Was ist auch ein Sketch?

von ... (Gast)


Lesenswert?

Es gab vor Jahren das Projekt OpenServo - vielleicht findest du in 
Web-Archiven noch entsprechende Unterlagen. Die Überlegung war zumindest 
für Standardservos eine programmierbare und flexiblere 
Ansteuerungsmöglichkeit zu haben (Robotikservos, Segelwinden, 
Alternative Einganssignal,...).
M.W. gab es auch Bausätze und Layouts bei diversen Anbietern (z.B. 
Sparkfung [2]). Ev. kannst du dich da inspirieren lassen...
Wenn es dir an den Grundlagen fehlt, kommst du um etwas Systemtheorie 
nicht herum. Das sollte sich aber mit einem Buch oder ein paar Seiten 
[1] im Netz lösen lassen.

[1]https://rn-wissen.de/wiki/index.php/Regelungstechnik#P-Regler
[2]https://www.sparkfun.com/products/retired/9014

von Günther (Gast)


Lesenswert?

Hätte ja sein können, dass jemand sowas schon einmal probiert hat.

Gruss

von Wolfgang (Gast)


Lesenswert?

Günther schrieb:
> Ich werde aus dem PID Regler nicht schlau ...

Was verstehst du nicht? Über PID-Regler sind nun wirklich genug Bücher 
geschrieben.
Hier könntest du eine kurze Zusammenfassung lesen:
https://de.wikipedia.org/wiki/Regler#PID-Regler

von Helge S. (topflappen)


Lesenswert?


von Ptube (Gast)


Lesenswert?

Hans Dampf schrieb:
> Was ist auch ein Sketch?

Palim Palim...

von hacker-tobi (Gast)


Lesenswert?

@Hans Dampf: Die c++ Quelltexte/Projekte heissen unter arduino Sketch.

von Günther (Gast)


Lesenswert?

Welche Aufgabe hat Pin 0 und Pin 3?

1
/********************************************************
2
 * PID Adaptive Tuning Example
3
 * One of the benefits of the PID library is that you can
4
 * change the tuning parameters at any time.  this can be
5
 * helpful if we want the controller to be aggressive at some
6
 * times, and conservative at others.   in the example below
7
 * we set the controller to use Conservative Tuning Parameters
8
 * when we're near setpoint and more aggressive Tuning
9
 * Parameters when we're farther away.
10
 ********************************************************/
11
12
#include <PID_v1.h>
13
14
//Define Variables we'll be connecting to
15
double Setpoint, Input, Output;
16
17
//Define the aggressive and conservative Tuning Parameters
18
double aggKp=4, aggKi=0.2, aggKd=1;
19
double consKp=1, consKi=0.05, consKd=0.25;
20
21
//Specify the links and initial tuning parameters
22
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
23
24
void setup()
25
{
26
  //initialize the variables we're linked to
27
  Input = analogRead(0);
28
  Setpoint = 100;
29
30
  //turn the PID on
31
  myPID.SetMode(AUTOMATIC);
32
}
33
34
void loop()
35
{
36
  Input = analogRead(0);
37
38
  double gap = abs(Setpoint-Input); //distance away from setpoint
39
  if(gap<10)
40
  {  //we're close to setpoint, use conservative tuning parameters
41
    myPID.SetTunings(consKp, consKi, consKd);
42
  }
43
  else
44
  {
45
     //we're far from setpoint, use aggressive tuning parameters
46
     myPID.SetTunings(aggKp, aggKi, aggKd);
47
  }
48
49
  myPID.Compute();
50
  analogWrite(3,Output);
51
}

von Günther (Gast)


Lesenswert?

Hat jmd. einen Tipp?

Gruss

von Sechsersteckdose (Gast)


Lesenswert?

Über Pin 0 wird der Eingangswert des Reglers simuliert (z.B. Poti 
anschließen) und der Ausgangswert des Reglers wird an Pin 3 analog 
ausgegeben.

von Günther (Gast)


Lesenswert?

Hi, über welchen Pin kriegt das Servo sein Signal?

Gruss

von Sechsersteckdose (Gast)


Lesenswert?

Über Pin 3 (Ausgang), die Rückmeldung der Lage kommt über Pin 0 rein. Du 
kannst diese beiden Pins aber nach belieben tauschen.

Je nach Ansteuerung deines Servos musst du das Signal noch anpassen, 
genauso das des Sensors.

Erzähle mehr zu deinem Vorhaben und dir wird geholfen ;)

Prinzipiell kommunizierst du mit dem Regler über die drei variablen
1
double Setpoint, Input, Output;
Sollwert, Rückmeldung Sensor, Ansteuerung Motor

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Günther schrieb:
> Hi, über welchen Pin kriegt das Servo sein Signal?

Überhaupt nicht, das ist eine Demo für einen Regler mit Eingang und 
Ausgang.  Hier wird eine feste Grösse 'Setpoint' benutzt.

von Norbert (Gast)


Lesenswert?

Günther schrieb:
> Hat jmd. einen Tipp?
>
> Gruss

So wie ich es verstanden hatte, möchtest DU ein Modelbauservo bauen.
Nicht WIR bauen es für dich.
Und wenn du ernsthaft Hilfe bei der Funktion und Arbeitsweise eines Pins 
brauchst, na da wünschen wir noch viel Spaß.

PS. Gerade noch mal das Datum geprüft, der 10. war kein Freitag. 
Seltsam.

von Günther (Gast)


Lesenswert?

Ich möchte ein kräftiges Servo bauen. Wie veränder ich das Programm, 
damit ich ein ansteuerbares Servo bekomme? Ich stehe gerade aufm 
Schlauch...

von Sechsersteckdose (Gast)


Lesenswert?

Was genau meinst du damit?

Du hast 4 Baustellen:
- Motor ansteuern
- Sensor auslesen
- Beide Signale über den PID Regler verbinden.
- Ansteuerung/Sollwertvorgabe aus deinem System

Mach erstmal die beiden ersten Punkte, bis du dich sicher fühlst. Dann 
das dritte und zu guter letzt die Gesamtintegration.

von Günther (Gast)


Lesenswert?

Hi, ich programmiere so selten, dass ich den Code nicht hinbekomme.
Also:
Motor ansteuern=Pwm
Sensor auslesen=Ohm
Miteinander verbinden= keine Ahnung, hilf mir bitte.

von und noch Einer (Gast)


Lesenswert?

Grenze des Motors, Spannung, Drehzahl, definieren.

von Sechsersteckdose (Gast)


Lesenswert?

Kannst du den Motor schon ansteuern? Dreht er sich ohne die 
"original-servo-platine"?
Wenn ja, wie hast du das realisiert?
Wenn nein, woran scheitert es?

Kannst du den Sensor bereits auslesen?
Wenn ja, sind die Werte plausibel?
Wenn nein, woran scheitert es?

Was ist überhaupt das Ziel? Willst du etwas lernen oder nur einen 
"kräftigen servo"? Was ist kräftig in Zahlen ausgedrückt? Was willst du 
damit erreichen, wenn nicht lernen das Ziel ist?

von Günther (Gast)


Lesenswert?

Messen, wo ich bin und mit Soll Wert vergleichen. Danach eine Pwm für 
Geschwindigkeit für den Stellweg auswählen und wieder mit dem Soll Wert 
vergleichen.
Bitte helft mir dabei...

von und noch Einer (Gast)


Lesenswert?

Fang endlich von vorne an.

MOTOR DATEN lauten wie?

von Oliver S. (oliverso)


Lesenswert?

Günther schrieb:
> Bitte helft mir dabei...

Kauf dir ein fertiges Servo.

Oliver

von Günther (Gast)


Lesenswert?

Motor: Brushless A2212
11,1V
ca. 2700 KV

von uwe (Gast)


Lesenswert?


von Günther (Gast)


Lesenswert?

Übersetzung 1:500

von Stefan F. (Gast)


Lesenswert?

Günther schrieb:
> Ich möchte ein kräftiges Servo bauen

Oliver S. schrieb:
> Kauf dir ein fertiges Servo.

Ich denke das ist der einzige Weg, der in absehbarer Zeit zum Ziel 
führt. So wie du (Günther) hier kommuniziert, fehlt dir nicht nur das 
nötige Know-How an allen Ecken, sondern auch das Talent überhaupt etwas 
zu entwickeln. Falls ich das falsch einschätze, dann fehlt dir zumindest 
das Talent mit anderen Entwickler zu kommunizieren. Oder anders gesagt: 
So wie du fragst können wir dir nicht helfen.

Sehr wahrscheinlich ist dein Vorhaben zudem unwirtschaftlich. Solche 
Dinge kauft man fertig, selbst wenn man es selbst bauen und 
programmieren könnte.

von Norbert (Gast)


Lesenswert?

Also ich muss sagen, der Thread entwickelt sich, hat fraglos Potential.
Wenn der Eindruck nicht völlig täuscht, dann dürfen wir in naher Zukunft 
noch einiges erwarten.
Kaffee ist reichlich vorhanden, Kekse, ja die muss ich später noch 
holen…
Ostern kommt!

von Günther (Gast)


Lesenswert?

Ich möchte aber selbstbauen. Ich möchte soll ist Wert Differenz bilden 
und anhand der Stellgrösse eine Pwm für den Auto Fahrtenregler ausgeben, 
weil wenig weg = wenig Power und viel Weg=viel Power. Bitte helft...

von Stefan F. (Gast)


Lesenswert?

Günther schrieb:
> Ich möchte aber selbstbauen

Ja und ich möchte gerne zum Mond fliegen. Man muss seine Grenzen 
erkennen. mach lieber etwas am Rande dessen, was du kannst. Das macht 
mehr Spaß.

von Günther (Gast)


Lesenswert?

Ich wollte eine Messung des Potis und der Eingangs-Pwm, um eine 
Differenz zu bilden. Anhand der Differenzgrösse soll eine Pwm ausgegeben 
werden. Sind zwei Messungen mit Pwm Ausgang zuviel verlangt? Hat jetzt 
jmd. vlt. einen Tipp , wie man das schreibt?

von Stefan F. (Gast)


Lesenswert?

Hat jemand Papagei-Futter zur Hand?

von Sechsersteckdose (Gast)


Lesenswert?

Meinst du mit Fahrtenregler einen ESC, also einen Controller zum 
Ansteuern von BLDCs?
Meinst du mit PWM auch PWM oder ppm? Letzteres ist im Modellbau üblich.

Schreibe doch mal alle Komponenten auf, die du hast. SW und HW...

von Günther (Gast)


Lesenswert?

Ist das hier ein Kaufhaus, oder eine Frage nach zwei Messungen wodurch 
eine Pwm am Ausgang geschaltet wird??

von Stefan F. (Gast)


Lesenswert?

Wer jetzt noch nicht schnallt dass der Günther ein Zeitdieb (wie die 
grauen Männer aus Momo) ist ...

von Günther (Gast)


Lesenswert?

Hi, mit Fahrtenregler meine ich einen Drehzahlregler vom Rc Car für 
vorwärts und rückwerts.

von Stefan F. (Gast)


Lesenswert?


von Norbert (Gast)


Lesenswert?

Sechsersteckdose schrieb:
> Schreibe doch mal alle Komponenten auf, die du hast. SW und HW...

Da kann ich helfen.
Auf der Haben Seite:
  Modellbauservo, ehemals funktionierend
  Arduino, vermutlich schon bald ›ehemals funktionierend‹
  TEAM(x) - Gedanke

x: Toll, Ein Anderer Macht's

von Norbert (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wer jetzt noch nicht schnallt dass der Günther ein Zeitdieb (wie
> die
> grauen Männer aus Momo) ist ...

Ja klar, aber so etwas schön Blödes hatten wir schon eine längere Zeit 
nicht mehr…

von Sechsersteckdose (Gast)


Lesenswert?

Das was du suchst ist ein Freelancer. Der bastelt deine Projekte gegen 
Geld für dich zusammen.

Günther schrieb:
> Ich wollte eine Messung des Potis und der Eingangs-Pwm, um eine
> Differenz zu bilden. Anhand der Differenzgrösse soll eine Pwm ausgegeben
> werden. Sind zwei Messungen mit Pwm Ausgang zuviel verlangt? Hat jetzt
> jmd. vlt. einen Tipp , wie man das schreibt?

Tipp:
1
in_pwm = deineFunktionZurMessungDerPWM();
2
out_pwm = Poti - in_pwm;
3
analogwrite(deinPin, out_pwm);

von Sechsersteckdose (Gast)


Lesenswert?

Günther schrieb:
> Hi, mit Fahrtenregler meine ich einen Drehzahlregler vom Rc Car für
> vorwärts und rückwerts.

Und der wird über ein PWM oder ein ppm Signal angesteuert?

von Günther (Gast)


Lesenswert?

Pwm

von und noch Einer (Gast)


Lesenswert?

Bekomme Freitag wieder, nächste Woche. Jetzt Freitag ist Feiertag. 
Tschau tschau, bambini.

von Günther (Gast)


Lesenswert?

1
in_pwm = deineFunktionZurMessungDerPWM();
2
out_pwm = Poti - in_pwm;
3
analogwrite(deinPin, out_pwm);

und was kommt in das void Setup und was kommt oben an den Anfang des 
Programms?

von oh je (Gast)


Lesenswert?

@ TO: Frag lieber im Arduino Forum. Die Wixxer hier warten hier nur auf 
Greenhorns um sich dann einen auf ihre überheblichen Antworten einen 
runterzuholen. Für Hinweise keine Zeit, aber für dämliche Kommentare 
reichts noch. Was für ein Scheißforum hier.

von Sechsersteckdose (Gast)


Lesenswert?

Du kannst den Motor also mit analogWrite() ansteuern?
Wie lautet denn die Produktbezeichnung deines Fahrtenreglers?

Günther schrieb:
> und was kommt in das void Setup und was kommt oben an den Anfang des
> Programms?


Zeig mal dein Programm, das kann man so nicht pauschal sagen.

oh je schrieb:
> Frag lieber im Arduino Forum.

Ich denke du bist der Selbe wie der TO.
Es steht zumindest fest, dass der TO keine Hilfe möchte, sonst würde er 
auf Rückfragen eingehen. Er versucht nur zu provozieren, indem er all 
das erfüllt, was in jedem Forum unerwünscht ist.

von Günther (Gast)


Lesenswert?

Dann ist ein Servo mit verschieden grossen Motoren unerwünscht? Ich hab 
das Programmieren in 15 Jahren verlernt und brauche deshalb 
Unterstützung. Mein Anliegen habe ich deutlich beschrieben.

von und noch Einer (Gast)


Lesenswert?

Günther schrieb:
> Dann ist ein Servo mit verschieden grossen Motoren unerwünscht?
> Ich hab
> das Programmieren in 15 Jahren verlernt und brauche deshalb
> Unterstützung. Mein Anliegen habe ich deutlich beschrieben.

Next Weekend

von Sechsersteckdose (Gast)


Lesenswert?

Günther schrieb:
> Mein Anliegen habe ich deutlich beschrieben.

Du willst ein fertiges Programm?
Du willst dass dir die Hardware ausgesucht wird?
Du willst nicht erklären was du bereits erreicht hast?
Du willst nichts fertig kaufen?
Du willst keinen Entwickler bezahlen?

Da passt doch einiges nicht zusammen...

Wir wissen bereits was du wirklich willst: Unruhe stiften und 
herumtrollen.

von hmm (Gast)


Lesenswert?

Hi,

guck dir mal das Video mal an.
https://www.youtube.com/watch?v=1WnGv-DPexc

Also den mechanischen Aufbau hast du alles schon ?
Sprich Motor, die Übersetzungen (Zahnräder),die 
Positionsbestimmung(Poti) und elektronik 
(Tiefpass,Comperator,Logik,Motortreiber)in deinem Fall 
Tiefpass,µController, Motortreiber ?

Dann sag mal welchen Controller du benutzt und dein Eingangspin 
(PWN-Ansteuerung quasi Positionsvorgabe) , Eingang (Poti feedback zur 
Positionsbestimmung) und die drei/vier Ausgäng (µController -> 
Motortreiber), dann kann ich dir ein paar Zeilen schreiben. bzw welchen 
Motortreiber willst du verwenden?

Du machst das zum lernen oder willst du dein selbstgebautes Teil 
irgendwo einsetzen, so dass es auch mehrere Jahre hält.

Gruß
hmm

von Günther sein Schwippschwager (Gast)


Lesenswert?

hmm schrieb:
> Also den mechanischen Aufbau hast du alles schon ?

Nichts hat er, man soll ihm ja alles vorkauen. Ich denke das Video ist 
ganz gut, er möchte ja nur zuschauen wie es ein anderer macht.

von Günther (Gast)


Lesenswert?

Hi, das ist zum Lernen fürs Hobby. Ich habe hier einen Arduino Nano 
Mikrocontroller. Das Signal kommt auf Pin5. Ich schliesse den 
Elektromotor via Drehzahlregler an Pin 3 an. Das Poti kommt an  Pin A0.

Danke schonmals für die Hilfe ;)

Gruss

von Sechsersteckdose (Gast)


Lesenswert?

Günther schrieb:
> Das Signal kommt auf Pin5.

Welches Signal? Das vom Lagesensor? Sind die Werte plausibel, die du 
dort mit dem µC misst?

Günther schrieb:
> Ich schliesse den
> Elektromotor via Drehzahlregler an Pin 3 an.

Dreht sich der Motor wenn du ihn ansteuerst? Wie sieht den Code dazu 
aus?

von Günther (Gast)


Lesenswert?

Das Signal kommt von einer Rc Fernsteuerung zum Empfänger und an Pin 5. 
Während Pin A0 und Pin 3 das Servo bilden. Ich habe leider kein 
Messgerät gerade hier. Über die Servo Bibliothek habe ich den Motor 
ansteuern können.

von Günther (Gast)


Lesenswert?

Dies ist der Code zur Erzeugung von Pwm Signalen.
1
/*
2
 Controlling a servo position using a potentiometer (variable resistor)
3
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
4
5
 modified on 8 Nov 2013
6
 by Scott Fitzgerald
7
 http://www.arduino.cc/en/Tutorial/Knob
8
*/
9
10
#include <Servo.h>
11
12
Servo myservo;  // create servo object to control a servo
13
14
int potpin = 0;  // analog pin used to connect the potentiometer
15
int val;    // variable to read the value from the analog pin
16
17
void setup() {
18
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
19
}
20
21
void loop() {
22
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
23
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
24
  myservo.write(val);                  // sets the servo position according to the scaled value
25
  delay(15);                           // waits for the servo to get there
26
}

von Sechsersteckdose (Gast)


Lesenswert?

Günther schrieb:
> Das Signal kommt von einer Rc Fernsteuerung zum Empfänger und an
> Pin 5.
> Während Pin A0 und Pin 3 das Servo bilden. Ich habe leider kein
> Messgerät gerade hier. Über die Servo Bibliothek habe ich den Motor
> ansteuern können.

Also ist das Signal von der Fernsteuerung und das zum Motor gleichartig?
Könntest du die beiden Signale miteinander verbinden und damit den Motor 
(ohne Arduino) über die Fernsteuerung ansteuern?

von Sechsersteckdose (Gast)


Lesenswert?

Ups, also ist das kein PWM Signal, sondern ein ppm, wie im Modellbau 
üblich.

Mit dem Programm hast du deinen Motor nicht angesteuert. Damit dreht 
sich kein Motor an Pin 3.

von Tom H. (toemchen)


Lesenswert?

Ptube schrieb:
> Palim Palim...

Ja haben Sie denn ne Flasche dabei?

von Günther (Gast)


Lesenswert?

ups, hiermit aber:

#include <Servo.h> //Die Servobibliothek wird aufgerufen. Sie wird 
benötigt, damit die Ansteuerung des Servos vereinfacht wird.


Servo servoblau; //Erstellt für das Programm ein Servo mit dem Namen 
„servoblau“



void setup()

{

servoblau.attach(8); //Das Setup enthält die Information, dass das Servo 
an der Steuerleitung (gelb) mit Pin 8 verbunden wird. Hier ist natürlich 
auch ein anderer Pin möglich.

}



void loop()

{ //Im „loop“ wird über den write-Befehl „servoblau.write(Grad)“ das 
Servo angesteuert. Zwischen den einzelnen Positionen gibt es eine Pause, 
damit das Servo genug Zeit hat, die gewünschten Positionen zu erreichen.

servoblau.write(0); //Position 1 ansteuern mit dem Winkel 0°

delay(3000); //Das Programm stoppt für 3 Sekunden

servoblau.write(90); //Position 2 ansteuern mit dem Winkel 90°

delay(3000); //Das Programm stoppt für 3 Sekunden

servoblau.write(180); //Position 3 ansteuern mit dem Winkel 180°

delay(3000);//Das Programm stoppt für 3 Sekunden

servoblau.write(20); //Position 4 ansteuern mit dem Winkel 20°

delay(3000);//Das Programm stoppt für 3 Sekunden

}

von hmm (Gast)


Lesenswert?

Hi,

kannst du das bitte mal aufzeichen und die Arduino üblichen 
Pinbeschreibung dabei benutzen wie alles so miteinadner verbunden ist?

Aus den Codefetzen endnehme ich mal das du 0 - 180° Auslenkung haben 
willst.

Mit welcher Spannung wird der Poti zur Positonsbestimmung betrieben?

Fernbedienung ( PWM ) -> Controller -> Motortreiber -> Motor
                             |_____ -> Poti positionsfeedback

Wie machst du das mit vor und zurück fahren wenn du nur eine Verbindung 
zum Motortreiber hast (H-Brücke) ??

Gruß
hmm

von hmm (Gast)


Lesenswert?

und gib mal den Tastgrad (oder Zeit) von deiner Fernbedienung

Position : nichts betätigt      z.B 10ms
Position : knüppel ganz links   z.B  2ms
Position : knüppel ganz rechts  z.B 18ms

Es fehlen einfach noch so viele Informationen.

Du brauchst die Servo lib nicht.. du willst es doch eh selber machen. 
Die lib ist für fertige Servos die ein PWM Signal für Position erwarten.

Gruß

von Günther (Gast)


Lesenswert?

Ja,das Poti hat die gleiche Spannung wie der Arduino, also 5V.
Der Motor steht bei Mittelstellung des Potis, wodurch sich die 
Drehrichtung umkehren lässt.

von Sechsersteckdose (Gast)


Lesenswert?

Damit dreht sich auch kein Motor an Pin 3.

Es ist auch offensichtlich warum: 
https://funduino.de/nr-12-servo-ansteuern

Du Schlingel ;)

von Günther (Gast)


Lesenswert?

Und warum nicht?

von Günther sein Schwippschwager (Gast)


Lesenswert?

hmm schrieb:
> Es fehlen einfach noch so viele Informationen.

nein, denn

Günther schrieb:
> Mein Anliegen habe ich deutlich beschrieben.


Lass den Troll in Ruhe, dann verschwindet er ganz von alleine.

von Günther (Gast)


Lesenswert?

Programmiert mir jmd die Differen des Stellwegs und gibt eine Pwm aus? 
Dann reihe ich für jede Stellgrösse eine Pwm zu und habe einen einfachen 
Regler, der den Fehler wegregelt. Dann könnte man sich noch Gedanken 
machen wie bei schnellen äusseren Einflüssen auf den Elektromotor 
stärker reagiert werden soll.

von hmm (Gast)


Lesenswert?

Günther schrieb:
> Der Motor steht bei Mittelstellung des Potis, wodurch sich die
> Drehrichtung umkehren lässt.

wft was ?

Hast du dir das Video angeschaut ?

Du mixt glaub ich ein fertigen Servo der ein PWM Wert für die 
Positionierung erwartet, mit den Einzelnen komponenten woraus ein Servo 
besteht und verknotest das kanz komisch in deinem Kopf.

Welchen Motortreiber benutzt du ?

Grundsätzlich

Fernbedienung -> µController:
Am Controller kommt eine art PWM Signal an w die schalterstellung als 
Tastgrad unterschied abgebildet wird.

µController -> Motortreiber:
Hier muss es mindestens drei Signal Leitungen geben.
PWM linkslauf, PWM rechtslauf, (links oder rechts) aktivieren.

Positionspoti -> µController:
Gibt winkel über Spannungsverhältnis wieder.

Somit kommst du mit 2 Eingängen 1 Ausgang auf gar keinen Fall aus!

Versuch dir echt zu helfen, aber du machst es ein nicht leicht -.-

Gruß
hmm

von oh je (Gast)


Lesenswert?

Günther schrieb:
> Das Signal kommt von einer Rc Fernsteuerung zum Empfänger und an Pin 5.

https://www.arduino.cc/reference/en/libraries/ppm-reader/

das dekodiert das Signal vom RC und liefert den Sollwert für den 
Servoregler. Im ersten Schritt das Beispiel nehmen und sehen ob mit dem 
RC Sender die Werte empfangen und ausgegeben werden.

Wenn das PID Beispiel schon mit Poti und Motor funktioniert muss der 
Sollwert aus dem ppm-reader in der loop verarbeitet werden.

von Günther (Gast)


Lesenswert?

Eine Pwm genügt für Rechts- Linkslauf und Geschwindigkeitsregelung.

von hmm (Gast)


Lesenswert?

nuja irgendwie auch kein bock mehr ...

Tipps : pulsIn(Pin); kannst du benutzen für das Tastverhältnis der 
Fernbedienung (Position vom Knüppel). Gibt dir ein Zeitwert raus.

links Ausschlag -> zeit mit pulsIn(pin) (Knüppel gerade - Knüppel links) 
ist deine Position wo du hin willst. Das skallierst du auf 0-180°

Rückgabe über Positionspoti wär dann in dem fall mit analogRead(poti) ~ 
bei 0.
-> du must die zeitverhältnisse von der fernbedienung von links nach 
rechts skallieren auf die PotiWerte von ganz links 0 - 1023 ganz rechts.

µController -> Motortreiber muss nur richtige Richtung aktiviert werden 
und den zur gewünschten Potisteellung fahren lassen. Den DC Motor lässt 
man normalerweise immer in einer Geschwindigkeit laufen.

Ich kann dir kein Code Schreiben, da du mir die Tastverhältnisse für 
links , rechts und Mittelstellung nicht gibst und mir nicht verrätst 
welche Motortreiber du benutzt.

bye bye

Gruß
hmm

von oh je (Gast)


Lesenswert?

Günther schrieb:
> Eine Pwm genügt für Rechts- Linkslauf und Geschwindigkeitsregelung.

das PWM Signal kann nur die Geschwindigkeit vorgeben, für R/L ist eine 
weiterer Pin nötig. Je nach Treiber, wie hmm schon schrieb.

von Günther (Gast)


Lesenswert?

Auto Fahrtenregler können in beide Richtungen drehen...

von oh je (Gast)


Lesenswert?

ja, die werden auch mit PPM vom RC Empfänger angesteuert und der 
Fahrtenregler steuert intern eine H-brücke oder eine halbe + Relais für 
Richtungsumkehr. Macht intern ebenfalls zwei Signale.

von oh je (Gast)


Lesenswert?

wenn der Fahrtenregler vorhanden ist: aus dem ppm-encoder den Sollwert 
lesen und über die Servo Lib als PWM für den Fahrtenregler ausgeben.

von Günther (Gast)


Lesenswert?

Ja genau und wie sieht das als Code aus?

Danke

von Günther (Gast)


Lesenswert?

Kann dass jmd. von euch programmieren, ich schaffs nicht...

von Stefan F. (Gast)


Lesenswert?

Günther schrieb:
> Ja genau und wie sieht das als Code aus?

Gut sieht das aus, kann ich dir nur empfehlen.

von oh je (Gast)


Lesenswert?

schrittweise vorgehen. Das ppm-reader Beispiel zum Laufen bringen und 
die Werte ausgeben.
Danach mit Servo den Fahrtenregler ansteuern. Dann den Sollwert aus 
ppm-reader skalieren und im PID Beispiel einsetzen.
Mehr nachdenken statt googlen.

von Tom H. (toemchen)


Lesenswert?

Oh Mann...

Leider hört das reine Popcorn-Essen und zugucken bei mir in dem Moment 
auf, wenn nicht nur der patzig fragende TO verarscht wird, sondern sich 
das ganze langsam mit echter Hilfe mischt und sich leider auch 
Mißverständnisse einschleichen.

PWM:
Quasi der übergeordnete Begriff für ein An-Aus-Signal, das sich zyklisch 
wiederholt und bei dem das zeitliche Verhältnis zwischen An und Aus 
variabel ist.
Die meisten hier verstehen unter PWM etwas, bei dem der Tastgrad von 
0-100% variiert, und eine angeschlossene LED (mit Vorwieeederstand!) 
zwischen ganz dunkel und ganz hell steuert. Oder eine Glühlampe oder 
einen Motor.

PPM:
Das spezielle PWM-Signal, das die Positionsinformation für einen 
Modellbau-Servo enthält.*
20ms Wiederholrate, meist zwischen 1,5 und 2,5ms An-Zeit für eine 
Servo-Drehung von 90°.

Auch Günther sollte sich diese Konvention angewöhnen, damit hier nicht 
dauernd Mißverständnisse entstehen.

* Eigentlich ist mit PPM sogar das Summensignal bei der Übertragung 
(analoger, alter) RC-Fernsteuerungen gemeint. Hier wurden die Pulsdauern 
von bis zu 7 Servos hintereinander in ein zu übertragendes Signal 
geschachtelt.

von Tom H. (toemchen)


Lesenswert?

Günther, wenn Du noch oft fragst, wer Dir das programmieren kann, kauf 
ich doch noch Papageienfutter.

Zum letzten Mal: DU kannst das programmieren. Wenn nicht, dann lernst Du 
es eben, mit einzelnen, freundlichen Nachfragen hier.

von Tom H. (toemchen)


Lesenswert?

An alle:

Günther hat bereits einen "Modellbau-Fahrtregler", der als 
Eingangsinformation ein PPM-Signal braucht und am Ausgang einen 
Brushless-Motor steuert, vor und zurück. STEUERT, nicht regelt. Das ist 
noch keine Positionsregelung. Die möchte Günther mit dem Arduino 
drüberlegen.

Die Feinheiten liegen darin:

1. Wie muß das PPM-Signal aussehen, damit der Motor stillsteht? Lernt 
der Regler das bei jedem neuen Einschalten? Dann muß das 
Arduino-Programm (Verzeihung, der Sketch) zunächst dieses 
"Neutral-Signal" ne Weile ausgeben, bevor er zur Regelung übergeht.

2. Kann der Regler nahtlos zwischen Vorwärts und Rückwärts umschalten? 
Viele Regler haben noch ne Bremssequenz oder eine Zwangspause 
dazwischen.

von Tom H. (toemchen)


Lesenswert?

Nun zum Sketch.

Ich weiß nicht, ob man die Sketches mit readPPM und Servo.h so ohne 
weiteres miteinander zusammenwürfeln kann.

Ich habe zumindest die Erfahrung gemacht, daß sich bereit die Servo.h 
und das Einlesen eines PPM-Signals mit pulseIn() gegenseitig stören.

Meine Lösung:
Scheiß auf diese Bibliotheken.
Ein schlichtes pulseIN() am Anfang der loop genügt als Einlesen des 
PPM-Signals.
Außerdem synchronisiert es den loop-Durchlauf automatisch auf die 20ms 
Wiederholrate des reinkommenden Signals.
Und als Ausgabe des PPM-Signals für den Fahrtregler ein schlichtes 
Bitbanging mit:
digitalWrite(Pin, HIGH);
delayMicroseconds(Pulsdauer);
digitalWrite(Pin, LOW);
Fertig ist der Lack.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Günther schrieb:
> Ich möchte aber selbstbauen. Ich möchte soll ist Wert Differenz bilden
> und anhand der Stellgrösse eine Pwm für den Auto Fahrtenregler ausgeben,
> weil wenig weg = wenig Power und viel Weg=viel Power.

Das ist aber kein Servo, sondern eben ein Fahrtenregler.
Kannst dir mal meine 2 Projekte diesbzüglich anschauen:
Beitrag "RC-Servoelektronik für DC-Motor"

von Tom H. (toemchen)


Lesenswert?

Günther,

hast Du tatsächlich schon einen Aufbau aus Brushless-Motor, Getriebe und 
angekoppeltem Poti?

Selbstgebaut?

Oder ist das bis jetzt noch die Mechanik eines zerlegten Potis, das 
zufällig einen Brushless-Motor drinhatte? (Sowas gibts, aber die 
Bezeichnung A2212 und 11,1V deuten eher auf einen einzelnen Motor als 
einen in ein Servo integrierten hin)

Und dann, schrittweises Vorgehen wie "Sechsersteckdose" ganz weit oben 
schon richtig schrieb:

1. Motor mit dem Regler zum Laufen bringen (erstmal direkt mit dem 
RC-Empfänger, dann mit dem Arduino, vielleicht nur ein kleines Sketch, 
das ihn kurz hin- und herlaufen läßt)

2. Poti-Wert auslesen und mit SerialWrite() als Debug an den PC 
zurückgeben - die Arduino-IDE hat einen schönen Plotter für eingehende 
Debug-Werte...

3. Mal ne schlichte Regelung auf einen festen Poti-Wert, vielleicht 
sogar am Anfang nur mit "if zuviel dann umdrehn"

4. Deine Kernfrage bearbeiten - den (zunächst festen) Sollwert mit dem 
Potiwert vergleichen und regeln. Zu diesem Zeitpunkt kannst Du dann uns 
Löcher in den Bauch fragen und Zwischenergebnisse posten.

5. Variablen Sollwert, vielleicht per SerialRead() vom PC vorgeben oder 
mit einem zweiten Poti an einem anderen Pin...

6. Variablen Sollwert aus deinem PPM-Signal vom Empfänger ableiten.

von Günther (Gast)


Lesenswert?

Hey, hättest du ein Programmbeispiel?

von Günther (Gast)


Lesenswert?

Es soll ja ein Servo sein, also auf einen Pwm Kanal passen...

von Günther (Gast)


Lesenswert?

Wie meinst du das:

Bitbanging mit:
digitalWrite(Pin, HIGH);
delayMicroseconds(Pulsdauer);
digitalWrite(Pin, LOW);

Also Blink Code für pwm? Ja ok! Und wie ermittel ich den Stellweg?

von Günther (Gast)


Lesenswert?

Wie verknüpfe ich denn pulseIN mit sensorwert?

von Stefan F. (Gast)


Lesenswert?

Sie müssen nur den Nippel durch die Lasche ziehen, ...

(Den Rest finden sie mit Google)

von TomH (Gast)


Lesenswert?

Komisch, daß Du Programmieren seit 15 Jahren vergessen hast, denn Du 
hörst Dich so hibbelig wie ein 15jähriger an...

Nimm erstmal einen normalen kleinen Servo statt dem Fahrtregler. Dem 
siehst Du die Position schöner an.

Dann schreibst Du in die Loop:
1
digitalWrite(Pin, HIGH);
2
delayMicroseconds(1500);
3
digitalWrite(Pin, LOW);
4
delay(18);

Das steuert den Servo fest mit Impulsdauer 1500us an, also etwa 
Mittelstellung. Die Wiederholrate von 20ms stimmt vielleicht nicht ganz, 
aber das sollte einem Servo nichts ausmachen.

Wenn Du nicht weißt, was Du für Pin schreiben mußt und was in die Loop 
soll und was in den Setup, dann lern es. Arduino-Grundlagen.

Dann mal andere Werte ausprobieren. Servos haben für den normalen 90° 
Stellweg 1000-2000us Pulsdauer. So ungefähr.

Dann als Zwischenschritt irgendwas, das die Einstellerei der Impulsdauer 
bequemer macht.
Z.B. ein Poti am Analogeingang einlesen und nebenbei den Wert als 
Debug-Information an den PC zurückschicken.
Weißt nicht wie das geht? Lern es.

Dann kannst Du mal den Fahrtregler dranhängen.
Mal sehen, welche Pulsdauer der für "Stop" braucht, und welche für 
Vollgas vor und Vollgas zurück.

Dann hast Du den Stellweg ermittelt, den Pulsdauerbereich, den Du dem 
Fahrtregler schicken mußt.

Aber Du mußt es schon selbst machen.

SCHRITTWEISE.

von Prof. Bienlein, Balduin Bienlein (Gast)


Lesenswert?

Günther schrieb:
> Hey, hättest du ein Programmbeispiel?

Warum sollen hier im Forum ProgrammBEISPIELE wiedergegeben werden, 
welche bereits in der Arduino-IDE vorhanden sind? Das ist doch sinnlos!

Weil dann vielleicht DEINE Anpassungen an DEINE Gegebenheiten ins 
Programm sollten?
DAS ist doch DEINE Sache!

DEINE Versuche klappen nicht? Na dann analysiere erstmal was DU genau 
erreichen möchtest UND beschreibe das in gängiger Terminologie UND 
Darstellungen (Code, Schemas, Diagramme, Fotos, Links zu Datenblätter, 
ZWISCHENERGEBNISSE usw.)


WENN das dann soweit geklappt hat, dass darin keine Widersprüche und 
keine (grobe) Lücken mehr sind, also auch wir das verstehen und keine 
weiteren Fragen mehr dazu haben, wirste merken dass:
- DU viel näher rangerückt bist, deine Vergessenslücke (zumindest 
teilweise) wieder SELBST schliessen zu können (also weniger Hilfe, 
zumindest weniger BANALHILFE, überhaupt brauchst)

UND
- HIER die Hilfe dir "besser"/unkomplizierter/motivierter 
entgegensprudelt, nicht zuletzt weil Du diese Hilfen dann auch besser 
verstehst ABER AUCH weil wir dank deiner vorgeleisteten 
Analyse-&Beschreibungsdokumentation zielgerichteter auf deine 
tatsächlichen Gegebenheiten eingehen können.

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.