Pages: [1]   Go Down
Author Topic: Auflösung der Servo.h Bibliothek ändern  (Read 692 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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

.
« Last Edit: May 01, 2012, 10:55:04 am by Ketchup » Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vieleicht hilft Dir schon dieser Auszug aus der servo.cpp weiter:

Code:
attach(pin )  - Attaches a servo motor to an i/o pin.
 attach(pin, min, max  ) - Attaches to a pin setting min and max values in microseconds
 default min is 544, max is 2400 
 
 write()     - Sets the servo angle in degrees.  (invalid angle that is valid as pulse in microseconds is treated as microseconds)
 writeMicroseconds() - Sets the servo pulse width in microseconds

Viel feiner wird die Servoelektronik kaum auflösen.

LG Lena
Logged

„Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“

Albert Einstein

Offline Offline
Newbie
*
Karma: 0
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

writeMicroseconds() !

Und schon passt es.
Was mich stresst ist das ich dies nicht gefunden habe und dafür 1 Tag versaut habe.
Ich bin mal sauer auf mich selber!!

Vielen Dank für deine Antwort Lena.

Gruss Kay
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20298
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da hilft das nächste mal nur nach 2 Stunden eine Pause machen und an etwas anderes denken; dann wieder an den Arduino setzen und meistens gehts dann besser.
Grüße Uwe
Logged

Pages: [1]   Go Up
Jump to: