Schrittmotorsteuerung + LPT

OP #1728693
Lesenswert?

Guten Abend allerseits,

ich habe letztens von einem Kommilitonen eine alte Schrittmotorsteuerung 
(D-Step 2) bekommen. Die Steuerkarte ist Ansicht eigentlich super, denn 
sie unterstützt Voll,Halb,1/4 und 1/8 Schritt. Die Steuerkarte arbeitet 
bis zu 35V, also SPS Signale wären auch kein Problem. Die Karte besitzt 
auch zwei Betriebsmoden: 1.) interne Taktgenerierung für das Clocksignal 
2.) externe Taktgenerierung mit individueller aber maximal bis 25kHz 
Frequenz.

Die Karte habe ich mit einem Motor zum laufen gebracht, sowohl in 
Betriebsmodus 1 und 2. Für die externe Taktgenerierung habe ich einen 
Atmega8 benutzt und testweise einen Pin einfach schnell "getoggelt" 
habe.
Das Taktsignal ist ein symmetrisches Rechtecksignal mit einem Duty Cycle 
von 1/2, also 1000µS High und 1000µS Low bzw. jeweils 1ms. Bei dieser 
Frequenz hat der Schrittmotor eine, für mich angenehme ;-), Drehzahl.

NUN wollte ich den Motor mal über den LPT ansteuern und habe in VB.NET 
ein kleines Programm geschrieben was auch läuft. Um dort die gleiche 
Frequenz zu erzeugen benutze ich folgendes:
1
For i = 1 to Schritte
2

3
Out(Portadresse,Bitmuster + Clocksignal Bit)  'damit zwischen einem Pin hin und her getoggelt werden kann
4
Sleep(1) '1ms !
5
Out(Portadresse,Bitmuster)
6
Sleep(1) '1ms !
7

8
Next

Mir geht es eigentlich nur um diese 1ms. Mein Problem: Die Frequenz ist 
zu langsam d.h. die Drehzahl vom Motor passt mir nicht. Gibt es 
überhaupt eine Möglichkeit mit dem LPT auf diese 500Hz Frequenz zu 
kommen ? Muss ich das Proramm in C schreiben, damit es schneller läuft 
oder was würde hier Abhilfe schaffen ?

Bin für jeden Tipp sehr dankbar !

MfGruß,
MC_AVR
Gast #1728714
Lesenswert?

VB.net

Ich weiss nicht wie schnell der LPT ist aber nimm doch anstatt Sleep 
eine Schleife mit Now.Ticks.

Now ist ein DateTime-Objekt der aktuellen Systemzeit.
Zu Now.Ticks aus der MSDN

"Der Wert dieser Eigenschaft stellt die Anzahl der 
100-Nanosekunden-Intervalle dar, die seit dem 1. Januar 0001, 12:00:00 
vergangen sind
Ein einziger Tick stellt 100 Nanosekunden bzw. ein Zehntel Millionstel 
einer Sekunde dar.In einer Millisekunde sind 10.000 Ticks enthalten."

Also kannst du kürzere Wartezeiten mit beispielsweise folgendem Code 
erzeugen:
1
Ticks as Long
2
Ticks = Now.Ticks
3
Do
4
Loop Until Ticks + 5000 = Now.Ticks

Das würde dann eine Verzögerung von 500uS erzeugen.
#1728720
Lesenswert?

Ich habe mich mal registriert und hoffe ich kann jetzt auch editieren..
Bin schon müde und hab noch nen Fehler in den Code gebracht.. naja

Man muss prüfen ob Now.Ticks größer ist als Ticks + 5000 sonst läuft er 
einfach durch die Schleife ohne zu warten

Also
1
Ticks as Long
2
Ticks = Now.Ticks
3
Do
4
Loop Until Now.Ticks > (Ticks + 5000)

Nochmals entschuldigung, ich geh jetzt schlafen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren