Autor | Thema |
---|---|
Oliver Arend
Administrator
Registriert seit: Aug 2000 Wohnort: Great Falls, VA, USA Verein: RMV/Solaris/AGM/TRA L1/TCV/MDRA/NOVAAR Beiträge: 8351 Status: Offline |
Beitrag 7632624
[10. Oktober 2014 um 12:26]
Sehr schade.
Auch wenn es theoretisch möglich ist, eine eigene PWM-Routine zu entwickeln und damit einen anderen digitalen Ausgang anzusteuern ... Oliver |
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1525 Status: Offline |
Beitrag 7632629
[11. Oktober 2014 um 10:43]
Oliver,
was Du da andeutest, gibt es bereits. Es ist eine Library 'Software Servo', die nicht Teil der Standard-Library ist. Im Gegensatz zu letzterer - basiert sie nicht auf Interrupts, so dass ein Aufruf einer Routine refresh() alle 50 ms erfolgen muss - kann sie mit allen Ports, also auch analogen(!) umgehen - usw. Ich werde das dann mal mit dem Port A0 versuchen. Periodische Aufrufe an sich sind ja in der Arduino-Software-Architektur kein Problem, da die zentrale Anwendungsroutine loop() sowieso immer periodisch aufgerufen wird. Man darf sich dort nur nicht zu lange "ausmähren". Achim laminare necesse est! Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten! |
Oliver Arend
Administrator
Registriert seit: Aug 2000 Wohnort: Great Falls, VA, USA Verein: RMV/Solaris/AGM/TRA L1/TCV/MDRA/NOVAAR Beiträge: 8351 Status: Offline |
Beitrag 7632630
[11. Oktober 2014 um 12:20]
Wie kann man dann sicherstellen, dass genau alle 50 ms refresht wird, ohne Interrupt? Der Ablauf der loop() muss ja dann immer genau gleich lang sein. Den Rest müsste man über "Wie viele Takte braucht dieser Befehl zur Verarbeitung" ausrechnen ...
Aber gut zu wissen dass Du nicht der erste mit dem Problem bist ;-) Oliver Geändert von Oliver Arend am 11. Oktober 2014 um 12:21 |
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1525 Status: Offline |
Beitrag 7632632
[11. Oktober 2014 um 12:27]
Ich hätte besser schreiben müssen, "mindestens alle 50 ms", ist also nicht das Problem.
Achim laminare necesse est! Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten! |
Lschreyer
Grand Master of Rocketry Registriert seit: Nov 2006 Wohnort: Zeven Verein: AGM, L3 Beiträge: 2035 Status: Offline |
Beitrag 7632633
[11. Oktober 2014 um 13:05]
Also normalerweise erzeugt man ein Servosignal mit einem Timer, das geht eigentlich recht simpel. Ich bin jetzt nicht so mit Arduino bekannt, aber das sind ja atmegas. Man muss nur alle ca. 10-20 ms ein Highimpuls von 1-2 ms Länge erzeugen. Ein Timer wird so eingestellt, dass er alle 1,5 ms ein Interrupt auslöst, diese Zeit kann man je nach Servoposition um 0,5 ms verkürzen oder verlängern.
Die Zeit zwischen zwei Impulsen kann irgendwo zwischen 10 und 30 ms liegen, die ist nicht kritisch. D. H. Man stellt den Timer auf die gewünschte Zeit ein, schaltet den Pin ein, schaltet dann den Timer an, und nach Ablauf des Timers wird im erzeugten Interrupt der Pin wieder ausgemacht, und der Timer wieder deaktiviert. Damit hat man genau die gewünschte Impulslänge. Mit einem zweiten Timer kann man den Abstand zwischen den Impulsen auch genau einstellen. Im Interrupt des zweiten Timers, z.b. Alle 20 ms, kann man dann das obige Spielchen machen. Wies geht steht auch hier. http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung Always keep the pointy side up! |
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1525 Status: Offline |
Beitrag 7632643
[13. Oktober 2014 um 00:03]
Louis,
vielen Dank für die Hinweise zur Servobehandlung. Beim Konzept des Arduino wollte man die Programmierung so einfach wie möglich machen und hat deshalb die Hardware-nahen Aktionen in Libraries gesteckt. Dadurch sollen dem Anwender Zugriffe auf die Hardware leicht gemacht werden, ohne dass man sich mit den Details auskennen muss. Die Arduino Servo Library arbeitet auch mit den Timern. Nun wäre es aber m. E. nicht gut, wenn sich dabei Applikationsprogramm und die System-nahen Software-Komponenten - sprich Libraries - um Hardware-Ressourcen streiten und sich ins Gehege kommen würden. Ich habe daher den auf den Arduino-Webseiten vorgeschlagenen Weg mit der Software Servo Library eingeschlagen und, siehe da, wenn man wirklich alle womöglich im Programm noch vorhandenen Wartezeiten mit refresh()-Aufrufen versieht, funktioniert es. Allerdings muss man dann auch bei Debug-Ausgaben sparsam sein, denn die erfolgen seriell auf den COM-Port (mit Warten - also wie weiland bei MS-DOS), und da geht die Zeit schnell drauf (bei 9600 Bd ca. 1 ms / Zeichen). Man fühlt sich ein wenig in die Zeit zurückversetzt, als Computer noch keine Interrupte hatten. Aber in diesem Fall ist das kein Problem. Wie gesagt, mein Test (Treppensteigen zwischen Erdgeschoss und 2. Etage) lief erfolgreich. Jetzt muss es natürlich noch aufs Feld gehen. Hier der aktualisierte Schaltplan: Achim laminare necesse est! Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten! |
Lschreyer
Grand Master of Rocketry Registriert seit: Nov 2006 Wohnort: Zeven Verein: AGM, L3 Beiträge: 2035 Status: Offline |
Beitrag 7632646
[13. Oktober 2014 um 10:57]
Die Zusammenarbeit der verschiedenen Libraries ist der Grund, warum ich meinen Kram selber programmiere, dabei lernt man auch gleich noch wie das funktioniert. Ich hatte schon die seltsamstem Effekte, weil irgend eine Library einen Timer verwendet und eine andere den mitten drin umstellt. Timer sind schon eine komplizierte Sache, die sind ja sehr sehr universell und haben viele Knöpfchen an denen man drehen kann.
Aber wenns läuft ist es ja gut :-) Always keep the pointy side up! |
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1525 Status: Offline |
Beitrag 7632704
[21. Oktober 2014 um 12:59]
Bei Watterott habe ich OpenLog von Sparkfun entdeckt.
OpenLog ist in der Lage, auf Micro-SD-Karte alles aufzuzeichnen, was über Serial.print() ausgegeben wird. Man kann sogar in den Command-Modus wehseln und einige Commands ausgeben. Man könnte darüber z. B. eine kleine Konfigurationsdatei auf der Micro-SD-Karte auslesen (habe ich aber noch nicht ausprobiert). Dafür werden dann also die Pins D0, D1 (Rx, Tx) benötigt. Das Teil ist nicht ganz preiswert (knapp 22 €), weil auf dem Board ein ATMega328 sitzt, der so programmiert ist, dass er über die entsprechenden Arduino-Libraries auf die Karte zugreift. Aber immerhin kann man so die Flugdaten - oder auch Debug-Informationen - abspeichern und am PC auslesen. So sitzt das dann (steckbar) auf meinem Board: @Oliver: Ich könnte ja sagen, ich habe extra dafür Platz auf meinem Board gelassen, aber das wäre gelogen; es war Zufall, dass der noch da war ... Achim laminare necesse est! Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten! |
AchimO
Poseidon Registriert seit: Jul 2014 Wohnort: Berlin Verein: AGM Beiträge: 1525 Status: Offline |
Beitrag 7632750
[26. Oktober 2014 um 12:59]
Nachdem ich meine Grippe auskuriert habe, war gestern endlich mal die Gelegenheit, den neuen Altimeter mal zu testen (als Arbeitstitel nenne ich ihn mal AltiWR = Altimeter für Wasser-Raketen).
Er wurde mit meiner Milan 4.4, einer Wasserrakete von 4,4 ltr aus 1-Literflaschen geflogen. An Bord waren 2 Fallschirme (Vorschirm im Gipfel, Hauptschirm bei 60 m). Ich war mutig und nahm zum Vergleich auch den Altimax! G3 mit ( in einem stabilen Rohr). AltiWR stellte eine Höhe von 96 m fest, Altimax! dagegen 103 m. Hier das von Excel aus den Flugdaten ermittelte Diagramm: Aus dem Altimax! konnte ich nur die maximale Höhe, aber keine weiteren Flugdaten auslesen; warum, bleibt noch zu klären. Die Sinkgeschwindigkeit ist mit 7,4 m/s relativ hoch. Grund ist, dass der Altimeter den Hauptschirm zwar auslöste, der Arretierungsstift des Servos aber noch ein wenig herausragte (neu gebaute Fallschirmkammer), so dass es nicht zur Auslösung kam. Zusammenfassend lässt sich also sagen, dass AltiWR seinen Zweck erfüllt, der Drucksensor BMP180 aber offensichtlich nicht die Genauigkeit z. B. des Altimax! G3 erreicht. Achim laminare necesse est! Im übrigen bin ich der Meinung, dass die Raketenvereine einem Verband beitreten sollten! |
Lschreyer
Grand Master of Rocketry Registriert seit: Nov 2006 Wohnort: Zeven Verein: AGM, L3 Beiträge: 2035 Status: Offline |
Beitrag 7632763
[26. Oktober 2014 um 21:04]
Hast du die neueste Software con der Website zum Auslesen genommen?
Always keep the pointy side up! |