Modellfernsteuerung



Autos

 

Auf Grund wachsenden Interesses meines Nachwuchses an Ferngesteuerten Autos habe ich herumstehende und inzwischen angesammelte Modellfahrzeuge wieder aktiviert. Es sind bislang 4 Fahrzeuge, teilweise billiges Spielzeug . Das herumliegen vieler einzelner Fernsteuerungen ist unschön. Durch die schlechte Funktion der einfachen Fernsteuerungen, nur null oder Vollgas und voller Lenkeinschlag lässt sich so ein Auto nur unpräzise steuern. Die recht langen Antennen an Fernsteuersender und Auto sind für Kinder ungeeignet. Auch die Reichweite ist sogar in der Wohnung ungenügend.


Deshalb die Idee, ein Umbau aller Autos und ein Sender der umschaltbar ist das nur ein gewünschtes Auto reagiert .


Fertige Fernsteuerungen im 2,4 Ghz Bereich gibt es reichlich doch der Eigenbau ist Interessant, nicht sehr aufwändig und billig. Der von mir schon häufig eingesetzte AVR 8 Bit Controller von Atmel ist dafür sehr gut geeignet .Er hat neben der CPU noch einiges an nützlicher Peripherie integriert z.B.. 8/16bit Timer, 8fach Multiplexer, 10bit ADC und SPI bis 4 Mhz .


Ein 2,4 Ghz Funkmodul braucht keine Antenne und reicht ca.50 Meter, es gibt dieses Modul auch mit mehr Sendeleistung und Antenne(sehr klein), dieses reicht laut Hersteller über 1000 Meter.



SENDER


Der Sender braucht Analoge Steuerknüppel, mit Potentiometer, ATmega 16, 2,4Ghz Modul „nRF24L01+“ Spannungsregler für 3,3 Volt und Batterien.


Autos

Software



Der Controller arbeitet mit 8 Mhz intern Oszi. Vom ADC wird der erste wert gewandelt ,bei jedem fertig Interrupt wird der Multiplexer einen Kanal weiter geschaltet und die nächste Wandlung gestartet, es sind alle 8 benutzt für spätere Erweiterungen. Die Werte der Steuerknüppelpositionen werden noch etwas umgerechnet sub, mul , div und begrenzt auf 0-255 dann Zyklisch alle 20ms (vom Timer0 Interrupt) über SPI an das Sendemodul übergeben. Das Datenpaket besteht aus einer 5 Byte Adresse, 12 Byte Nutzdaten (momentan nur 2 genutzt, Lenken Fahren)und abschließendem CRC. Die anfängliche 5Byte Adresse und das CRC Zeichen werden hardwaremäßig vom Sendemodul generiert und im Empfänger ausgewertet. Der Empfänger im jeweiligen Auto reagiert Also nur auf seine Adresse und nur bei Fehlerfreier Übertragung. Es könnten also 1099511627775 Autos adressiert werden.


Das Sendemodul von NORDIC SEMICONDUCTOR ist sehr flexibel und kostengünstig. Es muss anfänglich Initialisiert werden.


  • Sendekanal, Ich benutze die Frequenz 2525MHZ also außerhalb des ISM Bandes damit keine Störungen durch WLAN, Bluetooth usw.
  • Übertragungsrate 250 kbit/sec,das ist die niedrigste(grösste Reichweite)
  • Empfang/Sendepuffer 12 Byte
  • auto acknowledgement aus schalten, Ein bidirektionaler Betrieb ist nicht nötig, würde die Reichweite nur verringern verlorene Datenpkete können bei dieser Anwendung in kauf genommen werden
  • RX/ TX Betrieb, Interrupt aus
  • 5Byte Adresse für Empfänger Auswahl
  • CRC Prüfung aktiv

Zum umschalten auf ein anderesAuto dient eine per Software entprellte Taste welche die 5 Byte Adresse inkrementiert, max. 8 dann wird wieder auf 0 gesetzt , die Adresse vom zuletzt benutzten Auto wird im EEprom abgelegt und bei jedem einschalten geholt.




Empfänger


Der Empfänger beinhaltet auch gleich die Fahrtregler Funktion, das bei sehr geringem Aufwand, ein ATmega8, Funkmodul ,Spannungsregler 3,3/5 Volt und die H-Brücke aus 4 Leistungs- Mosfetund 2 Kleinsignaltransistoren. Zum betrieb im Auto ist lediglich noch ein Standard Lenkservo nötig. Die Transistoren brauchen bei kleinem Fahrmotor ca. 5A nicht gekühlt werden.


Empfänger

Software


Der Atmega8 arbeitet mit 8Mhz internem Oszi, Brown out 2,7 V , Timer1 erzeugt den Kanalimpuls für das Lenkservo, Timer 2 die PWM für den Antriebsmotor.In der Hauptschleife wird bei jedem Durchlauf auf erfolgreich empfangene Daten geprüft, wenn ja dann Daten abholen und an Modul „status Byte RX voll“ rücksetzen. Dann Lenkkanal für die modelspezifischen mechanischen gegebenheiten umrechnen ev.negieren, auf Lenkeinschlagwinkel und Neutralstellung anpassen. *250 /64+1000
die theoretischen Werte für einen Kanalimpuls 1,5 ms +- 0,5 ms sind:

Linkseinschlag Kanalbyte = 0 > 1000
Neutral Kanalbyte = 128 >1500
Rechtseinschlag Kanalbyte = 255 >1996

Dann wird der 16 bit Wert an das Compare Register OCR1B von Timer 1 gegeben. Der Timer1 läuft im CTC-Mode (Clear Timer on Compare) wenn das Zählregister OCR1A erreicht wird Interrupt TIM1_COMPA ausgelöst und der Zählerstand gelöscht bei OCR1B wird nur Interrupt TIM1_COMPB ausgelöst.
In der Interruptroutine TIM1_COMPA wird der Kanalinpuls gesetzt, bei Interrupt TIM1_COMPB gelöscht, der Zähler läuft mit 1 Mhz damit ergibt sich genau die benötigte Impulszeit. Aus dem Kanal 2 (Fahrgeschwindigkeit und Richtung)wird erst die Richtung Ermittelt dann der Geschwindigkeitswert auf 0-63 umgerechnet.
Jetzt wird mit diesem Wert der eigentliche PWM Wert aus einer Tabelle im Programmspeicher geholt. Durch Anpassung der 64 Einträge kann ein angenehmes Verhalten des Antriebsmotors im gesamten Geschwindigkeitsbereich erreicht werden, progressive /geknickte Kennlinie.
Timer2 erzeugt die PWM. Die zwei Interruptroutinen TIM2_COMP , TIM2_OVF schalten je nach Fahrtrichtung die 4 Endstufentransistoren.
Da die Schaltung den Strom vom Fahrakku bezieht kommt es vor das bei geringem Ladezustand eine Stromspitze vom Antriebsmotor den AVR abstürzen lässt. In diesm Fall löst der Watchdog-Timer nach 250 ms einen Reset aus.Wenn das Auto den Funkbereich verlässt werden nach 1 Sekunde Unterbrechung beide Kanäle auf Neutral geschaltet, das Auto bleibt stehen bis wieder gültige Datenpakete empfangen werden.





Startseite