PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo Fragen



TrainMen
29.06.2009, 02:08
Hi,

ich habe hier den CodeSchnipsel irgendwo her, ich habe den so verändert das sich jetzt mein Servo um 180 Grad dreht. Die Pausen zwischen den Drehungen sind klar, der Winkel auch. Nur die Geschwindigkeit, z.B. von links 90 Grad zu rechts 90 Grad kriege ich nicht hin. Das Servo ist mir zu schnell. Was muß ich also genau tun ?

Trainmen


#include "RP6RobotBaseLib.h"

int main(void)
{
initRobotBase();
DDRA |= 1;

while(true)
{
for(i=0;i<100; i++)
{
PORTA |= 1;
sleep(25);
PORTA &= ~1;
sleep(190);
}

for(i=0;i<100; i++)
{
PORTA |= 1;
sleep(5);
PORTA &= ~1;
sleep(180);
}
}
return(0);
}

radbruch
29.06.2009, 02:21
Nicht getestet:

#include "RP6RobotBaseLib.h"

uint8_t i,j;

int main(void)
{
initRobotBase();
DDRA |= 1;

while(true)
{
for(i=5;i<25; i++) // Schritte von 5 bis 25
{
for(j=0;j<10; j++) // Position 10 mal senden
{
PORTA |= 1; // Servo-PWM ein
sleep(i); // auf Winkel warten
PORTA &= ~1; // Servo-PWM aus
sleep(200-i); // auf 20ms warten
}
}

for(i=25;i>5; i--) // und zurück von 25 nach 5
{
for(j=0;j<10; j++)
{
PORTA |= 1;
sleep(i);
PORTA &= ~1;
sleep(200-i);
}
}
}
return(0); // wird nie erreicht
}

Gruß

mic

TrainMen
29.06.2009, 02:42
Guten Morgen Mic,
ja nicht ganz das Ziel erreicht, weil er ja jetzt schritte macht, ich möchte aber das er fließend rumläuft.
Trainmen

radbruch
29.06.2009, 02:51
Guten Morgen :)

Für eine fließendere/schnellere Bewegung kannst du entweder die Anzahl der Wiederholungen verringern:

for(j=0;j<10; j++)

Oder die Schrittweite vergrößern:

for(i=5;i<25; i+=1)

Gruß

mic

TrainMen
29.06.2009, 03:13
Hi
hmm wollt ich gerade dir mitteilen das ich die werte verändert hab und nun zufrieden bin.............
da lese ich die Lösung auch schon von dir
Dankeschön
Trainmen