Motorgeräusch stört I2C

Ich habe mit dem Arduino Due einen Roboter gebaut, bei dem alle Sensoren mit 5 V über I2C laufen. Auf beiden I2C-Leitungen gibt es einen Level-Shifter. Die Motoren werden mit einem VNH5019-Motortreiberträger von Polulu (der PWM-Eingang nimmt) gesteuert. Die Motordrehzahl und -richtung ändert sich in dieser speziellen Anwendung schnell.

Wenn die Motoren nicht laufen, ist alles in Ordnung und die Messwerte sind in Ordnung. Wenn der gesamte Roboter mit den Motoren auf dem Boden läuft, läuft er etwa 30 Sekunden bis eine Minute lang gut, bevor der I2C-Bus vollständig aufhört zu reagieren. Alle Geräte beginnen auf dem I2C-Bus eine Zeitüberschreitung und der Roboter beginnt infolgedessen katastrophal falsch zu verhalten. Der Arduino muss zurückgesetzt werden. Nach einem Reset dauert es tendenziell weniger Zeit, um durchzudrehen.

Ich habe die Motoren mit den Rädern vom Boden laufen lassen und eine deutlich bessere Laufzeit erzielt, daher vermute ich stark, dass dies etwas mit dem Strom zu tun hat, der von den Motoren gezogen wird. Die Motoren sind vom Arduino und der benutzerdefinierten Leiterplatte, die ich zum Leiten der I2C-Signale verwende, durch zwei Schichten Metallplatten getrennt (vermutlich bietet dies eine gewisse Abschirmung). Ich habe 0,1-uF-Keramikkondensatoren über den Motorklemmen und einen 220-uF-Kondensator an der Stromversorgung des Arduino installiert.

Ich habe auch zusätzliche Klimmzüge vor und nach dem Level Shifter platziert, aber nichts davon scheint das Problem zu lösen.

Ich bin derzeit völlig ratlos, was ich sonst noch tun könnte, um das Motorgeräusch zu stoppen.

Bearbeiten: Einige Schaltpläne (für das, was es wert ist)Stromkreis

Diese Schaltung sendet Signale an die Motoren und versorgt die Motortreiber mit Strom. Vin und GND sind nicht wirklich mit dem Arduino verbunden. Auf den beiden Lagen der Leiterplatte befinden sich Kupfergüsse für GND und 12 V, um den Strom zu unterstützen.

Sensorschaltung

Diese Schaltung verbindet den I2C-Bus des Arduino mit den verschiedenen Komponenten. Es gibt einen Spannungspegelumsetzer von 3V3 auf 5V (LS1 und LS2). Die Transistoren werden nicht verwendet.

Könnten Sie einige grafische Materialien veröffentlichen, z. B. einen Schaltplan mit dem Tool im Forum zeichnen oder Bilder posten. Bitte geben Sie einige Informationen darüber an, wie verschiedene Dinge gruppiert oder verbunden sind. Wenn alles in Ordnung ist, sollte es gut funktionieren, aber es könnte irgendwo einen kleinen Fehler geben. Auch 100 nF über einem Motor, der einen Roboter bewegt, werden überhaupt nicht viel bewirken, viel zu wenig Energie kann darin gespeichert werden, um einen Unterschied zu machen.
Auch wenn es ein kleiner 12V Motor mit 2A Stillstandsstrom ist?
Es handelt sich um ein Erdungs-/0-V-Problem, das durch möglicherweise schlechtes Routing des IIC-Busses verschlimmert wird. Der Motorkondensator ist ein Ablenkungsmanöver - wenn Sie PWM zur Steuerung des Motors verwenden, besteht die Wahrscheinlichkeit, dass der Controller durch Erhöhen der Kapazität zerstört wird.
Wenn Sie ein Oszilloskop haben, können Sie Screenshots des I2C-Busses an beiden Enden posten, wenn er am Boden läuft?
@Andyaka Das Routing des I2C-Busses und der Motorleistung erfolgt über separate Leiterplatten. 0V des Controllers und der Motoren werden nur am Batteriepol angeschlossen. Der Motor wird über einen geeigneten Motortreiber gesteuert, der PWM als Eingang verwendet. Das Arduino und alle Sensoren sind alle noch eingeschaltet und die Sensoren über die serielle Schnittstelle funktionieren weiterhin. Normalerweise reagiert nur einer der i2c-Busse vollständig.
@Techydude Entschuldigung, ich mache das als Projekt in der High School und wir haben kein Oszilloskop.
@DrCoconut Selbst ohne Oszilloskop-Diagramme können einige Leute hier einige vernünftige Vermutungen anstellen, aber ohne echte Grafiken ist es viel schwieriger, weiterzumachen. Nur ein "Dies, dies und dies und alles ist so verbunden" ist viel weniger Information, als derselbe Satz mit jeder Art von Schaltplan oder Zeichnung geben würde. Wir können keine Masseschleifen oder Rauschrückkopplungen sehen, die Sie möglicherweise übersehen haben, wenn es nichts zu sehen gibt.
„Es läuft ungefähr 30 Sekunden bis eine Minute lang gut, bevor der I2C-Bus vollständig aufhört zu reagieren. Alle Geräte beginnen auf dem I2C-Bus eine Zeitüberschreitung und der Roboter beginnt infolgedessen katastrophal falsch zu verhalten. Der Arduino muss zurückgesetzt werden. Nach einem Reset , es dauert tendenziell weniger Zeit, um zum Berserker zu werden." Welche Kühlung hast du bei den Switches? Wie nah sind diese Schalter an einem I2C-Master?
Ich habe im Moment ein sehr ähnliches Problem bei mir. Hast du eine Lösung für dich gefunden?

Antworten (1)

EMI-Probleme treten bei solchen Konstruktionen häufig auf, und dafür gibt es kein allgemeingültiges Medikament. Eine Sache, die getan werden muss, ist die Erdungstrennung - schließen Sie sie nur in der Nähe der Stromversorgung an. Eine weitere – bestmögliche Filterung der Motorantriebsversorgung. Jede Masche mit hohem Strom, einschließlich der Gate-Ansteuerschaltung, muss so kurz wie möglich sein. Vielleicht helfen Widerstände an Gates. Bringen Sie den Ferritring am Motorkabel in der Nähe des Treibers an. Verwenden Sie Puffer für i2c. Viel Glück!