Jump to content
Intermodellbau 2024: Unser Stand in Halle 3 ist fertig für Besucher - schaut mal 'rein. ×
Schiffsmodell.net

Nullpunktproblem von Flug ESC an Autofernsteuerung


Guest willie

Recommended Posts

Gerade im Rennbootsektor wird gerne mit einer Pistolenfernsteuerung und Brushless-Flugreglern gearbeitet. Leider haben viele Regler dann das Problem den Nullpunkt der Pistolensteuerung (der ja in der Mitte liegt) nicht oder nicht richtig erkennen zu können. Bei teureren Sendern kann man das manchmal in der Software korrigieren. Den günstigeren Sendern fehlt meisten eine solche Funktion.

Aber wir können ja programieren. Also flux ein kleines Programm geschrieben, was den eingeschränkten Bereich des Abzugsknüppel auf den erweiterten Bereich des Reglers abbildet.

Bei der Software gibt's eigentlich nix spektakuläres.

In der setup() Routine initialisiere ich alle benötigten Objekte.

In der loop() erfolgt dann die Verarbeitung.

Ich verwende meine RCReceiver Bibliothek http://wkla.dyndns.org/ArduinoWiki/doku.php?id=arduino:modellbau:projekte:rcreciver

Und ich verwende eine Software Servo Bibliothek. Aber warum?

Bei dem normalen Arduino kann man auch die normale Servo Bibliothek verwenden. Aber ich habe etwas besonderes vor. (Deswegen enthält das Zip auch ein bisschen mehr )

Ein großer Arduino war mir für dieses Miniprojekt wirklihc zu groß, also hab ich das ganze Projekt nicht für einen normalen Arduino gemacht sondern für einen ATTiny45. Das ist eine der kleinstes AT Controllerversionen. Der Chip hat nur 8 Pins, davon kann man 5 (ohne Reset und ISP Möglichkeit 6) frei programmieren. Leider kann man auf dem kleinen nicht die normale Servo Bibliothek verwenden, da im Chip kein 16-Bit Timer vorhanden ist.

Aber wie kriegen wir nun dsa Programm in den Chip. Das ist jetzt etwas tricky. Wir brauchen dazu

1. einen ISP, den die Arduino IDE kennt. Ich hab sowas: http://www.ebay.de/itm/USB-ISP-USBASP-Programmiergerat-Programmierer-fur-Atmel-AVR-ATMEGA8-ATTiny-NEU-/281121456079

2. einen kleinen Programmieradapter. Oder wir nehmen einfach unser (hoffentlich vorhandenes) Breadboard und verkabeln die 6 Anschlüsse des ISP mit dem Chip. (Schaltplan und Platine hab ich mal angehängt, Target Format)

3. brauchen wir natürlich noch ein Board. Platine bereite ich vor, wer es aber eilig hat, kann schon mal den Schaltplan auf Lochraster nachbauen.

 

Zum Programmieren gibt es dann einen kleinen Trick.

Zunächst stellt man das richtige Board ein, also bei uns einen ATTiny45 @ 8MHz.

Dann wählt man den richtigen Programmer. (Man kann übrigens auch einen normalen Arduino als Programmer programmieren...;))

Jetzt muss man zunächst einen Bootloader programmieren. Ja, auch wenn tatsächlich keiner eingebrannt wird, weil wir keinen brauchen. Aber dadurch werden im Chip die richtigen Einstellungen gemacht. (Nennt man Fuses...)

Und jetzt kann man ganz normal das Programm drauf programmieren.

Das ganze kann man dann direkt in die Leitung zum ESC stecken. Wenn Bedarf besteht, mach ich auch ein richtiges Layout. Aber ich denke die 10 Strippen kann man auch eben selber löten.

FlugESCanCarRc.zip

ATTiny_programmiersockel.zip

FlightESC_org.pdf

Link to comment
  • 2 weeks later...
  • 1 month later...

Gibt was neues von der Front.

Die Platinen sind bestellt und unterwegs. Das kann aber ca. 4 Wochen dauern, weil ich einen neunen Platinenmacher ausprobieren wollte.

Aber bei $9,90 für 10 Platinen a 5x5cm (Da passen dann 4 Stück von drauf) sind die Kosten deutlich geringer.

 

Statt ca 3€ pro Platine sind's nun ca. 0,26€ (Kommt ja noch Porto drauf.)

 

 

 

http://imall.iteadstudio.com/open-pcb/pcb-prototyping.html

 

 

Die Software ist auch fast fertig. Muss nur nochmal den Servomode testen.

Melde mich, wenn's was neues gibt.

Link to comment

Das Modul hat 2 Programme, die per Jumper anwählbar sind.

 

Das 1. ist der Car RC nach Flug ESC "Konverter". Der ist sehr übersichtlich.

Da gibt's z.Z. noch nix einzustellen. Eigentlich mach ich da nur eine Umsetzung vonb 1500-2000ms -> 1000-2000 ms.

Wenn dann eine FS eben 1300 als Mittelstellung macht, wird das trotzdem entsprechend umgesetzt. Denn der Nullpunkt der FS wird beim Starten automatisch ermittelt und entsprechend weiter verwendet. So kann/muss man den ESC trotzdem noch programmieren. Das köntne auch auf einem 25 mit 8MHz laufen...

 

Das 2. Programm, was da mit im Controller schlummert ist etwas größer und umfangreicher. Das sorgt dafür, daß man bei Servos mehr Servoweg benutzen kann. Normalerweise kann man den Vollauschlag bei Servos nicht benutzen. Denn statt 1000-2000 reagieren die meisten Servos bereits ab 500-2500ms. (An den Rändern ist Vorsicht geboten, das man nicht über das mechanische Limit kommt) Das Programm kann nun auch den kompletten Drehbereich eines Servos nutzen. Den Controller muss man einstellen. Dazu wählt man den Einstellungsmodus (Vollausschlag beim Einschalten), dann kann man den minimalen und den maximalen Wert der Fernsteuerung einstellen, danach kann man den Weg des Servos einstellen. (auch max und min Werte). Und ab jetzt kann man den kompletten Servoweg benutzen. Das ganze ist natürlich mit viel Vorsicht zu benutzen, denn beim Einstellen kann man schnell mal verreissen und somit evt. Servo, Ruder und wer weiß was noch beschädigen.

Dafür krieg ich aber aus einem normalen Standartservo plötzlich 2x80°.

Da dort aber umfangreichere Berechnungen und mehr Code entsteht, brauchts da einen ATTiny85 mit 16MHz. (Das geht auch ohne Quarz...)

Ich bin aktuell beim Testen des 2. Modules und habe bisher eine Codegröße von fast 7KB... Und ich mußte vieles selber schreiben...

Der Codelink ist auch nicht mehr ganz aktuell. Aber ich schiebe erst wieder was aktuelles drauf, wenn ich fertig bin.

Link to comment

Mag sein, ich normalerweise auch, aber eben nicht in einem Timer-Interrupt.

 

wie immer C mit ein bisschen ++.

 

Nur mal so als Rechenbeispiel, für mich kostet ein

Tiny 25 (DIL 8) 1,15€

ein Tiny 45 (DIL 8) 0,99€

ein Tiny 85 (DIL 8) 1,15€

 

Also warum sollte ich keinen 85'er nehmen. Ich bau ja keine 1000 Stück, bin doch nur Hobbyist.

16MHz nehm ich deswegen, weil ich festgestellt habe, daß bei 16MHz die Servos am wenigsten zucken. (Timerinterrupt) Und Code optimieren tu ich erst, wenn alles fertig ist und läuft.

Aber ganz ehrlich, warum sollt eich keine 16MHz nehmen?

- Es kostet ein bisschen mehr Strom. Klar, 9mA gegenüber von 5mA. Wenn ich das ganze mit einer Knopfzelle betreiben müßte, wäre das ein Grund, am Akku eher nicht.

- Die 16MHz werden von einer internen 8x PLL erzeugt, aus dem internen 8MHz Signal. Deswegen sind die evt. nicht so stabil wie die 8MHz. Aber das ist in diesem Anwendungsfall ziemlich wurscht.

Sonst wüßte ich keinen Grund, warum ich keine 16MHz verwenden sollte.

Hast du einen?

Link to comment

Hi Willie,

 

völlig korrekt was Du da schreibst, mir ging es zunächst "nur" um den Begriff RECHENINTENSIV ....

Die 16MHz waren mir nicht klar, denn Du kannst ja über die Fuses einen 8MHz Oszillator intern aktivieren, bei 16 brauchst Du einen externen Quarz !

... und 8MHz gegen 50Hz der Servosignale .... da hast Du eine ganze Menge Takte dazwischen die dann für umfangreiche Rechnereien reichen (auch Winkelfunktionen etc.) .... und genauer wird die Sache auch nur über einen externen Quarz, und da bin ich auch bei Dir, das ist eigentlich nicht nötig ...

 

Also Happy ATtinying

Grüßle

Gerhard

Link to comment
Hi Willie,

..

Die 16MHz waren mir nicht klar, denn Du kannst ja über die Fuses einen 8MHz Oszillator intern aktivieren, bei 16 brauchst Du einen externen Quarz !

Das ist ja gerade das schöne am 45/85. Selbst für 16MHz brauchst du keinen Quarz. Im Gegensatz zu den Megas. Die brauchen dann einen. Die Tinys nicht. (Handbuch Kapitel 6.1.5)

Ich frag mich, warum das in den neueren Megas nicht auch mit drin ist.

... und 8MHz gegen 50Hz der Servosignale .... da hast Du eine ganze Menge Takte dazwischen die dann für umfangreiche Rechnereien reichen (auch Winkelfunktionen etc.) ....

 

Also Happy ATtinying

Grüßle

Gerhard

Eigentlich schon, aber sicher ist sicher.

Ich hab jetzt noch eine super simple Alternative zu dem ganzen Interruptgeschisse gefunden. Warum ich da nicht sofort drauf gekommen bin, weiß ich nicht. Jetzt bin ich für beide Funktionen (allerdings noch ohne Einstellerei) auf 1500Bytes (!), also TINY25 kompatibel. Der Trick, ich mach das Timing des Servos nicht selber über einen eigenen Interrupt, sondern lass das den Empfänger machen. Der liefert ja schon ein servokompatibles 50Hz Signal. Ich hab's aber noch nicht in der Realität probiert, nur am Reissbrett.

Achja, hier ist ja die Arduino Ecke, und deswegen ist das ganze auch mit Arduino programmiert. Viel zu sehen ist davon aber nicht mehr... 8-)

Aber so können wenigsten ein paar evt. das Ganze nachvollziehen.

Ich hab die Quellen mal angehängt. Aber

ACHTUNG: Das ganze ist noch nicht getestet, also ohne Gewähr auf Funktion!

 

PS.: Das ganze ist schon recht C lastig. Ich habe versucht, so wenige Arduino Befehle wie möglich zu verwenden. Um das Lesen für die Arduinos hier etwas zu erleichtern hab ich nach jedem Befehl, wenn nötig, die Arduino Entsprechung notiert. (Fängt immer mit // A: an)

FESC_Small.zip

Edited by willie
Nachtrag.
Link to comment

.... den Arduino-Quark mag ich nicht, ich bevorzuge Bascom oder Assembler, evtl. C.

Aber das mit den 16MHz ist mir neu und hab ich noch nicht ausprobiert .... guter Tip :that:

 

Danke für den netten Dialog

Grüßle

Gerhard

Link to comment

Gerne.

Jeder so wie er mag. Ich hab mit Emmbedded Pascal (AVRco) angefangen, bin dann nach Assembler und AVRStudio gewechselt und jetzt bei Arduino gelandet. Bascom hab ich mir mal angeschaut, mochte ich aber irgendwie nicht. (Obwohl ich mit Basic aufgewachsen bin...)

 

PS.: aktueller Schaltplan.

FlightESC_rev1.pdf

Edited by willie
Link to comment
  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.