Liste der Anhänge anzeigen (Anzahl: 1)
DC-Motoren stören MPU 6050
Hey,
ich arbeite gerade an einem Roboter, der sich anhand eines
MPU 6050 orientieren kann. Mein Ziel ist es, beispielsweise den Roboter
ein "perfektes" Viereck fahren zu lassen. Sprich ich sage dem Roboter,
um wie viel Grad er sich drehen soll und lasse ihn dann geradeaus fahren.
Ich konnte bisher einen vernünftigen Winkel mithilfe des MPU 6050 ermitteln.
Wenn ich das gyro/accel Modul um 180 Grad drehe, zeigt mir die Ausgabe auch
tatsächlich an, dass ich das Modul um 180 Grad gedreht habe.
Nun zum Problem:
Wenn ich das MPU-Modul mit dem Roboter verbinde, um ihn dann z.B. in einem Viereck
fahren zu lassen, verändert sich der Wert des Grades. Wo vorher z.B. noch 180 Grad war, ist wenig später
200 Grad. Der Yaw-Wert variiert.
Dies geschieht wenn ich die Motoren arbeiten lasse. Wenn ich die Leistung der Motoren verringere,
kann ich den ungewünschten Effekt verkleinern (Jedoch nicht ausreichend).
Ich bin im Internet auf diesen Link gestoßen:
https://www.pololu.com/docs/0J15/9
Dort wird erklärt, dass ich zwischen dem Stromkabel und dem DC-Motor
einen Kondensator setzen soll. Dieser soll wohl die Störungen, die sich
vom Motor auf die Sensoren auswirken, vermeiden.
Bevor ich mir jetzt diese Kondensatoren zulege, möchte ich mich von erfahrenen
Leuten vergewissern lassen, dass diese Methode eine ernsthafte Lösung für mein Problem darstellt.
Ich brauche also lediglich 0.1 µF Kondensatoren, zwischen Kabel und DC-Motor Kontakt setzen
und die Störungen werden beseitigt?
Ein weiterer Punkt ist, das MPU Modul so weit weg wie möglich von den Strom
versorgenden Kabeln zu setzen. Dies habe ich getan, aber konnte keine Verbesserung bemerken
Denke, dass das weit genug ist, oder?:
Anhang 33803
Ich freue mich über jede Antwort, die mir weiterhilft!
Liste der Anhänge anzeigen (Anzahl: 2)
Ich verwende einen Arduino/Genuino Uno.
Ich benutze diese Library
https://github.com/jrowberg/i2cdevli...6050/MPU6050.h
Und hier sind die Schaltbilder
Anhang 33804
Anhang 33805
Liste der Anhänge anzeigen (Anzahl: 1)
Wow danke für die ganzen Antworte, das weiss ich echt zu schätzen!
Neue Bibliothek:
Habe ich zum Laufen bekommen. Lag übrigens tatsächlich daran, dass ich i2cdev in libraries aktualisieren musste, danke dafür!
Leider hat sich hierbei nichts verändert.
Mechanische Entkopplung:
Ich kann den MPU nicht auf ein Pad kleben, da ich das Breadboard zur Fixierung des MPUs brauche.
Ich habe stattdessen das Breadboard auf Pattafix "Stelzen" geklebt. Das Breadboard steht auf 4 Pattafixe (Mehrzahl?)
auf dem Roboter. Ich denke, dass das eine Art mechanische Entkopplung darstellt. Davon abgesehen, glaube ich nicht,
dass Vibration oder ähnliches der Grund für mein Problem ist. Wenn ich den Yaw Wert messe und mit dem Finger auf den
Roboter klopfe, verändert sich der Wert nicht großartig (Nur im Nachkommabereich etwas).
Motorkabel verdrillen:
Habe ich getan. Leider auch keine Verbesserung meines Problems. Ich hatte auch allerdings nicht
viel Spiel, die Kabel zu verdrillen, da sie zu kurz sind. Reicht das so?
Anhang 33806
Magnetometer:
Ich bin im Bezug auf Magnetometer der gleichen Meinung wie HaWe. Ich habe schon vorher
etliche Versuche unternommen einen Magnetometer für mein Problem zu nutzen. Das war allerdings
viel schlechter, da ich den Magnetometer nicht anständig kalibrieren kann. Ich habe bestenfalls eine
Abweichung von 5° hinbekommen, was noch zu viel ist. Wie HaWe schon sagt, ist dieser viel anfälliger
gegenüber den Motoren. Die Kombi aus Gyro und Accel scheint dagegen gegen Magnetfelder immun zu sein.
(Kein Veränderung wenn ich mein Handy bspweise in Nähe halte, ganz im Gegensatz zum Magnetometer).
Ich habe jetzt auch nochmal genauer untersucht, wann das Problem auftretet:
Ich habe ein Script geschrieben, das den Roboter in Endlosschleife eine Gerade hin und zurückfährt.
Fahre gerade, drehe um 180°, fahre gerade, drehe um 180°, usw.
Daran konnte ich sehen, wann der Roboter seinen Kurs plötzlich ändert, bzw. wann die 180° sich verschieben.
Ich muss den Roboter am USB Kabel angeschlossen haben, da die Batterien scheinbar zur Neige gehen.
Wenn der Roboter auf dem Boden fährt und das Kabel (was leider etwas kurz ist) den Roboter nicht behindert,
tretet das Problem nicht auf. Halte ich den Roboter in der Luft und drehe ihn von Hand, tretet das Problem auch nicht auf,
also der Winkel verschiebt sich nicht.
Wenn der Roboter allerdings auf dem Boden fährt und das Kabel ihn aufgrund der Länge behindert (Die Räder drehen durch) tretet das Problem auf.
Auch wenn ich den Roboter in der Luft halte und dabei die Räder mit Hand etwas blockiere, tretet das Problem auf.
Hierbei erschließe ich mir, dass durch das blockieren der Räder, die Spannungsversorgung des MPUs geschwächt bzw. verändert wird,
da die Motoren mehr Spannung für sich beanspruchen. Ich kenne die genaue Funktionsweise des MPU 6050 nicht, aber es erscheint mir logisch,dass die Werte sich bei veränderter Spannungsversorgung mitändern.
Ein weiteres Argument für meine These ist, dass Arduino bzw. MPU und Motoren sich eine Stromquelle teilen.
In Anbetracht dieser Aspekte fällt mir noch der Kondensator ein, oder 2 seperate Stromquellen für den Arduino
und den Motor Controller. Vlt wirken sich Spannungsveränderungen dann nicht auf das MPU aus. Der Arduino
ist lediglich über Signalkabel mit dem Motorcontroller verbunden.
Die Kondensatoren habe ich eh schon bestellt und ich werde sie ausprobieren sobald sie da sind. Was haltet ihr von
meinem Lösungsansatz?
Liste der Anhänge anzeigen (Anzahl: 1)
Mir ist ein Punkt aufgefallen, das deutlich unterschiedliche Verhalten bei 6x1,2V und 4x1,2V.
Der L298N benötigt eine Versorgungsspannung an pin 4 von V IH+2,5V mit V IH min = 2,3V.
Das wird mit vier realen Akkus im Betrieb sicher etwas knapp.
Ich bin nicht sicher ob es daran liegt, aber es ist wohl ein kritischer Punkt.
Datenblatt: Anhang 33809