Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

3 - Standardservo

Kurzinformationen

Servomotoren

Standardservos finden sich in allen ferngesteuerten, sogenannten RC-Modellbauten, wie Flugzeugen, Hubschraubern, Quadrocoptern, Booten und Fahrzeugen.

Freilaufservos finden sich vielfach in Robotern.

Man unterscheidet den Standardservo, der sich in einem Winkelbereich von ca. 180°  bewegen kann und dem Freilaufservo.

Bezeichnungen

Ein Servo setzt sich aus einem Gehäuse, einem 3-adrigen Anschlusskabel (sehr häufig in den Farben schwarz (GND), rot (Ubat), weiß (Signal)) und dem Steuerhorn zusammen.

Servo und Steuerimpulse

RC Flugzeuge werden per Funk-Fernsteuerung mittels zweier Steuerknüppel gesteuert. Die Steuerungsdaten werden per Funk von der Steuerungseinheit an das Flugzeug übermittelt und dort von den jeweiligen Servos entsprechend umgesetzt.

Jede Position der Steuerknüppel wird in Steuerimpulse bestimmter Länge umgesetzt. Die Länge eines Impulses ist ein Maß für die Position des Joysticks. Im RC-Modell werden die Steuerimpulse in digitale Impulse (HIGH/ LOW) umgesetzt und dann an die Servos übertragen, die diese wiederum in eine Drehbewegung umsetzen.

Die Länge eines Impulses ist ein Maß für den Winkel um den sich das Steuerhorn dreht. Die Impulse werden 40 bis 50 mal pro Sekunde wiederholt, haben eine Impulslänge von 1-2 Millisekunden und halten den Servo in seiner Position.

Übung 1

Servo-Test

Ein Standardservo wird mit einem ATtiny13A verbunden; die Taktfrequenz beträgt 9,6 MHz.

 

Material

  • 1x  Steckbrett mit Nullkraftsockel
  • 1x  Standardservo
  • 1x  LED, rot
  • 1x  Widerstand 220 Ohm
  • 1x  ATtiny13A
  • diverse Steckdrähte
  • 1x  Software BASCOM
  • 1x  Brenner

--------------------------------------

  • 1x  USB Oszilloskop (optional)

 

Aufgaben

Bestimme die Zahlengröße x für Servo(1) = x

für die Positionen des Steuerhorns

a) am linken Anschlag

b) am rechten Anschlag

c) in der Mittelstellung

 

Schaltskizze

Das Steuerhorn eines Standardservos kann innerhalb eines Bereichs von 180° jede Winkelposition einnehmen. Wenn man einen kleinen Draht oder ein Stück Papier am Steuerhorn befestigt, dann lässt sich die Drehbewegung und der überstrichene Winkelbereich des Servos besser verfolgen.

Die Mittelstellung eines Servomotors findet man, indem man das Steuerhorn mit der Hand vorsichtig im und gegen den Uhrzeiger jeweils bis zum Anschlag dreht. Die Mittelstellung entspricht dann der 90° Position.

Abbildung 1 - Durch Drehen des Steuerhorns nach links und rechts bis zum jeweiligen Anschlag kann die Mittelstellung (90°-Position) schnell ermittelt werden.

Drehbewegungen eines Servos programmieren

Abb. 2 zeigt ein sogenanntes Zeitdiagramm eines Servomotors. Dargestellt wird eine Folge von HIGH-/ LOW-Signalen, bei der ein Servo in der 90° Position verweilt.

Abbildung 2 - Das Zeitdiagramm eines Servos. 1,5ms Impulse halten das Steuerhorn in der 90° Position (Mittelstellung)

Erkennbar ist:

  • die Signalfolge wiederholt sich alle 20 ms.
  • das HIGH-Signal liegt ca. 1,5ms an.
  • das LOW-Signal liegt ca. 18,5 ms an.

Mit diesem Pulsfolgeschema wird der Servo in seiner stabilen Mittelposition gehalten. Die Dauer des anliegenden LOW-Signals kann nach oben und unten um wenige Millisekunden abweichen, während die Dauer des HIGH-Signals für die genaue Positionierung exakt sein muss.

Mit dem speziellen BASCOM-Befehl

  • Servo(1) = n; n aus der Menge der natürlichen Zahlen,

lässt sich die Dauer für ein HIGH-Signal exakt vorgeben. Wir sprechen zukünftig auch kurz von der Pulsdauer eines HIGH-Signals.

Servo Ansteuerung

BASIC Befehlssequenz

Servo konfigurieren

  • Config Servos = 1, Mode = Servo, Servo1 = PortB.n, Prescale = 8
  • Enable Interrupts

Es lassen sich bis zu 14 Servos betreiben.

Servos = 1  - es wird nur ein Servo betrieben.

Mode = Servo  - speziell für Modellbau-Servos geeignet.

Servo1 = PortB.n  - legt den Anschlusspin für die Signalleitung vom Servo fest; n gibt den Pin an.

Prescale = 64  - die Taktfrequenz des Prozessors beeinflusst im Zusammenspiel mit dem Prescalefaktor die Impulslänge. Bei 9,6 MHz hat sich ein Prescalefaktor 64 als praktikabel erwiesen.

Drehwinkel

  • Servo(1) = <Zahl>

bestimmt, um welchen Drehwinkel sich das Steuerhorn des Servos bewegt.

Fuses einstellen

Kurzinformation

Taktfrequenz ändern

Über die Menüzeile von BASCOM aufrufen:

  • Programmieren - Zum _Chip senden - Manuell programmieren
  • Chip identify
  • Register Lock and Fuse Bits
  • Fusebit E - Divide Clock by 8  OFF

Die Änderung mit Write FS abschließen.

Das Programm Servo_01.bas

Mit einem Oszilloskop kann man zeigen, dass bei dieser Einstellung der Steuerimpuls für den eingesetzten Servomotor eine Impulslänge von 1,8ms hat. Entsprechend findet man eine Impulslänge von 0,5ms für die entgegengesetzte maximale Drehposition. Die Impulslängen bewegen sich für den benutzten Servo zwischen 0,5ms und 1,8ms.

Die Helligkeit der roten LED variiert bei diesen beiden Extremeinstellungen. Sie leuchtet deutlich schwächer bei 0,5ms und entsprechend heller bei 1,8ms Impulslänge. Im ersten Fall leuchtet sie 0,5ms von insgesamt 20ms (2,5%), im zweiten Fall 1,8ms von 20ms (9%).

 

Die drei gesuchten Zahlenwerte für den von mir eingesetzten Servo lauten:

  • Linksanschlag: Servo(1) = 255
  • Rechtsanschlag:  Servo(1) = 70
  • Mittelstellung:  Servo(1) = 160
Abbildung 3 - Bei f = 9,6 MHz und einem Prescalewert von 64 ergibt sich eine Impulslänge von 1,134ms für die Mittelstellung des Steuerhorns.

Übung 2

Drehposition

Ein Standardservo wird mit einem ATtiny13A verbunden; die Taktfrequenz beträgt 9,6 MHz.

 

Material

  • 1x  Steckbrett mit Nullkraftsockel
  • 1x  Standardservo
  • 1x  LED, rot
  • 1x  Widerstand 220 Ohm
  • 1x  ATtiny13A
  • diverse Steckdrähte
  • 1x  Software BASCOM
  • 1x  Brenner

--------------------------------------

  • 1x  USB Oszilloskop (optional)

 

Aufgaben

  • Entwickle ein Programm, das das Steuerhorn ganz nach links dreht, dort 3s verweilt, dann ganz nach rechts dreht, wieder 3s verweilt und dann in die Mittelposition dreht.

 Schaltungsaufbau

 Der Schaltungsaufbau ist mit dem aus Übung 1 identisch.

Das Programm servo_2.bas

Wie arbeitet das Programm servo_2.bas?

Wie bereits in Übung 1 läuft auch in diesem Programm die Konfiguration im Modus Servo über eine Interrupt-Routine. Wir gehen darauf an dieser Stelle nicht näher ein sondern nutzen sie als Black-Box-System.

Die Prescale-Einstellung (Zeile 18) beeinflusst die Impulslänge. Je nach Systemtakt sind unterschiedliche Werte zu wählen. Mit einem Systemtakt von 9,6 MHz leistet der Prescale-Wert 64 gute Dienste. Die Impulsdauer wird über Servo(1) eingestellt und lässt nur Werte zwischen 0 und 255 zu (über eine vordefinierte Variable vom Typ Byte). Damit sollte sich das Steuerhorn des Servo in die beiden Extrempositionen nach links und rechts drehen lassen.

  • Servo(1) = 70

dreht den Servo in die eine Extremposition (rechts) und wartet 3s (Zeile 25). Die zugeschaltete rote LED leuchtet relativ schwach.

  • Servo(1) = 255

dreht den Servo in die andere Extremposition (links) und warte wieder 3s. (Zeile 27). Die zugeschaltete rote LED leuchtet sehr hell.

  • Servo(1) = 162

dreht den Servo in die Mittelstellung mit anschließender Warteschleife von 3s. Die Lichtintensität der LED nimmt ab.

Da die Befehle in eine Do ... Loop Schleife eingebettet sind, wiederholen sich die beschriebenen Vorgänge beliebig oft.

Weiter geht´s mit dem Kapitel 7-Segment Anzeige

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf