Verständnisproblem beim Auslesen des SpinWarrior's

Dies ist das deutsche Forum für alle Themen um den SpinWarrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Mario W
Posts: 7
Joined: Thu Nov 11, 2004 12:11 pm

Verständnisproblem beim Auslesen des SpinWarrior's

Post by Mario W »

Hallo,

ich hoffe, mir kann jemand bei meinem Verständnisproblem helfen.
Ich habe einen Spin Warrior (SW24R4 V1.0.0.0) und daran versuchsweise
einen Drehgeber von HP (HEDS-5700 series, 256 CPR (cycles per revolution))
angeschlossen. Aus der SpinWarriorSDK.zip habe ich das Programm aus dem
Beispielcode (...Windows/Samples/VB6/) so angepaßt, daß die gelesenen
Werte von Spin(0) summiert werden (und einfachheitshalber in Spin(6).caption
geschrieben werden). -> code siehe unten

Ich bewege den Drehgeber langsam mit der Hand. Durch Verändern des Timers
(Timer1 Interval) bekomme ich aber immer andere Werte, z.B.:

Timer1 = 5 -> eine Umdrehung ~1020
Timer1 = 20 -> eine Umdrehung ~1020
Timer1 = 50 -> eine Umdrehung ~1020 *default SDK
Timer1 = 100 -> eine Umdrehung ~600
Timer1 = 200 -> eine Umdrehung ~300
Timer1 = 500 -> eine Umdrehung ~140

Jetzt meine Fragen:
x) Ich sollte im SpinWarrior keinen Überlauf haben (8bit), gehen mir
trotzdem Werte verloren, wenn ich sie nicht in einem bestimmten (?)
Zeitintervall auslese? Ich drehe den Drehgeber sehr langsam!
x) Wird der aktuelle Stand auf 0 gesetzt, wenn ich den Wert auslese?
x) Wenn beim Drehgeber im Datenblatt 256CPR steht, lese ich dann
den Wert "256" vom SpinWarrior zurück?
x) Fehler im Code beim Summieren?
x) ev. kann mir jemand ein Beispiel schicken, wie's geht :)

Danke schon jetzt,
MARIO


Hier der modifizierte Code:
(meine Zeilen sind mit '*** gekennzeichnet! Spins(6).Caption = soll die Summe von Spin(0) sein)

Code: Select all

Dim SpinDev As Long
Dim Sum0 As Long   '***

Private Sub Form_Load()
  SpinDev = SpinKitOpenDevice
  If SpinDev = 0 Then
    ' Exit from program
    MsgBox "No SpinWarrior found!", 0, "Error"
    End
  End If

  Spins(0).Caption = 0 '*** set INI values
  Spins(6).Caption = 0 '*** set INI values

  ' start timer for reading SpinWarrior
  Timer1.Enabled = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
  ' stop timer
  Timer1.Enabled = False
  ' close SpinWarrior
  SpinKitCloseDevice (SpinDev)
End Sub

Private Sub Timer1_Timer()
  Dim I As Long
  Dim Data As SPINKIT_DATA
  
  While SpinKitReadNonBlocking(SpinDev, Data) <> 0
    For I = 0 To 5
      Spins(I).Caption = Data.Spins(I)
    Next I
    For I = 0 To 6
      If Data.Buttons(I) <> 0 Then
        Buttons(I).Caption = "down"
      Else
        Buttons(I).Caption = "up"
      End If
    Next I
    ' -> (Spins(6).Caption) = Sum of Spin(0)              '***
    Sum = CInt(Spins(0).Caption) + CInt(Spins(6).Caption) '***
    Spins(6).Caption = Sum                                '***
    
  Wend
End Sub
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Guido Körber »

Der Wert im SpinWarrior wird auf Null gesetzt wenn ein Datenpaket gesendet wird. Das passiert alle 8ms. Darauf hat das Programm auf Rechnerseite keinerlei Einfluss. Werden die Daten nicht schnell genug gelesen, dann gehen irgendwann Daten durch Pufferüberlauf verloren.
Mario W
Posts: 7
Joined: Thu Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Mario W »

Hallo Herr Körber,

danke für die schnelle Antwort, ich werde mich noch etwas weiterspielen. Vielleicht
bekomme ich von einem User, der den SpinWarrior unter VisualBasic betreibt, den
Code :)
Der Wert im SpinWarrior wird auf Null gesetzt wenn ein Datenpaket gesendet wird. Das passiert alle 8ms. Darauf hat das Programm auf Rechnerseite keinerlei Einfluss. Werden die Daten nicht schnell genug gelesen, dann gehen irgendwann Daten durch Pufferüberlauf verloren.
Kann ich den SpinWarrior z.B. auch nur ein Mal pro Sekunde auslesen, wenn ich mir sicher bin,
daß ich vom Drehgeber nur z.B. 100 Impulse/s bekomme? Oder muß ich mindestens alle 50ms
die Daten auslesen, egal ob sich der Drehgeber dreht oder stillsteht?

Danke und l.g. Mario
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Guido Körber »

Der SpinWarrior sendet Datenpakete sobald er Impulse detektiert. Also auch wenn "nur" 100 Impulse pro Sekunde auftreten, kann alle 8ms ein Datenpaket kommen.

Wie gesagt, die Software auf dem Rechner hat keine Möglichkeit zu beeinflussen wie schnell die Datenpakete kommen, sie muss einfach sicherstellen schnell genug abzufragen um keinen Überlauf zu ermöglichen.
Mario W
Posts: 7
Joined: Thu Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Mario W »

Hallo Herr Körber,

nochmals vielen Dank, langsam verstehe ich es :)
Jetzt bleibt nur noch die Frage:
x) Wenn beim Drehgeber im Datenblatt 256CPR steht, lese ich dann
den Wert "256" vom SpinWarrior zurück?
Wenn ich das Timerintervall sehr kurz setze (<50ms), dann bekomme ich vom
SpinWarrior immer den Wert ~1020, sagen wir 1024, das wäre dann 4x 256?
(Lt. Datenblatt hat der Drehgeber 256 "CPR" cycles per revolution)
Mario W
Posts: 7
Joined: Thu Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Mario W »

wer lesen kann ist im Vorteil,
Since SpinWarrior is using quadrant tracking it
will report an impulse for each falling or rising
edge on either signal A or B. This results in a
resolution four times higher than that achieved by
using A as the clock and B as the direction signal.
Danke, Mario
Mario W
Posts: 7
Joined: Thu Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Mario W »

Hallo Herr Körber,

jetzt habe ich noch eine Frage, lt. dem Datenblatt vom SpinWarrior hat
mein SW24R4 eine fmax=3500Hz bzw. eine tmin von 71us (entspricht ~ 1/ 4*3500Hz).

Wenn mein Encoder jetzt 256 CPR (cycles per revolution) hat, ist
dann die maximale Drehzahl 3500/256 = 13.7 Umdrehungen pro Sekunde?

Vielen Dank,
Mario
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Guido Körber »

Ja, das ist richtig, Zahl der Umdrehungen pro Sekunde mal Pulse pro Umdrehung ergibt die Impulsfrequenz. Da die SpinWarrior jede Flanke nutzen ergibt sich daraus dann die vierfache Schrittzahl.
Mario W
Posts: 7
Joined: Thu Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Post by Mario W »

Danke!
Post Reply