mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schrittmotorsteuerung + LPT


Autor: Mc Avr (mc_avr)
Datum:

Bewertung
0 lesenswert
nicht 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:
For i = 1 to Schritte

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

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
Ticks as Long
Ticks = Now.Ticks
Do
Loop Until Ticks + 5000 = Now.Ticks

Das würde dann eine Verzögerung von 500uS erzeugen.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups du musst natürlich prüfen ob der Wert größer ist nicht ob er gleich 
ist..
Ticks as Long
Ticks = Now.Ticks
Do
Loop Until (Ticks + 5000) > Now.Ticks

Erzeugt dann 0.5ms verzögerung

Autor: Christoph S. (gizmo)
Datum:

Bewertung
0 lesenswert
nicht 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
Ticks as Long
Ticks = Now.Ticks
Do
Loop Until Now.Ticks > (Ticks + 5000)

Nochmals entschuldigung, ich geh jetzt schlafen.

Autor: Mc Avr (mc_avr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tipp Christoph !

Ich gehe ebenfalls nun schlafen  ;-).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.