Servoansteuerung mit AVR - unerwarteter Aussschlag

Gast #320233
Lesenswert?

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
Angehängte Dateien:
Gast #320236
Lesenswert?

@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 ;)
Gast #320239
Lesenswert?

@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
#320240
Lesenswert?

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;
#320242
Lesenswert?

> 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.
Gast #320243
Lesenswert?

@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
#428653
Lesenswert?

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
#428729
Lesenswert?

> 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.

...
Angehängte Dateien:
Gast #428805
Lesenswert?

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).
Gast #429256
Lesenswert?

>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"... ;)

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