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
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
Hätte ja sein können, dass jemand sowas schon einmal probiert hat. Gruss
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
@Hans Dampf: Die c++ Quelltexte/Projekte heissen unter arduino Sketch.
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 | }
|
Ü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.
Ü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
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.
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.
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...
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.
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.
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?
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...
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.
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!
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...
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ß.
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?
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...
Ist das hier ein Kaufhaus, oder eine Frage nach zwei Messungen wodurch eine Pwm am Ausgang geschaltet wird??
Wer jetzt noch nicht schnallt dass der Günther ein Zeitdieb (wie die grauen Männer aus Momo) ist ...
Hi, mit Fahrtenregler meine ich einen Drehzahlregler vom Rc Car für vorwärts und rückwerts.
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
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…
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); |
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?
Bekomme Freitag wieder, nächste Woche. Jetzt Freitag ist Feiertag. Tschau tschau, bambini.
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?
@ 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.
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.
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.
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
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.
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
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.
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
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?
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.
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 | }
|
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?
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.
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 }
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
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ß
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.
Damit dreht sich auch kein Motor an Pin 3. Es ist auch offensichtlich warum: https://funduino.de/nr-12-servo-ansteuern Du Schlingel ;)
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.
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.
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
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.
Eine Pwm genügt für Rechts- Linkslauf und Geschwindigkeitsregelung.
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
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.
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.
wenn der Fahrtenregler vorhanden ist: aus dem ppm-encoder den Sollwert lesen und über die Servo Lib als PWM für den Fahrtenregler ausgeben.
Günther schrieb: > Ja genau und wie sieht das als Code aus? Gut sieht das aus, kann ich dir nur empfehlen.
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.
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.
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.
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.
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.
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"
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.
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?
Sie müssen nur den Nippel durch die Lasche ziehen, ... (Den Rest finden sie mit Google)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.