Ansteuerung von Servomotoren



Ein Servomotor (kurz "Servo") ist ein Motor, der sich nicht einmal eine ganze Umdrehung bewegen kann.


                            Bild: Servo

Dafür kann er jedoch einen bestimmten Drehwinkel einnehmen. Diesen Winkel kannst Du bestimmen.

So ein Servo hat drei Anschlüsse:

  1. Betriebsspannung (bei meinem Servo: 5V / Farbe rot)
  2. GND (=Masse) (bei meinem Servo: Farbe braun)
  3. Signaleingang (bei meinem Servo: Farbe orange)

Für den gewünschten Drehwinkel speist Du ihm in den Signaleingang ein Rechtecksignal von 1 bis 2 ms (Millisekunden) Breite ein:

  • für Linksanschlag: 1ms
  • für Mittelstellung: 1,5ms
  • für Rechtsanschlag: 2ms
  • natürlich sind alle anderen Winkel auch möglich.

Damit der Servo diesen Winkel mit einer gewissen Kraft halten kann, muß spätestens nach 20 ms ein neuer Impuls kommen.

Um ein solches Rechtecksignal zu erzeugen gibt es z. B. diese Möglichkeiten:

  • PWM-Ausgang eines Mikrocontrollers (Hardware-PWM)

  • ein normaler digitaler Ausgang eines Mikrocontrollers wird zeitlich exakt ein- und ausgeschaltet (Software-PWM)

  • Benutzung eines Timer-ICs  NE555 mit einer PWM-Beschaltung



Beispiel einer Software-PWM
 
Wir benutzen PB1 eines Atiny13 oder Atmega8 (oder welchen AVR Du willst) und senden ein 1,5ms langes Signal, um Mittelstellung anzufahren.
Dies wiederholen wir nach 20ms:

#include <avr/io.h>

#define F_CPU 1200000UL  // 1,2 MHz

#include <util/delay.h>

int main(void){

    float z = 1.5;
    DDRB |= _BV(PB1);           

       
       while (1) {
           PORTB |= _BV(PB1); _delay_ms(z);
           PORTB &= ~_BV(PB1); _delay_ms(20-z);
       }
  
return 0;
}

Du brauchst jetzt nur die Variable z zu verändern, um andere Winkel anzufahren.



Aufgaben:

  • Schreibe ein Programm, das die Variable z von 1ms bis 2ms "durchleiert", so daß der Servo nacheinander langsam Rechts- und Linksanschlag anfährt!

  • Schreibe ein Programm, das mittels Hardware-PWM mehrere Servos ansteuert!