O.k. Super,
dann würde ich mir gerne die Alternative Variante anschauen. MPU -60X0 das macht bei meiner Variante vom Bolt auch Sinn, dar der schon ein bisschen Übergewicht hat.
Grüße
Sven
O.k. Super,
dann würde ich mir gerne die Alternative Variante anschauen. MPU -60X0 das macht bei meiner Variante vom Bolt auch Sinn, dar der schon ein bisschen Übergewicht hat.
Grüße
Sven
Hi Matthias,
was Du da gebaut hast klingt sehr interessant, ich denke da steckt viel Gehirnschmalz drin.
Ich würde gern mehr darüber erfahren, veröffentlichst Du deine Version?
Das mit dem Wii, Flyduino muss ich mir mal anschauen.
Harald und ich haben eine "fast" funktionierende shredi FW die 4 PPM's ausgibt und den MPU ausliest.
also wenn ich mir das grade so durch den kopf gehen lasse haben wir dann ein system das auch in einen großen copter integriert werden könne ;-D und das ganze auf 36x36 mm![]()
Der miniatur Quadrocopter: www.nanoquad.de
Ich würde unsere momentane FW als funktionierend (ohne fast) bezeichnen.
Der sNQ V2 BL ist damit schon abgehoben, nur die Motoren waren da leider noch nicht ausgewuchtet, was bei der steifen Kopplung zwischen Motoren und MPU-6000 (beide - bzw. alle 5 - sitzen ohne mechanische Dämpfung direkt auf der Platine) zu absonderlichen (Regel-)Effekten führt.
Was die MPU-6000 angeht, die ich hier auf Halde liegen habe, die würde ich in kleinen Mengen für einen sehr vernünftigen Preis abgeben.
Bei Intereesse den Preis bitte per PM erfragen, ich will das hier nicht breit treten. Die Dinger gehen jedenfalls für den (meinen) Einkaufspreis + Porto an den Interessenten. Vakant sind zur Zeit 6 Stück.
Problem dürfte für die Meisten wohl noch die Montage bzw. der Anschluss an vorhandene Regler-Platinen darstellen...
So wild ist das gar nicht. Die Blumen für den MPU Sensor gehören ganz klar unseren beiden Nano-Pionieren.
Für die PWM Steuerung nutze ich 4 Compare Timer. Das PWM Signal wird dadurch unabhängig vom Programm erzeugt und für eine Frequenzänderung muss nur ein Register neu geschrieben werden was schneller geht als I2C. Nachteil ist die Auflösung. Ich hab nur 125 Schritte.
Fliegt aber trotzdem
![]()
Hallo Matthias,
dazu habe ich ein paar Fragen. Darf ich?
Q: Hast du deine Steuerung auch mit Bascom programmiert und ist der µC auch ein Mega328p wie bei uns?
Falls ja, verrätst du mir den Trick, wie du die Compare Match Funktion ans Laufen bekommen hast?
Mein erster Ansatz für die Erzeugung der PPM-Impulse für die BL-ESCs des sNQ V2 BL sah genauso aus, aber der automatische Neustart des Timers hat nicht geklappt, weshalb ich dann auf die Methode von Willa ausgewichen bin und den Overflow IRQ verwende, dafür aber den Timer jedes Mal neu mit dem Startwert aufziehen muss. Das ist zwar kein eminenter Nachteil, da ich ja den Timerwert ohnehin andauernd ändern muss, aber da geht es mir ums Prinzip. Ich will es wenigstens kapieren.
Du schreibst "das PWM-Signal...", auf dem Foto sehe ich aber BL-Motoren, die ziemlich sicher einen ESC benötigen, der traditionell kein PWM versteht, sondern auf PPM beharrt. Das machen meine zumindest so
Ich habe das Timing Anfangs mal durchgerechnet und bin zu der Erkenntnis gelangt, dass ich zwischen den einzelnen PPM-Impulsen je Kanal nur schmale 40 µs Zeit habe, bevor der nächste Impuls kommt. Das erschien mir zu knapp für die ESCs, weshalb ich diesen Ansatz verworfen habe. Offenbar geht das aber doch... mit leichten Einschränkungen in der Auflösung, aber immerhin mit Hardwareunterstützung, was zumindest die Interferenzen mit dem Receiver-IRQ minimieren dürfte, die in meiner Lösung machmal zu beobachten sind.
Q: Hast du dein PPM-Timing mal gemessen? Kommt da wirklich nur eine 40 µs Pause zwischen zwei Impulsen (je Kanal), oder habe ich mich da verrechnet?
Danke!
Moin!
Ja natürlich!
Der Quadcopter hat ein Flyduino Board mit ein Mega2650 drin. Ich hab aber grade eben das MiniWii aufgebaut und ein kleines Compare Match Programm draufgeflasht. Das MiniWii hat ein M328p.
Compare Match ist eigentlich ganz einfach. Die On Compare Ports als Ausgang definieren und den zugehörigen Ausgang als PWM Compare Timer Konfigurieren.
Der Timer startet automatisch und mit den Wert in den Compare0A Register kann man jetzt die Puls-Weite einstellen.Code:Config Portd.6 = Output 'OC0A Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 64
Warum starten bei dir die Timer neu??? Einmal gestartet laufen die Timer durch egal was das Programm macht.Code:COMPARE0A = 125 ' 1ms Pulse-Weite COMPARE0A = 250 ' 2ms Pulse-Weite
Ich will kein Streit vom Zaun brechen und vieleicht liege ich auch total Falsch.
Aber ich bin mehr sehr sicher das die BL-Regler nur ein PWM Signal verstehen (Puls Weiten Modulation) Der Regler oder ein Servo wertet die "Weite" des Pulses aus. 1ms bis 2ms unabhängig von der Framelänge.
PPM hingegen ist im Prinzip das Gegenteil. PPM ist die Puls Phasen Modulation. Dabei haben die Pulse eine Fixe Länge und die Information liegt in der Low-Phase des ganzen Frames. PPM wird für Summensignale genutzt und enthält meist mehrere Kanäle die durch die festen Puls-Längen getrennt werden.
Genug geklugscheißert
Mit den Timing hast du Recht und deine 40µs passen wie die Faust aufs Auge.
![]()
Ich verwende im Moment Hobbywing 18A Regler von Giantcod. Die scheine damit kein Problem zu haben. Zyclus-Zeit liegt bei 2,04ms was pi mal Daumen 490Hz ergibt was noch ein Tick schneller ist als Willas I2C/PWM Wandler.
In den Regler ist ja auch nur ein AVR drin. Der wertet das Signal auch nur mittels Interrupts aus, steigende/fallende Flanke. Wenn ich mich nicht verrechnet habe hat der Controller bei 16Mhz und 40µs immernoch 640 Zyklen zeit in die Interrupt Routine zu kommen.
Es muss ja irgendwie funktionieren. Die MultiWii Systeme haben auch 490Hz auf der PWM Seite. Wie kommen die wohl auf diese Frequenz??
Gruß
Matthias
Geändert von Picojetflyer (17.02.2012 um 11:06 Uhr) Grund: Hobbywing Regler nicht Pentium sorry
Hallo Matthias,
ok, da habe ich was durcheinander gebracht. Was die Nomenklatur der PxM Generierung angeht hast du vollkommen Recht, danke für das Update
Und noch was durcheinander gebracht...
Die von dir beschriebene Methode zur Impulserzeugung ("Compare Match") haben wir beim sNQ V1 angewandt, da wir dort PWM für die Steuerung der brushed Motoren benötigt haben. Das hat auch prima geklappt, ergibt aber ein symmetrisches Signal, das ich für die ESCs nicht haben wollte.
Haarig wurde es erst, als ich versucht habe, die Impulse für die ESCs zu erzeugen.
Hier wollte ich CCM "Clear on Compare Match" verwenden, was ich so verstanden habe, dass ich den Timer mit Null und gesetztem Ausgangsbit starte, einen Comparewert vorgebe, der bei Erreichen zum Interrupt führt und gleichzeitig den Timer rücksetzt (wieder bei Null anfangen lässt zu zählen) und den Ausgang löscht, und zwar ohne user intervention.
Die Impulslänge würde dann wieder durch schreiben des CompareMatch Registers bestimmt werden, die Pause zwischen zwei Impulsen wollte ich durch Enable/Disable steuern.
Zur Pausensteuerung bin ich aber nicht gekommen, da das Handling der Zählerwerte schon nicht geklappt hat.
Vielleicht habe ich ja auch das Datenblatt falsch verstanden...
Also wenn ich dich richtig verstanden haben möchtest du das so machen:
Do
Timer mit 0 starten und hochzählen lassen mit aktivierten OC-Pin
Timer erreicht Compare wert z.b 100
Compare Match setzt Timer auf 0 zurück und setzt OC-Pin auf low
Timer zählt wieder bis Compare hoch
Compare löscht wieder Timer aktiviert wieder OC-Pin
Loop
richtig???
Lesezeichen