Die serielle Arduino-Kommunikation schlägt fehl, wenn ein von PWM gesteuerter Gleichstrommotor blockiert/geladen wird

Ich verwende die folgende Schaltung (von http://luckylarry.co.uk/arduino-projects/arduino-control-a-dc-motor-with-potentiometer-and-multiple-power-supplies/ ), um die Geschwindigkeit zu steuern eines 6-V-Gleichstrommotors, der von einer separaten Stromversorgung gespeist wird:

Geben Sie hier die Bildbeschreibung ein

Wenn ich den Motor stark belaste oder abwürge, schlägt die serielle Kommunikation zwischen meinem Arduino Uno und meinem PC (über USB) fehl. Es kommen keine Daten mehr und ich muss das Uno trennen, die IDE schließen, das Uno wieder verbinden und dann die IDE starten, um die Verbindung wieder herzustellen.

Ich bin mir nicht sicher, ob dies ein Erdungsproblem ist (ich habe darauf geachtet, dass alle Erdungen auf dieselbe Schiene gehen), ein Lastproblem (obwohl der Uno und der Motor separate Stromversorgungen haben) oder ein Gegen-EMK-Problem.

Jede Hilfe wäre willkommen.

Danke,

-Rauben

Sind die Versorgungen komplett getrennt, mit zwei Netzanschlüssen?

Antworten (4)

Ich denke, das Problem ist das lötfreie Steckbrett. Die Motoranschlüsse nehmen viel Strom auf, was für die Federkontakte im Steckbrett ungeeignet ist, und führen über die gemeinsame Masse Rauschen in die Arduino-Versorgung ein, wenn der Motor blockiert. Der Motor könnte unter hoher Last oder Blockierzustand etwa 1 A aufnehmen, und diese lötfreien Steckbretter sind nur für wenige mA, IIRC, ausgelegt. Verdrahten Sie die Schaltung richtig auf einer Leiterplatte oder einer Prototyping-Platine mit einer Einpunkterdung, und Ihr Problem wird wahrscheinlich verschwinden. Oder vermeiden Sie es, den Motor abzuwürgen und ihn einer schweren Belastung auszusetzen.

Sie können den Motorstrom mit einem Messwiderstand und einem ADC-Eingang am Arduino überwachen, den Antrieb ausschalten, wenn der Strom zu hoch wird, und eine LED aufleuchten lassen, um einen Fehlerzustand anzuzeigen.

Es scheint, als ob es sich um eine Art Bodenproblem handeln könnte. Welche Netzteile hast du und wie sind sie angeschlossen? Hast du die Schaltung auf einem Steckbrett wie auf dem Bild im Link gemacht?

Wenn Sie den Motor stark belasten oder blockieren, fließt ein erheblicher Strom. Angenommen, Sie haben es wie auf dem Bild gebaut, könnte ein großer Strom in Ihrer Motorstromrückleitung dazu führen, dass die (-) Schiene auf dem Steckbrett hochfährt. Wenn der Motor-PS auf die Masse des PCs zurückreferenziert wird (Vorsicht vor dem 'Schleichweg'!), könnte dies dazu führen, dass die scheinbaren Spannungspegel an der USB-Schnittstelle außerhalb der Spezifikation liegen. Sie könnten sogar eine Art Latch-up-Effekt bekommen, der eine Unterbrechung der Stromversorgung erfordern würde.

Wenn Ihr Motor PS keine Batterie ist, sollten Sie versuchen, eine Batterie zu verwenden, und sehen, ob der Zustand weiterhin besteht.

Danke für deine Antwort. Ich habe auch ein Erdungsproblem vermutet, war mir aber nicht sicher. Ihre Idee, dass die (-) Steckbrettschiene hochfährt, ist sinnvoll. Alle Gründe in meiner Schaltung befinden sich auf derselben Steckbrett-Buslinie. Obwohl der Motor PS ein Akkupack ist, wird die (-) Leitung davon an der Erdungsschiene auf dem Steckbrett befestigt, zusammen mit dem Erdungsstift des Arduino und dem Erdungsstift des Topfes. Vielleicht hilft das Abschneiden des Stromkabels im USB-Kabel? Wenn es sich um ein Erdungsproblem handelt, wie kann ich es sonst erden, wenn ich sowohl extern gespeiste Motoren als auch USB-Kommunikation benötige?
Wenn Ihr Motor PS bereits eine Batterie war, ist meine Theorie wahrscheinlich Toast. Es sei denn, Sie hatten ein anderes Kabel von der Batterie (-) zum Arduino. Wenn die einzige Verbindung zur Batterie (-) über das Steckbrett erfolgt, spielt es keine Rolle, ob die Batterie (-) etwas negativer ist als die Masse des Steckbretts.

Ich fügte einen 0,1-µF-Kondensator über die Leitungen des Motors und einen 470-µF-Kondensator über die Strom- und Erdungsschienen auf dem Steckbrett, direkt neben dem Einführpunkt der Erdungsleitung des Uno, hinzu. Ich verliere nicht mehr die serielle Kommunikation zum Uno, wenn der Motor unter Last kommt oder stehen bleibt.

Ich war kurz davor, mit einem ADUM1402 (http://www.analog.com/en/interface/digital-isolators/adum1402/products/) eine Isolatorschaltung zu bauen, um die Motorseite vollständig von der Arduino/PC-Seite zu entkoppeln. product.html), aber ich dachte mir, dass dies nicht die einzige Lösung sein könnte. Ich habe weiter recherchiert und festgestellt, dass es sich bewährt hat, das Rauschen und die Spitzen von Gleichstrommotoren herauszufiltern, indem Kondensatoren verwendet werden, wie unter http://www.pololu.com/docs/0J15/9 und auf vielen anderen Websites gezeigt. Ein eklatanter Beweis meiner Unwissenheit, aber jetzt weiß ich es besser.

Ich bin mir nicht sicher, wie (dh was ist die Theorie dahinter) das Problem behebt, weil ich immer noch nicht sicher bin, was die Ursache des Problems war. Wenn jemand etwas Licht ins Dunkel bringen kann, wäre ich dankbar. Ich mag es nicht, Dinge zu tun, ohne zu wissen, warum ich sie tue. Ich werde weiterlesen, bis ich herausgefunden habe, wie dies tatsächlich die Dinge behebt.

Auf jeden Fall danke an alle, die versucht haben zu helfen!

Ich habe einen Makerbot - eine der Platinen treibt einen Gleichstrommotor an und hat auch einen Thermistoreingang - ich habe ähnliche Probleme gesehen - habe sie gelöst

1) Verlegen der Drähte voneinander weg 2) Fallenlassen einer 100-nF-Kappe über den analogen Eingang 3) Setzen einer Ferritperle auf diese Eingangsleitung

Ich würde mir auch Sorgen um die Gründe machen - sind die Gründe an anderer Stelle angeschlossen? (eine Masseschleife)