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)
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.
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.
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!
Asmyldof
Dr Kokosnuss
Andi aka
Techniker
Dr Kokosnuss
Dr Kokosnuss
Asmyldof
Benutzer16222
Zweifel