-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Servo mit Geschwindigkeitsregelung?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277

    Servo mit Geschwindigkeitsregelung?

    Anzeige

    Moinsen,

    Ich bins mal wieder. Ich habe ein kleines Problem. Zwar habe ich einen Sharp IR-Sensor auf ein herkömliches Servo montiert. Das Servo befindet sich wiederum auf meinem Roboterchassi.
    Das Servo soll den Sensor immer von links nach rechts drehen, damit dieses einen möglichst grossen Bereich absten kann.
    Das alles funtzt bislang auch so wie es soll. Jedoch ist der Sensor nicht mehr genau. Erst ein paar Cm vor der Mauer reagiert er. Ich habe natürlich die Werte variieren lassen, trotzdem musste ich feststellen, dass das Servo sich wohl zu schnell dreht, und das Licht, welches sich eigentlich mit Lichtgeschwindigkeit bewegt, nicht genug Zeit hat zum Sensor zurückzukommen.

    Nun meine Frage: Kann man mit Bascom das Servo verlangsamen?



    Mfg JeyBee

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Kann man mit Bascom das Servo verlangsamen?
    Ja, das kannst du selbst programmieren, indem du einfach eine kleine Pause einlegst, bevor das Servo auf die nächste Position gestellt wird.

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277
    Hey Dirk,

    Kannst du mir mal auf die Sprünge helfen? Ich habe jetzt einfach "Servo(1) = x" hingemacht, und lasse alle 10ms die variable auf 150 hochzählen. Doch wie kann ich sie nun wieder so runterzählen, dass es eine Endlosschleife wird?

    Code:
    $regfile "m16def.dat"
    $crystal = 16000000
    $baud = 9600
    $swstack = 16
    $hwstack = 16
    $framesize = 16
    
    Dim B As Word
    Dim X As Byte
    Dim Y As Byte
    
    Config Portd.4 = Output
    Config Portd.5 = Output
    Config Porta.4 = Output
    Config Porta.5 = Output
    Config Porta.6 = Output
    Config Portc.7 = Output
    Config Portc.6 = Output
    Config Portc.5 = Output
    
    M1 Alias Porta.5
    M2 Alias Porta.6
    M3 Alias Portc.6
    M4 Alias Portc.5
    
    Config Portb.0 = Output
    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
    
    Enable Interrupts
    
    X = 0
    Y = 0
    
    Do
    
    Servo(1) = X
    
    1:
    Incr X
    Waitms 10
    
    While X = 150
    Decr X
    Waitms 10
    Wend
    
    While X = 50
    Incr X
    Waitms 10
    Goto 1
    Wend
    
    Loop

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das Licht sollte imme rgenu zeit haben zurückzukommen. Es ist schon schwer so kurze Zeiten überhaupt zu messen, so wie in den Laserentfernungsmessern. Eher sind das Störungen über die Versorgungsspannung.

    Zum hoch / runter zählen wäre ein FOR schleife wohl das richtige. Jeweils eine Schleife für hoch und eine für runter. Die Endloschleife dann ganz außen herum.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277
    Kannst du mir dazu den Beispielcode schreiben? Ich habe gegoogelt und auch den Bascom Index benutzt, trotzdem verstehe ich diese For--Next Schleife nicht. Sorry


    Mfg JeyBee

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Z.B.:
    Code:
    For X = 150 to 0 Step -1
       Servo(1) = X
       Waitms 10
    Next X
    For X = 0 to 150
       Servo(1) = X
       Waitms 10
    Next X

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277
    Erst mal danke!
    Ich habe den Code etwas modifiziert:
    Code:
    For X = 150 To 0 Step -1
       Servo(1) = X
       Waitms 10
    Next X
    For X = 0 To 150 Step 1
       Servo(1) = X
       Waitms 10
    Next X
    Jedoch bewegt sich das servo jetzt von links nach rechts, und legt dort eine 1 Sekunden Pause ein, nachher bewegt es sich wieder nach links, wovon es direkt nach rechts geht, um wieder eine Pause zu machen.

    Ich konnte den Fehler bislang nicht finden.


    Mfg JeyBee

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hallo JeyBee,

    x darf in diesem fall nicht null werden, da der bereich eines Servos (UNGEFÄHR!!!) zwischen 50 und 150 liegt (die genauen werte sind immer verschieden und du solltest sie durch probieren herausfinden).

    gruß
    chris

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557

    Re: Servo mit Geschwindigkeitsregelung?

    Hi JeyBee

    Zitat Zitat von JeyBee
    ... einen Sharp IR-Sensor auf ein ... Servo montiert ... drehen ... absten ...
    Zitat Zitat von JeyBee
    ... lasse alle 10ms ...
    Du brauchst genug Messezeit um ein gutes Resultat zu bekommen. Leider schreibst Du nicht, welchen Sharpsensor Du hast. WENN Du einen von der Familie GP2Dxxx hast, dann musst Du berücksichtigen, dass der 40ms für eine Messung benötigt - maximal also 25 Messwerte pro Sekunde. Das alte Lied: Datenblatt lesen. Da Dir aber mit Sicherheit (erstmal) nicht klar ist, wann der Servo die neue Position erreicht hat, musst Du etwa 80 ms auf das neue Ziel halten.

    ... das Servo sich wohl zu schnell dreht, und das Licht, welches sich eigentlich mit Lichtgeschwindigkeit bewegt, nicht genug Zeit hat zum Sensor zurückzukommen ...
    Der Sharp ist KEIN optisches Echolot!

    Wieso 80 ms!?!? Nehmen wir an, Du verfährst gerade den Sensor und kommst an der neuen Position an, etwa 1..2 ms NACHDEM die aktuelle Messung gestartet wurde. Nun hatte also die laufende Messung noch die Verstellung mitbekommen und wird dadurch verfälscht. Du musst also (das ist die "schlimmste" Annahme) warten, bis eine neue Messung angefangen ist und abgeschlossen wurde - also 39 ms warten wegen der verfälschten Messung und danach noch mal 40 ms für eine komplette Messung bis der neue Wert da ist. Danach Wert auslesen und weiter gehts. Bei Deiner Methode sind 10 saubere Messwerte pro Sekunde ein guter Wert. Wenn Du mehr Verstellungen machst, sind einige Messungen nur . . . . . . Schrott.

    Ähnliches hatte ich an meinem Dottie gemacht (siehe Strohhalmsensorindikator), um meine irDME´s zu justieren und zu kontrollieren.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2007
    Ort
    Brig-Glis
    Alter
    24
    Beiträge
    277
    Moin,

    Ahso, danke Oberallgeier. Also soll ich einfach nur drei Positionen messen? Links, etwas warten zum messen, mitte, etwas warten zum messen, rechts, etwas warten zum messen....?
    Weil bisslang habe ich andauert gemessen, und das servo einfach durchdrehen lassen, ganz unabhängig.

    P.S. ja, ich verwende den GP2D120J00F Sensor.
    P.P.S. Das Programm funktioniert soweit. Danke.


    Mfg JeyBee

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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