PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm zur Schrittmotoransteuerung!?



rock.rage
06.03.2005, 14:09
HEY,

Suche ein Programm zur Ansteuerung eines Schrittmotors.

Folgende Schaltung wird benutzt:
http://www.directupload.net/images/050304/KjaCYbAt.jpg

Das Programm sollte es ermöglichen, durch einen Mausklick auf einen Button, den Motoren bestimmte Schritte weit zu drehen und nach einer bestimmten definierten Zeit wieder in die Ausgangsposition zu fahren. Es sollen 5 Buttons, also 5 verschiedene Wege zur Verfügung stehen.
Wie weit sich der Motor bei den jeweiligen Buttons dreht, ist erstmal egal, das kann ich mir dann ja selber soweit ändern, dass es für mein Projekt passt (insofern mir das dann einer erklären kann *g*).

Programmiersprache ist egal, sollte vll. jedoch für einen Vollnewb leicht zu verstehen bzw. zu erlernen sein.

mfg
rock.rage

wiluna
15.03.2005, 14:04
Wie wär´s mit C oder C++ ???

rock.rage
15.03.2005, 18:27
versuche gerade VB zu lernen...

wiluna
15.03.2005, 20:56
Ich könnte dir ein programm in VB / C / C++ schreiben nur müsstes du mir sagen wie das ganze aussehen soll!

rock.rage
16.03.2005, 19:21
also ich weiß ja nicht wie weit du dich mit schrittmotoren auskennst.
also das programm sollte schritt für schritt zuerst D0,D1,D2,D3 der parallelen schnittstelle ansteuern um den motor um einen schrittt zu drehen. man sollte einstellen können wie oft diese prozedur durchlaufen werden soll, hier sollte man in ein kästchen z.B. "5" hineinschreiben und dann sollte das programm 5 mal hintereinander D0,D1,D2,D3 ansteuern.

bei fragen einfach an mich wenden...

MfG

danke schon mal im voraus!

wiluna
17.03.2005, 19:20
Welche parallelen schnittstelle und welche pin´s (nehnt man das so ??? )

rock.rage
17.03.2005, 19:27
die parallele schnittstelle des computers ist gemeint, also wo man zB den drucker anschließt...
die einzelnen pin's der parallelen schnittstelle sollten angesteuert werden!

MfG

wiluna
17.03.2005, 19:39
alle pin´s ??? und gibt es für die auch namen ??? z.B pin 182???

wiluna
17.03.2005, 19:42
hier sollte man in ein kästchen z.B. "5" hineinschreiben und dann sollte das programm 5 mal hintereinander
Wird sich das im rahmen halten oder kann es auch sein das du anstadt so einer kleine zahl wie 5 eine 1896972360817267806 eingibst ???

rock.rage
17.03.2005, 20:02
wird sich eher im kleinen bereich halten,
sollte die schleife eben öfter durchlaufen wo D0,D1,D2,D3 angesteuert wird....
aber so eine große zahl wie du geschrieben hast wird es nicht werden, da kann ich dich beruhigen!

MfG

wiluna
18.03.2005, 13:26
Ok !!!! Und was ist mit den pin´s?? welche werden angesteuert ???
PS: D0,D1,D2,D3 ist doch nur ein pol z.b. + da muss doch IMMEr ein - pol aktivirt sein, den ein motor brauch halt + und - !!

rock.rage
19.03.2005, 12:04
D0,D1,D2,D3,D4,D5,D6,D7 (vom Datenregister) also das sind die pins die du ansteuern kannst.
ich brauche jedoch nur D0-D3, also die ersten 4. wegen dem motor musst du dir keine sorgen machen, das habe ich mit der schaltung so gemacht, dass das geht!
es soll nur D0-D3 ansteuern, nicht gleichzeitig sonder nacheinander, und eben soll man einstellen können wie oft die schleife durchlaufen werden soll.

mfg

BlueNature
19.03.2005, 16:51
Das was du machen mußt ist im Grunde nicht viel. Das einzigste was die Probleme bereiten wird ist die gleichmäßige Impulsfolge bei schnelleren Schrittfolgen. Ein Betriebssystem ist da nicht so 100% ideal dafür.

Zum Schrittmotor. So wie du ihn verwendest hast du aud D0-D3 und von D4 bis D8 zwei Nibbles (4-Bit). Diese mußt du separat behandeln.

Zum Ansteuerprinzip. Du hast ein 8-Bit Register der LPT-Schnittstelle. Da schreibst du einen kompletten aud den 8-Bits bestehenden Wert der den Phasen der _beiden_ Motoren entspricht, also mußt du dir das Softwareseitig zusammenfummeln. Das Prinzip hierfür wäre:

Registerinhalt = PhasenMotor1 + PhasenMotor2 * 16

Die Phasenfolgen wäre nim einfachsten Fall 1, 2, 3, 4. Damit mußt du jeden Motor bestromen. Dies erreicht man am einfachsten indem man sich das Modulo erzeugt aus der aktuellen Ist-Position. Also:

PhasenMotor1 = IstPositionMotorA MOD 4

Jetzt hast du natürlich keine 1000, 0100, 0010 oder 0001 sondern 11, 10, 01 und 00. Das korregierst du indem man einfach im blödesten Fall folgendes macht:

TempByte = IstPositionMotorA MOD 4
If TempByte = 0 Then PhasenMotor1 = &B00000001
If TempByte = 1 Then PhasenMotor1 = &B00000010
If TempByte = 2 Then PhasenMotor1 = &B00000100
If TempByte = 3 Then PhasenMotor1 = &B00001000

Das selbe für den Motor 2 und immer danach zusammenrechnen nach oben beschriebener Variante.

Zum Modulo: Das hat den Sinn das du die aktuelel Phasen für den Motor aus der Ist-Position decodierst und ist der liene Trick an der ganzen Sache. Damit hast du dann bei 0,1,2,3,4,5,6,7,8... das Ergebnis 0,1,2,3,0,1,2,3,4,0,... Udn rückwärts eben auch passend das selbe.

Nun zur Ist-Position. Diese incrementierst du einfach immer in gleichmäßigen Abständen und führst imemr danach die oben beschriebenen Schritte aus. Dannn bekommt dein Stepper die richtigen Impulse und läuft schonmal synchron zur Ist-Position.

Weitere Features: Willst du auf eine Soll-Position fahren dann mußt du dich um die Angleichung eines virituellen Ist-Werts an den Sollwert kümmern. Ist der Ist-Wert kleiner den Sollwert muß man eben Incrementieren und ist der Istwert größer dem Sollwert muuß man dementsprechen decrementieren. Ist Sollwert gleich dem Istwert einfach nichts tun. Damit steht der Motor.

MAchst du es mit einer C-Control, dann kannst du es machen wie ich es mal vor einiger Zeit geschrieben hatte auf meiner Webseite:

http://www.wieselsworld-online.de/themen/px08x005.htm

Ansonsten einfach das anschauen, verstehen und nachbauen in einem anderen System. Viel Spaß dabei!

Grüße Wolfgang

rock.rage
20.03.2005, 14:23
hab mir das ganze einmal durchgelesen, hört sich auch recht gut an aber nur der teil soweit ich ihn verstehe *ggg*

wie ist das mit dem "C-Control" gemeint? was brauche ich dazu extra?

also den link den ich ganz oben hinzugefügt habe, wo die schaltung beschrieben ist, kann ich das einfach so verwenden, also das projekt das zum download bereitsteht? denn hier stellt sich die frage mit dem c-control!

mfg

BlueNature
20.03.2005, 18:13
Hallo rock.rage!

Die Schaltung kannst du so lassen. Das geht. Bei kleinen Schrittmotoren mit weniger als ca. 500mA Strom pro Phase kann man sogar auf einen ULN2803 umsteigen.

Die C-Control ist ein eigenständiger Controller. So wie ich es dort beschrieben habe ist es eine eigene Steuerung für zwei Motoren. Die Anbindung geschieht dann aber per RS232, also seriell an den PC und dort am COM1.

Normal brauchst du aber keine C-Conrol dafür. Dieser Link den ich geschrieben habe enthält eben nur noch paar brauchbare Informationen in Punkto Programmierung. Das was da gemacht wird ist genauso auf einen PC umsetzbar und über LPT1 ansteuerbar. Dann mußt du allerdings mit C++ oder VB eine Software schreiben in der oben genannten Weise. Habe ja gesagt ist ziemlich gleich mit was man es macht, es ist auf beiden Wegen realisierbar, einmal aufwendiger und autark und einmal eben billig und mit Problemen wegen des Multitasking eines Betriebssystems. Über LPT1 wirst du eben nie eine schnelle Impulsfolge mit gleichen Impulsen hinbekommen weil dein Task immer pausieren wird. Dann ist z.B. das mit einer C-Control sinnvoll.

Nebenbei noch eine Anmerkung. Es gibt hier im Roboternetz auch noch eine Schaltung die mit Increment, Decrement und Step arbeitet. Die kann man auch nutzen. Solltest es dir auf jeden Fall auch einmal ansehen.

Grüße Wolfgang

rock.rage
20.03.2005, 18:58
ok gut das ich die schaltung so lassen kann, sonst wäre die ganze arbeit umsonst gewesen ;)

und die vom link beschriebene programmierung (beispielprojekt) kann ich ohne weiteres für die parallele schnittstelle anwenden?
denn ich bin nur noch auf der suche nach der programmierung, denn das mit den schritten ist ziemlich kompliziert, deshalb möchte ich mir auch gerne ein fertiges programm ansehen! ideal wäre VB!

mfg

BlueNature
20.03.2005, 19:10
Hallo rock.rage!

Du sollst nicht einfach blind abschreiben. du sollst es verstehen und selbst für deienn speziellen Fall passend entwickeln. Ich werde aus dem Grund keine vollständigen Source-Codes für eine VB-Version schreiben. Ich hab dir eigentlich alles nötige geschrieben zur Methodik einer sehr einfachen Schrittmotorsteuerung.

Die Anbindung der parallelen Schnittstelle ist dein erstes Problem. Wenn du das geschafft hast kanst dir den Ablauf unter VB programmieren. Du legst dir einfach eine Form an auf der du dir meinetwegen Buttons und Eingabefelder platzierst. Zwischen der Form und der Schnittstelle ist das zu realisieren was ich da gesagt habe. Du mußt dir also eine passende Routine programmieren die eine solche Signalerzeugung für die Schrittmorensignale erledigt udn das nicht zu schnell weil schónst höchstens noch ein pfeifen am Motor ankommt udn er sich nicht mehr drehen wird. Maximale Frequenz beachten oder ausprobieren. Mit 400Hz ist bei vielen Motoren schon Ende.

Grüße Wolfgang

rock.rage
21.03.2005, 11:34
naja was heißt blind abschreiben...
das will ich ja auch gar nicht!
aber zB wie du jetzt das mit der frequenz beschrieben hast, wüsste ich gar nicht wie ich das machen sollte, deshalb wenn ich ein fertiges projekt sehe dann kann ich mir solche "kleine stücke" herauspicken und in meins einbauen.

mfg

BlueNature
22.03.2005, 19:11
Hallo!

An alle die es interessiert. Ich habe noch kurz auf die schnelle Art einen kleinen Simulator für dieses Problem geschrieben. Wenn man dort die Variable Wert auf den LPT-Port läd kann man auch real die Schrittmotoren steuern.

Grüße Wolfgang

Tasm-Devil
01.04.2005, 13:51
Ich glaube ich hab da was für dich.

Ich hab mich vor einiger Zeit mit dem ltp port beschäftigt und in folge dessen ein kleines test program im Borland C++ Builder 6 geschrieben.

Du kannst dir die EXE mit quellcode von meinem Webspace laden: http://home.arcor.de/d.pascal/Programme/Mein%20kleines%20LPT-Test-Programm.zip

wenn du fragen hast kannst du mich in ICQ anschrieben weil ich nich so oft im Forum bin.

Ich baue keine Roboter, sondern programmiere nur in C++

Tasm-Devil
02.04.2005, 17:47
ICQ: 345600908
---------------