W nowym wątku, bo trochę się rozjaśnia. A może przyda się potomnym.
Jeszcze nie przetestowałem, ale idea zasugerowana na jednym z forum wydaje się być słuszna.
Całość sprowadza się do zmiennych gyro_sync (domyślnie on) gyro_sync_denom (domyślnie 1) które oznaczają synchronizację pętli PID z odczytami żyroskopu w stosunku 1:1
I moim zdaniem wprowadzającej opisem zamieszanie looptime (domyślnie 3500us/285Hz) z której opisu wynikało by, że jeśli cykl jest szybszy to procesor po prostu czeka resztę czasu..
looptime - This is the main loop time (in us). Changing this affects PID effect with some PID controllers (see PID section for details). Default of 3500us/285Hz should work for everyone. Setting it to zero does not limit loop time, so it will go as fast as possible.
Gyro na naze pracuje z częstotliwością 1kHz (co odpowiada cyklowi pętli na poziomie 1000), włączona synchronizacja powoduje, że pętla próbuje się zgrać z żyroskopem (rozumiem to jako jeśli jest szybsza, to poczekaj na dane z gyro).
Zaraz zaraz (dlatego tu powstało moje zamieszanie), jeśli pętla (looptime) jest ustawiona na te powiedzmy 2500 (w przypadku szybkich esc na 400Hz) to jakim cudem synchronizuje się z 1kHz żyroskopem???
Ale tak jest, jeśli cycletime wyjdzie powyżej 1000 (co się dzieje np po włączeniu GPS'a na płytkach z prockiem F1) głupieje synchronizacja gyro - pętla i FC nie chce się uzbroić. Czasami mu się uda, ale tylko czasami i na chwilę. Dlatego są takie objawy. Gyro się kalibruje, ale pętla nie ma synchronizacji.
Albo ktoś tu pisze bajki, albo ja czegoś nie rozumiem.
Wniosek jest taki, że looptime to nie całkowity czas pętli - a częstotliwość wysyłania danych do ESC. Pętla robi swoje z częstotliwością gyro (1kHz/1000), a dane są wysyłane do ESC z częstotliwością pętli (looptime).
Ha ha a jak się teraz do tego wszystkiego ma motor_pwm_rate
A jeśli rzeczywiście pętla działa nam z czasem 2500... to cała synchronizacja dziwnie działa, bo dalej mamy ~1/3 danych z żyroskopu..
Rozwiązanie
Jeśli cycletime jest powyżej 1000, to:
a) albo ustawiamy rate 1:2 (synchronizuj co drugi cykl gyro) co oznacza utratę połowy odczytów żyroskopu) - zalecane rozwiązanie,
b) albo zakładamy płytkę z prockiem co najmniej F3, który dzięki kooprocesorowi znacznie skraca czas pozostałych zadań, lub F4 które są jeszcze znacznie szybsze
c) wyłączamy inne bardziej lub mniej potrzebne rzeczy (np akcelerometry),
b) albo wyłączamy synchronizację,
No właśnie co do całej synchronizacji.
Jaki ma ona wpływ na algortym PID. I co ewentualnie może być bardziej korzystne.
1) Synchronizacjia co 2 odczyt i utrata połowy danych żyroskopu.
2) Brak synchronizacji i pętla możliwe najszybsza. W moim przypadku teraz ~1200, co oznaczało by utratę tylko ok 1 z 5 odczytów żyroskopu.
MacGyverek
Sprawdź sobie jaki masz cycle time i czy masz włączoną synchronizację gyro i na jakich parametrach.