Kategorien: Mikrocontroller-Schaltungen
Anzahl der Ansichten: 19709
Kommentare zum Artikel: 0

Motor- und Servosteuerung mit Arduino

 

Bei einfachen Konstruktionen von Automatisierungssystemen ist es häufig erforderlich, nicht nur die Messwerte von Sensoren zu lesen, sondern auch Bewegungsmechanismen einzurichten. Hierzu werden verschiedene Elektromotoren eingesetzt. Die einfachste und beliebteste Option ist ein Gleichstrommotor. Er gewann die Liebe der Liebenden mit seiner Zugänglichkeit und einfachen Geschwindigkeitsanpassung. Wenn die Aufgabe darin besteht, einen Mechanismus in einen bestimmten Winkel oder eine bestimmte Entfernung zu bewegen, ist es zweckmäßig, einen Servoantrieb oder einen Schrittmotor zu verwenden.

In diesem Artikel betrachten wir Servos und kleine Gleichstrommotoren, verbinden sie mit einer Arduino-Platine und stellen das DCT ein.

Motor- und Servosteuerung mit Arduino

Gleichstrommotor

Der gebräuchlichste Elektromotor, der in tragbaren Geräten, Spielzeugen, ferngesteuerten Modellen und anderen Geräten verwendet wird. Permanentmagnete sind am kleinen Elektromotor am Stator und eine Wicklung am Rotor befestigt.

Gleichstrommotor

Die Wicklung wird durch die Bürstenbaugruppe mit Strom versorgt. Bürsten bestehen aus Graphit, manchmal werden Kupfergleitkontakte gefunden. Bürsten gleiten über Lamellen an einem Ende des Rotors. Wenn Sie nicht ins Detail gehen, hängt die Drehzahl vom Ankerwicklungsstrom ab.

Kollektor Motor Anker

Bei großen Gleichstrommotoren ist am Stator eine Erregerwicklung angeschlossen, die auf bestimmte Weise (sequentielle, parallele oder gemischte Erregung) mit der Rotorwicklung (über die Bürstenanordnung) verbunden ist. Somit werden das gewünschte Drehmoment und die Anzahl der Umdrehungen erreicht.


Geschwindigkeitsregelung

Elektrischer Gleichstrommotor

Bei Anschluss an das Stromnetz beginnt sich der Gleichstrommotor mit der Nenndrehzahl zu drehen. Um die Geschwindigkeit zu verringern, müssen Sie den Strom begrenzen. Zu diesem Zweck werden Ballastwiderstände eingeführt, die jedoch die Effizienz der gesamten Anlage verringern und eine überschüssige Wärmequelle darstellen. Für eine effektivere Regelung von Spannung und Strom wird eine andere Methode verwendet - PWM-Steuerung.

PWM-Regelung

Ein Verfahren zum Steuern des pulsbreitenmodulierten Signals (der Spannung) besteht darin, den gewünschten Spannungswert durch Ändern der Impulsbreite mit einer konstanten Dauer der Periode (Frequenz) zu erzeugen.

Das heißt, die Periode ist in zwei Teile unterteilt:

1. Impulszeit.

2. Pause.

Das Verhältnis der Impulszeit zur Gesamtzeit der Periode wird als Arbeitszyklus bezeichnet:

Ks = ti / tper

Der Kehrwert heißt "Arbeitszyklus":

D = 1 / KZ = tper / t und

Zur Beschreibung der Betriebsart des PWM-Controllers werden beide Konzepte verwendet: sowohl Arbeitszyklus als auch Arbeitszyklus.

Der Stromverbrauch des Motors hängt von seiner Leistung ab. Die Anzahl der Umdrehungen hängt, wie gesagt, vom Strom ab. Der Strom kann durch Ändern der an die Wicklungen angelegten Spannung eingestellt werden. Wenn sie mit einer Spannung betrieben wird, die den Nennwert gemäß dem Motorpass überschreitet, überschreitet ihre Geschwindigkeit auch die Nenndrehzahl. Solche Betriebsarten sind jedoch gefährlich für den Motor, da in den Wicklungen ein größerer Strom fließt, was zu einer erhöhten Erwärmung führt.

Wenn die Beschädigung des Motors durch Kurzzeitimpulse oder wiederholt Kurzzeitbetriebsarten minimal ist, brennt er bei längerem Betrieb bei erhöhter Spannung und Drehzahl aus oder seine Lager erwärmen sich und keilen sich, und die Wicklungen brennen aus, wenn die Stromversorgung nicht unterbrochen wird.

Wenn die Eingangsspannung zu niedrig ist, hat der kleine Motor möglicherweise einfach nicht genug Leistung, um sich zu bewegen. Daher ist es notwendig, experimentell die normale Drehzahl und Spannung für einen bestimmten Motor herauszufinden, die den Nennwert nicht überschreitet.


Wir verbinden uns mit Arduino

Ich hatte einen kleinen Motor, wie es scheint, von einem Kassettenrekorder, was bedeutet, dass seine Nennspannung unter 5 Volt liegt, dann wird die Ausgangsleistung des Arduino ausreichen. Ich werde es über den 5V-Pin mit Strom versorgen, d.h. vom Ausgang des Linearstabilisators auf der Platine. Nach dem Schema, das Sie unten sehen.

Ich kenne den Strom dieses Motors nicht, also habe ich ihn an die Stromversorgung angeschlossen und einen Feldeffekttransistor zwischen dem Motor und dem Stromanschluss installiert, an dessen Gate ein Signal vom PWM-Ausgang angelegt wurde. Jeder der verfügbaren kann verwendet werden.

Anschlussplan des Arduino-Gleichstrommotors

Um die Geschwindigkeit einzustellen, habe ich der Schaltung einen variablen Widerstand hinzugefügt und ihn mit dem Analogeingang A0 verbunden. Für eine schnelle Verbindung habe ich ein lötfreies Steckbrett verwendet, das auch als Steckbrett bezeichnet wird.

Ich habe einen Strombegrenzungswiderstand in die Transistorverkabelung eingebaut (um den Gate-Ladestrom zu reduzieren, um den Port vor Verbrennung und Stromversorgung des Mikrocontrollers vor dem Absinken und dessen Einfrieren zu schützen), und ihn mit einem 12-kOhm-Widerstand auf den Boden gezogen. Dies muss getan werden, um ihn stabiler zu machen Der Verschlusstank arbeitete und entlud sich schneller.

Details zu den beschriebenen Feldeffekttransistoren in einem Artikel auf unserer Website. Ich habe einen leistungsstarken, herkömmlichen und nicht zu teuren Mosfet mit einem n-Kanal und einer eingebauten IRF840-Sperrdiode verwendet.

Exekutiver und definierender Teil der Schaltung

So sieht meine Laborständerbaugruppe aus:

Gleichstrommotor und Arduino

Die PWM-Steuerfunktion wird aufgerufen, wenn mit dem Befehl AnalogWrite (Pin, Wert) auf die entsprechenden Ausgangswerte (3, 5, 6, 9, 10, 11) von 0 bis 255 geschrieben wird. Die Logik ihrer Arbeit ist in den folgenden Grafiken dargestellt.

PWM-Steuerfunktion

Ein solches Signal wird an das Gate des Transistors angelegt:

Ein solches Signal wird an das Gate des Transistors angelegt

Der Programmcode zur Schande ist kurz und einfach, im Detail wurden alle diese Funktionen beschrieben in früheren Artikeln über Arduino.

int sensorPin = A0; // Eingang vom Potentiometer

int motorPin = 3; // PWM-Ausgang zum Gate der Kamera

void setup () {

pinMode (motorPin, OUTPUT);

}

void loop () {

analogWrite (motorPin, map (analogRead (sensorPin), 0, 1023, 0, 256));

}

In der Funktion analogWrite weise ich dem PWM-Ausgang über den Befehl map einen Wert zu. Mit seiner Verwendung können Sie mehrere Codezeilen und eine Variable entfernen.


Dies ist ein Arbeitsschema und eignet sich hervorragend zur Beobachtung von Prozessen beim Einstellen der Lastleistung, der Helligkeit der LEDs und der Motordrehzahl. Sie müssen lediglich die gewünschte Last anstelle des Motors anschließen. In diesem Fall kann anstelle von 5 V eine beliebige Spannung an die Last angelegt werden, z. B. 12 V. Vergessen Sie nicht, die negative Leistung an den Kontakt anzuschließen, z. B. 12 V, und vergessen Sie nicht, die negative Leistung an den GND-Pin auf der Mikrocontroller-Platine anzuschließen.

In Arduino beträgt die PWM-Frequenz beim Aufrufen über die AnalogWrite-Funktion nur 400 Hz. Bei den minimalen Spannungswerten war ein Brummen der entsprechenden Frequenz von den Motorwicklungen zu hören.

Arduino und Servo

Servos

Ein Motor, der sich in einer vorbestimmten Position befinden kann und externen Faktoren ausgesetzt ist, beispielsweise einer erzwungenen Auslenkung der Welle, behält seine Position unverändert bei - wird als Servoantrieb bezeichnet. Im Allgemeinen klingt die Definition etwas anders:

Servo ist ein Motor mit Gegenkopplung.

Normalerweise kommen drei Drähte aus einem Servoantrieb:

  • Plus Leistung.

  • Weniger Leistung.

  • Steuersignal.

Der Servoantrieb besteht aus:

  • Gleichstrommotor (oder bürstenloser Motor);

  • Verwaltungsgebühren;

  • Positionssensor (Encoder für Servos mit einem Drehwinkel von 360 ° oder Potentiometer für Servos mit einem Drehwinkel von 180 °);

  • Untersetzungsgetriebe (senkt die Motordrehzahl und erhöht das Drehmoment auf der Antriebswelle).

Die Steuereinheit vergleicht das Signal am eingebauten Positionssensor mit dem Signal, das durch das Steuerkabel gelangt ist. Wenn sie unterschiedlich sind, erfolgt eine Drehung in einem Winkel, in dem die Differenz zwischen dem Signal ausgeglichen wird.

Das Funktionsprinzip des Servos

Hauptmerkmale von Servos:

  • Drehgeschwindigkeit (Zeit, in der sich die Welle um einen Winkel von 60 ° dreht);

  • Drehmoment (kg / cm, d. H. Wie viele Kilogramm der Motor auf dem Hebel 1 cm von der Welle entfernt aushalten kann);

  • Versorgungsspannung;

  • Stromverbrauch;

  • Durch die Steuermethode (analog oder digital gibt es keinen signifikanten Unterschied, aber digital ist schneller und stabiler).

Typischerweise beträgt die Signalperiode 20 ms und die Dauer des Steuerimpulses:

  • 544 μs - entspricht 0 °;

  • 2400 μs - entspricht einem Winkel von 180 °.

In seltenen Fällen kann die Pulslänge abweichen, z. B. 760 bzw. 1520 μs. Diese Informationen können in der technischen Dokumentation des Frequenzumrichters erläutert werden. Eines der beliebtesten Hobby-Servos ist das Tower Pro SG90 und ähnliche Modelle.Es ist preiswert - etwa 4 Dollar.

Sevroprivod für Arduino

Es hält 1,8 kg / cm auf der Welle und komplett mit Befestigungsschrauben und Hebeln mit Keilen für die Welle. Tatsächlich ist dieses Baby ziemlich stark und es ist sehr problematisch, es mit einem Finger zu stoppen - der Antrieb selbst beginnt aus den Fingern zu fallen - so stark ist er.


Servosteuerung und Arduino

Wie bereits erwähnt, erfolgt die Steuerung durch Ändern der Impulsdauer. Verwechseln Sie diese Methode jedoch nicht mit PWM (PWM). Der korrekte Name lautet PDM (Pulse Duration Modulation). Geringe Abweichungen in der Signalfrequenz (20 ms - Dauer, Frequenz 50 Hz) spielen keine besondere Rolle. Aber nicht um mehr als 10 Hz von der Frequenz abweichen, der Motor kann ruckartig laufen oder durchbrennen.

Servosteuerung und Arduino

Die Verbindung zum Arduino ist recht einfach. Sie können das Laufwerk auch über einen 5-V-Pin mit Strom versorgen, dies ist jedoch nicht wünschenswert. Tatsache ist, dass zu Beginn ein kleiner Stromsprung auftritt, der zu einem Leistungsabfall führen kann und Falsche Mikrocontroller-Ausgänge. 1 kleines Laufwerk (Typ SG90) ist zwar möglich, aber nicht mehr.

Um solche Servos mit Arduino zu steuern, ist die Servobibliothek in die IDE integriert. Sie enthält eine kleine Reihe von Befehlen:

  • attach () - Füge dem Pin eine Variable hinzu. Beispiel: Laufwerksname.attach (9) - Schließen Sie ein Servo an Pin 9 an. Wenn Ihr Antrieb nicht standardmäßige Steuerimpulslängen benötigt (544 und 2400 μs), können diese durch ein Komma nach der Pin-Nummer getrennt angegeben werden, z. B.: Servo.attach (Pin, Min-Winkel (μs), Max-Winkel in der ISS);

  • write () - legt den Drehwinkel der Welle in Grad fest;

  • writeMicroseconds () - legt den Winkel durch die Pulslänge in Mikrosekunden fest;

  • read () - bestimmt die aktuelle Position der Welle;

  • angehängt () - Überprüft, ob ein Pin mit angeschlossenem Servo gesetzt ist;

  • trennen () - Befehl zum Anhängen abbrechen.

Mit dieser Bibliothek können Sie 12 Servos von UNO-, Nano- und ähnlichen Karten (Mega368 und 168) steuern, während die Möglichkeit zur Verwendung von PWM an Pin 9 und 10 verschwindet. Wenn Sie über MEGA verfügen, können Sie die 48. Server steuern. Die PWM an den Pins 11 und 12 verschwindet jedoch. Wenn Sie bis zu 12 Servos verwenden, bleibt die PWM bei allen Kontakten voll funktionsfähig.

Wenn Sie diese Bibliothek angeschlossen haben, können Sie nicht mit 433-MHz-Empfängern / Sendern arbeiten. Hierfür gibt es eine Servo2-Bibliothek, die ansonsten identisch ist.

Servo2-Bibliothek

Hier ist ein Beispiel für den Code, den ich für Experimente mit einem Servoantrieb verwendet habe. Er befindet sich in den Standardbeispielen:

#include // Verbinde die Bibliothek

Servo Myservo; // deklarierter Variablenname für myservo Servo

int potpin = 0; // Pin zum Anschließen des Einstellpotentiometers

int val; // Variable, um die Ergebnisse des Lesens des Signals vom Potentiometer zu speichern

void setup () {

myservo.attach (9); // 9 Pin als Steuerausgang für Servo einstellen

}

void loop () {

val = analogRead (Potpin); // Ergebnisse des Ablesens des in trans gespeicherten Potentiometers. val, sie werden im Bereich von 0 bis 1023 liegen

val = map (val, 0, 1023, 0, 180); // Messbereich vom Analogeingang 0-1023 übersetzen

// im Aufgabenbereich für Servo 0-180 Grad

myservo.write (val); // Konvertierung bestehen Signal von Pot-Ra zur Kontrolle Servo-Eingang

Verzögerung (15); // Verzögerung ist für einen stabilen Betrieb des Systems erforderlich

 

Wir verbinden das Servo mit Arduino

Fazit

Die Verwendung der einfachsten Elektromotoren in Kombination mit einem Arduino ist eine ziemlich einfache Aufgabe, während die Beherrschung dieses Materials Ihre Fähigkeiten auf dem Gebiet der Automatisierung und Robotik erweitert. Die einfachsten Roboter oder ferngesteuerten Modelle von Autos bestehen aus solchen Motoren, und Servos werden verwendet, um die Drehung der Räder zu steuern.

In den betrachteten Beispielen wurde ein Potentiometer verwendet, um den Drehwinkel oder die Drehzahl einzustellen. Stattdessen kann jede andere Signalquelle verwendet werden. Beispielsweise kann eine Drehung oder Änderung der Geschwindigkeit aufgrund von Informationen auftreten, die von Sensoren empfangen werden.

Ein Beispiel für die Verwendung von Servos in alternativer Energie: Verfolgung des Einfallswinkels von Sonnenlicht und Anpassung der Position von Sonnenkollektoren in Kraftwerken.

Um einen solchen Algorithmus zu implementieren, können Sie mehrere verwenden Fotowiderstände oder andere optoelektronische Geräte zum Messen der Menge des einfallenden Lichts und zum Einstellen des Drehwinkels des Solarpanels in Abhängigkeit von ihren Messwerten.

Siehe auch auf i.electricianexp.com:

  • Wie das Servo angeordnet ist und funktioniert
  • Arduino- und Schrittmotor: Grundlagen, Schemata, Anschluss und Steuerung
  • Funktionen zum Anschließen von Geräten an Arduino
  • Unterscheiden eines Induktionsmotors von einem Gleichstrommotor
  • So verbinden Sie den Inkrementalgeber mit Arduino

  •