Servo mit AVR

Gast #4933
Lesenswert?
• ▲
▼
ganz einfach:

du musst dem motor einen 1-2ms langen puls geben, dann 18ms warten und 
wieder einen puls.

ist der puls 1,5ms lang, steht der motor in mittelstellung, bei weniger 
steht er links, bei mehr rechts. die genauen zeiten hängen jedoch von 
deinem motor ab.
Gast #4934
Lesenswert?
• ▲
▼
Hallo Jonas,

sehe ich das richtig, muss ich diesen 1-2sec langen Impuls dauernd geben 
oder reicht das auch immer nur einmal?
Oder was passiert, wenn ich keinen Impuls mehr gebe?

Gruß Jens
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 #4940
Lesenswert?
• ▲
▼
stimmt. ich hatte seinerzeit gelesen, dass der servo insgesamt 20ms 
braucht, also die pulslänge plus den rest, damits auf 20ms kommt... 
vielleicht stimmt diese info aber auch nicht. klärt mich auf! :-)
Gast #4941
Lesenswert?
• ▲
▼
Das mit den 20ms hängt damit zusammen, dass übliche Fernsteuerungen 
maximal 10 Kanäle bedienen. Und zwar nacheinander. Sprich: Jedes 
PWM-Signal wird nach dem anderen generiert. 10 * 2ms = 20ms 
Wiederholrate.
Gast #4942
Lesenswert?
• ▲
▼
@Holger

Wiederholrate, heißt das jetzt das der Servo immer nen Impuls braucht, 
oder müsste ich ihn nur bei einer Änderung "schicken"??

Bin noch nicht so weit mit meinen Tests......
muss erst mal meinen servo rauskramen!

Jens
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 #4944
Lesenswert?
• ▲
▼
fast alle anständigen Servos machen nix, wenn sie nicht angesterut 
werdne - manche flattern dann munter drauf los - ohne ansteuerung ist 
der Servo aber mit der Hand oder mit kleinen Lasten zu verändern --> 
keine gute Lösung!!


mfg
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