- 3D-Druck Einstieg und Tipps         
Seite 297 von 355 ErsteErste ... 197247287295296297298299307347 ... LetzteLetzte
Ergebnis 2.961 bis 2.970 von 3542

Thema: Willas Shrediquette Tricopter / Quadrocopter / Hexacopter

  1. #2961
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Anzeige

    Praxistest und DIY Projekte
    Zitat Zitat von yak03 Beitrag anzeigen
    Hi Matthias,
    was Du da gebaut hast klingt sehr interessant, ich denke da steckt viel Gehirnschmalz drin.
    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

    Klicke auf die Grafik für eine größere Ansicht

Name:	DSCF0919.jpg
Hits:	30
Größe:	30,4 KB
ID:	21555

  2. #2962
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Zitat Zitat von Picojetflyer Beitrag anzeigen
    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.
    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!
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  3. #2963
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Moin!

    Zitat Zitat von deHarry Beitrag anzeigen
    Hallo Matthias,
    dazu habe ich ein paar Fragen. Darf ich?
    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.

    Code:
    Config Portd.6 = Output                                     'OC0A    
      Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 64
    Der Timer startet automatisch und mit den Wert in den Compare0A Register kann man jetzt die Puls-Weite einstellen.
    Code:
    COMPARE0A = 125 ' 1ms Pulse-Weite
    COMPARE0A = 250 ' 2ms Pulse-Weite
    Warum starten bei dir die Timer neu??? Einmal gestartet laufen die Timer durch egal was das Programm macht.

    Zitat Zitat von deHarry Beitrag anzeigen
    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 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.

    Klicke auf die Grafik für eine größere Ansicht

Name:	Image1.png
Hits:	12
Größe:	8,7 KB
ID:	21560

    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

  4. #2964
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    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...
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  5. #2965
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Zitat Zitat von deHarry Beitrag anzeigen
    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.
    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???

  6. #2966
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Fast.

    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
    -> hier den Timer anhalten und wahlfrei "irgendwann" wieder starten mit OC-Pin auf low
    -> Nach dem NeuStart, bei dem der Pin wieder zu setzen ist:
    Timer zählt wieder bis Compare hoch
    Compare löscht wieder Timer, deaktiviert wieder OC-Pin
    Loop

    Aber das von dir skizzierte Szenario müsste ebenfalls funktionieren, dann hätten wir halt doch ein symmetrisches (Low-Hi-Anteil) PWM-Signal.
    Wenn ich das dann richtig interpretiere, läuft das ja inzwischen einwandfrei in deinem Copter

    Mich stört hieran nur die geringe Auflösung. Das ist der fehlenden Prescalerstufe 32 geschuldet, richtig?
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  7. #2967
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Zitat Zitat von deHarry Beitrag anzeigen
    Aber das von dir skizzierte Szenario müsste ebenfalls funktionieren, dann hätten wir halt doch ein symmetrisches (Low-Hi-Anteil) PWM-Signal.
    Wenn ich das dann richtig interpretiere, läuft das ja inzwischen einwandfrei in deinem Copter

    Mich stört hieran nur die geringe Auflösung. Das ist der fehlenden Prescalerstufe 32 geschuldet, richtig?
    Haar genau! der 32er Prescaler fehlt total. Ich bin noch am tüfteln mit den PID Werten aber eigentlich merkt mal die geringere Auflösung gar nicht. Die Knüppelstellung wird auch nur mit 74 Schritten aufgelöst und an der Feinfühligkeit merkt man auch nix. Allerding könnte ich mir vorstellen das man es mit zunehmender Minisierung (es soll ja Leute geben die sowas wie ein sNQ bauen ) die geringere Auflösung doch merkt.
    Wofür möchtest du den Timer denn stoppen? Brauchst du den für was anderes?

    Code:
    Config Timer0 = Timer , Compare_a = Toggle , Prescale = 64 , Clear_timer = 1
    Damit erzeugt man ein symmetrisches PWM Signal. Hab es grade ausprobiert.

    Gruß

    Matthias

  8. #2968
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Oh Mann!!
    Da war es wieder... Wer sinnbegreifend lesen kann ist klar im Vorteil...

    "Clear_Timer" ist das Zauberwort.
    Steht (nicht dick und fett) in allen Hilfethemen von Bascom zu den Timern in der Parameterliste drin, ist aber nicht explizit erklärt, also hat's der gute Harry nicht mehr gesehen .
    Danke für das (ökologisch verträgliche) beiseite räumen des Waldes!!

    Was die Auflösung angeht stimme ich dir vorbehaltlos zu. Die Feinfühligkeit der Steuerung ist nicht so sehr das Problem, sondern die Onboard-Regelung muss so feinstufig wie möglich erfolgen, weil je kleiner, je kippeliger ist das Teil.

    Ach ja... Stoppen wollte ich den Timer, damit ich von den 40 µs weg komme. Mir erschien ein Wert in der Größenordnung von 3..4 ms sympatischer.

    Meine aktuelle Routine zur PWM-Erzeugung stellt 255 diskrete Werte für die vier ESCs zur Verfügung und durch Optimierung der Receiver-IRQ-Routine scheine ich es geschafft zu haben, die gegenseitigen Störungen zu eliminieren oder doch zumindest soweit verringert zu haben, dass es mir seit dem nicht mehr aufgefallen ist.
    Die Pause zwischen den Impulsen ist variabel und hängt direkt an den anderen drei Sollwerten, die Impulse werden reihum erzeugt.
    Vorlage war ein Servo-Beispiel aus www.mikrocontroller.net.
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  9. #2969
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Die Hilfe von Bascom könnte mal überarbeitet werden. Nicht jede Unterart von den Befehlen wir klar erklärt...
    Ich hatte auch erst daran gedacht die Servo Routine von Willa zu erweitern. So wie es Nils mit seiner Kammera anti wackel Halterung mal gemacht hat.
    Aber ich will die Hardware des Controllers so effizient wie möglich nutzen und so wenig wie möglich durch das Programm abarbeiten lassen.

    Mir ging grade ein Licht auf! Der Mega2560 hat vier 16Bit Timer. Jeder hat mindestens zwei Compare Pins. Bei 16 Bit könnte man mit einen Prescaler=8 eine Auflösung von 2000 Schritten erreichen mit der Clear_Timer Funktion.

  10. #2970
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Hey,

    das klingt ja alles super
    ich werde für den sNQ mal am wochenende die hardware-lösung testen... vllt heben sich ja die geringe auslösung durch die 490Hz wiederholrate auf!? denn unser programm läuft ja mit rund 400Hz wenn ich das noch richtig in erinnerung habe.

    gruß, sven
    Der miniatur Quadrocopter: www.nanoquad.de

Seite 297 von 355 ErsteErste ... 197247287295296297298299307347 ... LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress