PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC Fernsteuerung mit AtMega auswerten



Timm
06.06.2008, 15:01
Ich suche gerade nach einem passendem Board für die Steuerung eines ferngesteuerten Models. Ich habe das Arduino im Auge, da es sehr günstig ist und ich keine Features wie Motortreiber brauche, es sollen nur Servos und Fahrtenregler angeschlossen werden.

Meine Fragen sind:
1. Ich habe gelesen, dass man wenn man den Empfänger von einer RC Fernbedienung auswerten möchte, das Summsignal benötigt. Kann man auch die 4 einzelnen Kanäle des Empfängers auswerten?
2. Der Arduino wird über gcc programmiert und läuft mit 16mhz (AtMega8 oder AtMega168). Gibt es schon Beispiele, woran ich sehen kann, wie eine Fernsteuerung ausgelesen wird?
3. Benötige ich noch weitere Hardware oder kann ich den PW-Kanal direkt an die AtMega Pins anschließen? Ich habe in einem Board gelesen, dass noch ein Signalverstärker nötig ist.

Christopher1
06.06.2008, 15:19
Ich kann dir nur die erste Frage beantworten.
Du kannst natürlich auch alle Kanäle einzeln auswerten, aber da verschwendest du doch Pin, die Stelle zu finden, wo das Summensignal anliegt, ist garnicht so schwierig und die Software ist auch leicht.

Timm
06.06.2008, 15:27
Aber nicht jeder Empfänger unterstützt so ein Summsignal oder?

Christopher1
06.06.2008, 15:40
Doch schon, dahinter ist dann ein Chip, der das auswertet.

Timm
06.06.2008, 18:15
Muss ich dazu den Empfänger öffnen oder ist der an einem der Ausgänge? Bei dem Mikrokopter musste man extra einen speziellen Empfänger kaufen, der das Summensignal nach draußen führt, so wie ich das auf deren Homepage verstanden habe.

Edit: Ich habe eine Liste der kompatiblen Empfänger gefunden: http://www.mikrokopter.de/ucwiki/RC-Empf%C3%A4nger

Dann brauche ich jetzt nur noch den Code, der das Summensignal verarbeiten kann...

Christopher1
06.06.2008, 21:15
Du musst den Empfänger öffnen.
Es gehen nicht nur die Empfänger, die dort aufgelistet sind, es geht jeder billige Chinaempfänger, man muss halt nur die richtige Stelle finden. ;-)
Stimmt also nicht, dass man extra einen speziellen Empfänger kaufen muss, aber die meisten die sich dort dieses Fertigzeug kaufen, sind wohl nicht dazu in der Lage, desshalb... ;-)
Welche Programmiersprache?

Timm
07.06.2008, 10:32
Dann werde ich mir bei Ebay einen günstigen Empfänger ersteigern. Ich hab hier noch so eine 4 Kanalfernsteuerung von einem Modellhelicopter mit 35Mhz. Sie stammt von einem dieser kleinen Helis für 130-150€. Die sollte doch wohl mit jedem Empfänger dann kompatibel sein oder?

Die Programmiersprache ist C. Ich benutze als ein speziell für AVRs gebautes GCC.

Christopher1
07.06.2008, 10:51
Ok.
Bei der Umsetzung in C kann ich dir wohl nicht helfen, aber ich kann ja mal meine Auswertung bescheiben.
Empfänger mit 5Vversorgen, PPM signal suchen (Empfänger öffnen-> Datenblatt vom IC suchen->PPM rausführen; wenn du es nicht selbst findest, kannst du ja die Bezeichnung hier posten).
Das PPM Signal am AVR auf INT0/1/2 legen.
Nun Timer und Interrupt konfigurieren. Variable für Kanal und für die einzelnden Kanäle.
Wenn der Interrupt ausgelöst wird, guckst du ob Kanal 1 (usw.) ist, wenn ja, dann schreibst du den Timerwert in die Variable für den Kanal (Kanal_1) danach erhöhst du die Variable um 1, damits weiter geht.
Danach frag ich ab ob der Timerwert größer als 3ms ist, wenn ja setz ich Kanal auf 1 (Pausenerkennung) und das wars.
Vielleicht verstehst du, wie ich das meine und kannst was mit anfangen ;-)

Timm
07.06.2008, 19:58
Gut, danke. Ich denke mal, dass das hier das richtige sein wird: http://www.ulrichradig.de/home/index.php/avr/avr_-_rc

Jetzt verstehe ich auch die Theorie dahinter ;)

Timm
14.07.2008, 22:42
Ich habe mir jetzt ein ACT Pico 4 bei Ebay gekauft. Läuft alles super. Ich werte mit diesem Code http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1204020386/156#156 den Empfänger aus. Jedoch habe ich wenn ich den Empfänger mit dem Arduino Board verbinde ein leichtes Zittern der Servos an allen Kanälen (wenn ich die Servos direkt an den Empfänger anschließe). Auch schwanken die ausgelesenen Werte ein wenig. Wenn ich vom Netzgerät auf Batterie umstelle, wird es ein wenig besser. Ich denke mal, dass man irgendwie die Strom und Signalleitung entstören sollte, der Empfänger selbst scheint in Ordnung zu sein. Habe ihn mal unangeschlossen ausprobiert, nur mit einem Servo und Batterie. Hat irgendwer eine Idee/Schaltung? Zwischen Pin und der Signalleitung habe ich schon einen 180 Ohm Widerstand gelötet, was eine kleine Verbesserung gegeben hat.

fhs
15.07.2008, 08:32
Hallo Timm,


Zwischen Pin und der Signalleitung habe ich schon einen 180 Ohm Widerstand gelötet, was eine kleine Verbesserung gegeben hat.

Du kannst versuchen,
1. einen Ferrit-Kern über alle 3 Leitungen zum Servo/zu den Servos zu montieren
2. Zusätzliche Abblockkondensatoren an der Stromversorgung des Empfängers und/oder der/des Servos anzubringen
3. ein Tiefpassfilter (LC-, CLC- oder LCL-Glied) in die Stromversorgung des/der Servos einzubauen.
4. 1-3 kombinieren


Keine der genannten Methoden garantiert jedoch, dass sich der "Jitter" verbessert.

Gruß

Fred