# ══════════════════════════════════════════════════════════════ # BETAFLIGHT 2025.12 CLI-SKRIPT v5.0 — BASIEREND AUF ECHTER TELEMETRIE # Flywoo Flylens 75 HD O4 2S — GOKU F405 BGA · ROBO 1003 (~1960KV) # TBS Crossfire Empfänger · DJI O4 Air Unit # Stand: Juni 2026 # Datenquelle: 5 echte Chirp-Testflüge, CSV-Export via Blackbox Explorer # (blackbox.betaflight.com), FFT-Analyse von Gyro/D-Term, Tracking-Error # ══════════════════════════════════════════════════════════════ # # METHODISCHER HINWEIS: Dies ist die erste Version dieses Projekts, die # auf echter Zeitreihen-Telemetrie basiert (nicht nur Konfigurationsdaten # wie v4.0). Die 5 analysierten Flüge waren Chirp-Tuning-Tests (debug_mode # =50, >84% der Flugzeit aktiv) — das erklärt zeitweise hohe Tracking- # Error-Werte, die NICHT als generelles PID-Problem zu werten sind, # sondern als beabsichtigte Testanregung. # # KONKRETE BEFUNDE AUS DER FFT-ANALYSE (alle 5 Flüge, ~96s Gesamtflugzeit): # # 1. Effektive Sample-Rate nur ~1969Hz statt möglicher 8000Hz # (durch pid_process_denom=2 - bereits in v4.0 als Problem erkannt, # jetzt durch echte Zeitstempel-Differenzen im Log bestätigt) # # 2. Gyro-Rauschpeak bei ~530Hz auf allen 3 Achsen (Roll/Pitch/Yaw # nahezu identisch), klar isoliert und WEIT oberhalb des Chirp- # Testfrequenzbereichs (Chirp deckte nur bis 60Hz ab) - das ist # also ein echtes, vom Test unabhängiges Rauschphänomen, nicht nur # eine Folge des Chirp-Sweeps. Der eingestellte gyro_lpf2_static_hz # =500 liegt knapp UNTER diesem Peak und dämpft ihn nur teilweise. # # 3. D-Term zeigt breitbandig erhöhte Aktivität im Bereich 0-120Hz - # das deckt sich mit dem Chirp-Testfrequenzbereich (bis 60Hz) und # ist daher KEIN eigenständiges Filterproblem, sondern die erwartete # Reaktion auf das Testsignal selbst. Keine Filter-Änderung am # D-Term wird allein deshalb empfohlen. # # 4. Yaw-Achse durchgängig am schwächsten gefiltert (nur 1-8% Rausch- # reduktion durch Filter, gegenüber bis 76% auf Roll/Pitch in # einzelnen Flügen) # # 5. Motor-Sättigung gering (<5% in den meisten Flügen) - kein Hinweis # auf grundsätzlich zu aggressive PID-Werte bezogen auf Motor-Headroom # # WICHTIG VOR DEM EINSPIELEN: Dieses Skript baut auf v4.0 auf und fügt # gezielt die durch echte Telemetrie begründeten Filter-Anpassungen hinzu. # # ══════════════════════════════════════════════════════════════ # 1. PID-LOOP-GESCHWINDIGKEIT (Befund 1) # ══════════════════════════════════════════════════════════════ # Bestätigt durch echte Zeitstempel-Analyse: effektiv nur ~2kHz statt # der möglichen 8kHz. Volle Geschwindigkeit aktivieren. set pid_process_denom = 1 set gyro_sync_denom = 1 # ══════════════════════════════════════════════════════════════ # 2. GYRO-FILTER-KORREKTUR (Befund 2: 530Hz-Rauschpeak) # ══════════════════════════════════════════════════════════════ # gyro_lpf2_static_hz war 500 - der gemessene Rauschpeak liegt bei ~530Hz # und wird dadurch nur teilweise gedämpft. Senken auf 450Hz, um den Peak # sicher unterhalb der Filtergrenze zu bringen, ohne zu aggressiv zu # filtern (PT2-Filter dämpfen bereits deutlich vor der Grenzfrequenz). set gyro_lpf2_static_hz = 450 set gyro_lpf2_type = PT2 # gyro_lpf1 war komplett deaktiviert (static_hz=0, dyn_hz=0/0) - das # überlässt die gesamte Filterung dem simplified_gyro_filter-System. # Da der 530Hz-Peak auf allen 3 Achsen gleich auftritt (vermutlich # Rahmen-Resonanz statt reines Motorrauschen), hilft ein aktiver LPF1 # zusätzlich zum RPM-Filter: set gyro_lpf1_type = PT1 set gyro_lpf1_static_hz = 200 set gyro_lpf1_dyn_min_hz = 200 set gyro_lpf1_dyn_max_hz = 450 # ══════════════════════════════════════════════════════════════ # 3. D-TERM-FILTER — UNVERÄNDERT (Befund 3: kein eigenständiges Problem) # ══════════════════════════════════════════════════════════════ # # Die erhöhte D-Term-Aktivität im Bereich 0-120Hz deckt sich mit dem # Chirp-Testfrequenzbereich selbst (bis 60Hz) und ist daher die erwartete # Reaktion auf das Testsignal, kein eigenständiges Filterproblem. Die # bestehenden D-Term-Filterwerte werden NICHT verändert: # dterm_lpf1_dyn_min_hz=85, dterm_lpf1_dyn_max_hz=150 (unverändert) # dterm_lpf1_static_hz=105, dterm_lpf2_static_hz=150 (unverändert) # ══════════════════════════════════════════════════════════════ # 4. YAW-FILTERUNG VERSTÄRKEN (Befund 4: schwächste Filterung aller Achsen) # ══════════════════════════════════════════════════════════════ # yaw_lpf_hz war nicht explizit im Header sichtbar (Standardwert # vermutlich ~100). Da Yaw in allen 5 Flügen die schwächste Rausch- # reduktion zeigte, gezielt etwas stärker filtern: set yaw_lpf_hz = 90 # ══════════════════════════════════════════════════════════════ # 5. PID-WERTE — UNVERÄNDERT ZU v4.0 (bereits korrigiert) # ══════════════════════════════════════════════════════════════ # # Die Telemetrie zeigt KEINEN Hinweis auf grundsätzlich falsche P/D- # Verhältnisse (Motor-Sättigung gering, keine extremen Oszillations- # Muster außerhalb der erwarteten Chirp-Antwort erkennbar). Die in # v4.0 bereits reduzierten Werte bleiben unverändert: set p_pitch = 40 set i_pitch = 70 set d_pitch = 30 set f_pitch = 70 set p_roll = 38 set i_roll = 68 set d_roll = 27 set f_roll = 65 set p_yaw = 38 set i_yaw = 68 set d_yaw = 0 set f_yaw = 60 set d_max_gain = 30 set feedforward_smooth_factor = 35 set feedforward_boost = 12 set anti_gravity_gain = 80 set iterm_relax = RP set iterm_relax_type = SETPOINT set iterm_relax_cutoff = 15 # ══════════════════════════════════════════════════════════════ # 6. DYNAMIC IDLE & GRUNDKONFIGURATION (unverändert zu v4.0) # ══════════════════════════════════════════════════════════════ set dyn_idle_min_rpm = 30 set crsf_use_negotiated_baud = ON set dshot_bidir = ON set motor_poles = 12 set rpm_filter_harmonics = 3 set rpm_filter_q = 450 set tpa_rate = 65 set tpa_breakpoint = 1350 save # ══════════════════════════════════════════════════════════════ # EMPFOHLENER NÄCHSTER SCHRITT # # Nach Einspielen dieser Filter-Korrekturen erneut einen Chirp-Test # fliegen und per Blackbox Explorer als CSV exportieren. Insbesondere # prüfen: # - Ist der 530Hz-Gyro-Peak jetzt schwächer? (FFT der gyroADC-Spalten) # - Ist der 101Hz-D-Term-Peak jetzt schwächer? # - Hat sich die Rauschreduktion auf der Yaw-Achse verbessert? # # Falls die Motoren nach dem Update wärmer werden als vorher: LPF-Werte # (gyro_lpf1, dterm_lpf1) leicht erhöhen, da zu starke Filterung Phasen- # verzögerung erzeugt, die der PID-Regler durch mehr Gegensteuern # kompensieren muss (mehr Motorarbeit = mehr Wärme). # ══════════════════════════════════════════════════════════════