mikrocontroller.net

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


Autor: Marco (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist genau dein Problem??

Autor: Marco (Gast)
Datum:

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

Autor: Magnus Müller (Magnetus) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Magnus Müller (Magnetus) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. :)

Autor: Andreas Schima (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: smay4finger. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Kranz (andreas-bahn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Florian

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Andreas Kranz (andreas-bahn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.