Arduino im Modellbau - PWM Eingang ?

Hallo zusammen,
nachdem ich heute mal Spasseshalber einen Servo an den Arduino Uno gehangen habe, (und sich der dann auch tatsächlich drehte), fing mein Elektronik-und-Modellbau-Hirn an zu spinnen.

Folgendes "Projekt" fiel mir da ein, da ich an meinem Modellbau-Empfänger irgendwie IMMER zu wenige Ausgänge habe.....

Also.....
Ich habe an meinem Sender links zwei vertikal-Hebel und rechts einen Kreuz-Knüppel... sagen wir mal "Kanal 1 bis 3".
Diese steuern im Normalfall zweimal Gas (zwei Motoren), und der Kreuzknüppel horizontal die Lenkung.
Rechts ist Vertikal ohne Funktion .

Nun war meine Idee, meine Yacht mit zwei Querstrahlrudern auszustatten.
Hierfür möchte ich aber nur einen Digital-Kanal (Kanal 4) verwenden.

Programm soll theoretisch so aussehen.
Wenn Kanal 4 = 0, dann Kanal 1und2 auf die Antriebs Motoren. (z.B. PWM-Ausgang an Pin 2 und 3)
Wenn Kanal 4 = 1, dann Kanal 1und2 auf die Querstrahl-Motoren (z.B. PWM-Ausgang Pin 4 und 5)

Somit hätte ich jetzt schon einen Kanal gespart....

Die Frage ist hier nun, ob ich das PWM-Signal von Empfänger irgendwie in den Arduino REIN bekomme.

Raus aus dem Arduino für Ansteuern von Servo oder Fahrtregler geht ja recht einfach.

Eine kurze Info ob das schonmal jemand gemacht hat wäre super, ggf mit kurzem Progrämmchen....

Gruß
Alexander

P.S. Servo-Test stammt aus dem Buch "Arduino-Workshop" direkt am Anfang von Kapitel 12

Kommt ein bischen darauf an wie schnell das PWM Signal ist und wie schnell es sich ändert. Mein erster Versuch wäre ein simpler RC Tiefpass und das sich ergebende (Analog)Signal dann einfach messen (analogread). Je höher die Frequenz des PWM Signals und je langsamer sicher der "Duty-Cycle" ändert, desto besser funktioniert die Methode.

Gruß
Daniel

PWM
PPM

Der Code der MultiWii beinhaltet die Ausswertung von Summensignalen. Vielleicht kannst Du da was rausziehen.

Gruß Chris

Funktioniert sollte es auf einem Atmega. In Flightcontrolern für Cuatrocopter ist oft der 644 verbaut. Und der macht max. 20 Mhz.

Kann aber durchaus sein, dass die entsprechenden Routinen in Assembler sind. Ich werde mich da erst mit beschäftigen, wenn mein Cuad da ist.

Stichwort: CC3D, Openpilot

Hallo,

Schau mal hier:
http://forum.arduino.cc/index.php?topic=241506.0

mfg Martin

Soo, seit heute Abend bin ich nun ein gutes Stück weiter.

Bin dann vorhin beim Suchen auf das hier gestossen: Modellbau: RC
Wenn ich das richtig sehe, ist zwar die Übertragung vom Sender zum Empfänger in PPM, das Ausgangssignal am Empfänger (zum Servo oder Fahrtregler) ist PWM.
Alle 20ms kommt ein Puls, dessen Länge zwischen 1ms und 2ms variiert.

Gut, damit weiter....

ich hab dann einfach mal einen Ausgang vom Empfänger an Pin 3 (als PWM Eingang) getackert und an Pin 2 (Servo-Ausgang) eben jenen Modellbau-Servo.

Folgendes Programm:

#include <Servo.h> // Lade Bibliothek SERVO.H

Servo myservo; // Definiere "myservo" als Servo
byte PWM_PIN = 3; // Byte PWM-Signal an Pin 3
int pwm_value = 0;
int steuersignal = 90;

void setup()
{
Serial.begin(9600);
pinMode(PWM_PIN, INPUT);
myservo.attach(2); // "myservo" angeschlossen an Port 2
}

void loop()
{
pwm_value = pulseIn(PWM_PIN, HIGH); // Einlesen des PWM-Signals
Serial.print("PWM-Signal: ");
Serial.println(pwm_value);

steuersignal = map(pwm_value, 1000, 2000, 180, 90); // Wandle das PWM-Signal (1000-2000) in Steuersignal (180-0) um
myservo.write(steuersignal); // Gebe das Signal "Steuersignal" an den Servo
Serial.print("Servo-Signal: ");
Serial.println(steuersignal);

Serial.println("--------------------");
delay(200);

}

und.... tadaaaaaa....

Es funktioniert !
Beim drehen der Lenkung an der Fernsteuerung bewegt sich der Servo um 180 Grad.

Nun muss nur noch das "Zittern" weg....

Hier noch ein kleines Vüdeo zum "Teilerfolg" ...

YouTube - 2015-10-18 - RC Arduino Servo

das delay ist Mist. Wenn schon, dann frag alle 20ms den Eingang ab und gibs auf den Ausgang. Normales PPM braucht 20ms für einen Frame.