Servo’s mit genauer PWM ansteuern
Ein Servo an einem Arduino Uno zu benutzen ist mit der Bibliothek Servo eigentlich kein Problem. Dazu gibt es bereits unendlich viele Beispiel im Internet. An einem Beispiel möchte ich zeigen wie die PWM etwas besser eingestellt werden kann.
void setup(){ Myservo.attach(3,500,2500); //befestigen an pin,min,max }
Wichtig, ist das die nicht nur der Pin sondern auch die minimale und maximale Pulsbreite in Mikrosekunden angegeben werden kann. Die meisten Servos werden in einem Bereich von 50 bis 250 Millisekunden angesteuert. Die Arduino Standartwert beträgt 544 und 2400 was zur Folge hat, das viele Servos keine komplette 180° Drehung schaffen.
void loop() { for(int pos=0;pos<=180;pos++){ Myservo.write(pos); //setzt die servo position delay(15); } delay(1000);
Mit Myservo.write (pos) wird der Winkel eingestellt, in zu der sich der Servo bewegen soll. Dabei wird die maximale Geschwindigkeit des Servos benutzt. Es besteht auch die Möglichkeit durch Myservo.writeMicroseconds(wert) nur Mikrosekunden (z.B. 500-2500) anstelle eines Winkels anzugeben. Das hat Vorteile bei der Benutzung von Servos die nicht dem Standard entsprechen oder andere Winkel haben.
#include<Servo.h> //einbinden der bibliothek Servo Myservo; //erstellen des objektes myservo void setup(){ Myservo.attach(3,500,2500); //befestigen an pin,min,max } void loop() { for(int pos=0;pos<=180;pos++){ Myservo.write(pos); //setzt die servo position delay(15); } delay(1000); for(int pos=180;pos>=0;pos--){ Myservo.write(pos); //setzt die servo position delay(15); } delay(1000); }
Das komplette Beispielprogramm mit einem PWM Signal von 50-250 ms.