Wenn ich mit einem Sensor und einem Motor arbeite, kann ich beide verwenden oder sollte ich eine Motorabschirmung verwenden?

Update: Ich ändere gerade ein paar Dinge mit dem Projekt. Ich habe einige von euch Ratschlägen befolgt. Ich habe von einem Schrittmotor zu einem RC-Servo (gesteuert über PWM) gewechselt, und wenn ich auf Probleme stoße und sie nicht herausfinden kann, werde ich fragen. Danke für die Hilfe!

Ich arbeite an einem Projekt mit einem Freund und es ist das erste Mal, dass wir einen Arduino verwenden. Wir verwenden ein Arduino, um Daten von einem Sensor (Beschleunigungsmesser) zu nehmen und dann den Motor einzuschalten (6 V, DC).

Ich habe etwas gegraben und es scheint, als würde die Leistung des Arduino möglicherweise nicht gleichzeitig für den Motor und den Sensor ausreichen. Vielleicht könnte eine Art Verzögerung funktionieren (wäre das möglich?).

Ich überlege, ein Motorschild zu verwenden . Kann ich den Beschleunigungssensor weiterhin zusammen mit dem Motor steuern?

Ich versuche, eine einzige externe Stromquelle zu verwenden (maximal: 6 AA-Batterien; ich versuche, die Anzahl der Batterien zu begrenzen, da wir versuchen, sie tragbar zu halten), also gibt es eine Möglichkeit, seitdem eine Quelle zu verwenden Arduino und Motorschild benötigen (nach meinem Verständnis) zwei verschiedene Netzteile.

Sie sollten immer noch in der Lage sein, Ihre anderen Pins zu verwenden. Dieser Motorschild wird wie ein mächtiger Bruder agieren und hören, was der Stift sagt und genau das tun, natürlich mit viel Power, er ist der größere Bruder! Könnten Sie Ihre Frage so bearbeiten, dass Sie die Anzahl der AA-Batterien, die Sie verwenden werden, genauer angeben?
Okay, ich habe die Anzahl der Batterien aktualisiert. Glaubst du, ein Schrittmotor wäre ein besserer Ersatz, da ich gehört habe, dass sie wirklich gut mit Arduinos funktionieren?
@Om23 Die Wahl von Schrittmotor, Servo, bürstenbehaftetem Gleichstrom oder bürstenlosem Gleichstrom würde durch den Zweck bestimmt, den der Motor erfüllen soll, und (z. B. für BLDC-Motoren) die verfügbare Hardware zur Steuerung des Motors. Dies könnte eine interessante neue Frage sein, um zu bestimmen, welcher Motor am besten für welchen von mehreren möglichen Zwecken verwendet wird, die Ihnen einfallen. Ich bin mir nicht sicher, ob eine solche Frage ideal für die Arduino-Site ist, vielleicht kann sich jemand anderes dazu äußern.

Antworten (2)

Problem 1 : Antreiben eines Motors direkt von einem Arduino

Das Antreiben eines Motors direkt von den Arduino-Pins ist aus mehreren Gründen nicht ratsam:

  • Laststrom , insbesondere beim Motorstart und bei Blockierbedingungen. Wie in der Frage zu Recht darauf hingewiesen wird, sind die Arduino-Pins möglicherweise einfach nicht dafür ausgelegt, ausreichend Strom zu liefern. Der Arduino kann sich erhitzen oder sogar durch anhaltend hohe Stromaufnahme beschädigt werden.
    Während jeder Arduino-Pin für ATmega-basierte Arduinos für 40 mA ausgelegt ist, ziehe ich es persönlich vor, jede anhaltende Belastung unter 30 mA zu halten, Ihre Risikobereitschaft kann unterschiedlich sein. Ohne das Datenblatt des betreffenden Motors zu sehen, ist es unmöglich zu erraten, wie viel Strom der Motor benötigt
  • Gegen-EMK vom Motor, sowohl beim Abschalten des Motors als auch möglicherweise während der Motorkommutierung - Wenn sich ein Gleichstrommotor dreht, "kommutieren" die Kontaktbürsten zwischen Spaltringen, zumindest bei den herkömmlichen Arten von Gleichstrommotoren mit Bürsten, und erzeugen winzig wenig Funken jedes Mal.
    Gegen-EMK ist im Grunde eine Gegenspannung, die von den Motorspulen (oder einer induktiven Last beim Ausschalten) erzeugt wird, sowie Transienten (Spitzen), die den akzeptablen Spannungsbereich, den die Mikrocontroller-Pins tolerieren können, vorübergehend weit überschreiten können.
    Gegen-EMK bleibt ein Risiko, wenn auch verringert, selbst wenn eine schnelle Diode in Sperrichtung über die Motorleitungen angeschlossen wird, eine dringend empfohlene Vorgehensweise.
  • Daher wird eine Art Isolierung zwischen dem Arduino und dem Motorantrieb dringend empfohlen. Zur Vereinfachung der Implementierung wäre dies eine Motorabschirmung.
    Wenn Sie mit einfacher Elektronik vertraut sind, können Sie dies auch durch direktes Verdrahten eines geeigneten Motortreiber-ICs und von Flyback-Dioden erreichen. ( Bearbeiten : Dies wird in der Antwort von Manishearth hervorragend beschrieben. )
    Der Motortreiber, ob ein Schild oder ein IC, sollte unabhängig vom Arduino mit Strom versorgt werden, jedoch mit den beiden miteinander verbundenen Erdungsleitungen der Stromquelle. Siehe weiter unten.

Problem 2 : Beschleunigungsmesser und Motorschild gleichzeitig steuern

  • Ja, der Beschleunigungsmesser kann mit angebrachtem Motorschild vom Arduino gesteuert und gelesen werden, indem sichergestellt wird, dass die für den Zugriff auf den Beschleunigungsmesser ausgewählten Pins diejenigen sind, die nicht vom Motorschild verwendet werden. Sie wären alle mit der Abschirmung verbunden, aber ohne interne Funktion oder Verbindung innerhalb der Abschirmung. Die Dokumentation für die ausgewählte Abschirmung enthält normalerweise diese Informationen.
    Suchen Sie der Einfachheit halber nach einem Motorschild mit stapelbaren Headern, dh mit den Arduino-Header-Pins, die auf dem Motorschild nachgebildet sind, um zusätzliche Hardware anzubringen, in Ihrem Fall den Beschleunigungsmesser. Nicht alle Schilde bieten stapelbare Header. Dies erschwert die Verwendung der von der Abschirmung nicht genutzten Stifte, da Drähte an die relevanten Anschlussflächen auf der PCB gelötet werden müssen, oder eine ähnliche Anordnung.
    Wenn die von Ihnen gewählte Motorabschirmung alle GPIO-Pins belegt, wie dies bei Abschirmungen zum Ansteuern mehrerer Motoren der Fall sein kann, haben Sie möglicherweise ein Problem. Da nur 1 Motor angetrieben werden soll, vermeiden Sie Multi-Motor-Shields, die nicht genügend ungenutzte GPIO-Pins belassen.

Ausgabe 3 : Stromverteilung zwischen Arduino und Motorschild

  • Das Problem mit der vorgeschlagenen 6 x AA-Anordnung (nominell maximal 9 Volt) besteht darin, dass sie zwar eine ausreichende Spannung für die bei vielen Arduinos verfügbare DC-Eingangsbuchse liefert (normalerweise für 7 bis 12 Volt Eingang ausgelegt), aber für den Motor zu hoch ist direkt davon gefahren werden.
  • Es gibt jedoch mehrere Motorschilde, die eine direkte Stromzufuhr akzeptieren (z. B. 7 bis 25 Volt) und dann gut geregelte 5 Volt an den Arduino liefern, an dem sie angeschlossen sind. Der Arduino muss also überhaupt nicht separat mit Strom versorgt werden und sollte es auch nicht sein. Dies ist absolut die einzige Art von Motorschild, die man kaufen sollte .
  • Kludgier-Alternativen umfassen das Abgreifen über 4 der 6 AA-Zellen, um den Motor mit Strom zu versorgen, und alle 6 Zellen, um die DC-Buchse (PWRIN) des Arduino mit Strom zu versorgen, oder die Verwendung eines separaten 6-Volt-Abwärtsreglers für die Motorleistung, während die 9 Volt zugeführt werden direkt an die Arduino DC-Buchse.
  • Der Versuch, den Arduino mit dem Akkupack mit Strom zu versorgen und dann den Motor über den Vin-Pin des Arduino mit Strom zu versorgen, ist eine schlechte Idee, weil
    • Die M7-Diode zwischen DC-Buchse und Vin-Pin bei mehreren Arduino-Referenzdesigns ist für 1 Ampere ausgelegt, der Motor könnte zumindest vorübergehend mehr ziehen
    • Das gesamte vom Motor erzeugte elektromagnetische Rauschen, das Kommutierungsrauschen und die Flyback-Transienten, werden in das Arduino-Board zurückgespeist, es sei denn, es wird eine sehr steife Entkopplung implementiert, was keine einfache Angelegenheit ist. Dieses EMI-Feedback verursacht intermittierende, schwer zu debuggende Probleme mit dem Betrieb des Arduino.

Die meisten Schilde nehmen ein paar Pins ein und lassen den Rest für Sie übrig (deshalb haben viele eine Nachbildung des Arduino-Pin-Systems mit stapelbaren Headern). Sie sind so konzipiert, dass sie so problemlos wie möglich sind, daher ist es am einfachsten, einen Schild zu bekommen, um dies zu umgehen.

Ich persönlich treibe Motoren nicht direkt vom Board an; Stattdessen verwende ich dafür Motortreiber wie den L293D. Die Pins eignen sich nicht wirklich zum Extrahieren von Strom, und im Allgemeinen ist es besser, Sensoren direkt statt über die Arduino-Pins mit Strom zu versorgen. Denken Sie daran, dass die Pins eine Strombegrenzung haben, und wenn Sie sie überlasten, brennen sie durch.

Die Verwendung eines L293D ist einfach:

Geben Sie hier die Bildbeschreibung ein

Verbinden Sie die Pins 1,9,16 mit Ihrer Vcc-Quelle (positiver Anschluss einer beliebigen 5-V-Quelle, mit der Sie den Arduino versorgen. Für mich ist es im Allgemeinen eine Leitung, die von einem LM7805 gezogen wird). Verbinden Sie nun die Pins 4,5,13,12 mit Ihrem GND (Minuspol). Verbinden Sie nun Pin 8 mit einer höheren Spannungsquelle (6 V, 12 V oder was auch immer Sie Ihren Motoren zuführen möchten). Beachten Sie, dass die negativen Anschlüsse aller Spannungsquellen mit GND kurzgeschlossen werden müssen.

Verbinden Sie nun Ihren Motor über die beiden Ausgangspins auf einer Seite (3,4 auf der linken Seite). Verbinden Sie die Eingangspins (2,7) mit zwei verschiedenen Pins auf dem Arduino. Wenn Sie beiden Pins das gleiche Signal (HIGH oder LOW) geben, stoppt der Motor. Wenn Sie HIGH von einem Pin und LOW vom anderen geben, dreht der Motor im Uhrzeigersinn oder gegen den Uhrzeigersinn, je nachdem, welcher Pin welches Signal hat.

Wenn Sie einen unidirektionalen Motor wünschen und Pins sparen möchten, schließen Sie einen der Eingangspins auf GND. Wenn nun der andere Eingangspin LOW ist, ist der Motor ausgeschaltet, und wenn er HIGH ist, ist der Motor eingeschaltet.

Sie können einen anderen Motor mit dem gleichen Verfahren am gegenüberliegenden Ende des Chips anbringen, wenn Sie möchten.

Der L293D zieht eine kleine Menge Strom vom Arduino und versorgt den Motor mit Strom, der über Pin 8 gezogen wird, und ist normalerweise ideal für solche Situationen.