Forum: Mikrocontroller und Digitale Elektronik CNC-Fräse im Eigenbau


von CNChris (Gast)


Lesenswert?

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! ;-)

von CNChris (Gast)


Lesenswert?

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.

von Otto (Gast)


Lesenswert?

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

von Uboot- S. (uboot-stocki)


Lesenswert?

Hi,

dort bist Du richtig : http://5128.rapidforum.com/ - sehr zu empfehlen

Gruß

Andreas

von der mechatroniker (Gast)


Lesenswert?

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.

von CNChris (Gast)


Lesenswert?

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

von jack (Gast)


Lesenswert?

>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.

von Rahul D. (rahul)


Lesenswert?

>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...

von jack (Gast)


Lesenswert?

>nicht für Schrittmotoren geeignet.

Stimmt nicht, man kann zwei Wicklungen damit ansteuern.

von MagicProgger (Gast)


Lesenswert?

Ähm sorry, dann war ich falsch gewickelt. Welchen treiberbaustein gibt 
es dann für Schrittmotoren die genauso funktionieren??

von jack (Gast)


Lesenswert?

Nein, nein ist schon i.O.

hab mich vertan, s.o.

von MagicProgger (Gast)


Lesenswert?

Also ich kann den L298 dafür verwenden?!

Wenn du jetzt JA sagst, wird heute noch eine Bestellung bei reichelt 
eingehen ;-)

von Rahul D. (rahul)


Lesenswert?

Der L298 in Zusammenarbeit mit dem L296 ist eine etwas "antiquierte" 
Schrittmotoransteuerung.
Der L6203 ist besser.

von jack (Gast)


Angehängte Dateien:

Lesenswert?

Ja, 2 Phasen bipolar.

CNChris = Magischer Programmierer?

von jack (Gast)


Lesenswert?


von CNChris (Gast)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?

> 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

von CNChris (Gast)


Lesenswert?

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ß

von CNChris (Gast)


Lesenswert?

Habt ihr noch Ideen ??

von Rahul D. (rahul)


Lesenswert?

CNChris wrote:
> Habt ihr noch Ideen ??

Schon mal über Fischertechnik nachgedacht?

von CNChris (Gast)


Lesenswert?

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

von Eddie Current (Gast)


Lesenswert?

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.

von Mister M (Gast)


Lesenswert?

Hi

Schau mal hier:
http://burger-web.com/ProductDescription/AKKON_Desk/en_DescAKKON_USB.htm.en

Auch ein Konzept mit Mikrocontroller und Schrittmotoren.

Grüsse

Martin

von CNChris (Gast)


Lesenswert?

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...

von Mister M (Gast)


Lesenswert?

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.

von Düsentrieb (Gast)


Lesenswert?


von Christian_RX7 (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

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.

von CNChris (Gast)


Lesenswert?

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

von CNChris (Gast)


Lesenswert?

umso langsamer der schrittmotor dreht, desto höher wird der strom. 
Warum??

von jack (Gast)


Lesenswert?

Fehlende EMK des Motors läßt den Strom ansteigen.

von CNChris (Gast)


Lesenswert?

EMK?

von CNChris (Gast)


Lesenswert?

sry  ElektroMotorische Kraft ;-)

Jetzt ists mir wieder eingefallen. Könntet ihr mal auf meine Berechnung 
eingehen von einer exakten 360° Umdrehung?

von CNChris (Gast)


Lesenswert?

also wenn sich der motor nicht bewegt (Ruhezustand) zieht der 60 mA.

von Düsentrieb (Gast)


Lesenswert?

60ma...da geht wohl nicht viel..
guck mal bei pollin
zb Best.Nr. 310 365

von Murmel (Gast)


Lesenswert?

Spar die die Arbeit

http://www.nc-step.de/

Ich habe auch so ein Teil, allerdings schon älteren Semesters.

proxxon komplett umgebaut mit KT150 und BF40

von Sven (Gast)


Lesenswert?

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.

von CNChris (Gast)


Lesenswert?

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ß

von CNChris (Gast)


Lesenswert?

Also: ist das jetzt normal, dass der motor etwa 1 A im Stand zieht?

von jack (Gast)


Lesenswert?

>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...

von jack (Gast)


Lesenswert?

>Also: ist das jetzt normal, dass der motor etwa 1 A im Stand zieht?

Stichwort: EMK (hatten wir schon).

von CNChris (Gast)


Lesenswert?

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

von Christian_RX7 (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


Lesenswert?

>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...

von Christian_RX7 (Gast)


Lesenswert?

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

von CNChris (Gast)


Lesenswert?

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!

von CNChris (Gast)


Lesenswert?

Bitte melden ;)

von CNChris (Gast)


Lesenswert?

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

von CNChris (Gast)


Lesenswert?

Hier mal das letzte "Update":


#include <avr/io.h>
#include <util/delay.h>


#define DREHUNG 50

char globalReceiveEnable=0;

unsigned char ReceiveUART(void)
{
  unsigned char tempVar;

  for(;;)
  {
    while (!(UCSRA & (1<<RXC)))
    {
      tempVar = UDR;

      return tempVar;
    }
  }
}


int goCNC (unsigned char Anzahl,unsigned char Adresse,unsigned 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
        globalReceiveEnable=1;
        }
      }
    }
  }
}


int main (void)
{
  char aiParameter[3] ;
  int i=0;

  UCSRB |= (1<<RXEN);                         //Empfangen aktivieren
  UCSRC |= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);

  UBRRH = 00;                         //Baudrate einstellen 9600 bei 8 
MHz
  UBRRL = 51;


  for(;i<=3;i++)
  {
    aiParameter[i] = ReceiveUART();     //schreibt die empfangenen Bytes 
in eine Array
  }
  goCNC(aiParameter[0],aiParameter[1],aiParameter[2]);

  for(;;)
  {
    if (globalReceiveEnable != 0)
    {
      UCSRB &= ~(1<<RXEN);
    }
    else
    {
      UCSRB |= (1<<RXEN);
    }
  }
}

von Dirk (Gast)


Lesenswert?

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

von Dirk (Gast)


Lesenswert?

Ein Vorteil waere die Anpassbarkeit der Befehle und es wird ein FIFO 
benutzt.

von CNChris (Gast)


Lesenswert?

was meinst du mit anpassbarkeit???

von Simon K. (simon) Benutzerseite


Lesenswert?

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.?

von CNChris (Gast)


Lesenswert?

Ich bin in der Ausbildung zum Systeminformatiker.

von AVRCNC (Gast)


Lesenswert?


von jack (Gast)


Lesenswert?

Zu spät, das Projekt ruht bestimmt schon in Frieden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.