Schrittmotor unter Visual C++6

Hallo,

wie steuere ich unter Visual C++6 einen Schrittmotor richtig an?

Achse Datenblatt -> 63mm/Umdrehung Controller 1 Umdrehung sind 200 oder 400 Impulse notwendig Maximale Fahrt:

1800mm / 63mm = 28,5714 Umdrehungen

------------------------------------------------- Full Step 200 Impulse pro Umdrehung

1 Impuls -> 63mm/200Impulse = 0,315mm/Impuls 1 mm: 200/63 = 3.1746 Impulse 1800mm: 3.1746*1800=5714.285 Impulse

************************************************* Half Step 400 Impulse pro Umdrehung

1 Impuls -> 63mm/400Impulse = 0,157mm/Impuls 1 mm: 400/63 = 6.3492 Impulse 1800mm: 6.3492*1800=11428.571 Impulse

Es dürfen keine Pulse verloren gehen!

Grüße Andrea

Reply to
Andrea Anker
Loading thread data ...

Hi,

Wie soll der Schrittmotor denn mit dem PC verbunden werden? Irgend eine fertige Ansteuerelektronik die an einem geeigneten Port hängt? Dann, siehe deren Bedienungsanleitung.

Mit einer selbstgebauten Ansteuerschaltung? Bipolarer oder unipolarer Motor? Vollbrücke, Halbbrücke?

Irgend eine Hardware muß schon zwischen PC und dem Motor sitzen und ohne Kenntnis, wie die aussieht, läßt sich über die Ansteuerung der selbigen nicht viel sagen.

Also schreibst Du ein DOS-Programm in C und läßt es auf einer Maschine mit reinem DOS laufen, denn wenn Windows läuft kannst Du nicht sicher sein, ob das nicht zwischendurch mal in Urlaub geht und haufenweise Pulse "vergißt", mal abgesehen davon, daß Du bei einigen Windows-Versionen gar nicht so ohne weiteres die einzelnen Bits des Druckerports manipulieren kannst.

Außer, Deine Schrittmotor-Steuerelektronik besitzt selbst Intelligenz und muß nur vom Computer gesagt bekommen, wie schnell, wie lang und in welcher Richtung gedreht werden soll: Dann hat der Controller in der Steuerung den schwarzen Peter.

ALso ohne die Info, wie Du das miteinander verbinden willst, ist keine vernünftige Antwort möglich.

Oder willst Du gerade wissen, wie eine Ansteuerelektronik aussehen muß?

Am einfachsten ist es, wenn Du unipolare Motoren hast, mit 6 Anschlüssen. Wenn die dann auch noch wenig Strom brauchen, kannst Du z.B. einen ULN2803 als Treiber verwenden und den mit dem Druckerport ansteuern. Dein Ansteuerprogramm muß dann nur die passenden Bits am Druckerport setzen um jeweils eine oder bei Halbschritten zwei Spulen nacheinander einzuschalten. Hast Du bipolare Motoren (vier Anschlüsse) brauchst Du zwei Vollbrücken und da wirds dann schon etwas komplizierter. Im "Elektor" erscheinen mit schöner Regelmäßigkeit solche Schaltungen.

Das sinnvollste ist aber wirklich eine Ansteuerung, die schon selbst Intelligenz besitzt, die Du aber vermutlich nicht selbst entwickeln möchtest, dann kannst Du das ganze auch mit einem Windows-Programm in Gang setzen.

Viel Erfolg Michael Kutscher

formatting link

Reply to
Michael Kutscher

Andrea Ankerschrieb: "

Also das eine hat mit dem anderen erstmal nix zu tun. C++ ist eine Programmiersprache und kann keine Schrittmotoren ansteuern.

[...]

Dein Controller (welcher?) ist ja irgendwo an deinem PC, der unter Windows läuft (soviel kann man schon mal entnehmen), angeschlossen. Häufig wird das am Druckerport gemacht (ist das bei dir so?).

###################################################### Merke: PCs unter Windows sind für Echtzeitaufgaben ( und dies ist eine) VÖLLIG ungeeignet. ######################################################

Falls du es doch versuchen willst, dann benötigst du einen vernünftigen Parallelport-Treiber. Weiterhin solltest dich mal mit dem Thema Multimedia-Timer unter Windows beschäftigen. Ersteres stellt dir Funktionen zur Verfügung, um einzelne Portpins auf dem Parallel-Port High und Low zu schalten, wärend letzteres u.U. die Möglichkeit bietet das Timing zu handeln. Schnell wird das Ganze aber nicht (unter DOS kann man wohl 30Khz erreichen) unter Windows gibt's keine sicheren Zahlen (ebend keine Echtzeit).

Mein Tip: Besorg dir ein fertiges EvalBoard mit einem Microcontroller drauf und schreib dafür in C einen Interpreter für Gerber, DXF oder PS. Dann druckst du die Daten in das Board und das mach den Rest (in Echtzeit).

Tschö Dirk

Reply to
Dirk Ruth

Überhaupt nicht. Ersteinmal hat VC++ nichts mit Schrittmotoren zu tun und zweitens hat Windows nichts mit Echtzei zu tun.

Du solltest erst einmal posten, was zwischen Schrittmotor und Rechner noch zwischen ist, ein Controller zum Beispiel? und wo am PC ist der angeschlossen?

Dann musst du die Register des Schrittmotorcontrollers mit den richtigen Inhalten füllen-> trivial.

Oder du hast keinen Controller: Schmeiss Windows raus und besorge dir OpenDOS und programmiere alles selbst. Schwierig.

Üblich

Ach nee!!

Robert

Reply to
R.Freitag

"Dirk Ruth"

Das kann ich so nicht bestätigen. Sofern das Steuerprogramm das einzige zusätzliche Programm auf dem PC ist, reicht es unter Windows diverse Systemprozesse zu stoppen und das Steuerprogramm auf Realtime zu schalten.

Ideal wäre dafür ein P4 mit MT. Außerdem nur Fat32. NTFS ist für solche Aufgaben verboten, da das anders funktioniert.

Außerdem sollte man die Grafikkarte emulieren, damit keiner dran rumspielen kann. Das sollte dann nur der Entwickler über VNC oder so dürfen. Wichtig dabei ist es VNC auf Idle zu schalten. VNC ist open Souce, daher ist das auch direkt im Sourcecode machbar. Den VGA-Port ablöten ist auch eine Möglichkeit.

Gruß,

Markus

Reply to
Markus Gronotte

"Markus Gronotte" schrieb im Newsbeitrag news: snipped-for-privacy@uni-berlin.de...

Hallo Markus,

dein Bastelgeschick für Windows in allen Ehren, aber Windows ist kein Echtzeitbetriebssystem. Das was du machst, erhöht zwar die Wahrscheinlichkeit, das dein Prozess keine Daten verliert (also immer zur rechten Zeit ran kommt), garantiert ist es dir aber nicht. Es gibt wohl Zusätze zu Windows, welche die Echtzeitfähigkeit herstellen. Günstiger ist es in diesem Falle entweder auf ein Echtzeitbetriebssystem zu gehen oder einen autonomen Prozessor zu verwenden.

Gruß

Torsten

--

formatting link

Reply to
Torsten Goetzke

"Torsten Goetzke"

Echtzeitbetriebssystem. Das was du machst, erhöht zwar die

rechten Zeit ran kommt), garantiert ist es dir aber

herstellen. Günstiger ist es in diesem Falle entweder auf ein

ne ist schon klar, aber ich kenne den Bereich nur aus der industriellen Bildverarbeitung, da war es oft auf Grund von Treibermangel nichtmal möglich Linux oder was anderes zu nutzen, so dass man Windows halt ein bischen zerstümmeln musste.

Ich glaube ja immer noch dass die größten unvermeidbaren Verzögerungen bei Übertragungen hauptsächlich durch verwendete Buffer entstehen. Eine HT-CPU ist jedenfalls für Schrittmotoren in jedem Fall schnell genug, weil die Ansteuerung in jedem Fall wieder mal gebuffert ist. Ungebufferte Schrittmotoren müssten schon einen separaten Interrupt benutzen auf dem Ereignisse liegen. Und die sind meist unbezahlbar für Privatmenschen.

Wenn man mal den LPT- oder COM-Port betrachtet dann ist Windows nähmlich sehr wohl Echtzeitfähig. Man muss lediglich per Hardwaretreiber Ereignisse auf Interrupts programmieren und lediglich der Treiber darf die einzige Software im System sein, die eine hohe Priorität besitzt und den muss man notfalls halt selber schreiben. Für den Com-Port hätte ich sowas sogar verfügbar (Windows XP). Aber auch da liegt die "Digital-Velocity"-Grenze z.B. bei maximal 9600 Ereignissen pro Sekunde. Alles was außerhalb des Takts oder schneller reinkommt wird großtenteils ignoriert. Hat man dieselben Probleme nicht auch bei LPT? Ich kenne mich mit LPT nicht aus.

Wie gesagt das größte Hindernis ist jedenfalls die Festplatte und generell Datenträger, weil der PCI normalerweise die höchste Priorität im System hat.

Gruß,

Markus

Reply to
Markus Gronotte

"Markus Gronotte" schrieb im Newsbeitrag news: snipped-for-privacy@uni-berlin.de...

Hi Markus,

ein Echtzeitbetriebssystem zeichnet sich dadurch aus, das es in einer definierten Zeit eine Antwort auf ein Ereignis (z.B. Interrupt) liefern kann. Das kann Windows nicht, auch bei eine entsprechenden Konfiguration. Sicherlich funktionieren viele Anwendungen bei einer entsprechenden Konfiguration, es ist und wird dadurch auch kein Echtzeit BS.

Gruß

Torsten

--

formatting link

Reply to
Torsten Goetzke

"Torsten Goetzke"

definierten Zeit eine Antwort auf ein Ereignis (z.B.

Konfiguration. Sicherlich funktionieren viele

auch kein Echtzeit BS.

Möglich...

Sollte ich mal an eine solche Grenze stoßen sage ich dir nochmal bescheid ;-)

lg,

Markus

Reply to
Markus Gronotte

Ähem. Wenn du, statt Windows auf den Funktionsumfang von DOS zu verstümmeln, gleich ein DOS genommen hättest, würde auch kleinere Hardware *dicke* ausreichen. Aber ein (Pseudo-) Multiprozessor- system zur Steuerung eines Schrittmotors ist einfach lächerlich.

XL

Reply to
Axel Schwenke

"Axel Schwenke"

Ja. Nur gekoppelt mit industrieller Bildverarbeitung (ich hab ja bisher in dem Zusammenhang nichts anderes gemacht) ist das nicht möglich.

lg,

Markus

Reply to
Markus Gronotte

Erstmal müßte man wissen, wie Du den Schrittmotor mit dem PC koppelst. Eine Leistungsstufe wird schon dazwischen sein. Auf vielen derselben kannst Du hardwaremäßig konfigurieren, ob der Motor im Vollschritt- oder Mikroschritt-Modus laufen soll. Viertelschritt (4 Mikroschritte) kommt mir schon wenig vor, bei uns fängt Schrittmotoransteuerung mit 5 Mikroschritten an. Je höher die Zahl der Mikroschritte, desto ruhiger i.allg. der Schrittmotorlauf - bei Vollschrittbetrieb kommt meist nur schrecklicher Lärm raus.

Wenn Du schnell eine Schrittmotoransteuerung brauchst, dann würde ich einen der zahlreichen seriell ansteuerbaren Controller empfehlen. PC-seitig werden sie über RS232 angeschlossen und mit bestimmten Befehlen gefüttert, motorendstufenseitig geben sie meist Schritt- und Richtungssignal ab, was von praktisch allen gängigen (Fertig-)Endstufen verdaut wird. Von einigen Anbietern kann man auch Controller und Endstufe in einem Gerät beziehen.

Der Vorteil der teilweise ausgelagerten Intelligenz ist, daß Du Dich um so Dinge wie Motor beschleunigen usw. kaum zu kümmern brauchst, bei vollständiger Selbstprogrammierung müßtest Du dafür noch Algorithmen programmieren.

Schrittmotoren verlieren, wenn sie nicht in Resonanz geraten (bei kleiner Drehzahl und/oder kleiner oder fehlender Last), zu schnell beschleunigen oder mechanisch überlastet werden (Fahrt gegen Anschlag) normalerweise keine Schritte. Für höhere Zuverlässigkeit sind mindestens Endschalter und/oder eine genaue Positionsrückmeldung mit Inkrementalencoder sehr empfehlenswert. Zumindest für eine Referenz-(Start-)Position sollte es eine Rückmeldung geben.

Winfried Büchsenschütz

Reply to
Winfried Buechsenschuetz

Irgendwann muss man runden, da Nullkommairgendwas Pulse nicht gehen. Diese Pulse gibt man an den Motor aus und zählt sie gleichzeitig im Rechner mit (long) Integer-Zahlen. Eine allfällige ist- soll-Differenz ist damit immer berechenbar und es gehen keine Pulse verloren. Alles eine Frage der Buchhaltung *duck*.

--
mfg Rolf Bombach
Reply to
Rolf Bombach

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.