Projekt 4 Servo Steuerung
1. Beschreibung

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.

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.

Die entsprechenden Servo-Winkel sind unten dargestellt:

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 |
|---|---|---|
|
|
|
18650 Batteriehalter*1 |
USB-Kabel*1 |
18650 Batterie*2 (selbst bereitgestellt) |
|
|
|
4. Schaltplan

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.

//***************************************************************************
/*
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).




