Mikrokontroller + UART + Schrittmotor-Karte

A

Andreas Lademann

Guest
Hallo zusammen!

Ich habe mich jetzt mit Hilfe des Tutorials von www.mikrocontroller.net
etwas in die Materie eingearbeitet. Zu meinem Erstaunen haben alle
Schaltungen von Anfang an funktioniert ;-)

Ich besitze außerdem die Schrittmotor Steuerkarte 3D-Step von www.nc-step.de

Wenn man die Steuerkarte über einen PC mit Windows anspricht, kann es
wegen der fehlenden Echtzeit-Funktionalität dazu kommen, dass man
Schritte verliert. Ist das soweit richtig?

Daher möchte ich gerne einen Mikrokontroller zwischen schalten und
diesen mit UART ansprechen.

Beispiel:
Über UART sende ich von Windows aus z.B. "X300+" (Achse X 300 Schritte
im Uhrzeigersinn) an den MC und der MC gibt das weiter an die Steuerkarte.

Geht sowas? Oder macht man das anders? Gibt es schon Lösungen dafür?

Vielen Dank.

Gruß
Andreas
 
"Andreas Lademann" <a.lademann@t-online.de> schrieb im Newsbeitrag
news:cdbbit$neg$01$1@news.t-online.com...
Hallo zusammen!

....
Daher möchte ich gerne einen Mikrokontroller zwischen schalten und
diesen mit UART ansprechen.

Beispiel:
Über UART sende ich von Windows aus z.B. "X300+" (Achse X 300 Schritte
im Uhrzeigersinn) an den MC und der MC gibt das weiter an die Steuerkarte.

Geht sowas? Oder macht man das anders? Gibt es schon Lösungen dafür?

Vielen Dank.

Gruß
Andreas
Das kann man so machen. Ich bin selber gerade dabei, eine
Schrittmotorsteuerung mit 89C51 und 3 Stück L239 zu realisieren. Momentan
überlege ich noch, wie ich die gleichzeitige Ansteuerung von 3 Motoren so
realisiere, dass sich die drei Motoren auf einer Geraden zur Zielposition
bewegen.

Ich habe eine Timer-Routine, in der nachgesehen wird, ob die aktuelle X- Y-
oder Z- Position mit einer Sollposition übereinstimmt. Wenn das nicht der
Fall ist, machen die Motore entweder einen Schritt vor oder zurück.

Gruß

Stefan
 
Das kann man so machen. Ich bin selber gerade dabei, eine
Schrittmotorsteuerung mit 89C51 und 3 Stück L239 zu realisieren. Momentan
überlege ich noch, wie ich die gleichzeitige Ansteuerung von 3 Motoren so
realisiere, dass sich die drei Motoren auf einer Geraden zur Zielposition
bewegen.
Das klingt doch schon mal gut. Bei mir müsste das erstmal garnicht
gleichzeitig funktionieren. Erst X, dann Y, dann Z wäre ausreichend.

Hast Du vielleicht noch weitere Infos darüber? Kenn mich da nicht so gut
aus.
Wo wird den der MC an meiner Steuerkarte angeschlossen. Nehm ich da den
Parallelport der normal in den PC geht und schalte ein paar PINs davon
auf Eingänge vom MC?
 
Hast Du vielleicht noch weitere Infos darüber? Kenn mich da nicht so gut
aus.
Wo wird den der MC an meiner Steuerkarte angeschlossen. Nehm ich da den
Parallelport der normal in den PC geht und schalte ein paar PINs davon
auf Eingänge vom MC?
Nein, es gibt genügend MCs mit serieller Schnittstelle, z.B. der uralte
8031. Dazu brauchst du noch einen MAX232 um den V24 Pegel zu erzeugen. Die
Steuerung geht dann über die serielle Schnittstelle. Solange es die noch
gibt, kannst du dann mit einem einfachen Terminalprogramm, z.B.
Hyperterminal, mit dem MC kommunizieren.

Wegen der Ansteuerung des Motors google doch mal nach L239.

Gruß

Stefan
 
Nein, es gibt genügend MCs mit serieller Schnittstelle, z.B. der uralte
8031. Dazu brauchst du noch einen MAX232 um den V24 Pegel zu erzeugen. Die
Steuerung geht dann über die serielle Schnittstelle. Solange es die noch
gibt, kannst du dann mit einem einfachen Terminalprogramm, z.B.
Hyperterminal, mit dem MC kommunizieren.
Ich meinte ja nur, da die Schrittmotorkarte schon fertig ist und einen
Parallelport-Anschluss hat, dass es sinnvoll ist diesen auch zu verwenden.
Ich will ja keine neue Schrittmotorkarte mit MC bauen sonden den MC an
die vorhandene Schrittmotorkarte anschließen.
Der PC schickt doch auch bestimmte Signale über den Parallelport an die
Karte, so dass sich dann der Motor bewegt. Diese Signale soll jetzt der
MC schicken, wenn er vom PC dazu die Aufforderung kriegt.
Nicht gut?

Wegen der Ansteuerung des Motors google doch mal nach L239.
Wird gemacht.

Gruß

Stefan
Gruß
Andreas
 
In article <cddc3n$e7s$1@news1.ewetel.de>,
"Stefan Broering" <Stefan@_nospam_Broering.de> writes:
Das kann man so machen. Ich bin selber gerade dabei, eine
Schrittmotorsteuerung mit 89C51 und 3 Stück L239 zu realisieren. Momentan
überlege ich noch, wie ich die gleichzeitige Ansteuerung von 3 Motoren so
realisiere, dass sich die drei Motoren auf einer Geraden zur Zielposition
bewegen.

Ich habe eine Timer-Routine, in der nachgesehen wird, ob die aktuelle X- Y-
oder Z- Position mit einer Sollposition übereinstimmt. Wenn das nicht der
Fall ist, machen die Motore entweder einen Schritt vor oder zurück.

Ich hab soetwas einmal auf einem ähnlich schwachen system zweidimensional
gemacht.
Ich hab das durch addieren und vergleich gelöst, weil ich für Mul/Div nicht
genug Rechenpower hatte.


Zuerst hab ich die Achse mit der grössten Differenz gesucht. Diese strecke
ist dann A. Die kleinere strecke ist B. Die Achsen und die Richtung mußt
du ja nur einmal berechnen.

Jetzt kannst du einen Timer laufenlassen und dan regelmassig folgendes machen:


If(count_a_steps)
{
calc_b=calc_b+B;
if(calc_a>A)
{
calc_b=calc_b-a;
step(B);
}
calc_c=calc_c+C;
if(calc_>A)
{
calc_c=calc_c-c;
step(C);
}
step(A);
count_a_steps--;
}

Wenn du das ganze mit "oversampling" machst, also nur bei jeden 4. bis 16.
step(x) wirklich einen Schritt machst wirkt das ganze relativ elegant.

Die calc_x werte müssen initialisiert werden.
Um Rundungsfehler zu vermeiden sollte immer eine Istposition mitgeführt
werden die als ausgangspunkt für das nächste Ziel verwendet wird.

--
MFG Gernot
 
Ich hab soetwas einmal auf einem ähnlich schwachen system zweidimensional
gemacht.
Ich hab das durch addieren und vergleich gelöst, weil ich für Mul/Div
nicht
genug Rechenpower hatte.


Zuerst hab ich die Achse mit der grössten Differenz gesucht. Diese strecke
ist dann A. Die kleinere strecke ist B. Die Achsen und die Richtung mußt
du ja nur einmal berechnen.

Jetzt kannst du einen Timer laufenlassen und dan regelmassig folgendes
machen:
prima, werd ich mir mal ansehen, genau das suche ich noch, bzw. versuche ich
gerade selber auf möglichst simplem Weg zu realisieren

Gruß

Stefan
 
Der PC schickt doch auch bestimmte Signale über den Parallelport an die
Karte, so dass sich dann der Motor bewegt. Diese Signale soll jetzt der
MC schicken, wenn er vom PC dazu die Aufforderung kriegt.
Nicht gut?
Doch klar, genau so kann man das machen. Ich hatte dich offenbar falsch
verstanden.

Gruß

Stefan
 
Der PC schickt doch auch bestimmte Signale über den Parallelport an die
Karte, so dass sich dann der Motor bewegt. Diese Signale soll jetzt der
MC schicken, wenn er vom PC dazu die Aufforderung kriegt.
Nicht gut?


Doch klar, genau so kann man das machen. Ich hatte dich offenbar falsch
verstanden.
Sehr schön. Wie du schon merkst kenn ich mich nicht besonders aus. Gibts
dafür Literatur oder kannst du Tipps geben? Welche MC ist geeignet? Was
brauch ich um einen Parallelport ansprechen zu können?

Gruß

Stefan
Danke für Deine Hilfe.
Gruß
Andreas
 
In article <2lvnqnFgs26eU1@uni-berlin.de>,
G.Fink@gmx.net (Gernot Fink) writes:
If(count_a_steps)
{
calc_b=calc_b+B;
if(calc_a>A)
Hier ist was falsch: if(calc_b>A)
{
calc_b=calc_b-a;
step(B);
}
calc_c=calc_c+C;
if(calc_>A)
Hier auch: if(calc_c>A)
{
calc_c=calc_c-c;
step(C);
}
step(A);
count_a_steps--;
}

Wenn du das ganze mit "oversampling" machst, also nur bei jeden 4. bis 16.
step(x) wirklich einen Schritt machst wirkt das ganze relativ elegant.

Die calc_x werte müssen initialisiert werden.
Um Rundungsfehler zu vermeiden sollte immer eine Istposition mitgeführt
werden die als ausgangspunkt für das nächste Ziel verwendet wird.
--
MFG Gernot
 
Hallo Gernot!

Ich hab soetwas einmal auf einem ähnlich schwachen system zweidimensional
gemacht.
Ich hab das durch addieren und vergleich gelöst, weil ich für Mul/Div nicht
genug Rechenpower hatte.


Zuerst hab ich die Achse mit der grössten Differenz gesucht. Diese strecke
ist dann A. Die kleinere strecke ist B. Die Achsen und die Richtung mußt
du ja nur einmal berechnen.
Das Verfahren ist auch als "Bresenham-Algorithmus" bekannt. Gibt es für
Geraden und Kreissegmente. Details siehe Google...

Gruß
Thorsten
--
Kunst kommt aber von 'können',
nicht von 'kennst du schon den neuesten trick?'
Gunther in oecher.computer zum Thema "Gutes Webdesign"
 
Hallo Andreas!

Ich besitze außerdem die Schrittmotor Steuerkarte 3D-Step von
www.nc-step.de

Wenn man die Steuerkarte über einen PC mit Windows anspricht, kann es
wegen der fehlenden Echtzeit-Funktionalität dazu kommen, dass man
Schritte verliert. Ist das soweit richtig?
Ja. Bzw. es ist wird schwierig, eine gleichförmige Bewegung zu erzeugen,
was sich auch im Bearbeitungsergebnis niederschlägt. Je nach dem, wie
schnell deine Maschine ist, muß der PC Taktraten bis zu 20 kHz erzeugen.
Das ist auch für einen GHz-Rechner immer noch ein Problem, wenn Windows
im Spiel ist.

Es gibt einzelne Programme, die unter Windows funktionieren sollen (ich
hab's selbst nicht getestet). Die Performance wird aber deutlich
schlechter sein als bei DOS-Lösungen. Das ist auch der Grund, warum die
DOS-Programme zu NC-Steuerung von Schrittmotoren noch so verbreitet sind.

Daher möchte ich gerne einen Mikrokontroller zwischen schalten und
diesen mit UART ansprechen.

Beispiel:
Über UART sende ich von Windows aus z.B. "X300+" (Achse X 300 Schritte
im Uhrzeigersinn) an den MC und der MC gibt das weiter an die Steuerkarte.

Geht sowas? Oder macht man das anders? Gibt es schon Lösungen dafür?
Das geht, und das gibt es auch schon. Eine Lösung heißt WinPCNC [1] und
kostet mit externem Controller (keine Ahnung, was genau drinn ist) rund
900 EUR. Nach allem was ich gelesen habe, eine recht professionelle
Lösung, aber für den Hobby-Einsatz etwas teuer.
Ich arbeite zur Zeit an einer Lösung, die deinem Ansatz ähnelt.
Allerdings werde ich statt RS232 direkt USB einsetzen. Die Lösung wird
natürlich pinkompatibel zur 3D-Step ausfallen [2].

Gruß
Thorsten

[1] http://www.lewetz.de
[2] http://www.mybb.de/cgi-bin/foren/F_0830/cutecast.pl?forum=20
--
Kunst kommt aber von 'können',
nicht von 'kennst du schon den neuesten trick?'
Gunther in oecher.computer zum Thema "Gutes Webdesign"
 
Sehr schön. Wie du schon merkst kenn ich mich nicht besonders aus. Gibts
dafür Literatur oder kannst du Tipps geben? Welche MC ist geeignet? Was
brauch ich um einen Parallelport ansprechen zu können?
Hm, mir fällt momentan kein MC ein, der da nicht für geeignet ist. Das ist
wohl mehr eine Frage, womit man die meisten Erfahrungen und wofür man die
notwendigen Entwicklungswerkzeuge hat. Ich persönlich bevorzuge PIC, z.B.
16F627 oder 8031 (z.B. AT89C51). Der PIC hat den Vorteil, dass man
umfangreiche Softwarepakete, d.h. eine recht ordentliche IDE mit Simulator
bei Microchip kostenlos herunterladen kann. Für den 8031 hab ich einen
uralten DOS-basierten Assembler und auch einen Simulator, den ich aber nicht
mehr verwende.

In meinem aktuellen Projekt verwende ich einen AT89C51 zusammen mit 3 Stück
L293. Dazu nur noch einen 5V Festspannungsregler, einen MAX232, Quarz,
Kondensatoren und einen Widerstand.

Für den 8031, 8051 etc. gibt es massenhaft Infos im www.

Aber wie gesagt, mit AVR oder was auch immer gehts auch.

Gruß

Stefan
 
Das Verfahren ist auch als "Bresenham-Algorithmus" bekannt. Gibt es für
Geraden und Kreissegmente. Details siehe Google...

Gruß
Thorsten
Danke für den Tip, schätze mal, das ist genau das, was ich gesucht habe.

Gruß

Stefan Bröring
 
Andreas Lademann schrieb:

Wenn man die Steuerkarte über einen PC mit Windows anspricht, kann es
wegen der fehlenden Echtzeit-Funktionalität dazu kommen, dass man
Schritte verliert. Ist das soweit richtig?
Wie schon erwähnt wird gerne immernoch DOS für sowas eingesetzt. Es gab
dereinst etliche Selbstbauplotterprojekte wo du schauen kannst, z.B. der
Mondrian von der Elektor.
Ein alter PC für lau führt möglichersweise schneller zum Ziel als eine
Mikrokontrollerlösung.

Unter Linux bzw. dessen Realtimevariante gibt es z.B. das EMC Projekt,
deutschsprachige Seite dazu:

http://people.freenet.de/LinuxCNC/

Beispiel:
Über UART sende ich von Windows aus z.B. "X300+" (Achse X 300 Schritte
im Uhrzeigersinn) an den MC und der MC gibt das weiter an die Steuerkarte.
Verwende Standards, z.B. G-Code (Din??)


Geht sowas? Oder macht man das anders? Gibt es schon Lösungen dafür?

Vielen Dank.

Gruß
Andreas
 

Welcome to EDABoard.com

Sponsor

Back
Top