Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung mit AVR - unerwarteter Aussschlag


von Marco (Gast)


Angehängte Dateien:

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

von Peter (Gast)


Lesenswert?

Wo ist genau dein Problem??

von Marco (Gast)


Lesenswert?

Das Servo steht bei (berechneten) 1,5mS Pulslänge nicht in der Mitte...

von Magnus Müller (Magnetus) (Gast)


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

von Magnus Müller (Magnetus) (Gast)


Lesenswert?

"Das Programm erzeugt ein Signal mit einem Puls-/Pausenverhältnis von
20:1,5"

Äh... es sollte natürlich heissen:   1,5:20

sorry ;)

von Marco (Gast)


Lesenswert?

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

von Andreas Schima (Gast)


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

von Karl H. (kbuchegg)


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;

von smay4finger. (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


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.

von Marco (Gast)


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

von Andreas K. (andreas-bahn)


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

von Florian (Gast)


Lesenswert?

Hi,

les dich mal in die PWM ein. Ich glaub da gibts sogar was hier aufm 
mik.net. Ansonsten google mal.
ciao

Florian

von Hannes L. (hannes)


Angehängte Dateien:

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.

...

von inoffizieller WM-Rahul (Gast)


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

von Andreas K. (andreas-bahn)


Lesenswert?

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

von inoffizieller WM-Rahul (Gast)


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

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
Noch kein Account? Hier anmelden.