Hallo erstmal!
Ich habe ein gewaltiges Projekt vor mir: Ich möchte eine
Lowcost-CNC-Fräse bauen und programmieren. Weniger, um einen Nutzen
daraus zu entnehmen, vielmehr um die Möglichkeiten eines PCs im
Zusammenspiel mit einem Mikrocontroller (AVR) zu nutzen und danach ein
hoffentlich aus Spaß entstandenes Produkt stolz in den Händen halten zu
können. :-)
Ich habe mir bereits einen Kreuztisch der Marke Proxxon (Typ KT-70)
gekauft. Nun habe ich vor, diesen Kreuztisch auf eine Platte zu
montieren, an der ein "Dremel-ähnliches" Multifunktionsgerät über einen
Bügel oberhalb des Kreuztisches angeschraubt wird. An die Drehspindeln
kommen dann Schrittmotoren.
Nun zu meiner 1. Frage:
Welches Drehmoment benötigt der Schrittmotor, um eine Spindel zu drehen?
-Ich empfinde die dafür benötigte Drehkraft am Kreuztisch nicht ganz
ohne.
Meine Vorstellung vom Programmieraufwand sieht etwa so aus (Ich bin
übrigens Informatiker ;-) ):
! Die Maschine soll vorerst OHNE Tachogeber oder etwaige Sensoren
verfügen, um Istwerte auszuwerten !
Der Mikrocontroller dient als "Taktquelle" der einzelnen Schrittmotoren.
Bsp: Es soll erstmal reichen ein einfaches "H" mit Outlines zu fräsen.
Mehr soll wirklich mal nicht gemacht werden.:
Ich bin mir noch nicht sicher, ob ich in Echtzeit die vom Controller
geforderten Parameter (die der Controller in diesem Fall während des
Fräsvorganges vom PC anfordert) von meinem PC-Programm an ihn senden
soll, oder vor dem Fräsvorgang alle Daten über den UART an ihn
übermitteln soll (was wohl ziemlich speicherintensiv für den µC sein
wird)
Ein von mir geschriebenes PC-Programm schickt über den UART an den
Mikrocontroller die benötigten Parameter für jeden einzelnen Prozess:
- Umdrehungsanzahl des Schrittmotors
- Laufrichtung (Taktzyklus) des Schrittmotors
- Schrittmotor-ID ("Adresse", welcher Motor ist gemeint?) des
Schrittmotors
Um detailliert auf die Parameter einzugehen, habe ich vor, eine eigene
Skriptsprache für das PC-Programm für den Fräsprozess zu entwickeln,
die etwa wie folgt aussieht. (slash = Kommentar)
/----------------------------------------------------------------------
TurnOn //Soll den Fräsmotor anwerfen
MoveDown //Soll den Fräskopf in Richtung Werkstück bewegen ("oben"
oder "unten" soll erstmal reichen)
Go ID1 L 500 //bewege den Tisch über den Motor1, mit Drehrichtung
"links" um 500 [Maßangabe]
.
.
.
usw.
GoOffset //Fahre Schlitten über alle Motoren in Ausgangsposition
MoveUp //Fräskopf in Ausgangsposition fahren
TurnOff //Schalte Fräse aus
/----------------------------------------------------------------------
Wie würdet ihr die Datenübertragung zwischen PC und Controller machen?
Wie ich vor hätte: Über Echtzeit an den Controller schicken, oder
anders?
Sorry, falls noch irgendwelche Fragen offen sind die euch noch nicht von
mir beantwortet wurden, meldet euch. Es ist so komplex, dass ich mir
schwer tue, meine Vorstellungen
von "klein an" zu schreiben.
Vielen Dank!
PS: Es wird garantiert nicht der letzte Thread zum Thema "CNC-Fräse" von
mir sein! ;-)
Was ich noch vergessen habe, ich habe die CNC-Fräse für Schrittmotoren
ohne Getriebe vorgesehen. Das heißt sie sollten ein hohes Drehmoment
besitzen, damit sie aus der vorher stehenden Spindel eine drehende
Spindel machen.
Hallo Chris,
>Um detailliert auf die Parameter einzugehen, habe ich vor, eine eigene>Skriptsprache für das PC-Programm für den Fräsprozess zu entwickeln,>die etwa wie folgt aussieht.
Gibt es doch schon: z. B. ISO oder Heidenhain - solltest Du nicht
kompatibel sein, damit Teileprogramme übernommen werden können.
Gruss Otto
Auch wenn ich Sinumeric nicht mag: da sind auch viele Teileprogramme
vorhanden, Kompatibilität lohnt sich eventuell (Siemens hat ein paar
Erweiterungen ggü. ISO eingebaut).
Erstmal Schrittmotoren statt Geber macht Sinn, dir (so wie ich deinen
Skriptsprachenentwurf verstehe) von vornerein die Möglichkeit zu
verbauen, auch diagonal zu fahren, weniger. Darauf würde ich auch die
Struktur der Firmware von Anfang an drauf auslegen, lieber als daß ich
später den ganzen Code nochmal wegschmeißen kann.
OK Dank erstmal.
Seht ihr, wie ich es gesagt habe, habe ich auch das Vergessen zu
erwähnen ;) Natürlich habe ich auch berücksichtigt Diagonal-Fahrten zu
machen. Ich habe vor, den Winkel durch die länge einer bestimmten Flanke
zu bestimmen:
_x Punkt y
_|
_| <-- "Höhe/Länge der Flanke" ergibt den Winkel.
_|
_|
x Offset
Was ich da aber wahrscheinlich noch beachten muss ist, dass sich ein
Winkel im Prinzip wie ein Hebel verhält. Wenn ich also unten (z.B. am
Offset-Punkt) bereits anfange, die Flankenlänge zu bestimmen, hat das
unerwünschte Folgen auf Punkt y. Oder denke ich da falsch?
Ich habe vor, den Treiberbaustein LS298N zu verwenden. Der hat doch 4
Outputs, das heißt der Summenstrom der 4 Ausgänge darf nicht mehr als 2
A betragen.
Der LS298N ist also ein "Verstärker" für den hohen Laststrom der Motoren
oder?
danke
>Der LS298N ist also ein "Verstärker" für den hohen Laststrom der Motoren>oder?
Nicht nur, er fungiert auch als Pegelumsetzer (Logic-Pegel auf
Motorspannung). Heißt übrigens L298 (nicht LS) und ist eine H-Brücke,
nicht für Schrittmotoren geeignet.
>Natürlich habe ich auch berücksichtigt Diagonal-Fahrten zu>machen. Ich habe vor, den Winkel durch die länge einer bestimmten Flanke>zu bestimmen:
Bresenham lässt grüssen...
ok dann kauf ich mir solchen treiber.
Wie sieht es mit dem Drehmoment aus von einem solchen Schrittmotor aus?
In der angabe steht 0.6 Nm. Das heißt doch, dass 60 gramm bei einem
Hebel von 1m Länge Kraft hat.
Das heißt doch, dass der motor bei einem 10cm-langen Hebel eine kraft
von 600 gramm hat oder?
CNChris und MagicProgger deswegen, weil mein Kollege auch mit
Mikrocontroller rummacht und ich am FIrmenrechner saß und dummerweise
oben im Namen (wegen gespeicherten Cookies) seinen Namen eingetragen
hatte ;-)
danke
> Ich habe mir bereits einen Kreuztisch der Marke Proxxon (Typ KT-70)> gekauft. Nun habe ich vor, diesen Kreuztisch auf eine Platte zu> montieren, an der ein "Dremel-ähnliches" Multifunktionsgerät über einen> Bügel oberhalb des Kreuztisches angeschraubt wird. An die Drehspindeln> kommen dann Schrittmotoren.
Tja, dann wollen wir dir mal deine Illusionen rauben. :-)
Ich kenn den KT-70 von Proxxon nicht, habe aber selber den groesseren
von Proxxon. (KT-2xx?) Der ist von der mechanischen Stabilitaet gerade
so ausreichend. Ich vermute mal das dein Tisch beim fraesen nicht alt
wird.
Die Qualitaet von Dremel liegt eh schon weit hinter Proxxon, aber auch
die kleinen (z.b 100W) Bohrmachinen von Proxxon sind nicht zum fraesen
geeignet. Sie haben eine zu hohe Drehzahl und zuwenig Kraft. Proxxon hat
dafuer extra den BFW40. Zwischen dem und eine Bohrmaschine liegen
WELTEN. Trotzdem wuerde ich damit nicht mehr als 0.5mm Alu und
vielleicht 1mm Plexiglas abnehmen.
Ich vermute auch das die kleinen Bohrmachinen bei dauerhafte seitlicher
Belastung kein Stunde halten.
Wenn du nicht auch die Z-Achse fahren kannst dann bringt eine CNC Fraese
eigentlich nicht viel.
Du solltest dir darueber im klaren sein das der Aufwand den du in die
Mechanik stecken musst groesser ist als das bisschen programmieren.
Olaf
naja das "bisschen programmieren" wird sich wohl auch auf etwas mehr
belaufen ;-)
Außerdem verwende ich die Z-Achse, habe ich doch im Programmbeispiel von
meiner "Skriptsprache" erwähnt oder? (siehe MoveDown MoveUp).
Es gibt nun auch eine Änderung. Ich habe vor, den kleinen Tisch
umzutauschen weil ich eine andere Fräsmaschine daheim habe (von meinem
Vater).
Es handelt sich um eine BFW 36 mit einem "richtigen" Kreuztisch. An die
jeweiligen Drehspindeln wird über eine Halterung (anstelle der Spindeln)
der Schrittmotor befestigt.
Ich habe in erster Linie auch garnicht vor, etwas zu fräsen. Es soll
erst mal reichen, einen Buchstaben mit einem eingespannten Bleistift zu
malen.
Fräsen oder Malen, das ist letztendlich kein großer Unterschied.
Gruß
Warum das, wenn ich eine Proxon-Fräse daheim habe?
Ich würde mich vielmehr für gute Schrittmotoren interessieren. Wieviel
Drehmoment braucht denn ein Schrittmotor für eine solche auszuführende
Drehbewegung?
-> Gibt es eine Faustformel zur Berechnung des Drehmoments, wenn der
Haltemoment gegeben ist? Die dummen Shops geben immer nur die
Haltemomente an und verwechseln diese auch gerne mit dem Drehmoment,
siehe Conrad :-/
Danke
Packe in den Controller mehr Intelligenz und übergebe einfach x/y, bzw.
gleich x/y/z Koordinaten als Zielpunkt. Vergiß links/rechts drehen. +/-
als Vorzeichen reicht völlig.
Weiterhin kannst Du entweder Absolut- oder Relativkoordinaten übergeben.
Definiere einen Nullpunkt am Frästisch, der irgendwann angetastet werden
kann.
OK danke erstmal.
Welche Motoren würden sich denn nun dafür eignen?? Ich weiß nicht, wie
kräftig solche motoren sind, drum kann ich nicht abschätzen, welches
Drehmoment er haben sollte...
Bei dem kleinen Kreuztisch, den du steuern möchtest müssten Motoren mit
ca. 1-1.5A ausreichen. Zu finden in Drucker:) Als Schrittmototreiber
wäre dann eine Kombination L297 mit L298 denkbar. Es gibt aber auch
schon integrierte Chips, die das gleiche können. L6203 wäre für Deinen
Fall schon überdimensioniert, funktiniere würde er aber auch.
Schau dir doch auch mal den IMT901 an.
Also ich hab bei meiner Fräse (Portalfräse) für die Steuerung der X- und
Y- Achse Schrittmotoren mit 5V, 1,4A, Z-Achse 5V 1,1A.
Als Spindeln kommen Kugelumlaufspindeln mit 5mm Steigung zum Einsatz.
Fahrweg: 1080x840x170mm
Fahrgeschwindigkeit max. 3700mm/min (mehr erlaubt die Software nicht)
Beim Fahren mit Fräsgeschwindigkeit (unter 500mm/min) kann man sich
gegen das Portal stemmen und wird am Laminatboden weggeschoben.
Nur soviel zur Kraft von Schrittmotoren.
Viel Erfolg,
Christian
Guck mal nach dem "Handbuch für Kleinantriebe" (oder so ähnlich - ich
komme aus dem Firmennetz nicht an Amazon ran).
Darin sind alle Sorten Motoren gut beschrieben; auch mit notwendigen
Kenndaten.
Ok.
Ich habe nun einen schrittmotor mit 0.6 A gekauft. Ich finde er hat ein
ganz gutes Drehmoment. Nun zu einer weiteren Frage:
Er hat 4 Leitungen, A u. A-NICHT, B und B-NICHT. Heißt das, dass er zwei
Spulen oder 4 Spulen hat? In der Abbildung sind nur 2 Spulen
eingezeichnet.
Außerdem hat er einen Step-Winkel von 1,8 °. DAs heißt du, wenn er die
wie oben genannten eingänge hat, muss ich so rechnen:
Wie oft ich nun nacheinander die 4 Eingänge takten muss, damit er sich
360° dreht:
(360° / 1,8°) / Anzahl der Spulen ;
Sobald der mikrocontroller den Treiber-IC (L293-D) nicht mehr taktet,
sprich der motor still steht, entsteht ein großer Strom an der
Versorgung des Schrittmotors und der Treiber-IC erwärmt sich. Woran
liegt das??
Muss man Vs und Vss (Logic Supply und Power Supply) am IC mit einander
verbinden??
DAnke
Hallo, ich habe mich vor kurzem auch damit beschäftigt mir eine
cnc-fräse selber zu bauen und einige möglichkeiten durchdacht damit es
nicht zu teuer wird. deshalb will ich mal einige überlegungen zu den
thread schreiben.
1.) bei der auswahl der schrittmotoren sollte auch berücksichtigt werden
das nicht nur der kreuztisch bewegt werden muss, also dessen "tragheit"
(drehmoment) überwunden werden muss, sondern auch beim fräsen kräfte
auftreten welche überwunden werden müssen. diese sind auch bei einer
"kleinen" anlage nicht unerheblich.
2.) wird es bei der vorgeschlagenen lösung mit dem kreuztisch zu
ungenauigkeiten bei der positionierung kommen, besonders wenn man den
tisch in eine richtung steuert und dann wieder zurück. denn gerade bei
der umkehr der bewegungsrichtung gibt es ein gewisses spiel in der
spindel
3.) ! Die Maschine soll vorerst OHNE Tachogeber oder etwaige Sensoren
verfügen, um Istwerte auszuwerten ! für eine x und y sollte man schon
zwei schalter einplanen und einen referenzpunkt "anfahren" zu können.
besser noch zusätzlich ein paar endschalter, um bei einer
"fehlprogrammierung" den zulässigen verfahrweg nicht zu überschreiten.
4.) an das gerät welches den fräser antreibt werden ebenfalls einige
anforderungen gestellt, desonders im bezug auf die "aufnahme" von
kräften in querrichtung (also seitwerts) - sollte auch beachtet werden !
5.) die verrausforderung einer solchen fräse ist also eher die mechanik
als die elektronik. natürlich wirst du mich der von dir erdachten
kostruktion ein "H" fräsen können. aber bezüglich der genauigkeit
vermute ich mal das das nich so besonders sein wird. vieleicht kommt man
auf +/- 1 mm.
Also. um mal etwas klarzustellen: ich habe nicht die Absicht, mit meiner
CNC-Fräse einen gewissen Nutzen rauszuschlagen, sondern einfach nur aus
Spaß ein Gerät aufbauen, was annähernd so genau usw. ist wie eine
"richtige" CNC-Fräse.
Außerdem zum Schrittmotor. Ich habe am Amperemeter mich vertan: der
Motor zieht im Stand nicht 60 mA sondern etwa 1.4 A!
@Sven:
1.) Das ist klar. Ich habe vorher ja nach dem Drehmoment des Motors
geforscht.
2.) Dieses Spiel / Ungenauigkeit kann man einstellen.
3.) Richtig, sie soll erstmal ohne etwaige Tachogeber ausgestattet
werden. Eine genaue Anfahrung hängt von der Berechnung des Drehwinkels
des Schrittmotors ab...Ansonsten muss ich wohl doch einen Tachogeber
anwenden.
4.) Ich denke, das hat bereits Proxxon für mich gemacht ;)
5.) Man kommt auf mehr als 1 mm. wenn ein Step des Motors 1,8 ° beträgt.
Eine Umdrehung (360 °) am Kreuztisch von Proxxon ist 1 mm
Kreuztisch-Schub!
Jetzt kannst du dir die Genauigkeit ausrechnen. 360 / 1,8 = Genauigkeit
PRO MILLIMETER!
Gruß
>Eine genaue Anfahrung hängt von der Berechnung des Drehwinkels>des Schrittmotors ab...
Das kannst Du gleich vergessen. Stell Dir vor, Dein Schrittmotor
rutscht nur bei einem Schritt durch...
ok danke erstmal.
Sooo. Ich schreibe gerade eine PC-Oberfläche für meine Steuerung. Diese
soll nun die befehle die vom Benutzer per "skript" eingegeben werden,
gewandelt. Nun sollen über den UART verschiedene Daten an den
Mikrocontroller gesandt werden. Dafür habe ich schon ein kleines
Programm am controller geschrieben, allerdings empfängt das dummerweise
immer nur 1 Zeichen (was ja auch klar ist). Nur:
Habt ihr eine Funktion, mit der ich einen ganzen string empfangen kann,
bis beispielsweise ein "x" kommt, was bedeutet, dass nun das Senden von
Datum1 fertig ist und nun Datum2 kommt usw.?
Danke
Eigentlich sollte der Motorstrom in einem Schrittmotor
drehzahlunabhängig konstant bleibn, dass ist doch der Sinn von
Schrittmotortriebern.
@jack:
Der Motor wird kaum nur einen Schritt verlieren, wenn dann sind es
soviele, dass man es sofort merkt, kommt aber eigentlich nur bei einer
schlecht eingestellten Anlage vor.
Auch professionelle Systeme auf Schrittmotorbasis arbeiten ohne
Wegsensoren.
Viele Grüsse,
Christian
>Auch professionelle Systeme auf Schrittmotorbasis arbeiten ohne>Wegsensoren.
Welche professionellen Systeme?
Selbst die LPKF-Platinenfräse in unserer FH hatte noch Inkremtalgeber,
die über Zahnriemen angesteuert wurden.
>Der Motor wird kaum nur einen Schritt verlieren, wenn dann sind es>soviele, dass man es sofort merkt,
hier mal einen. da mal einen ... irgendwann merkt man es dann auch (beim
"fertigen" Produkt)
Im Notfall gibt es auch noch Schrittmotoren mit angeflanschtem
Inkrementalgeber.
Mit einem externen Wegmeßsystem hat man auch die Möglichkeit, das
Spindelspiel auszumessen...
Also ich hatte bei meiner Fräse im Fräsbetrieb noch nie einen
Schrittverlust, selbst wenn ich mit 6mm Fräsern in Alu arbeite und alles
unter 3mm Fräsern reißt die Maschine locker ab, bevor ein Schritt
verschwindet.
Motoren: 1,4A 5V direkt auf Kugelumlaufspindeln mit 5mm Steigung
geflanscht
Mit professionellen Systemen meinte ich zB.: Step Four die bauten vor
der Einführung von Ihren Anlagen mit Servomotoren alles mit
Schrittmotoren ohne Wegmessung und beliefern auch die Industrie mit
ihren Anlagen.
Die Servomotoren wurden in erster Linie zur Steigerung der
Fahrgeschwindigkeit eingesetzt, heute kann man sich das Motorsystem
aussuchen, mit dem die Anlage bestckt sein soll.
Viele Grüsse,
Christian
Hallo Leute! :-)
Heute habe ich mal begonnen, das C-Programm für den Mikrocontroller zu
schreiben. Wäre nett, wenn ihr mal drüber schauen könntet, ob das nach
meinen oben genannten Vorstellungen funktionieren würde.
Zur Info: Der Mikrocontroller empfängt nach jedem Arbeitsschritt in
Echtzeit die Bytes vom PC. Das heißt, ich schicke ihm nacheinander die
Bytes, die er in eine Variable speichert, die wiederum die Funktion "go"
parametrisiert.
Hier der Code:
#include <avr/io.h>
#include <util/delay.h>
#define DREHUNG 50
char ReceiveUART(void)
{
char tempVar;
for(;;)
{
while (!(UCSRA & (1<<RXC)))
{
tempVar = UDR;
return tempVar;
}
}
}
int goCNC (int Anzahl, char Adresse, char Richtung)
{
int i=0;
int y=0;
for(; i<=Anzahl;i++)
{
if (Adresse == 0) //frägt: Welcher Mtor soll laufen?!
{
if (Richtung == 0)
{
for(y=0;y<=DREHUNG;y++)
{
//Zyklus für Motor0/Richtung0
}
}
if (Richtung == 1)
{
for(y=0;y<=DREHUNG;y++)
{
//Zyklus für Motor0/Richtung1
}
}
}
if (Adresse == 1)
{
if (Richtung == 0)
{
for(y=0;y<=DREHUNG;y++)
{
//Zyklus für Motor1/Richtung0
}
}
if (Richtung == 1)
{
for(y=0;y<=DREHUNG;y++)
{
//Zyklus für Motor1/Richtung1
}
}
}
if (Adresse == 2)
{
if (Richtung == 0)
{
for(y=0;y<=DREHUNG;y++)
{
//Zyklus für Motor2/Richtung0
}
}
if (Richtung == 1)
{
for(y=0;y<=DREHUNG;y++)
{
//Zyklus für Motor2/Richtung1
}
}
}
}
}
int main (void)
{
char aiParameter[3] ;
int i=0;
for(;i<=3;i++)
{
aiParameter[i] = ReceiveUART(); //schreibt die empfangenen Bytes
in eine Array
}
goCNC(aiParameter[0],aiParameter[1],aiParameter[2]);
}
Würde der UART-Empfang so funktionieren? (Warte bis was kommt, dann
schreibe es in die Array "aiParameter")
Fehlen würde jetzt noch das anfangs erwähnte "Polling", ob das Board an
den Computer angeschlossen ist. (Controller schickt irgendwas ständig
über die Leitung, bis PC ein "Stop, warte von nun an auf Daten vom PC"
schickt).
Außerdem würde noch eine return-Anweisung in der goCNC fehlen, damit der
PC weiß "jetzt ist der letzte goCNC-Zyklus abgeschlossen, schicke jetzt
neue Daten".
Vielen Dank!
uppps, es muss natürlich noch die initalisierung des UARTs in die main
rein.
UCSRB |= (1<<RXEN); //Empfangen aktivieren
UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
UBRRH = 00; //Baudrate einstellen 9600 bei 8
MHz
UBRRL = 51;
;-) Danke
Hallo, deine Variante finde ich vom Aufbau sehr unübersichtlich und auch
nicht gerade leicht änderbar.
Hier mal eine sehr einfache andere Variante.
Beitrag "Auswertung RS232-Befehle"
Du solltest Dir zur Sicherheit ein Protokoll ausdenken.
Gruß,
Dirk
CNChris, bist du eigentlich selbst-ernannter Informatiker oder was?
Allein das hier, hört sich nicht sehr nach Informatiker an:
> Habt ihr eine Funktion, mit der ich einen ganzen string empfangen kann,> bis beispielsweise ein "x" kommt, was bedeutet, dass nun das Senden von> Datum1 fertig ist und nun Datum2 kommt usw.?