Ansteuerung von Servomotoren
Ein Servomotor (kurz "Servo") ist ein Motor, der sich nicht einmal eine
ganze Umdrehung bewegen kann.
Dafür kann er jedoch einen bestimmten
Drehwinkel einnehmen. Diesen Winkel kannst Du bestimmen.
So ein Servo hat drei Anschlüsse:
- Betriebsspannung (bei
meinem Servo: 5V / Farbe rot)
- GND (=Masse) (bei meinem
Servo: Farbe braun)
- 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!
|