-         

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

Thema: inkrementaler Drehgeber

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18

    inkrementaler Drehgeber

    Anzeige

    Hallo Zusammen,
    ich wollte euch mal fragen, ob Ihr eine Idee habt, wie sich diese Schaltung in Bascom realisieren lässt, bzw. ob dies überhaupt möglich ist.
    http://www.elektrik-trick.de/sminterf.htm

    Die Signale A und B liegen bereits am Controler an und die Zustände High und Low kann ich schon abfragen.
    Mein Problem ist, dass ich irgendwie auch die A' generieren muss.

    Hat von euch hier jemand eine Idee ?

    Vielen Dank im vorraus.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Eigentlich ist es ganz einfach und ich verstehe im ersten Moment nicht so genau, warum das auf der Seite so kompliziert erklärt ist *kopfkratz*. Warum eine Schaltung aufbauen?

    Aber vielleicht irre ich mich ja auch komplett und lerne gerne hinzu!

    Wenn du diese beiden Signale hast, dann gibt es nur zwei Zustände, die durch ein Drehen des Gebers entstehen können und diese sind ein Zeichen dafür, ob und in welche Richtung gedreht wurde.

    Und also so groß kann ich mir die µC-Last nicht vorstellen, als das ein normaler atmega das nicht ohne Weiteres hinbekommt.
    Mein Hexapod im Detail auf www.vreal.de

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18
    Ja genau, das dachte ich mir auch.

    Mein Problem ist nur, dass ich nicht weiß, wie ich A' bekomme ?
    Ich habe gerade keinen Plan, wie ich das in Bascom umsetzen soll.

    Hat von euch da jemand eine Idee ?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bascom hat da da was fertiges. "ENCODER"
    http://www.roboternetz.de/wissen/ind...ur-.29_ENCODER

    vielleicht reicht das ja
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18
    Cool, das ist genau das was ich Suche
    VIelen vielen Dank für die Hilfe

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    28.07.2007
    Ort
    Roboland
    Alter
    41
    Beiträge
    70
    Gib es da auch was fertiges für die Bascom CRC8 Prüfsumme


  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Also, mit Encodern hab´ ich schon einige Projekte realisiert. Herrliche Bauteile - die wirken so professionell

    Ich muss gestehen, die Assembler-Wahrheit hinter dem "ENCODER"-Befehl nicht zu verstehen. Kann halt kein ASM... aber ich hab´s immer mit einer supereinfach-Lösung gemacht, für die man nur einen Interrupt-fähigen Pin und einen beliebigen anderen Pin braucht (können durchaus in verschiedenen Ports sein)


    1. Du dimensionierst eine Zähl-Variable
    2. "A" legst Du auf den Interrupt-Pin, den Du auf fallende Flanke konfigurierst.
    3. In der superkurzen Interrupt-Routine machst Du einfach eine Abfrage, ob der mit B verbundene Pin 1 oder 0 ist (Drehrichtung rechts bzw. links):

    Interrupt:
    If PinX.Y = 1 then Zähler = Zähler + 1 else Zähler = Zähler - 1
    Return

    Durch aktivieren bzw. deaktivieren des Interrupts kannst Du den Encoder an genau den Stellen des Programms aktivieren, an denen auch tatsächlich eine Eingabe erfolgen soll. Hier kannst Du dann die Größe "Zähler" weiterverarbeiten (z.B. auf ein Maximum und Minmum begrenzen) und nach Abschluss der Eingabe der eigentlichen Zielvariable den Wert zuweisen.

    Ich hoffe, das war jetzt nicht zu wirr - gutes Gelingen!

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Naja, Herr Doktor, Problem ist bei deiner Methode, daß du bei Richtungsumkehr leicht Schritte verlierst
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    ...echt?!

    Alle meine bisherigen Encoder-bestückten Schaltungen zeigen auf einem LC-Display die einzustellenden Werte an (klar - wie soll man sonst auch wissen, wie weit man in welche Richtung drehen muss...) - und so vom "Einstell-feeling" hatte ich eigentlich nie den Eindruck, dass irgendetwas verlorengeht. Auch nicht, wenn ich die Drehrichtung öfter mal gewechselt habe. Aber man irrt sich ja doch recht schnell mal...

    Funktioniert hat´s immer, aber jetzt bin ich doch neugierig auf die Geschichte mit dem "Encoder"-Befehl geworden. Wenn´s damit weniger "patschert" geht...

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    07.12.2007
    Beiträge
    18
    Vielen Dank für eure Hilfe.
    Ich habe von der Firma www.elgo.de das Magnetische Längenmesssystem EMIX2 an die RNControl angeschlossen und eben mit dem Quatratur Encoder ausgewertet.

    Ziel ist es ein elektronisches Längenmesssystem zu entwickeln, das bei Bewegung nach rechts eins nach Oben zeigt

    Leider habe ich momentan noch ein paar Probleme, vielleicht kann mir aber jemand von euch einen Tipp geben.

    Die Rechtsrichtung funktioniert ziemlich gut, wenn ich aber nach "links" fahre, dann zeigt er auch eine rechtsbewegung an

    Die Geschwindigkeit ist miserabel. Es funktioniert nur wenn ich ganz ganz langsam über das Magnetband fahre. Bei einer schnelleren Bewegung verschluckt sich mein Programm.
    Der Emix liefert 100 Pulse pro mm zurückgelegtem Weg.
    Ist die RNControl dafür zu langsam oder mien Code falsch ?

    Wäre super wenn ihr mal einen Blick drauf werfen könntet


    Nachfolgend noch mein Code

    Code:
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    
    Dim Result As Long
    Dim X As Integer
    X = 0
    Result = 0
    
    
    'Config Pine.5 = Input
    'Usb Alias Pine.5                                            'Ist 1 wenn USB angeschlossen
    
    'Usb Schnittstelle UART initialisierung
    'Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    'Open "com4:" For Binary As #4                               'USB Buchse
    
    
    'Initialisierung LCD
    Config Pinf.6 = Output
    Lcd_rw Alias Portf.6
    Lcd_rw = 0
    
    Config Lcd = 20 * 4a , Chipset = Ks077
    Config Lcdpin = Pin , Db4 = Portf.3 , Db5 = Portf.2 , Db6 = Portf.1 , Db7 = Portf.0 , E = Portf.5 , Rs = Portf.7
    Config Lcdbus = 4
    
    Initlcd
    
    Cursor Off Noblink                                          'Curser ausschalten
    
    'Ansteuerung LCD
       Cls
       Locate 1 , 1                                             'Cursor auf 1 Zeile, 1 Spalte
       Lcd "Radlabor Test"
       'Print #4 , ""
    
       Locate 2 , 1
       Lcd "Result:"
    
       Locate 3 , 1
       Lcd "X:"
       'Print #4 , "X"
    
       Locate 4 , 1
       Lcd "Richtung:"
    
    
    Config Pina.1 = Input
    Config Pina.2 = Input
                                                  'Alle internen Pullup Widerstände ein
    Pina.0 = 0
    Pina.1 = 0
    
    Config Pina.2 = Input
    Tasterx Alias Pina.2
    'Porta.2 = 1                                                 'Interner Pullup Widerstand ein
    
    'Schleife mit Quadratur Encoder
    Do
      Result = Encoder(pina.0 , Pina.1 , Links , Rechts , 0)
    
      If Tasterx = 1 Then
       X = 0
       Locate 3 , 4
       Lcd X ; "   "
      End If
    Loop
    
    
    Links:                                                      'Linksdrehen
       Decr X
       Locate 2 , 9
       Lcd Result
       Locate 3 , 4
       Lcd X ; "   "
       Locate 4 , 12
       Lcd "Links  "
       Return
    Rechts:                                                     'Rechtsdrehen
       Incr X
       Locate 2 , 9
       Lcd Result
       Locate 3 , 4
       Lcd X ; "   "
       Locate 4 , 12
       Lcd "Rechts "
       Return
    
    End

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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