Hallo zusammen.
Wie man die Periodendauer der Bibliothek Servo.h ändern kann habe ich Hier gelernt, und Funktioniert für den einen Zweck sehr gut.
Nun bin ich an einer anderen Sache dran und wie das so ist scheitere ich nun wieder an dieser Servo.h Bibliothek.
Ich möchte mit einem Gimbal (Servo an einer Kameraplattform) eine Achse verstellen, was auch Funktioniert.
Sieht in etwa so aus:
Bild
Was ich nun bemerkt habe ist das ich bei der Bibliothek Servo.h nur eine Auflösung von ca.180 habe (Angabe in °).
Bei einen eigenen (sehr uneleganten) Code habe ich eine Auflösung von ca. 1600.
Das Servo verfährt auch in dieser besseren Auflösung, wenn ich meinen eigenen Code benutze.
Ich habe also wirklich auch in der Praxis die viel bessere mechanische Auflösung.
Nur ist dieser Code alles andere als Professionell.
Darum würde ich gerne die Servo Bibliothek benutzen.
Leider habe ich bis jetzt nicht gefunden was ich an der Bibliothek ändern muss um die Auflösung zu ändern.
Hier noch mein Code:
// von Kay
// 1 Mai 2012
// Erzeugen von einem Servosignal an Pin 9 von ~85Hz mit einer Auflösung von ~ 1600
// Einzelne Schritte werden mit ~0.1 Sekunden hoch / runter gezählt
// Ohne Bibliothek und ohne Delay
int Winkel=700; // Servo Starwinkel ~0°
int Periodendauer=10000; // Periodendauer 10 millisekunden ~ 85Hz
int x=1; // Umschalter High @ Low Pin 9
int y=0; // Umschalter Winkel zählen
int Servo=9; // Servo an Pin 9
unsigned long Zeit;
unsigned long Zeit2;
long Pause = 100000; // Pause zwischen Änderung Winkel
void setup()
{
Zeit = micros();
Zeit2= micros();
pinMode(Servo,OUTPUT);
}
void loop()
{
if (x == 1)
digitalWrite(Servo,HIGH);
if (x==1&&(micros() - Zeit) >Winkel) // Erzeugen von einem Impuls für den Winkel
{
Zeit=micros();
digitalWrite(Servo,LOW);
x=0;
}
if (x==0&(micros() - Zeit) >Periodendauer) // Erzeugen von ~ 85Hz Periodendauer
{
Zeit=micros();
x=1;
}
if (y==0&(micros() - Zeit2)>Pause) // hochzählen des Winkels
{
Winkel=Winkel + 1;
Zeit2=micros();
}
if (y==1&(micros() - Zeit2)>Pause) // runter zählen des Winkels
{
Winkel=Winkel - 1;
Zeit2=micros();
}
if (y==0&Winkel>=2300) // Umschalter runter zählen
y=1;
if (y==1&Winkel<=700) // Umschalter hochzählen
y=0;
}
Ich hoffe hier gibt es Experten die wissen wie man die Servo.h Bibliothek ändern muss.
Gruss Kay
.