- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Newbee: Servo lässt sich nicht steuern...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    30.01.2006
    Beiträge
    19

    Newbee: Servo lässt sich nicht steuern...

    Anzeige

    E-Bike
    Hi RN!

    Ich versuche jetzt seit ein paar tagen schon ein servo mit meinem ATmega8 zu steuern...

    Also, folgender Aufbau:

    Ein MyAVR-Board mit ATmega8 in Bascom Programmiert.
    Ein "Sanwa 1301" Servo mit externer Stromversorgung (6V).
    PinB.1 ist mit der Signalleitung des Servos verbunden.

    Ich habe zwei verschiedene Programme geschrieben:

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Portb = Output
    Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
    Enable Interrupts
    
    Do
       Servo(1) = 150
    Loop
    
    End
    mit dem Code Ruckelt das Servo fast am Anschlag mit ~5Hz.

    2. Versuch:
    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Portb = Output
    
    Do
       Portb.1 = 1
       Waitus 1500
    
       Portb.1 = 0
       Waitms 20
    Loop
    
    End
    Mit Diesem Code ruckelt das Servo nicht mehr, es fährt ganz normal bis zum Anschlag.

    Das Problem ist nur, dass ich keinen einfluss auf die angefahrene position
    habe wenn ich die HI-Periode zwischen 1 und 2 ms schwanken lasse.

    Ich weiss wirklich nicht mehr weiter... ich habe schon versucht andere
    werte für $crystal zu nehmen... aber 1000000 sollte stimmen oder?

    Auch ein vorwiderstand an portb.1 hilft nichts...

    Kann es am Servo liegen?

    Ich bin wirklich neu auf dem Gebiet, die Lösung kann also durchaus banal sein.

    danke schonmal...
    FlashCube

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    Hallo FlashCube!
    Willkommen im Forum!

    Wenn du deinen Servo nur um eine bestimmte Schrittzahl drehen willst musst du noch einen Zähler einbauen:
    Code:
    $regfile = "m8def.dat" 
    $crystal = 1000000 
    Dim A as Byte
    A=1
    Config Portb = Output 
    
    Do 
       Portb.1 = 1 
       Waitus 1500 
    
       Portb.1 = 0 
       Waitms 20
       Incr A 
    
    Loop Until A = 10
    
    
    End
    Dein Motor sollte sich jetzt um 10 Schritte bewegen...
    $crystal gibt übrigens an, wie schnell dein Quarz ist.

    MFG!


  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    Wenns auch vor und zurück gehen soll, dann schau mal hier vorbei:

    https://www.roboternetz.de/phpBB2/ze...highlight=l298


  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    30.01.2006
    Beiträge
    19
    Hi king-sixXx,

    danke für deine antworten...
    ich bin ein bischen verwirrt...
    Servo = Schrittmotor?
    braucht ein servo nicht ein konstantes signal?
    Wenn ich das mit dem Zähler mache, macht das servo zwar nur einzelne "schritte" die sind aber (wenn ich Loop until A = 2 einstelle) bestimmt 10°-15° gross...
    und mit der methode kann ich doch auch garkeine servo-positionen einstellen... nur positionsänderungen...
    ich dachte wie gesagt, ein servo bekommt ein konstantes positions-signal ?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    30.01.2006
    Beiträge
    19
    Wie ist das eigentlich mit der Servo-schaltung?
    Es sollte doch langen den Port mit dem Signal-kabel von servo zu verbinden oder?
    und was hat es mit dem HI-LO-vertauschen auf sich?
    muss ich jetzt 1ms HI und 20ms LO geben oder umgekehrt?

    sorry für die newbee fragen!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.06.2004
    Alter
    43
    Beiträge
    232
    upps... nein ein servo is kein schrittmotor. sorry da bin ich aufs falsche Gleis gekommen


  7. #7
    Hi,
    Wenn das Servo, egal wo es steht, immer an den gleichen Anschlag fährt heisst das, dass die Impulslänge falsch ist (entweder zu lang oder zu kurz).
    Was hast du denn für einen Quarz? Dein "$Crystal"-Eintarg wäre für einen 1MHz Quarz richtig. Es würde mich wundern, wenn du "nur" einen 1MHz Quarz drin hättest.
    Der Servobefehl braucht die korrekte "$Crystal"-Angabe

    Walter

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,neben der korrekten Angabe des Taktes ist auch zu bemerken das er nicht zu niedrig sein sollte.

    Mit 1-2 Mhz läuft es nicht.
    Bei 4 Mhz gibt es leichte Abweichungen.
    Mit 8 läuft er dan gut.
    Gruß
    Ratber

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    30.01.2006
    Beiträge
    19
    Danke für die hilfe.

    aber es funzt leider immer noch nicht...

    Ich habe das Fusebit auf 8Mhz und folgenden Code probiert:
    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Portb = Output
    Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
    Enable Interrupts
    
    Do
       Servo(1) = 150
    Loop
    
    End
    das servo zuckt jetzt zwar nicht mehr aber es fährt immer an den anschlag.
    (habe schon werte zwischen 25 und 360 für servo(1) genommen)
    das gleiche problem tritt mit dem 2. code auf.

    sollte ich mal den reload wert verändern?.. auf was?

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja irgendwas machste da noch falsch oder dein Servo hat nen Hau wech.
    Kein Ahnung.

    Mein Programm läuft jedenfalls prima.

    Der alte S15 läuft hier gerade mit folgendem Programm immer schön hin und her.


    Code:
    $regfile = "M8def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
    
    Enable Interrupts                                           'Ist nötig
    Config Portb.1 = Output                                     'Servoausgang
    Config Pind.6 = Input                                       'Taster 1
    Config Pind.7 = Input                                       'Taster 2
    
    Dim Ist As Byte
    Dim Minimum As Byte
    Dim Maximum As Byte
    Dim Schrittweite As Byte
    Dim Pause As Byte
    Dim Z As Word
    
    Minimum = 35                                                'Rechter Anschlag
    Maximum = 155                                               'Linker Anschlag
    Schrittweite = 1                                            'Schrittweite beim erhöhen
    Pause = 25                                                  'Verzögerungszeit in ms damits steuerbar bleibt
    Ist = Minimum                                               'Einfach nur Definierter Startwert
    
    Do
     Do
      Incr Ist
      Servo(1) = Ist
      Waitms Pause
     Loop Until Ist = Maximum
    
     Do
      Decr Ist
      Servo(1) = Ist
      Waitms Pause
     Loop Until Ist = Minimum
    Loop
    
    End
    Gruß
    Ratber

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress