- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 3542

Thema: Willas Shrediquette Tricopter / Quadrocopter / Hexacopter

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    @Jevermeister
    Versuche mal bei Bascom das Häckchen bei "optimize code" raus zu machen. Ich hatte damit mal Probleme das Interuppts nicht immer zuverlässig ausgelöst wurden. Das würde deine Verdoppelung erklären.

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

Name:	basscom.jpg
Hits:	18
Größe:	82,1 KB
ID:	19157

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393
    Hi,
    Danke für die Tipps
    @Jevermeister
    Versuche mal bei Bascom das Häckchen bei "optimize code" raus zu machen. Ich hatte damit mal Probleme das Interuppts nicht immer zuverlässig ausgelöst wurden. Das würde deine Verdoppelung erklären.
    Der Haken war schon immer raus, daran liegt es also nicht.

    Ich habe in einem anderen Thread gesagt bekommen, dass das timing des oscilloscopes nicht stimmt un daher diese verdoppelungen kommen.

    Ich habe jetzt diverse bauteile gewechselt aber der Servo zuckt immernoch obwohl er still stehen sollte. Heute nachmittag habe ich einen kurzen Testflug gemacht, es sit schond eutlich ruhiger, da ich nun neue motoren und so habe, aber man merkt definitiv das zittern im kamerabild. Das ist also was, was vorher nicht da war...
    Ich werde heute abend eine neue triguide fertig machen, ich hätte nur gerne gewusst was da kaputt war...

    @yak: ich hab die gleiche triguide wie du, und der widerstand ist ok

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Kann sein das ich es überlesen haben aber hast du schon mal versucht die Original FW von Willa wieder auszuspielen? Nur um zu Testen ob es wirklich an der Hardware liegt.
    Mfg

    Matthias

    Sorry habs eben gelesen, Willas FW haste schonmal aufgespielt
    Geändert von Picojetflyer (26.06.2011 um 19:03 Uhr) Grund: Hab nochmal gründlich nachgelesen.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.02.2011
    Beiträge
    183
    Hi Nils,
    dann drücke ich dir die Daumen, dass mit einer neuen Platine (triguide) wieder alles ok ist.

    Grüße Sven

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    Das mit den Signalverdoppelungen sieht verdächtig aus, und ich würde das nicht sofort aufs Oszi schieben. Vielleicht lohtn es sich den Code nochmal genauer anzuschauen. In der aktuellen Firmware wird das Servosignal mit dem Empfängersignal "synchronisiert".

    Im Empfänger IRQ steht:
    If Channel = 5 Then 'when all relevant channels were read, enable the servo interrupt
    Enable Timer1
    End If

    im servo IRQ steht:
    If Portd.6 = 0 Then
    Timer1 = Servopwm
    Portd.6 = 1
    Else
    Portd.6 = 0
    Disable Timer1
    Timer1 = 65400
    End If

    Du könntest also mal die disable/enable Zeilen rausnehmen, und im ServoIRQ den Wert für Timer1 auf 31535 setzen (=17ms pause). Vielleicht löst das dein problem.
    Außerdem könntest du mal versuchen das Servo abzuschrauben. Dein motor hat ne ziemlich hohe masse, dadurch könnte sich die Regelung innerhalb des Servos aufschwingen. Das ist bei günstigeren Servos relativ schnell mal der Fall.

    Danke auch für die Glückwünsche!
    Viele Grüße, William
    -> http://william.thielicke.org/

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von jevermeister
    Registriert seit
    20.01.2011
    Ort
    Kiel
    Beiträge
    393
    Hi,

    Das mit den Signalverdoppelungen sieht verdächtig aus, und ich würde das nicht sofort aufs Oszi schieben. Vielleicht lohtn es sich den Code nochmal genauer anzuschauen. In der aktuellen Firmware wird das Servosignal mit dem Empfängersignal "synchronisiert".

    Im Empfänger IRQ steht:
    If Channel = 5 Then 'when all relevant channels were read, enable the servo interrupt
    Enable Timer1
    End If

    im servo IRQ steht:
    If Portd.6 = 0 Then
    Timer1 = Servopwm
    Portd.6 = 1
    Else
    Portd.6 = 0
    Disable Timer1
    Timer1 = 65400
    End If

    Du könntest also mal die disable/enable Zeilen rausnehmen, und im ServoIRQ den Wert für Timer1 auf 31535 setzen (=17ms pause). Vielleicht löst das dein problem.
    Außerdem könntest du mal versuchen das Servo abzuschrauben. Dein motor hat ne ziemlich hohe masse, dadurch könnte sich die Regelung innerhalb des Servos aufschwingen. Das ist bei günstigeren Servos relativ schnell mal der Fall.

    Danke auch für die Glückwünsche!
    Ich habe das gleiche Problem bei einem Nackten servo der auf dem Tisch steht - der zappelt auch die ganze Zeit.

    Ich habe auch vermutet das irgendwas in der Software schief läuft, aber ich kann mir nicht erklären warum das auf einmal auffällt, ich hatte zwar das Failsave und die Signalglättung auf 6 Kanäle geändert aber auch ohne diese Sache geht es nicht, zumal das ja mit meiner 40MHz funke auch passiert. Das schließt ja aus, dass es am Code liegt, ich habe es schiesslich auch mit der Original Firmware geprüft.

    Der servo bewegt sich ja auch sehr hackelig, lediglich wenn er an die Grenzen fährt und die Min/Max Abfrage greift ist er ruhig, oder wenn du ihm ein konstantes Signal (wie zB im Idle Mode) gibst. Sobald er (auch ohne Motoren) in Hover oder Acro kommt zuckt er...

    Ich wollte heute mal eine Rampe zum rauf und runter fahren Probieren, wenn er da immer noch zittert dann ist das mal ne Aussage.
    Ausserdem werde ich noch einmal dein Servoprogramm aus dem RN Wissen ohne Funke probieren.

    Aber ich werde trotzdem eine neue Platine Löten und mir einen neuen Arduino bestellen.

    Ich vermute ganz stark einen Hardwaredefekt an der Platine oder dem Arduino - alles andere hab ich gewechselt oder das Problem ohne diese Komponenten auch gehabt.

    Und wenn der Mist dann endlich wieder fliegt, dann können wir hier auch wieder über was anderes Reden :-/

    Nils

    EDIT: Ich habe diese Disable Zeile garnicht mehr drin (seltsam). Das sieht bei mir so aus:
    Code:
    Servoirq:                                                   'generate servo PWM pulseIf Servo_nr_by = 0 Then
       If Portd.6 = 0 Then                                      'wenn port low
          Timer1 = Servopwm                                     'dann timer auf entsprechende verzögerung
          Portd.6 = 1                                           'und port anschalten
       Else                                                     'das hier passiert erst bei dem darauf folgenden interrupt
          Portd.6 = 0                                           'dann port wieder ausschalten
          Incr Servo_nr_by                                      'und den nächsten kanal bearbeiten
       End If
    End If
    If Servo_nr_by = 1 Then
       If Portb.2 = 0 Then
          Timer1 = Servo_roll_pwm
          Portb.2 = 1
       Else
          Portb.2 = 0
          Incr Servo_nr_by
       End If
    End If
    If Servo_nr_by = 2 Then
       If Portb.3 = 0 Then
          Timer1 = Servo_nick_pwm
          Portb.3 = 1
       Else
          Portb.3 = 0
          Incr Servo_nr_by
       End If
    End If
    
    
    If Servo_nr_by = 3 Then
      Timer1 = 40000                                            'eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
      Servo_nr_by = 0
    End If
    Geändert von jevermeister (27.06.2011 um 10:25 Uhr)

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Sehe ich das richtig das du den Timer wert für das Servo überschreibst???

    Code:
    Servoirq:                                                         'Interrupt wird ausgelöst soweit OK
    If Portd.6 = 0 Then                                           'Port ist Low OK
    Timer1 = Servopwm                                         'Timervorwahl laden OK
    Portd.6 = 1                                                      'Port High Setzen auch OK
    
    In der Ersten Interrupt Runde wird nix weiter gemacht, Alles was folgt wird übersprungen weil die Bedingungen noch nicht verfüllt sind.
    Timerinterrupt läuft das erste mal über und hier gehts dann weiter.
    
    Else                                                                'Else bedingung wird erfüllt 
    Portd.6 = 0                                                      'Servo Port wird auf Low gezogen
    Incr Servo_nr_by                                              'Zähler Variable wird hochgezählt (ist jetzt 1)
    End If
    End If
    If Servo_nr_by = 1 Then                                  'Zähler Variable ist jetzt 1 und der Zweite Servoport wird auf High-Pegel gezogen.
    If Portb.2 = 0 Then
    Timer1 = Servo_roll_pwm                               ' Timer1 wird mit der Vorwahl für Portb.2 geladen.
    Portb.2 = 1
    
    'Timer läuft wieder über, Interrupt wird ausgelöst.
    
    Servoirq: 
    If Portd.6 = 0 Then                                          'Port ist wieder 0 also 
    Timer1 = Servopwm                                        'Timer laden 
    Portd.6 = 1                                                      'port auf 1 Setzen 
    Else                                                                'Else wird nicht erfüllt also überspringen 
    Portd.6 = 0 
    Incr Servo_nr_by 
    End If
    End If                                                             'Wofür ist eigendlich das zweite Endif??
    If Servo_nr_by = 1 Then                                  'hier gehts dann weiter
    If Portb.2 = 0 Then                                          'Port ist noch 1 also überspringen bis Else
    Timer1 = Servo_roll_pwm
    Portb.2 = 1
    Else 
    Portb.2 = 0                                                     'Port wird auf 0 gesetzt
    Incr Servo_nr_by                                            'Servozähler hochsetzen ist jetzt 2
    End If
    End If
    If Servo_nr_by = 2 Then                                  'Servozähler passt also weiter machen
    If Portb.3 = 0 Then                                          ' Port ist 0 also weiter
    Timer1 = Servo_nick_pwm                               'Da ist der Bock! Timer 1 wird überschrieben!! Wurde vorher mit Timerwert für Steuerservo gefüllt. 
    Portb.3 = 1
    Else
    Portb.3 = 0
    Incr Servo_nr_by
    End If
    End If
    Kann mich da ein Bascom Profi bestätigen??

    Mfg

    Matthias
    Geändert von Picojetflyer (27.06.2011 um 13:41 Uhr)

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test