Projekt 4 Servo Steuerung

1. Beschreibung

image-20250509084654137

Ein Servomotor ist ein positionsgesteuerter Drehaktuator. Er besteht hauptsächlich aus einem Gehäuse, einer Leiterplatte, einem kernlosen Motor, einem Getriebe und einem Positionssensor. Sein Funktionsprinzip besteht darin, dass der Servo das von MCUs oder Empfängern gesendete Signal empfängt und ein Referenzsignal mit einer Periode von 20 ms und einer Breite von 1,5 ms erzeugt, dann die erfasste Gleichspannungs-Vorspannung mit der Spannung des Potentiometers vergleicht und die Spannungsdifferenz ausgibt.

image-20250509084710719

Im Allgemeinen hat ein Servo drei Leitungen in Braun, Rot und Orange. Die braune Leitung ist Masse, die rote ist die Plusleitung und die orange ist die Signalleitung.

Der Drehwinkel des Servomotors wird durch Regulierung des Tastverhältnisses des PWM (Pulsweitenmodulation)-Signals gesteuert. Die Standardperiode des PWM-Signals beträgt 20 ms (50 Hz). Theoretisch liegt die Pulsbreite zwischen 1 ms und 2 ms, tatsächlich jedoch zwischen 0,5 ms und 2,5 ms. Die Breite entspricht dem Drehwinkel von 0° bis 180°. Beachten Sie jedoch, dass bei Motoren verschiedener Marken dasselbe Signal unterschiedliche Drehwinkel bewirken kann.

image-20250509084727797

Die entsprechenden Servo-Winkel sind unten dargestellt:

image-20250509084739380

2. Spezifikation

  • Betriebsspannung: DC 4,8 V ~ 6 V

  • Betriebswinkelbereich: ca. 180 ° (bei 500 → 2500 μs)

  • Pulsbreitenbereich: 500 → 2500 μs

  • Leerlaufdrehzahl: 0,12 ± 0,01 s / 60 (DC 4,8 V) 0,1 ± 0,01 s / 60 (DC 6 V)

  • Leerlaufstrom: 200 ± 20 mA (DC 4,8 V) 220 ± 20 mA (DC 6 V)

  • Haltemoment: 1,3 ± 0,01 kg·cm (DC 4,8 V) 1,5 ± 0,1 kg·cm (DC 6 V)

  • Haltestrom: ≦ 850 mA (DC 4,8 V) ≦ 1000 mA (DC 6 V)

  • Standby-Strom: 3 ± 1 mA (DC 4,8 V) 4 ± 1 mA (DC 6 V)

3. Komponenten

Entwicklungsboard *1

8833 Motor Driver *1

Servo*1

img

img

image-20250509084654137

18650 Batteriehalter*1

USB-Kabel*1

18650 Batterie*2 (selbst bereitgestellt)

image-20250509084950601

img

image-20250509085010348

4. Schaltplan

image-20250509085038006

Anschluss-Hinweis: Der Servo ist mit G (GND), V (VCC) und A3 verbunden, die braune Leitung des Servos ist mit GND (G) verbunden, die rote mit 5 V (V) und die orange mit A3.

Der Servo muss aufgrund seines hohen Strombedarfs an eine externe Stromversorgung angeschlossen werden. In der Regel reicht der Strom des Entwicklungsboards nicht aus. Wird keine externe Stromversorgung angeschlossen, kann das Entwicklungsboard beschädigt werden.

5. Testcode

//****************************************************************************
/*
keyestudio 4wd BT Car
lesson 4.1
Servo
http://www.keyestudio.com
*/
#define servoPin A3  // Servo-Pin
int pos; // Winkelvariable des Servos
int pulsewidth; // Pulsbreitenvariable des Servos

void setup() {
  pinMode(servoPin, OUTPUT);  // Setze den Pin des Servos auf Ausgang
  procedure(0); // Setze den Winkel des Servos auf 0 Grad
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // geht von 0 Grad bis 180 Grad
    // in Schritten von 1 Grad
    procedure(pos);              // sagt dem Servo, zur Position im Variablen 'pos' zu gehen
    delay(15);                   // steuert die Drehgeschwindigkeit des Servos
  }
  for (pos = 180; pos >= 0; pos -= 1) { // geht von 180 Grad bis 0 Grad
    procedure(pos);              // sagt dem Servo, zur Position im Variablen 'pos' zu gehen
    delay(15);                    
  }
}

// Funktion zur Steuerung des Servos
void procedure(int myangle) {
  pulsewidth = myangle * 11 + 500;  // berechnet den Wert der Pulsbreite
  digitalWrite(servoPin,HIGH);
  delayMicroseconds(pulsewidth);   // Die Dauer des High-Levels ist die Pulsbreite
  digitalWrite(servoPin,LOW);
  delay((20 - pulsewidth / 1000));  // der Zyklus beträgt 20 ms, das Low-Level dauert die restliche Zeit
}
//****************************************************************************

6. Testergebnis

Nach erfolgreichem Hochladen des Codes auf das V4.0 Board, verbinden Sie die Verkabelung gemäß dem Schaltplan und schalten Sie die externe Stromversorgung ein. Nach dem Einschalten drehen Sie den Dip-Schalter auf die “ON”-Position, dann schwingt der Servo im Bereich von 0° bis 180°.

7. Erweiterte Übung

Außerdem ermöglichen wir die Steuerung des Servos über eine Bibliotheksdatei. Bitte beachten Sie den Link: https://www.arduino.cc/en/Reference/Servo.

image-20250509085122183


//***************************************************************************
/*
 keyestudio 4wd BT Car
 lesson 4.2
 Servo
 http://www.keyestudio.com
*/
#include <Servo.h>
Servo myservo;  // erstellt ein Servo-Objekt zur Steuerung eines Servos
// auf den meisten Boards können zwölf Servo-Objekte erstellt werden
int pos = 0;    // Variable zur Speicherung der Servo-Position

void setup() {
  myservo.attach(A3);  // verbindet den Servo an Pin A3 mit dem Servo-Objekt
}
void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // geht von 0 Grad bis 180 Grad
    // in Schritten von 1 Grad
    myservo.write(pos);              // sagt dem Servo, zur Position im Variablen 'pos' zu gehen
    delay(15);                       // wartet 15 ms, damit der Servo die Position erreicht
  }
  for (pos = 180; pos >= 0; pos -= 1) { // geht von 180 Grad bis 0 Grad
    myservo.write(pos);              // sagt dem Servo, zur Position im Variablen 'pos' zu gehen
    delay(15);                       // wartet 15 ms, damit der Servo die Position erreicht
  }
}
//***************************************************************************

Nach erfolgreichem Hochladen des Codes auf das V4.0 Board, verbinden Sie die Verkabelung gemäß dem Schaltplan und schalten Sie die externe Stromversorgung ein. Nach dem Einschalten drehen Sie den Dip-Schalter auf die “ON”-Position, dann schwingt der Servo ebenfalls im Bereich von 0° bis 180°. Üblicherweise steuern wir ihn über die Bibliotheksdatei.

8. Code-Erklärung

Arduino enthält #include <Servo.h> (Servo-Funktion und Anweisungen)

Die folgenden sind einige gängige Anweisungen der Servo-Funktion:

1). attach(interface) —— Setzt die Schnittstelle des Servos

2). write(angle) —— Wird verwendet, um den Drehwinkel des Servos einzustellen, der Einstellbereich liegt zwischen 0° und 180°

3). read() —— Wird verwendet, um den Winkel des Servos auszulesen, also den Befehlswert von „write()“

4). attached() —— Prüft, ob der Parameter des Servos an seine Schnittstelle gesendet wurde

Hinweis: Das oben geschriebene Format lautet „Servo-Variablenname, spezifische Anweisung()“, zum Beispiel: myservo.attach(9).