ESP32 - Stellantrieb mit Rückkopplung

In einem vorherigen Tutorial haben wir über den Linearantrieb ohne Rückmeldung gelernt. In diesem Tutorial werden wir den Linearantrieb mit Rückmeldung kennenlernen (auch als Feedback-Linearantrieb bezeichnet). Die Rückmeldung des Linearantriebs liefert die Informationen, mit deren Hilfe die Position des Hubes bestimmt und anschließend die Position gesteuert werden kann. Im Detail werden wir Folgendes lernen:

Erforderliche Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×12V Linearaktor mit Rückmeldung
1×L298N Motortreiber-Modul
1×12V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Linearantrieb mit Rückmeldung

Ein rückgekoppelter Linearaktuator ist ein Linearaktuator, der über ein Rückkopplungssignal verfügt, das es ermöglicht, seine Position zu bestimmen und ihn zu steuern. Das Rückkopplungssignal ist ein Potentiometer, das eine Spannung ausgibt, die proportional zur Hubposition ist.

Pinbelegung des Linearantriebs mit Rückmeldung

Ein Linearantrieb mit Rückmeldung hat 5 Kabel:

  • Positivkabel des Aktuators: Dieses Kabel wird verwendet, um den Linearantrieb mit Hochspannung (12V, 24V, 48V...) zu steuern.
  • Positivkabel des Aktuators: Dieses Kabel wird verwendet, um den Linearantrieb mit Hochspannung (12V, 24V, 48V...) zu steuern.
  • 5V-Kabel: Dieses Kabel wird für das Rückkopplungspotentiometer verwendet. Schließen Sie dieses Kabel an 5V oder 3,3V an.
  • GND-Kabel: Dieses Kabel wird für das Rückkopplungspotentiometer verwendet. Verbinden Sie dieses Kabel mit GND.
  • Potentiometerkabel: (auch als Feedbackkabel oder Ausgangskabel bezeichnet) liefert dieses Kabel eine Spannung proportional zur Hubposition.
Pinbelegung des Linearantriebs mit Feedback

Wie es funktioniert

Wenn wir Hochspannung an die Plus- und Minusleitungen anlegen, wird der Hub des Aktuators ausgefahren oder eingefahren. Im Detail: Wenn wir verbinden:

  • 12 V (12 V, 24 V, 48 V ...) und GND an den Plusdraht bzw. den Minusdraht, jeweils: Der Linearantrieb fährt mit Vollgeschwindigkeit aus, bis er den Endanschlag erreicht.
  • 12 V (12 V, 24 V, 48 V ...) und GND an den Minusdraht bzw. den Plusdraht, jeweils: Der Linearantrieb fährt mit Vollgeschwindigkeit ein, bis er den Endanschlag erreicht.
  • Beim Ausfahren oder Einfahren, wenn wir dem Linearantrieb die Stromzufuhr entziehen (GND an beide Plus- und Minusleitungen), stoppt der Linearantrieb das Ausfahren/Einfahren.

※ Notiz:

  • Der Spannungswert zur Ansteuerung des Aktuators hängt von der Spezifikation des Aktuators ab. Lesen Sie das Datenblatt oder Handbuch, um den entsprechenden Spannungswert zu erfahren.
  • Der Aktuator kann die Position auch dann halten, wenn die Stromversorgung gestoppt wird, während eine Last getragen wird.

Der Spannungswert im Potentiometerdraht ist proportional zur Hubposition des Aktuators. Durch Messen dieser Spannung können wir die Hubposition bestimmen.

Verdrahtungsdiagramm

Bitte entfernen Sie alle drei Jumper am L298N-Modul, bevor Sie verdrahten.

ESP32-Linearantrieb L298N-Treiber Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

Wie man einen Linearantrieb steuert: Ausfahren und Einfahren

Siehe ESP32 - Aktuator Tutorial

Wie man die Position des Linearantriebs findet

Das Folgende zeigt, wie man die Hubposition eines Linearantriebs bestimmt.

Kalibrierung

  • Bestimme die Länge des Hubwegs des Aktuators (in Millimetern) durch Messen (mit einem Lineal) oder durch Lesen des Datenblatts
  • Bestimme die Ausgabewerte, wenn der lineare Aktuator vollständig ausgefahren und vollständig eingefahren ist, indem du den untenstehenden Code ausführst
/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-actuator-with-feedback */ // the code for getting the feedback when the actuator fully extended and retracted #define ENA_PIN 27 // The ESP32 pin GPIO27 connected to the EN1 pin L298N #define IN1_PIN 26 // The ESP32 pin GPIO26 connected to the IN1 pin L298N #define IN2_PIN 25 // The ESP32 pin GPIO25 connected to the IN2 pin L298N #define POTENTIOMETER_PIN 36 // The ESP32 pin GPIO36 (ADC0) connected to the potentiometer of the actuator void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { // extend the actuator digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); delay(20000); // wait for actuator fully extends. It will stop extending automatically when reaching the limit // read the analog in value: int POTENTIOMETER_MAX = analogRead(POTENTIOMETER_PIN); Serial.print("POTENTIOMETER_MAX = "); Serial.println(POTENTIOMETER_MAX); // retracts the actuator digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); delay(20000); // wait for actuator fully extends. It will stop retracting automatically when reaching the limit int POTENTIOMETER_MIN = analogRead(POTENTIOMETER_PIN); Serial.print("POTENTIOMETER_MIN = "); Serial.println(POTENTIOMETER_MIN); }
  • Sie werden das Protokoll im Serial Monitor wie im untenstehenden Beispiel sehen
COM6
Send
POTENTIOMETER_MAX = 987 POTENTIOMETER_MIN = 13
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Notiere diese Werte
  • Falls die Min- und Max-Werte vertauscht sind, vertausche IN1_PIN und IN2_PIN
  • Aktualisiere drei Werte im untenstehenden Code
  • ESP32-Code, der die Position des Aktuators berechnet

    /* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-actuator-with-feedback */ #define ENA_PIN 27 // The ESP32 pin GPIO27 connected to the EN1 pin L298N #define IN1_PIN 26 // The ESP32 pin GPIO26 connected to the IN1 pin L298N #define IN2_PIN 25 // The ESP32 pin GPIO25 connected to the IN2 pin L298N #define POTENTIOMETER_PIN 36 // The ESP32 pin GPIO36 (ADC0) connected to the potentiometer of the actuator #define STROKE_LENGTH 102 // PLEASE UPDATE THIS VALUE (in millimeter) #define POTENTIOMETER_MAX 2340 // PLEASE UPDATE THIS VALUE #define POTENTIOMETER_MIN 13 // PLEASE UPDATE THIS VALUE void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { // extend the actuator digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); int potentiometer_value = analogRead(POTENTIOMETER_PIN); int stroke_pos = map(potentiometer_value, POTENTIOMETER_MIN, POTENTIOMETER_MAX, 0, STROKE_LENGTH); Serial.print("The stroke's position = "); Serial.print(stroke_pos); Serial.println(" mm"); }
    • Aktualisieren Sie die drei kalibrierten Werte im Code
    • Laden Sie den Code auf den ESP32 hoch
    • Sehen Sie das Ergebnis im Serial Monitor
    COM6
    Send
    The stroke's position = 2 mm The stroke's position = 35 mm The stroke's position = 43 mm The stroke's position = 60 mm The stroke's position = 68 mm The stroke's position = 79 mm The stroke's position = 83 mm The stroke's position = 96 mm The stroke's position = 100 mm
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    So steuern Sie einen Linearantrieb auf eine bestimmte Position

    /* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-actuator-with-feedback */ #define ENA_PIN 27 // The ESP32 pin GPIO27 connected to the EN1 pin L298N #define IN1_PIN 26 // The ESP32 pin GPIO26 connected to the IN1 pin L298N #define IN2_PIN 25 // The ESP32 pin GPIO25 connected to the IN2 pin L298N #define POTENTIOMETER_PIN 36 // The ESP32 pin GPIO36 (ADC0) connected to the potentiometer of the actuator #define STROKE_LENGTH 102 // PLEASE UPDATE THIS VALUE (in millimeter) #define POTENTIOMETER_MAX 2340 // PLEASE UPDATE THIS VALUE #define POTENTIOMETER_MIN 13 // PLEASE UPDATE THIS VALUE #define TOLERANCE 5 // in millimeter int targetPosition_mm = 50; // in millimeter void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); // initialize digital pins as outputs. pinMode(ENA_PIN, OUTPUT); pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); digitalWrite(ENA_PIN, HIGH); } void loop() { int potentiometer_value = analogRead(POTENTIOMETER_PIN); int stroke_pos = map(potentiometer_value, POTENTIOMETER_MIN, POTENTIOMETER_MAX, 0, STROKE_LENGTH); Serial.print("The stroke's position = "); Serial.print(stroke_pos); Serial.println(" mm"); if (stroke_pos < (targetPosition_mm - TOLERANCE)) ACTUATOR_extend(); else if (stroke_pos > (targetPosition_mm + TOLERANCE)) ACTUATOR_retract(); else ACTUATOR_stop(); } void ACTUATOR_extend() { digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); } void ACTUATOR_retract() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, HIGH); } void ACTUATOR_stop() { digitalWrite(IN1_PIN, LOW); digitalWrite(IN2_PIN, LOW); }

    ※ Notiz:

    Dieses Tutorial verwendet die analogRead()-Funktion, um Werte von einem ADC (Analog-Digital-Wandler) zu lesen, der an ein Potentiometer angeschlossen ist. Der ESP32-ADC ist gut geeignet für Projekte, die keine hohe Genauigkeit benötigen. Für Projekte, die jedoch präzise Messungen erfordern, beachten Sie bitte:

    • Der ESP32-ADC ist nicht perfekt genau und muss möglicherweise für korrekte Ergebnisse kalibriert werden. Jedes ESP32-Board kann etwas unterschiedlich sein, daher müssen Sie den ADC für jedes einzelne Board kalibrieren.
    • Die Kalibrierung kann schwierig sein, insbesondere für Anfänger, und liefert möglicherweise nicht immer die exakten Ergebnisse, die Sie wünschen.

    Für Projekte, die eine hohe Präzision benötigen, ziehen Sie in Betracht, einen externen ADC (z. B. ADS1115) mit dem ESP32 zu verwenden oder einen Arduino zu verwenden, der einen zuverlässigeren ADC besitzt.

    Wenn Sie den ESP32-ADC dennoch kalibrieren möchten, lesen Sie ESP32 ADC Calibration Driver

    Video Tutorial

    Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

    Verwandte Tutorials

    ※ UNSERE NACHRICHTEN

    • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!