-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Drehgeber mit 2 Spuren handlen?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360

    Drehgeber mit 2 Spuren handlen?

    Anzeige

    Gibt es irgentwo einen code wie ich einen inkrementalen drehgeber mit 2 spuren über interrupts handlen kann???

    Int0 = 1. Spur
    Int1 = 2. Spur

    Mfg

    tobi

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Gibt es irgentwo einen code wie ich einen inkrementalen drehgeber mit 2 spuren über interrupts handlen kann???
    Hmm geben tuts das sicher irgendwo, die welt ist ja scholießlich groß, und da ich denke dass du das auch bist könntest du ja versuchen dier auch was zu schrieben und wenn du wo nicht weiterkommst, dann gibts hier immer offene Ohren.

    Also sag wo hängts und wir versuchens zu lösen, so ne "habe-fertig"-Lösung bringt dir für dich persönlich eher nix.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    öhm... also die ganze Geschichte.
    Ich habe einen Drehgeber bei dem ich derzeit nur die A Spur nehme. Leider wackelt das medium sehr. Ergebnis = statt 512 Inkremente habe ich 1231 oder so. Deshalb benötige ich die B Spur um das zu analysieren und auf 512 +-1 zu kommen.

    Ich hab mir das Prinzip so gedacht:
    2 Interrupteingänge

    -Wenn beide null alle hilfsvariablen vergessen
    -Wenn erster int kommt bspw. Spur A -> merken
    -wenn zweiter int kommt bspw. Spur B -> merken
    -die reihenfolge analysieren und dann addieren oder subtrahieren.

    leider arbeitet das programm größtenteils mit interrupts dies hat zur folge das die haupt do loop schleife nur jede sekunde ausgelöst wird. Da man bei einem interrupt nur ansteigend oder abfallend detektieren kann, weiß ich leider nicht wie ich meinen gedankenfluß realisieren soll.

    Mfg
    tobi

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    ahh ich habe da eine idee

    Pseudocode:
    Code:
     A as Bit
     B as Bit
    
     SpurA as INT0
     SpurB as INT1
    
     OnSpurA:
      A = 1
      if B = 1 then
       -1
       a = 0
       b = 0
      end if
     return
    
     OnSpurB:
      B = 1
      if a = 1 then
       +1
       a = 0
       b = 0
      end if
     return

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    Also ich kenne mich jetzt nicht so direkt mit dem Output deines Drehgeber s aus, aber ich denke mal der ist bei dem magnetischen ne sinusartige kurve oder ist das sogar schon digitalisiert?

    naja wenns ein Sinus ist, dann würde ich in den Interruptroutinen auf jedenfall mal warten bis der Int-Pin wieder auf Low liegt, um sicherzustellen das er bei einem schlehten signal auch nur ein inc zählt, das dürfte schonmal die genauigkeit heben. Wenn du beide Spuren benutzt würde ich das eher so machen: du schaust in dem Interrupt dert als erstes kommt, ob danach die 2. spur kommt, wenn da aber vorher die selbe spur nochmal kommt kannste den puls getrost übersehen weil es ein fehler ist, das mit dem Subtrahieren und addieren hale ich für zu aufwendig, vlt tuts auch ein smith-trigger am Int-Eingang, oder ein glättungskondensator wirkt manchmal echt wunder hau mal so 10-100nF gegen Graund an die Spuren, das dürfte schon einiges bringen, war bei mir acuhmal so, weil ubder leitungen und so weiter ziehste bei Motoren schnell ordentlichen Signalmüll rein.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    der ist so aufgebaut wie meiner...


    mit meinem pseudoprinzip sollte es doch gehen oder

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    mit meinem pseudoprinzip sollte es doch gehen oder
    so wie ich ihn verstanden hab zählt sein µC die Singale nicht richtig

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    doch aber das rad des drehgebers läuft nicht konstant sondern wackelt ab und zu ein bissel und dann bekomme ich fehlzählungen. deshabl die 2. spur. um diese wieder auszugleichen

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    29
    Beiträge
    470
    anmerkung zum Pseudo-Code:

    Wenn man sich einen IRQ-Eingang sparen will, und auf die 2. IR routine auch, dann kann mans auch so machen:

    Code:
    Interrupt:                                        ( Bei Steigender Flanke SpurA )
    
     IF SpurB = 1 THEN
         
        dec Var
    
     ELSE
    
        inc Var
    
     END IF
    
    RETURN
    Der Pin an dem SpurB hängt muss kein IR sein, sonder ein normaler Port geht auch, hald als Eingang Config.. Die möglichkeit spart ne "menge" Code und man verplämpert auch nich unnötig Hardware.
    In ASM sparste dir dann nochmlas zusätzlich ein paar MIP im vergleich zu BASCOM.

    Aso wenn dein Rad wackelt, dann wird auch die SpurB nicht stimmen, weil si sitzt ja am gleichen rad, da solltest du dann lieber mal checken was du da mechanisch ausrichten kannst, weil Programmiertechgnisch wird das viel zu aufwendig.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Mit den 2 interrupts sollte es aber gehen denn wenn ers vorwärts wackelt dann macht er + und wenn es rückwärts wackelt macht er minus = 0. oder hab ich da nen denkfehler drin?

    zu deinem code. Stimmt müsste so gehen! super idee

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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