Liste der Anhänge anzeigen (Anzahl: 1)
Morgen!
Ich habe wieder ein Problem.
Der Copter ist jetzt Hardwaremäßig fertig, Funk funktioniert auch fehlerfrei, genauso wie die Datenfusion von Gyroskop und Beschleunigungssensor.
Ansteuerung der Motoren läuft auch.
Minimalgas bei 780µS und Maximum bei 1780µS.
Ich habe erstmal eine einfache P-Reglung geschrieben.
Jetzt habe ich das Problem, dass wenn ich die Motoren Ausgeschaltet habe und das Signal an einem der Motoren messe, verhält es sich richtig.
Ist der Copter zu weit nach hinten geneigt wird das Signal länger, ist er nach vorne geneigt kürzer.
Problem ist jetzt, wenn ich die Motoren einschalte und sie Laufen, dann funktioniert es kurz, aber irgendwann bleibt das Signal beim Maximalwert (1780µS) hängen und schwankt nur noch leicht.
Woran kann das liegen?
Ich vermute eine Störung des MPU-6000 (Gyro + ACC) durch die Motoren.
Der MPU-6000 befindet sich unter der Hauptplatine und ist mit einer etwa 10cm langen Flachbandleitung angeschlossen. (Oben Mittig im Bild zu sehen, zwischen Xbee und Spannungsregler)
Könnte es sinn machen, eine Abgeschirmte Leitung zu verwenden?
Ich hätte nur 2 Adrige Leitung da (1Ader + Abschirmung), würde es funktionieren, den Sensor mit insgesamt 5 Leitungen anzuschließen? (SCK, MISO, MOSI, CS, VCC und Masse als Abschirmung)?
Oder Kann es vielleicht noch an etwas ganz anderem liegen?
mfg
Olaf
Liste der Anhänge anzeigen (Anzahl: 3)
Hi!
Zu viele Punkte gibts nicht, ich bin dankbar für jeden einzelnen. :D
Die 5Hz waren nur zum testen, ob es das Verhalten des Beschleunigungssensors verbessert, ursprünglich hatte ich auch die 44Hz genommen (Wie in deinem Programm vom Anfang).
Die Idee, die Berechnung in einem festen Zeitintervall erfolgen zu lassen ist gut, lasse ich dann einfach per Interrupt steuern.
Ich musste schon feststellen, dass die Berechnung etwas Langsam ist, das Programm schafft nur etwa 1000 Durchläufe pro Sekunde, da sollte noch mehr möglich sein.
Sobald die groben Fehler beseitigt sind werde ich mal darauf umstellen, danke!
Zu den Rundungsfehlern.
Ich denke, dass ein 16bit int genau genug ist, dafür habe ich ja alles auf Werte von 0 bis 2^16 skaliert, damit ich nicht den höheren Rechenaufwand von float in kauf nehmen muss.
Oder irre ich mich?
Zitat:
- Hin und wieder ein Type-cast würde nicht schaden, schützt vor üblen Überraschungen :wink:
Du meinst, dass ich jeweils explizit auf signed oder unsigned casten soll?
Zitat:
- Wenn du den Timer TE1 verwendest, addressierst du immer CNTL & CNTH. Wieso nimmst du nicht einfach CNT (u16)?
Ich wusste bisher einfach nicht, dass diese Möglichkeit besteht und war es so gewohnt, aber wenn das geht werde ich es ab jetzt so machen.
Ich bin dem Problem jetzt etwas näher gekommen.
Ich habe mir mal die Werte, die das Gyroskop ausgibt über UART ausgeben lassen und grafisch dargestellt.
Dabei haben sich die Y und Z Achse so verhalten, wie ich es erwartet habe.
Der Wert bleibt bei Ausgeschalteten Motoren stabil, reagiert auf Lageänderungen und Erschütterungen, wie er soll.
Wenn ich die Motoren Einschalte schwingt der Wert um den eigentlich richtigen Wert (z.B. 0).
Wenn ich das Gleiche auf der X Achse mache, dann verhält es sich ohne Motoren normal und reagiert auf Lageänderungen und Erschütterungen.
Wenn ich aber die Motoren einschalte ist der Ausgangswert ungewöhnlich stark gestört.
Und vor allem Schwingt er nicht um 0, sondern darunter.
Ich habe die Bilder in den Anhang gesteckt, damit man sieht, was ich meine.
Ich verstehe nicht, wie das sein kann.
Die Y Beschleunigung wird auf die gleiche Weise ausgelesen, wie der X und die Z Beschleunigung.
Woher kann es kommen, dass nur die X Beschleunigung fehlerhaft ist?
@Chris: Gibt es eigentlich Videos oder sonstige Doku zu deinem Copter?
Würde mich mal interessieren, wie der sich so verhält. :)
mfg
Olaf