Arduino mit Fahrtregler und PWM

Guten Abend,

ich habe folgendes Problem:

Ich will meine Motoren vom Roboter über Fahrtregler steuern! Diese habe ich gekauft:

CARBON-SERIES FAHRTREGLER MICROCAR

Technische Daten Abm.: (L x B x H) 29 x 27 x 20 mm Stecksystem: JR / Futaba Vorwärts/Rückwärts/Bremse: Ja / Ja / Ja Belastbarkeit (1s/30 s/5 min): 54 A/ 35 A / 25 A Ausführung: Micro BEC-Daten: 5 V / 1 A Dauer-Strom: 25 A Taktfrequenz: 1.0 kHz Motorlimit: 20 Turns (380er Motoren) Zellenzahl NiCd/NiMH: 6 - 7 Betriebsspannung: 7.2 V / 8.4 V Gewicht: 19 g

So, nun soll man sie mit Strom verbinden und den Motor anschließen. Habe ich auch gemacht! Nun meinte der nette Typ von Conrad man soll die Datenleitung (Weiß) an den PWM Pin des Arduinos anschließen. Das habe ich auch gemacht. Nun soll man den Pin auf Nullstellung bringen. Folgender Code:

int ledPin = 6;
void setup()  { 
} 
void loop()  { 

    analogWrite(ledPin, 127);
  }

So und nun mach ich den Fahrtregler an. Er macht bieb und rot und grüne LED blinken. Diese sollen ca nach 2 Sekunden aufhören und er soll noch mal Töne machen und die Nullstellung soll gespeichert sein. Aber es passiert nichts...er sucht immer weiter...meine Idee war, dass vllt die Frequenz nicht stimmt. Aber an Pin 5 und 6 sollen 1GHZ sein, genau wie in der Beschreibung für den Fahrtregler. Ich habe auch alle anderen PWM Pins versucht. Es funktioniert nicht...woran kann das liegen?

Gruß,

Handballfan

Also.. ich habe Tage damit verbracht einen Fahrtenregler zum laufen zu bringen.. versuch es mal ein wenig anders bevor du ewigkeiten brauchst um die entsprechenden Daten herauszubekommen. Nutze am besten die Servo Library und kalibrier den Fahrtenregler mit den entsprechenden Daten.. das koennte eventuell den weg ein wenig abkuerzen..

danke :slight_smile: aber könntest du mir da mal helfen…ich weiß nicht genau wie du das meinst mit dem konfigurieren als servo…hast du vllt einen kleinen beispielcode?

Hallo handballan,

vielleicht kann ich ein wenig Licht ins Dunkel bringen.

Für den Arduino sollte es egal sein, ob ein Servo oder ein Motorregler angesteuert wird. Die Signale sind die gleichen. Bei manchen Reglern wird der Nullpunkt über die Porgrammierung eingestellt. Bei Analog-Servos ist es über einen Poti gegeben. Regler können ja auch einen Nullpunkt an einem Ende des PWM Signals haben, um einen Regelbereich von z.B. 0 - 255 und nicht wie bei Servos von 0 - 127 - 255 zu bekommen. 127 ist dann der Nullpunkt.

Ich würde so anfangen. Regler mit der Servo Library und einem Poti kalibrieren (kalibrieren siehe Anleitung Regler). Hierbei kann man dann auch den PWM-Wert herausfinden, bei der der wirkliche Nullpunkt-Wert ist. Es ist nur bei den wenigsten Servos der Wert 127, auch der Nullpunkt.

Die Tonfolgen sagen dir dann, was der Regler genau macht. Bei meinen ist es so, dass er mir durch Piepen erst einmal sagt, wie viele LiPo-Zellen ich daran angeschlossen habe. Erst dann gibt er mir die Regelung zum Motor frei. Dies auch nur, wenn das richtige Nullpunkt Signal gesendet wird. Somit wird ein ungewolltes anlaufen der Motoren, beim Einschalten verhindert.

Gruß, Roland

r.merk hat das ganze schon ganz gut zusammengefasst. So habe ich das bei mir geregelt:

Das Servo Objekt kennt ja einen wertebereich von 0 bis 180 - mittelstellung ist dementsprechend 90.
Nun ist es ja von SC zu SC unterschiedlich, wie man ihn kalibriert - bei mir musste ich ihn mit ‘gas losgelassen’ - also Servo 90 kalibrieren, danach vollgas (Servo 180) und vollgas zurueck (Servo 0) einstellen. Das laesst sich relativ einfach anstellen. Danach habe ich mittels map die werte 0 bis 1024 auf 90 bis 180 gemappt - damit laesst sich der Servo im endeffekt auch mit analogen werten steuern…

Code:

#include <Servo.h> 



Servo myservo;  // Lenkung
Servo myservo2;  // geschwindigkeit
 
int pos = -90;    // Lenkposition

void setup() 
{ 
  myservo.attach(9);  // Lenkung 
  myservo2.attach(2); //Geschwindigkeit
  Serial.begin(115200);
} 
 
 // 0-90 Reverse/NULL
 // 90-180 Speed Servo kompatibel
 

void loop() 
{ 
  pos = analogRead(2); //Poti lesen
  int val = analogRead(2); 
  val = map(val, 0, 1023, 0, 180); // Potiwert auf Servo umschreiben
  Serial.println(val);

///TODO LENKUNG

  myservo2.write(val); //Fahren
//  Serial.println(pos);
  delay(15); 
}

guten tag,

tut mir leid aber ich habe weiterhin ein problem. ich schließe den fahrtregler an, er macht bieb. Nun soll man ca 2 sekunden den nullpunkt definieren. Also habe ich folgendes programm geschrieben:

int ledPin = 5;
void setup()  {
 serial.begin (9600);
}
void loop()  {
    for (int i = 0; i < 266; i++){
    analogWrite(ledPin, i);
    delay (3000);
  }
}

dieses programm schreibt ja theoretisch einmal jeden pwm wert auf den pin und wartet 3 sekunden. also wenn der richtige wert dabei ist müsste sich ja der fahrtregler einstellen. Aber es passiert nichts. Und die Idee mit dem Poti klappt auch nicht. Ich kann drehen wie ich will. Könnt ihr mir nicht nohcmal genau erklären wie man einen fahrtregler über die servo library steuern kann? der code eben funktionierte ja leider nicht. Welche werte stellen denn dort den pwm wert da?

gruß, handballfan

#include "Servo.h" 
Servo servo; 
void setup() 
{ 
  servo.attach(3); 
} 
int val; 
void loop()
{ 
  val=analogRead(0)*180.00/1023; 
  servo.write(val); 
  delay(20); 
 // Servo::refresh(); 
}

Mit diesem Code und einem Servo an Digital-Pin 3 und ein Poti an Analog-Pin 0 kann ich problemlos einen Servo ansteuern.

for (int i = 0; i < 266; i++){
    analogWrite(ledPin, i);

warum i < 266?
und warum analogWrite?

Ja, danke für den Code. Ich weiß, dass man damit einen Servo ansteuern kann. Aber das ist ja garnicht mein Problem. Ich will ja einen Fahrtregler ansteuern!!!

Einige Pins sind mit PWM ausgestattet. Das bedeutet man kann einstellen, wie hoch der Strom dort sein soll! Und das kann man in 255 Stufen einstellen! Und ich habe jede druchprobiert und bei keiner zeigt der Fahrtregler was an!

Gruß, handballfan

Soweit ich weis sind Fahrtenregler nicht PWM sondern PPM(?) gesteuert, was am ehesten der ansteuerung eines Servos entspricht (have damals die PPM Werte fuer meinen sogar mal rausbekommen, aber der aerger ist es nicht Wert). Entsprechend bist du sicher am besten damit beraten auf Servo umzusteigen um den Fahrtenregler anzusteuern

Es ist unerheblich, ob du einen Servo oder deinen Regler anschließt!

PWM steht für Pulsweitenmodulation und es liegen bei den meisten Arduinos 5V an einem PWM Pin.

Dein Regler (oder auch Servo) reagiert auf die länge des Pulses und nicht auf eine bestimmte Stromstärke.

Wenn du nun deinen Regler einstellen willst, musst du ihm sagen, wo der Nullpunkt ist. Vielleicht liegt er ja auch genau bei PWM 127. Ich stehe dem immer noch skeptisch gegenüber.

Bei meinen Reglern ist es so, dass ich mit servo.write(180) => (Vollgas) in den Programiermodus gelange. Deinen Regler kenne ich aber nicht. Vielleicht findest du eine Anleitung online und kannst hier mal einen Link rein setzten.

Mit analogWrite(wert), wirst du aber nicht weiter kommen. Verwende eine Servo Library und du kannst alles, was du mit einem Servo machst direkt auf einen Regler übertragen.

edit Die Puls-Pausen-Modulation PPM wird nur verwendet um zwischen dem Sender und dem Empfänger zu kommunizieren. Ab dem Empfänger zum Regler ist PWM richtig.

Alles klar. Danke. Gut dass ich jetzt weiß, dass das mit PWM nicht klappt. Bei meinem Fahrtregler ist das so, dass ich den Wert für den 0 Punkt übermitteln soll und dann piept der nach 2 Sekunden und er ist automatisch eingestellt. Bloß meine Frage:

Was genau muss ich jetzt mit der Servo Library machen? Es ist doch ein wenig schwer, mit einem Poti die ganze Zeit zu drehen und zu versuchen, den 0 Punkt zu erwischen? Wie steuer ich den genau an, also bei Servo ist es ja so, dass wenn ich Servo.write (180); eingebe dreht der sich auf 180 Grad, das heißt er ist auf der maximalen Stellung. Aber was muss ich denn beim Fahrtregler eingeben? Auch einfach was zwischen 0 und 180?

Tipp: Mein Fahrtregler habe ich im ersten Post genannt. Einfach den Namen bei Conrad bei suchen eingeben! der link von conrad klappt nämlich immer nicht!

gruß, handballfan

Es klappt ausschließlich mit PWM!

Was passiert denn, wenn du deinen Regler schwarz=GND, rot=5V und braun(orange)=PWM Pin 9 anschließt. Poti an GND, 5V und Mitte an Analog Pin 0. Diesen Code dann drauf.

#include "Servo.h"
Servo servo;
void setup()
{
  servo.attach(3);
  Serial.begin(9600);
}
int val;
void loop()
{
  val=analogRead(0)*180.00/1023;
  servo.write(val);
  Serial.println(val);
  delay(20);
 }

Über die serielle Ausgabe kannst du nun schauen, was "val" für einen Wert annimmt. Versuch so genau als möglich auf 127 zu kommen.

Doofe Frage aber Piept dein Regler überhaupt einmal? Hast du einen Motor angeschlossen?

danke für den code! :) aber nein!!! ich darf rot und schwarz nicht anschließen! da kommen 1 ampere bei 7,2 volt raus! die sind für den empfänger...das ist der bce oder so stom :P

aber ähm :D nö ich hab den motor nicht angeschlossen...ich dachte das brauche ich nicht für den test?!?:D muss ich das machen?!

Ok. Kannst du das BEC ausschalten? Hast du das gemessen, dass da 7,2 V sind. Ich rede von dem Kleinen Stecker am Regler. Diesen so anschließen wie oben beschrieben. Nicht die dicken Kabel. Am kleinen Stecker sind dann ca. 4,8 - 5 V.

Der Motor ist wichtig!!! Nämlich nur dieser kann Piepen. Die Regler haben keinen Summer. Es wird ein kleiner Impuls an den Motor gegeben und somit ein Piepen erzeugt.

Wie das jetzt mit den unterschiedlichen Massen bei BEC ist, kann ich dir aber leider nicht sagen. Zur Sicherheit würde ich den Arduino beschreiben und dann vom PC trennen. Daraufhin mit dem 7,2 V Akku den Regler und Arduino betreiben, somit kann kein Kurzschluss entstehen. Den Motor natürlich nicht vergessen, sonst kann ja nichts Piepen. Den Poti versuchen auf ca. Mittelstellung zu bringen und dann sollte es doch klappen. Wenn du eine Mittelstellung hast, kannst du alles wieder aus stecken und am PC über Serial.print den Potiwert bzw. den Wert "val" auslesen.

Ok. Nein BEC kann man nicht ausschalten. Also der Fahrtregler hat folgende Anschlüsse: Einen gelben Micro Car heißt das glaube ich - für den Motor einen Roten micro car - für Strom vom akku einen schalter zum ein und aussschalten einen anschluss mit weiß, rot und schwarz - weiß signal, rot schwarz für bec...

ich werde jetzt mal probieren was du gesagt hast mit dem poti! ich schreibe gleich ob es ging!

"Der Motor gibt einen kurzen Bestätigungston aus, die beiden LEDs im Fahrtregler blinken schnell (ca. 2 Sekunden)" Dies erklärt, dass der Motor zum Piepen da ist.

Blinkt da was von wegen LED´s am Regler?

Also: ich habe das alles so angeschlossen, der motor piept und die leds blinken wechselweise! und warten anscheind auf ein signal! in der anleitung steht ja dass nach 2 sekunden 0 signal er einen weiteren kontrollton ausgeben soll! ich habe das poti jetzt so hingedreht dass es auf 127 war, auf 90, 0, 180...ihc habe shcon viele ausprobiert! aber es klappt nich nicht!

Langsam wird es komisch.

Hast du denn einen Servo, mit dem du den Code testen kannst?

ja habe ich...ich teste ihn mal! ähm kann ihc nicht statt mit dem poti den wert einzustellen alle werte mit einer for schleife wie es es schonmal probiert habe aber ohne motor :-/ durchgehen lassen? das dürfte doch eigl auch gehen oder?

also mit dem servo funktioniert das gut :) aber warum geht das mit dem fahrtregler nicht? ich habe jetzt einmal mit einer for schleife alle werte von 0 - 180 durchlaufen lassen und nach jeder 5 sekunden gewartet, weil er sich ja 2 sekunden einstellen soll. es geht nicht :(