-         

Ergebnis 1 bis 6 von 6

Thema: einfache servoansteuerung

  1. #1

    einfache servoansteuerung

    Anzeige

    ich möchte einen billigen Servo den ich bei conrad bestellt habe mit meinem atmega8 zu laufen bekommen.
    ich hab auch schon ein Grundprogramm für Bascom gefunden
    Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10

    Config Portb = Output

    Enable Interrupts

    Servo(1) = 100
    Servo(2) = 100
    waitms 1000
    ich weiss nur nicht wie ich es ergänzen muss dass der servo beim beschalten eines Eingangs nach links dreht und beim beschalten eines anderen Eingans nach rechts dreht.
    wie muss ich den servo eigentlich genau anschließen:
    + 5V, - GND, signal PWM ? (welcher Ausgang am atmega8 )

    mfg

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Schau mal ob Dir das hier hilft:

    http://www.roboternetz.de/phpBB2/zei...=326430#326430
    oder dies:
    http://www.ais.fhg.de/ARC/3D/downloa...00000000000000
    oder vielleicht hier:
    http://www.roboternetz.de/wissen/index.php/Servos
    aber das hast Du ja schon gefunden.

    Und das "links" oder "rechts" ist bei mir so definiert: links gehts mit der kurzen Zeit, also Rampenlänge 1 ms oder so, rechts gehts mit der langen Zeit - 2 ms.
    Ciao sagt der JoeamBerg

  3. #3
    gibts da vielleicht irgenwo ne seite wo jede Anweisung erklärt ist oder kann mir jemand so ein beispeilprogramm geben bzw. erkären was ich alles nach und nach programmieren soll. bin noch nicht so fit in basic bzw. c?
    mfg

  4. #4
    also ich hab gelesen das man bei den Servos immer ein PWM signal von 20ms länge und bestimmten spitzen braucht.
    für links 2ms rechts 1ms und mitte 1,5ms.
    ich hab jetzt n kleines Programm erstellt
    $regfile "m8def.dat"
    $crystal = 8000000

    Config Portb = Output
    Do
    Portb.2 = 1
    Waitus 2
    Reset Portb.2
    Waitus 2000
    Loop
    Der servo rückelt beim Fahren und er fährt nicht in eine richtung beim erreichen fährt er wieder langsam zurück und so weiter.
    kann es daran liegen das ich keinen externen quarz benutze?
    ich hab auch schon mit den zeiten variiert jedoch komm ich auf kein ergebnis.
    PWM ist direkt am ausgang PORTB.2 angeschlossen. + und - direkt am servo. richtig so?
    mfg

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Zitat Zitat von rocketman123
    also ich hab gelesen das man bei den Servos immer ein PWM signal von 20ms länge und bestimmten spitzen braucht.
    für links 2ms rechts 1ms und mitte 1,5ms.
    Genau das ist richtig.

    Zitat Zitat von rocketman123
    ... Der servo rückelt beim Fahren und er fährt nicht in eine richtung beim erreichen fährt er wieder langsam zurück und so weiter ...
    Kannst du mal Deine Schaltung posten?

    Klingt irgendwie als hätte der Servo nicht genug Saft. Kenn ich. Du musst etwa folgende Schaltung verwenden (hab ich mir mal in den Quellcode "gemalt" ):
    http://www.roboternetz.de/phpBB2/zei...751&highlight=
    dort ist im letzten Beitrag von mir die Schaltung ungefähr gezeigt. Du brauchst sicherlich eine separate Leitung für die Servoversorgung. Damit das ganze elektrisch stabil ist, kannst/sollst/musst Du GND von Servo und controller verbinden.

    So ein Servo kommt kaum unter einem halben Ampere aus.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    Hi,

    also ich hatte vor ein paar Tagen auch das erste mal... mit Servos.
    Dieser Code:
    Code:
    Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
    
    Config Portb = Output
    
    Enable Interrupts
    
    Servo(1) = 100
    Servo(2) = 100
    waitms 1000
    funktioniert schon. Die Sache ist nur, dass man vorher nicht weiß wo die Endwerte für den Servo liegen. Ich hab mit 1 MHz am M32 angefangen, da waren die anschläge 9 und 49 (ungefähr). Bei 16MHz waren sie höher 30 und 90 (ungefähr). Wenn du jetzt außerhalb der Grenzen fährst dann entsteht dieses ruckeln. Also einfach Werte zwischen 0 und 150 ausprobieren. Am einfachsten so:
    Code:
    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
    
    Config Portb = Output
    Dim i as byte
    Enable Interrupts
    do
    for i = 0 to 150 step 10
    Servo(1) = i
    waitms 1000 
    toggle portb.1
    next
    loop
    Der Code sendet jetzt im Sekundentakt werte von 0 bis 150 an den Servo. Außerdem kannst du an Portb.1 eine Led hängen (mit Widerstand) und am ein und ausschalten mitzählen wo er gerade ist.

    mfg milkbubi

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •