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

Mario W
Beiträge: 9
Registriert: Do Nov 11, 2004 12:11 pm

Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Mario W » Di Sep 30, 2008 1:40 pm

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: Alles auswählen

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
Beiträge: 3239
Registriert: Di Nov 25, 2003 10:25 pm
Wohnort: Germany/Berlin
Kontaktdaten:

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Guido Körber » Di Sep 30, 2008 10:32 pm

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
Beiträge: 9
Registriert: Do Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Mario W » Mi Okt 01, 2008 9:49 am

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
Beiträge: 3239
Registriert: Di Nov 25, 2003 10:25 pm
Wohnort: Germany/Berlin
Kontaktdaten:

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Guido Körber » Mi Okt 01, 2008 12:48 pm

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
Beiträge: 9
Registriert: Do Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Mario W » Do Okt 02, 2008 3:45 pm

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
Beiträge: 9
Registriert: Do Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Mario W » Do Okt 02, 2008 3:50 pm

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
Beiträge: 9
Registriert: Do Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Mario W » Mi Okt 29, 2008 11:37 am

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
Beiträge: 3239
Registriert: Di Nov 25, 2003 10:25 pm
Wohnort: Germany/Berlin
Kontaktdaten:

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Guido Körber » Mi Okt 29, 2008 12:34 pm

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
Beiträge: 9
Registriert: Do Nov 11, 2004 12:11 pm

Re: Verständnisproblem beim Auslesen des SpinWarrior's

Beitragvon Mario W » Mi Okt 29, 2008 1:06 pm

Danke!

preparat alveo http://www.alveo-akuna.pl

Zurück zu „SpinWarrior Deutsch“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast