Forum: Mikrocontroller und Digitale Elektronik Ansteuerung von einem Servo


von Gerhard (Gast)


Lesenswert?

Ich habe mit Microkontollern leider noch keine Erfahrung!
Habe aber jemanden, der mir ein Programm auf einen Chip brennen kann!

Mir geht es um folgendes:

Ich habe ein Servo aus dem Modellbaubereich(HITEC HSR-1422) welches 360
Grad dreht!

Nun möchte ich es über einen Microkontroller und zwei Taster steuern.

Wird der Taster "UP" gedrückt, so fährt das Servo einen bestimmten Weg
ab und stoppt dann. Wird die Taste "UP" erneut betätigt, so fährt das
Servo von der letzten Stellung den selben Weg wieder ab!
--> Fährt also bei erster Betätigung von 0 Grad auf 20 Grad und bei
erneutem Betätigen von 20 Grad auf 40 Grad und so weiter!!!

Wird nun der Taster "DOWN" gedrückt, so soll das Servo den selben Wert
von seiner aktuellen Position in die andere Richtung fahren!
--> Steht es also auf 40Grad so soll es bei Betätigung von "DOWN" auf 20
Grad fahren und so weiter!

Ist soetwas möglich?
Vielen Dank schonmal!!!

von Magnus Müller (Gast)


Lesenswert?

Ja, das ist möglich.

von STK500-Besitzer (Gast)


Lesenswert?

Ich schliesse mich Magnus an: Es ist möglich. (Für mancheinen auch 
Pippifax...)

von Stefan (Gast)


Lesenswert?

Wie die Vorredner schon festgestellt haben: Ja, das ist möglich. Aber 
was genau willst du nun wissen ?

Gruß
Stefan

von Sebastian (Gast)


Lesenswert?

(Blick in die Kristallkugel) Ich vermute mal, er möchte wissen, welches 
PWM-Verhältnis dem gewünschten Drehwinkel entspricht, und wie man das 
mit dem Mikro erzeugt.

von Magnus Müller (Gast)


Lesenswert?

Ohne eine Kristallkugel zu befragen kann ich dir sagen: Er will fertigen 
Code.

von hans (Gast)


Lesenswert?

Helft ihm doch und sagt ihm gleich, daß
im Forum 514 Einträge zum Thema "Servo" gefunden
werden!!
"Was ist eine Suchfunktion?"  ;D

von Dennis (Gast)


Lesenswert?

@Gerhard:

ich schliesse mich meinen Vorredner an, und stelle dir mal die 
wichtigsten Fragen.

- willst du fertigen Code, den man nur noch flashen muss? Wirst du mit 
an Sicherheit grenzender Wahrscheinlichkeit von keinem hier bekommen, 
sondern musst dir schon selbst erarbeiten. Wenn da Fragen auftauchen, 
die nicht im Tutorial 
(http://www.mikrocontroller.net/articles/AVR-Tutorial) und 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial) zu finden 
sind, so kannst du diese Fragen im Forum stellen. Da unter den beiden 
Quellen man jedoch alles findet, wird dieser Fall nicht eintreten. In 
sochen Fällen ist folgende Seite sehr hilfreich: http://www.gidf.de

- willst du jemanden beauftragen, Hardware und Software für dich zu 
entwickeln. Da finden sich bestimmt einige, aber unterschätze die Preise 
nicht. Selbst soetwas simples macht hier keiner für 20 EUR...  Für das 
10-fache vielleicht. Selber machen ist meist günstiger und lehrreicher. 
Vielleicht findest du ja sogar Spass daran...

von Gast (Gast)


Lesenswert?

Falls Du jemanden suchst, der das für Dich macht, was ist es Dir denn 
wert?

von juppi (Gast)


Lesenswert?

@Gerhard (Gast)

wenn du es mit einen Pic versuchst, mal sehen ob ich es als 
Miniübungsprogramm machen kann.

von juppi (Gast)


Lesenswert?

vergessen......20 Euro sind eine gute bezahlung

von Gerhard (Gast)


Lesenswert?

@juppi

Hast du ne Mailadresse?

@ the rest
Ich ha mich schon durch die Suchfunktion gewurschtelt. Nur leider habe 
ich nicht die Zeit dazu mich in die Materie einzuarbeiten!
Es gibt hier bestimmt einige für die das ein Pippifax ist solch ein 
Programm zu schreiben!

von Kachel-Heinz (Gast)


Lesenswert?

Zeit ist wohl bei fast allen das Problem. Es gibt genug Anderes zu tun.

Wenn ich es machen müsste, würde ich einen Tiny15 oder Tiny25 einsetzen. 
Aber ich muss ja nicht, Juppi wirs's schon richten.

K.-H.

von Dennis (Gast)


Lesenswert?

loool, genau. Juppi wird es schon richten.

Gerhard, du weisst schon, dass Juppi unser Forentroll ist???

Gruss:

Dennis

von Gerhard (Gast)


Lesenswert?

Das mit dem Forentroll weiß ich noch nicht!
Was ist eigentlich ein Forentroll?

Ich denke, jemand der absolut Ahnung hat, wird sicher wesentlich weniger 
Zeit investieren müssen als jemand, dem die Materie komplett fremd ist 
und der sich erst einmal einarbeiten müsste, gerade bei so einem 
komplexen Thema!

von STK500-Besitzer (Gast)


Lesenswert?

Ich sehe da nur das Problem des Testens. Ich bin zwar Modellbauer, aber 
nur wegen dieses Programms würde ich mir nicht dieses spezielle Servo 
besorgen. Es muß ja ausprobiert werden, mit welchen Impulslängen das 
Servo arbeitet, um ein entsprechendes Zeit-Inkrement zu programmieren. 
Dass der Standard-Impuls zwischen 1ms und 2 ms liegt ist mir klar; nur 
wird dieses Intervall auch gerne nach oben und unten stärker ausgenützt.
Ich hab aber eh keine Zeit...(und wenn dann nur für meine Freundin und 
AVR.)

von Gerhard (Gast)


Lesenswert?

@ STK500 Besitzer

Gibts ne Formel um die Impulslänge für eine bestimmte Gradzahl zu 
berechnen?

Wie müsste das Programm aufgebaut sein um die Impulse auszugeben?

von Kachel-Heinz (Gast)


Lesenswert?

> Das mit dem Forentroll weiß ich noch nicht!
> Was ist eigentlich ein Forentroll?

Ich vermute, das ist Der, dem es nur darauf ankommt, andere Leute 
aufeinander zu hetzen und zu provozieren.

> Ich denke, jemand der absolut Ahnung hat, wird sicher wesentlich weniger
> Zeit investieren müssen als jemand, dem die Materie komplett fremd ist
> und der sich erst einmal einarbeiten müsste, gerade bei so einem
> komplexen Thema!

Sieh' es mal so: Wer da etwas Ahnung hat, der hat diese Zeit bereits 
investiert (und dafür auf andere schöne Dinge des Lebens verzichtet), 
denn von nix kommt nix.

Um das zu realisieren, muss natürlich auch ein entsprechendes Servo zur 
Verfügung stehen.

Aber Juppi macht das auch ohne...

KH

von Gerhard (Gast)


Lesenswert?

Als Servo hab ich mir folgendes rausgesucht:
http://www.robonova.de/store/product.php?productid=16148&cat=249&page=1

Hier noch ein paar Daten:

# 138008
HiTEC-Robotics Servo HSR-1422 ohne Umdrehungsbegrenzung für 
Robotikanwendungen. Das Servo eignet sich sehr gut als Antrieb für 
kleinere Roboter.

· 900 - 1500us/CCW, 1500us/Stop, 1500-2100us/CW
· PWM-Interface (RC Standard)
· Neutralposition: 1500µs
· Neutralzone: 10µs
· Betriebsspannung: 4,8-6V
· Stromaufnahme:
- 8mA angehalten
- 150mA Bewegung ohne Last
- 640mA bei Blockierung
· Blockiermoment: 2,8kgcm bei 4,8V
· Drehzahl: 43,4rpm
· Größe: 40,6 x 19,8 x 36,6mm
· Gewicht: 42g
Details


Lager/Bearing:
Geschwindigkeit/Speed (sec/60°): 43.4 rpm at no load
Drehmoment/Torque (kg/cm): 2.8

von Kachel-Heinz (Gast)


Lesenswert?

> Gibts ne Formel um die Impulslänge für eine bestimmte Gradzahl zu
> berechnen?

Nein, zumindest keine einfache allgemein gültige, dazu sind die Servos 
zu unterschiedlich.

> Wie müsste das Programm aufgebaut sein um die Impulse auszugeben?

Das Programm muss mittels Timer den Impuls erzeugen, also alle etwa 20 
ms einen variablen Impuls von 1,0 ms bis 2,0 ms (0,7 ms bis 2,3 ms) 
erzeugen. Es muss weiterhin alle etwa 20 ms (also mit dem selben Timer) 
die Tasteneingänge abfragen und entprellen und bei Tastendruck die 
variable Impulsbreite ändern.

Das Programm besteht demnach aus der Initialisierung und zwei 
Timer-Interrupts. Der erste Timer-Interrupt macht die Tastenentprellung, 
das Berechnen (und Setzen) der gewünschten Impulsbreite und den 
Impulsbeginn, der Zweite Timer-Interrupt beendet den Impuls. Der zweite 
Interrupt lässt sich auch einsparen, indem man die Hardware-PWM des 
Timers benutzt, aber bei den langsamen Impulsen für Servos ist das nicht 
nötig.

KH

von Gerhard (Gast)


Lesenswert?

Ich hab jetzt hier mal ein Programm gefunden. Wenn ich richtig liege 
müsste das bei mir doch funktionieren....muss nur noch ein wenig 
angepasst werden oder?

Hier wird zur STeuerung allerdings die RS232 Schnittstelle verwendet!


#include <16F877a.h>
#use delay (clock=20000000)
#fuses HS, NOWDT, NOPROTECT, NOLVP
#use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#include <stdlib.h>

int8 pos;
int8 zaehler = 0;

#INT_TIMER2
void isr()
{
   zaehler++;

   if(zaehler == 180)
   {
     zaehler = 0;
     output_high(PIN_C2);
   }
   if(zaehler == pos)
     output_low(PIN_C2);
}


void main (void)
{
   char empfangen = 'a';

   setup_timer_2(T2_DIV_BY_4, 125, 1);
   set_timer2(0);

   enable_interrupts(INT_TIMER2);
   enable_interrupts(GLOBAL);

   while(true)
   {
    if(kbhit())
     {
        empfangen=getc();

        switch (empfangen)
        {
           case 'a': pos=20;
                     break;
           case 'd': pos=10;
                     break;
           case 's': pos=15;
                     break;
        }
      }
   }
}

von Hannes L. (hannes)


Lesenswert?

Vorschlag:

Sponsere mir zwei dieser Servos (ein Servo kostet 16,20 Euro), ich 
schicke Dir dafür zwei fertig programmierte Mikrocontroller (AVRs), den 
zugehörigen Schaltplan und natürlich auch den kommentierten Quelltext 
des Programms. Das ist zwar etwas teurer als die erwähnten 20 Euro, 
dafür bekommst Du aber auch etwas mehr.

Hier kannst Du Dir ein Urteil bilden, ob Du mir die Sache zutraust:
http://www.hanneslux.de/avr/mobau/index.html

Weitere Details können per Mail (Benutzerinterface dieses Forums) 
geklärt werden.

...

von Magnus Müller (Gast)


Lesenswert?

@Hannes (und alle Anderen):

Schon bemerkt, dass das Servo kein echtes Servo mehr ist? Das Servo 
wurde scheinbar modifiziert. D.h. dass das Servopoti entweder von der 
Servoachse getrennt wurde, bzw. durch einen normalen 
Trimmer/Spannungsteiler ersetzt wurde, um das Servo bei einer Pulslänge 
von 1,5ms zum stehen zu bringen. Das Einzige was dem Ding gesagt werden 
kann ist "dreh nach links", "dreh nach rechts" und "halt die Klappe".

Die Lösung der Aufgabe (Anfahren von definierten Positionen) dürfte 
damit gelinde gesagt schwierig werden.

Auf jeden Fall ein großes Lob an Hannes. Das Angebot "2 Servos für 2 
programmierte AVRs incl. 'Entwicklung'" ist fair.

Gruß,
Magnetus

von juppi (Gast)


Lesenswert?

@ Kachel-Heinz (Gast)
Datum: 28.07.2008 09:36


> Das mit dem Forentroll weiß ich noch nicht!
> Was ist eigentlich ein Forentroll?

>>Ich vermute, das ist Der, dem es nur darauf ankommt, andere Leute
>>aufeinander zu hetzen und zu provozieren.

Meinungen sich anhören, aber sich selbst eine Meinung bilden,
das ist wichtig!

>Aber Juppi macht das auch ohne...
wie erwartet,die Daten sind gekommen....


Immerhin wurden endlich seriöse Angebote gemacht.

von Kachel-Heinz (Gast)


Lesenswert?

@ juppi (Gast)
Datum: 28.07.2008 21:05

Ich verstehe nicht, was Du mit Deinem Beitrag ausdrücken willst. Deine 
halben Sätze sind so konkret wie die Aussage einer Wahrsagerin. Man kann 
so ziemlich alles oder aber auch gar nichts hinein interpretieren.

KH

von juppi (Gast)


Lesenswert?

@Magnus Müller (magnetus)

Du hast mit dem Servo recht.

@Kachel-Heinz (Gast)

Nur so nebenbei.. wenn du es nicht verstehst ,dann antworte BITTE nicht.

von STK500-Besitzer (Gast)


Lesenswert?

>Schon bemerkt, dass das Servo kein echtes Servo mehr ist? Das Servo
>wurde scheinbar modifiziert. D.h. dass das Servopoti entweder von der
>Servoachse getrennt wurde, bzw. durch einen normalen
>Trimmer/Spannungsteiler ersetzt wurde, um das Servo bei einer Pulslänge
>von 1,5ms zum stehen zu bringen. Das Einzige was dem Ding gesagt werden
>kann ist "dreh nach links", "dreh nach rechts" und "halt die Klappe".

Also ein Getriebemotor mit elektronischem Drehzahlsteller im 
Servo-Gehäuse.
Ohne expliziten Drehgeber wird das nichts mit 20° hierhin und 20° dahin; 
aus dem einfachen Grund, dass man die Belastung des "Servo" nicht kennt.

von Gerhard (Gast)


Lesenswert?

Das Servo soll mit 6kg belastet werden, wobei zwischen Motor und Kraft 
noch eine 3:1 er Untersetzung ist! Folglich wird das Servo mit 2kg 
kurzzeitig belastet!

von Hannes L. (hannes)


Lesenswert?

Da es sich nicht um ein klassisches Servo (mit interner 
Positionsregelung) handelt, sondern um einen Fahrantrieb für 
Spielzeug-Robbi (oder RC-Modelle), ziehe ich mein Angebot erstmal 
zurück.

Vielleicht lässt sich ja ein externes Poti an die interne Elektronik 
anklemmen, aber vielleicht auch nicht. Da auch nichts über den 
erforderlichen Gesamt-Drehwinkel bekannt ist, weiß ich nichtmal, ob der 
Drehbereich eines Potis da ausreicht. Es wird also alles etwas 
komplizierter als zuvor gedacht.

Sollte der Fahrantrieb mit geringem Aufwand zum Servo umfunktioniert 
werden können, dann stehe ich zu meinem Angebot. Aber mit der Mechanik 
(Poti an das Getriebe anbauen) will ich nichts zu tun haben.

Mein Angebot bestand/besteht darin, mittels AVR einen Servoimpuls zu 
erzeugen, dessen Impulsbreite (also die Servoposition) einer Liste 
entnommen wird, in der per Tasten geblättert werden kann. Ich wollte 
auch noch einen Lernmodus (weitere Tasten oder Jumper) einbauen, damit 
jede Position exakt justiert werden kann. Ich hatte auch eine Anzeige 
der Position mittels LED-Lichtschachtanzeige in Erwägung gezogen.

...

von juppi (Gast)


Lesenswert?

Ich "glaube"  durch die PWM
wird eine Geschwindigkeitsteuerung erreicht,
dann hat das ganze ein wenig Sinn.
Aus den Daten kann ICH es nicht erkennen.

...Testen.

von Hannes L. (hannes)


Lesenswert?

Richtig, "Testen" ist eine akzeptable Möglichkeit. Doch wer trägt das 
Risiko? Ich kaufe mir doch nicht das Servo, um dann festzustellen, dass 
es für diesen Zweck nicht geht. Ich rate auch dem Auftraggeber nicht, 
das Servo auf das Risiko hin zu kaufen, dass es ungeeignet ist.

Es gibt mit Sicherheit Alternativlösungen (auch robuste und trotzdem 
bezahlbare), aber solange keine klare Aufgabenstellung vorliegt, werde 
ich nicht weiter darüber nachdenken. Habe genug Anderes zu tun, 
"brauche" also diesen "Auftrag" nicht...

Ich bin damit 'raus.

...

von STK500-Besitzer (Gast)


Lesenswert?

>Ich "glaube"  durch die PWM wird eine Geschwindigkeitsteuerung erreicht,

Glauben kann man in der Kirche...

Wie ich oben schon geschrieben habe, handelt es sich um einen 
Getriebemotor mit elektronischem Drehzahlsteller (geregelt wird da 
i.d.R. nichts, da der entsprechende Sensor fehlt) im Servo-Gehäuse.
Dabei wird es sich - wie von Magnus schildert - um ein modifiziertes 
Servo handeln.
Das Poti im Servo ist ja der Positionsistwert-Lieferant. Der dem 
Regelkreis die aktuelle Position des Rotors liefert, damit dieser 
wiederum die Drehzahl des Motors anpasst. Je größer die Entfernung 
zwischen Soll (Pulsweite, die vom Sender kommt) und Ist (Pulsweite, die 
das Monoflop im Servo durch das Poti liefert) ist, um so grösser die 
Stellgeschwindigkeit.
Gleiches Prinzip eines elektronischen Drehzahlstellers.

Mit der Positionsregelung hat das natürlich nichts mehr zu tun...

von juppi (Gast)


Lesenswert?

@STK500-Besitzer (Gast)

Ich "glaube" dann sind wir einer Meinung

von Kachel-Heinz (Gast)


Lesenswert?

Ich "glaube", juppi sollte nun endlich mal das Problem lösen, anstatt 
hier immer nur klug daher zu reden und andere Leute anzustacheln.

KH

von juppi (Gast)


Lesenswert?

Ich "glaube" das Problem ist schon gelöst.

Man braucht nicht alles zu wiederholen.

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.