- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Drehgeber mit 2 Spuren handlen?

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Anzeige

    Praxistest und DIY Projekte
    zu deinem code. Stimmt müsste so gehen! super idee
    Danke für das lob.

    Naja ich bin immer wenn es möglich ist so wenig wie möglich Hardware oder Speicherplatz zu verschwenden, deshalb hab ich auch ASM angefangen. Solche kleine "Tricks" machen nen Code gleich effektiver, und je wenigerr Code, umso weniger Fehler kannste reinmachen.

    Das mit dem Wackeln dürfet nicht gehen, weil ist ja ein Rad, und wenns wackelt dann an beiden Spuren, könnte mich aber irren, versuch ist ja wert, kostet ja zum glück nichts

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    kostet leider doch an nerven da ich schon eine weile daran hirne...
    aber es geht noch
    ich mal kurz was warte mal

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    bild anschauen
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken ink.png  

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Thread mit der Auswertung der Quadratursignale?

    https://www.roboternetz.de/phpBB2/ze...ag.php?t=10007

    Oder: http://www.piclist.com/techref/io/se...quadrature.htm

    Edit - da ist noch ein guter Link:
    http://www.elektrik-trick.de/sminterf.htm
    http://www.mcselec.com/index.php?opt...d=79&Itemid=57

    googel mal mit "quadrature encoder" oder "inkrementale Drehgeber" da wirst du sicher was finden.
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    danke! schau ich mir morgen an!

    good n8
    tobi

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    Aaaalso, ich habe es heute mir dem prinzip Ein Interrupt mit SPur A und einen Eingang mit Spur B. Wenn der Interrupt kommt prüfe ob B da ist wenn ja + wenn nein -. Leider war das ergebnis richtig komisch. Ich hab mir bei + und - noch ne LED toggeln lassen.
    Das Medium lief KONSTANT vorwärts:
    Code:
    ++---++++------++++++++---++-+-+-++-+-+-+-+-+-++-+++-+
    Das Ergebnis sa aber in etwa so aus... Und die Messung war völlig gaga.
    Was mich gewundert hat. Auf der IO Platine blinkt alles im ms bereich. Meine +- LEDs blinken aber nur alle Sekunde oder so.
    Liegt das an den anderen Interrupts? IMHO hat Int4 eine höhere Priorität als die Urxc's und die Timer oder?
    Wäre toll wenn ich ein Statement von euch bekomme.
    Ich poste wenn nötig auch mal ein bisse code.

    Ich hab jetzt auf der Seite hier das gefunden:
    Code:
    '-------------------------------------------------------------------------------
    ' Filename : QuadrDec_1.0.bas
    ' Purpose : Quadrature Decoder/Counter and Display
    ' Author : Ger langezaal
    ' Date : 5 April 2002
    ' Compiler : BASCOM-AVR Rev. 1.11.6.5
    '
    '-------------------------------------------------------------------------------
    '
    ' Algorithm:
    ' Interrupt on both edges of phase A
    ' Test phase B in ISR
    ' When phase B <> phase A then decrement counter
    ' When phase B = phase A then increment counter
    ' Convert counter value to displacment units
    ' Format value in string and display
    '
    '-------------------------------------------------------------------------------
    '
    ' Setup for AT90S2313-10
    '
    ' INT0 edge is set to rising edge
    ' INT1 edge is set to falling edge
    ' Encoder phase A to INT0 and INT1 (PD2 and PD3)
    ' Encoder phase B to PD4
    ' Pushbutton between Portd.5 and GND (display zero)
    ' LCD at PortB
    '
    ' Example for PROXXON KT150 XY table:
    ' Displacement/rev = 2 mm
    ' Encoder resolution = 20 pulses/rev
    ' Interrupt on both pulse edges = 40 interrupts/rev
    ' Dial resolution: 2 mm / 40 = 0.05 mm
    ' The optical encoder came from a used mouse (two available)
    '
    '-------------------------------------------------------------------------------
    '
    ' Options/Compiler/Chip:
    ' HW Stack 48
    ' Soft Stack 8
    ' Framesize 16
    '
    '-------------------------------------------------------------------------------
    '
    $regfile = "2313def.dat"
    $crystal = 10000000 '10 MHz
    
    Dim X_axis As String * 8 'LCD format string
    Dim Axis_raw As Integer 'optical pulse counter
    Dim Axis_mm As Integer 'counter value converted to mm
    ' 'range: -327.65 to +327.65 mm
    
    Const Enc_res = 20 * 2 'encoder resolution * 2
    Const Conv_mm = 200 / Enc_res 'dial resolution = 0.05 mm
    
    Config Portb = Output
    Config Portd = Input
    Portd = 255 'enable Portd pullup's
    
    Config Lcdbus = 4
    Config Lcd = 16 * 1
    Config Lcdpin = Pin , Db4 = Pb.4 , Db5 = Pb.5 , Db6 = Pb.6 , Db7 = Pb.7 , E = Pb.3 , Rs = Pb.2
    Cls
    Cursor Off
    
    Phase_a Alias Pind.2 'INT0 also connected to Pind.3 = INT1
    Phase_b Alias Pind.4
    Axis_rst Alias Pind.5 'reset counter if low
    
    '---[ Set Interrupt logic ]-----------------------------------------------------
    
    Mcucr = &B00001011 'set interrupt edges
    On Int0 Phase_a_edge 'ISR on rising edge
    On Int1 Phase_a_edge 'ISR on falling edge
    Enable Int0
    Enable Int1
    Enable Interrupts
    
    '---[ Initialization ]----------------------------------------------------------
    
    Lcd "X-Axis Rev.1.0"
    Waitms 1000
    Cls
    Axis_raw = 0
    
    '---[ Main program loop ]-------------------------------------------------------
    
    Do
     If Axis_rst = 0 Then Axis_raw = 0 'reset counter if low
    
     Axis_mm = Axis_raw * Conv_mm 'convert to mm
     X_axis = Str(axis_mm) '
     X_axis = Format(x_axis , " +0.00") 'format without leading zero's
    ' X_axis = Format(x_axis , "+000.00") 'format with leading zero's
    
     Locate 1 , 1
     Lcd "X " ; X_axis ; " mm" 'display
     Waitms 200
    Loop
    
    '-------------------------------------------------------------------------------
    End
    
    '---[ Interrupt Service Routine ]-----------------------------------------------
    
    Phase_a_edge: 'Interrupt on rising and falling edge
     If Phase_b <> Phase_a Then 'test phase B
     Decr Axis_raw 'CCW
     Else
     Incr Axis_raw 'CW
     End If
    Return
    
    '-------------------------------------------------------------------------------
    das kann ich mal testen...morgenabend


    Mfg
    Tobi

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    häng mal deine 2 Spuren ans oszi ob da auch die erwünschten signale kommen, wenn nicht dann Problem, wenn ja dann gehts an den Code, nur um mal ne Feherlwquelle auszuschließen

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    si, das habe ich morgen vor mit dem oszi. was mich aber wundert ist das die IO Leds schnell und die +- LEDs nur so langsam blincken?

    Code:
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    Tfla:
     If I4 = 1 Then
      Decr Inksens
      Toggle Ledrot
     End If
     If I4 = 0 Then
      Incr Inksens
      Toggle Ledgruen
     End If
    Return
    
    Thms:
     Timer3 = 53036                                             '100 ms
     Gosub Motorstatus
     'Waitms 10
     'Gosub Info
    Return
    
    Tini:                                                       'Zeitroutinen (jede sekunde)
     Timer1 = 3036
    
     Second = Second + 1
     If Second = 60 Then Gosub Addminute
     If Minute = 60 Then Gosub Addhour
     If Hour = 24 Then Gosub Addday
    
     If Day = 31 Then
      Select Case Month
       Case 1 : Gosub Addmonth
       Case 3 : Gosub Addmonth
       Case 5 : Gosub Addmonth
       Case 7 : Gosub Addmonth
       Case 8 : Gosub Addmonth
       Case 10 : Gosub Addmonth
       Case 12 : Gosub Addmonth
      End Select
     End If
     If Day = 30 Then
      Select Case Month
       Case 2 : Gosub Addmonth
       Case 4 : Gosub Addmonth
       Case 6 : Gosub Addmonth
       Case 9 : Gosub Addmonth
       Case 11 : Gosub Addmonth
      End Select
     End If
    
     If Month = 12 Then Gosub Addyear
    
     Tresult = Format(str(hour) , "00") + ":" + Format(str(minute) , "00") + ":" + Format(str(second) , "00")
    
     Dresult = Format(str(year) , "00") + "." + Format(str(month) , "00") + "." + Format(str(day) , "00")
    Return
    
    Addminute:
     Minute = Minute + 1
     Second = 0
    Return
    
    Addhour:
     Hour = Hour + 1
     Minute = 0
    Return
    
    Addday:
     Day = Day + 1
     Hour = 0
    Return
    
    Addmonth:
     Month = Month + 1
     Day = 0
    Return
    
    Addyear:
     Year = Year + 1
     Month = 0
    Return                                                      'Ende
    
    Tjoy:
     Gosub Fehlerquit
    Return
    
    Tterminal:
     Toggle Ledgruen
     Y = Udr
     Terminalpos = Terminalpos + 1
     If Terminalpos < 4 Then Buffer1 = Buffer1 + Chr(y)
     If Chr(y) = "[" Then
      Terminalpos = 0
      Buffer1 = ""
     End If
     If Chr(y) = "]" Then
      Gosub Rscomm1
     End If
     Toggle Ledrot
    Return
    
    Tauswerten:
     I = Udr1
     Answerposition = Answerposition + 1
     If Answerposition < Nextanswersize Then
      Antwort(answerposition) = I
     End If
    Return
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    hier all meine Interrupt codes.

    mfg

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.06.2005
    Ort
    Göppingen
    Beiträge
    360
    aaalso ich hab das ganze nun mit einem anderen chip gemacht und siehe da es geht. Es lag an den vielen anderen Interrupts die meist Zeitgleich kamen.

    Mfg

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    sehen sie Agent Gibbs, es funktioniertt doch, SIR. Ich hohle ihn einen Kaffe.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress