Hallo, um besser mit den Timern und den Interrupts klarzukommen (lerning by doing) habe ich mir gestern mit Hilfe des Datenblatts und der WinAVR Beispiele ein Programme gebastelt, das ein Modellbauservo ansteuern soll. Ich war erstaunt wie einfach es zu sein scheint ein solches Programm zu schreiben und dass C dafür eigentlich übertrieben ist... aber ich lasse es erst mal so :) Laut Oszi ist das Ausgangssignal des AT90S4433 (war noch übrig) ok. Ich habe zwei Graupner C341 Servos getestet, die auf jedenfall Fall in Ordnung sind und beide drehen bei einem Wert von 1500µs nicht in Mittelstellung sondern recht nah an den Anschlag :( Das Programm habe ich mal angehängt. Habe mich bemüht es einigermaßen zu dokumentieren :) Grüße, Marco
Das Servo steht bei (berechneten) 1,5mS Pulslänge nicht in der Mitte...
@Marco: Das Programm erzeugt ein Signal mit einem Puls-/Pausenverhältnis von 20:1,5 bei einer Periodendauer von 21,5 ms. Die vorgegebene Periodendauer sollte aber 20,0 ms sein, oder? Korrigiere den Pausenwert auf 18500 (20000-1500) und es sollte gut sein ;)
"Das Programm erzeugt ein Signal mit einem Puls-/Pausenverhältnis von 20:1,5" Äh... es sollte natürlich heissen: 1,5:20 sorry ;)
Oh danke, werde es mal ändern... also "Servo_Pause=20000-Servo_Puls", stimmt's? Hatte mal gehört dass die 20ms nicht soooo genau eingehalten werden müssen und eher ein Richtwert sind. :)
@marco Die Periodendauer (20ms) ist nicht so wichtig. Die von mir verwendeten Servos funktionieren einfach nur bei dieser Frequenz ganz gut. Der Servo regelt bei jedem Puls die Position der Abtriebswelle nach, bei 50Hz eben 50mal/s. Gibst Du dem Servo den Puls beispielsweise mit 1Hz, regelt er die Position nur 1mal pro Sekunde nach, was für die meisten Anwendungsfälle natürlich zu wenig sein dürfte. Gruß, Andreas
Ausserdem stimmt die Sache mit 1ms bis 2ms als Pulslänge auch nicht ganz. MPX Servos haben zB. ein etwas anderes Timing. Also, am einfachsten: Probier einfach Werte aus, bis du den rechten und den linken Extremwert gefunden hast. Dazwischen sollte es allerdings schon linear sein. D.h. Mittelstellung = ( linker_anschlag + rechter_anschlag ) / 2;
Bist Du Dir sicher, daß Deine Berechnungen richtig sind? Eventuell verwendest Du beim AVR gar nicht den Quarz, sondern den internen RC-Oszillator. Prüfe doch mal das Signal am Oszi. mfg, Stefan.
> Also, am einfachsten: Probier einfach Werte aus, bis > du den rechten und den linken Extremwert gefunden hast. Aber sei vorsichtig: Im Getriebe ist normalerweise eine mechanische Sperre drinnen. Servos moegen es gar nicht gerne, wenn sie an diesen Anschlag gefahren werden und dort längere Zeit gehalten werden. Das erkennst Du im übrigen daran, dass der Motor deutlich zu knurren anfängt. Wenn der Hebel nach dieser Auslotung dann immer noch nicht (für Dich) in Mittelposition kommt, dann mach folgendes: Der Hebel ist festgeschraubt. Mach die Schraube los, zieh den Hebel ab und setz ihn anders in die Verzahnung ein. Schraube wieder anziehen und fertig.
@Stephan.: Das ist bei mir zum Glück nicht möglich. Als der AT90S4433 hatten die Controller noch keinen internen Oszillator :) Und auf dem Oszi kann ich erkennen dass die Pausendauer wirklich 20ms beträgt. Von daher sollte auch die Pulsdauer stimmen... theoretisch. @Andreas: Danke für die Erklärung! Gut zu wissen dass man durch kürzere Pausen die Servos dazu bewegen kann sich öfter zu justieren... damit auch schneller? Nein oder? Der Motor kann ja nicht auf einemal schneller drehen. Schade :) @Karl Heinz: Danke, vielleicht könnte ich mal messen was am Servo ankommt wenn ich die Signale von meinem Sender erzeugen lasse. Ich habe mich auch da schon oft gewundert dass man den Servoweg noch ein Stück spreizen kann wenn man es nur am Sender entsprechend einstellt... also testen, messen und übertragen. Grüße, Marco
Hallo Ich bin neu hier und habe noch nicht soviel erfahrung mit der programmierung. Kann schon ein paar LED´s mit dem at90S2313 ansteuern. Programm in Bascom geschrieben. möchte gerne ein Servo an steueren um etwas zu bewegen. Das Servo soll mit einem Taster zur Linken Seite und mit dem anderen Taster zur Rechten Seite laufen. wie kann ich das mit Bascom erstellen? kann man das auch mit einem Tiny 13 oder 15 machen? würde mich sehr über eine Antwort freuen. Mit Dank andreas-bahn
Hi, les dich mal in die PWM ein. Ich glaub da gibts sogar was hier aufm mik.net. Ansonsten google mal. ciao Florian
> möchte gerne ein Servo an steueren um etwas zu bewegen. Gute Idee... > Das Servo soll mit einem Taster zur Linken Seite und mit dem anderen > Taster zur Rechten Seite laufen. Das Beispiel im Anhang läuft bei gedrücktem Taster zur einen Position, bei losgelassenem Taster zur anderen Position. > wie kann ich das mit Bascom erstellen? Das kann ich Dir leider nicht sagen, für BASCOM bin ich zu unwissend, ich programmiere AVRs nur in Assembler. > kann man das auch mit einem Tiny 13 oder 15 machen? Ja, das geht mit Tiny 12, Tiny13 und auch Tiny15, denn es benötigt nur einen Timer-Interrupt. Tiny12 oder Tiny15 sollten allerdings auf Nennfrequenz calibriert werden, sonst stimmen die Impulsbreiten nicht. ...
Bascom hat eine Servo-Funktion, die im Handbuch beschrieben ist.
Vielleicht findet sich ja mal jemand, der das Ding ins Deutsche
übersetzt.
>Ob Bascom was mit den Tinies anfangen kann, weiß ich nicht. (Sollte auch im
Bascom-Handbuch stehen).
Hallo an alle Erst mal Danke an alle die mir geholfen haben. Aber was ist "c" und wo bekommt man es? habe noch nichts davon gehört. Ist es besser als Bascom? Mit Dank andreas
>Aber was ist "c" und wo bekommt man es? >habe noch nichts davon gehört. Das ist nicht dein Ernst, oder? C ist übrigens ein lateinischer Buchstabe... >Ist es besser als Bascom? Ja! (und das ist meine ganz persönliche subjektive Meinung!) Wenn du einen Blick in die Spalte auf der linken Seite werfen möchtest, wirst du ein AVR-GCC-Tutorial finden - Da ist dann auch beschrieben, wo man C findet (nicht nur zwischen "b" und "d"... ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.