Servo mit AVR

Gast #4935
Lesenswert?

Hi Jens
hab' für code vision ein Programm geschrieben:

#include <90s2313.h>
#include <delay.h>

#define Servo PORTB.0
#define SERVO_DDRD DDRB.0



void Servo_1(char Impuls)
{
char i;
Servo = 0;    //low legen
delay_ms(20);
Servo = 1;    //high Impuls
delay_ms(1);
for(i=0;i<Impuls;i++)   //solange die Highflanke machen bis i = Impuls
  {
  delay_us(4);
  }
Servo = 0;


}

void main (void)
{
SERVO_DDRD = 1;    //als Ausgang definieren

while(1)
{
Servo_1(150);
}
}

die zahl, die du der Routine Servo_1 übergibst bestimmt die 
Servoposition (256 Stellungen sind mgl.)

Viel Erfolg

Christian
Gast #4936
Lesenswert?

Super, klasse, DANKE

aber noch eine Frage:
was passiert, wenn ich jetzt zwischendrin (im main) irgendwas rechne 
oder so, dann kann das ja vorkommen, dass sich die Zeiten dazwischen 
ändern, hat das Auswirkungen und wie kann ich das lösen?
Denn irgendwie möchte ich ja den Servo in Abhängigkeit von 
irgendendetwas steuern.

Gruß Jens
Gast #4937
Lesenswert?

ich hab das mit nem timer gemacht, der alle 20ms (bei mir 18ms) 
aufgerufen wird. dort wird dann der puls gemacht. Die variable Impuls 
muss dann global sein, dann muss dein hauptprogramm nur diese variable 
ändern, und der servo geht in eine andere stellung.

auf diese weise ist auch sichergestellt, dass der servo "kontinuierlich" 
seine pulse bekommt (wobei ich nicht weiß, was passiert, wenn er die nur 
bei änderung bekommt).
Gast #4943
Lesenswert?

Servos reagieren unterschiedlich, wenn das Eingangssignal ausbleibt. Die 
Regel sollte aber sein, dass es ohne Signal gar nichts tut, also seine 
Stellung nicht verändert. So ganz hasenrein ist es aber nicht, darauf zu 
bauen. Ich würd' dem Prozessor ruhig beibiegen, alle 20ms nachzulegen. 
In den mindestens 18 ms dazwischen haste doch noch soooo viel Zeit zum 
Rechnen.
Gast #4945
Lesenswert?

Hallo

Ich will fuer meine autonome Ameise ein board bauen das mindestens 24 
servos hat und von einem CYBIKO  [http://www.cybiko.com] Teen PDA ueber 
die serielle RS232 gesteuert wird. Ich habe vor dazu 2 Mega8 als slaves 
zubenutzen.
Weiss jemand ob das Probleme verursachen kann?

Baut jemand an etwas aehnlichen? Oder hat Lust zu helfen. Ich bin ein 
Metal Designer und sitze in Hollywood [wollte Monster bauen, kam aber 
zuspaet, die Monster sind weg, nur noch Zombys]
Ich habe eine schicke Ameise aus Alu die ich als Bausatz verkaufen 
moechte [Ich habe eine CNC Machine und kann ganz schnell  viele bauen] 
und brauche nur noch ein board. Wuerde Ameise gegen Hilfe tauschen.

Bis dann schoene Gruesse aus Hollywood

Marcus
Gast #4946
Lesenswert?

Nach meiner Erfahrung bleibt der Servo ohne Impulse an der aktuellen 
Position stehen. Die Regelung funktioniert dann allerdings nicht mehr 
(gibt ja kein Sollwert), daher läßt er sich per Hand verdrehen.

Problem oder nicht, nachdem was man damit vor hat ! Da das Servo eine 
sehr starke Untersetzung (Getriebe) hat, gibt es bei kleineren Lasten 
kein Problem.

Meines Wissen nach muß der Abstand zwischen den Pulsen 20ms lang sein, 
der genaue Wert ist allerdings nicht so kritisch. Kritisch ist der Wert 
für die Impulslänge. Bei unsauberer Programmierung fäng der Servo an zu 
Zittern. Man man die Abständen zwischen den Impulsen auf 40ms erhöhen. 
Das hab ich mal gemacht, weil ich sonst nicht mehr genug Rechenleistung 
hatte. Einfach mal ausprobieren !

Gruß
Björn

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren