So habe mal versucht mit meinem bescheidenem Wissen einen Zweikanalfahrtregler zu programmieren.
Soweit funktioniert das auch so halb.
Habe erstmal nur einen Kanal programmiert für vorwärts und rückwärts. Solange ich in der Neutralzone bleibe geht alles gut. Gehe ich nur leicht raus (d.h. die Motoren bekommen kleine PWM Werte) gehen die auf Vollgas (bei mir blinken die LEDs). Gehe ich dann weiter funktioniert die Regelung wieder ganz gut. Allerdings komme ich nie auf Vollgas (PWM 255) da sonst der Regler dicht macht. Rein theoretisch ist 2000ms PWM255 aber da müsste ich nach ganz oben trimmen. Stell ich den Wert auf 1800ms PWM 255 und komme auf 1801ms stoppt der Motor wieder.
Bin mit meinem Wissen am Ende könnt ihr mir helfen?
Das Programm:
ZitatAlles anzeigen
int pin7 = 7; //RC Eingang Motor 2
int pin4 = 4; //RC Eingang Motor 1
int Bruecke1_a = 6; //H-Brücke 1 vorwärts
int Bruecke1_b = 5; //H-Brücke 1 rückwärts
int Bruecke2_a = 10; //H-Brücke 2 vorwärts
int Bruecke2_b = 9; //H-Brücke 2 rückwärtsunsigned long RCIN1Wert; //Zeitmessung RC Eingang Motor 1
unsigned long RCIN2Wert; //Zeitmessung RC Eingang Motor 1void setup()
{
pinMode(pin4, INPUT); //Pin4 als Eingang setzen
pinMode(pin7, INPUT); //Pin7 als Eingang setzen
Serial.begin(9600); //Baudrate festlegen
}void loop()
{
RCIN1Wert = pulseIn(pin4, HIGH); //Variable Motor 1
RCIN2Wert = pulseIn(pin7, HIGH); //Variable Motor 2
//Motor 1
//vorwärts
if (pulseIn(pin4, HIGH) >1549)
{
if (pulseIn(pin4, HIGH) <2001)
{
RCIN1Wert = map(RCIN1Wert, 1550, 2000, 0, 255); //umrechnen
analogWrite(Bruecke1_a, RCIN1Wert); //Setze Motor 1 Vorwärts PWM 0-255
}
}
else
{
analogWrite(Bruecke1_a, 0); //Puls nicht zwischen 1549-2001 dann Ausgang aus
}
//Motor 1
//rückwärts
if (pulseIn(pin4, HIGH) <1451)
{
if (pulseIn(pin4, HIGH) >1000)
{
RCIN1Wert = map(RCIN1Wert, 1000, 1450, 255, 0);
analogWrite(Bruecke1_b, RCIN1Wert);
}
}
else
{
analogWrite(Bruecke1_b, 0);
}
//Diagnose über USB
Serial.print("mS = ");
Serial.print(RCIN1Wert);
Serial.print(" PWM1 = ");
Serial.println(RCIN1Wert);
// Serial.print(" PWM2 = ");
// Serial.println(PWM2);
delay(20);
}