Forum: Mikrocontroller und Digitale Elektronik Suche geeigneten Chip für CNC-Controller


von Gast (Gast)


Lesenswert?

Hallo Forum,

ich suche einen geeigneten Controller für ein CNC-Projekt.
Dieser Controller soll für 3-4 Achsen Takt/Richtungs-Signale erzeugen.
Die Maschinen-Konfiguration liegt in einem EEPROM oder auf einer 
SD-Karte, die zu Beginn geladen werden soll.
Über RS232 ist ein Handbedienteil angeschlossen, das die Anweisungen 
übermittelt. Der Chip muss dann die Achsen entsprechend fahren und 
Endschalter auswerten.

Meine Anforderungen wären also:

- >= 1 USART
- > 25 IO
- 5V Betriebsspannung
- mindestens zwei Timer
- viel "Dampf", also großer Flash und RAM, schneller Takt

Nochmal grob die Funktionen, die das Gerät später bieten soll:
- SD/MMC-Interface
- RS232-Interface zum Bedienteil
- Erzeugung von Takt/Richtungs-Signalen inkl. Anfahrrampen
- Verwertung von Maschinenparamtern, d.h. "Fahre 10mm" soll auch 
wirklich 10mm an der Maschine ergeben
- Mehrere Achsen soll gleichzeitig fahren können

Im Handbedienteil sitzt ein weiterer Controller, der über einen 
Drehgeber und LCD die Kommandos annimmt. An den Haupt-Controller schickt 
dieses Bedienteil nur Kommandos wie "Fahre 100mm in Y+ mit 1m/s".
Diese Befehle müssen dann umgesetzt werden.
Dabei sollte es möglich sein, während ein Befehl läuft, einen neuen zu 
starten, z.B. "Fahre 5mm in Z- mit 5m/s", während die Achse Y noch 
fährt.

Ich habe schon viel mit Atmegas gemacht und würde eigentlich auch 
behaupten, das man dieses Projekt mit 2-3 Atmegas bewältigt bekommt.
Die Ausgabe-Frequenz wird sich dabei im schlimmsten Fall bei rund 50kHz 
bewegen.

Allerdings befürchte ich, das es dabei viele Berechnungen geben wird. 
Getriebe-Übersetzungen oder Spinelsteigungen müssen ja mit eingerechnet 
werden, wenn der Maschinentisch später wirklich genau fahren soll.

Welche Controller eignen sich dafür? Am liebsten wären mir Atmegas, weil 
ich dafür alle Geräte habe. Andere Controller schaue ich mir aber auch 
gerne an.

von F. V. (coors)


Lesenswert?

Hi,

Wenn man mal fragen darf: Was fuer Motoren, Treiber und Getriebe setzt 
du fuer deine CNC Maschine ein?

Ich habe bisher die Erfahrung gemacht, dass alles was sich zu "normalen" 
Preisen beschaffen laesst entweder per Definition ungenau ist oder jede 
Menge Backlash hat.

Ansonsten ist 50 kHz auch schon recht heftig wenn du Microstepping 
machen willst und halbwegs ordentliches Drehmoment mit nem kleinen Motor 
haben willst.

Mein erster Gedanke waere nen 20 MHz AVR mit orderntlich Speicher wie 
der 644P fuer RS232 / SD Interface und das Verarbeiten von Anweisungen 
und dann nen beliebiger Slave, der sich um den Output kuemmert.

Da kommts halt drauf an, ob du nen Treiberbaustein hast, der einfach nur 
Flanken braucht oder ne H-Bruecke, die noch extra PWM Signale braucht.

Waere wirklich interessant wie du die Genauigkeit bekommst...

Felix

von Christian -. (kakuijin)


Lesenswert?

Schau dich mal in der dsPIC reihe um, die haben Module zum berechnen von 
Motorpositionen uvm..

von Gast (Gast)


Lesenswert?

Meine Maschine wird die Genauigkeit nie erreichen, das ist totaler 
Low-Tech.
Es gibt ja auch zig andere Fräsen, die so einfach aufgebaut sind. 
Schrittmotoren aus nem alten Drucker, L297/L298-Kombi als Treiber und 
eine PC-Software.

Die Software sendet ja nur die Befehle an die Steuerkarte, "mache 200 
Schritte nach links". Das Programm geht dann einfach davon aus, dass 
sich die Mechanik auch einen Umdrehung weiter gedreht hat.
Natürlich gibt es da Korrekturmöglichkeiten, z.B. indem man das 
Umkehrspiel misst und eingibt. Das passiert aber alles nur in der 
Software.
Maschinen, die über Messleisten oder ähnliches wirklich die aktuelle 
Position an den PC melden, sind garnicht mal mein Zielgebiet.

Mich stört es einfach, immer den PC hochfahren zu müssen, wenn ich nur 
mal schnell den Kreuztisch verfahren will oder eine kleine Nut brauche.
Genau da möchte ich ansetzen.

Meine Hardware soll also per Parameter-Datei "wissen", wenn sie 200 
Steps sendet, bewegt sich der Tisch 1mm. Maximalgeschwindigkeit = xyz, 
Rampe = abc.
Als Gimmick zeigt mir das Gerät dann eben noch an, das es der Meinung 
ist, 10mm gefahren zu sein. Ob und wie genau das in echt passiert ist, 
kann ich ohne weiteres eh nicht erfassen bzw. muss das manuell 
kontrollieren.

Als Gegenstück zu meinem Gerät wird nur Hardware in Frage kommen, was 
Takt/Richtungs-Signale verarbeitet.
D.h. mit Stromregelung usw. habe ich garnichts zu tun. Mein Gerät ist 
quasi soetwas wie der Steuer-PC, der ja auch nur Taktsignale 
rausschiebt.

Die hohen Anforderungen habe ich mir ausgedacht, weil ich vermute, dass 
das Projekt vielleicht auch für andere interessant sein könnte.
Deswegen wollte ich versuchen, über z.B. verschiedene Konfig-Dateien 
flexibel zu bleiben.
Für den Test-Betrieb auf dem Basteltisch kann man z.B. die hohe 
Schrittfrequenz nutzen, wenn man einen Motor mal ans Limit fahren will.

Oder in Kurzform:
Ich möchte ein System bauen, dass wie der manuelle Jog-Betrieb der 
CNC-Steuersoftware arbeitet.
Das System soll dabei sofort nach dem Einschalten bereit sein und ohne 
Umwege (Software-Notaus brücken, ...) einfach nur Takt-Richtungs-Signale 
ausgeben können.
Dabei sollte sich die Hardware möglichst flexibel an die Wünsche der 
User anpassen lassen.

von Olaf (Gast)


Lesenswert?

Ich wuerde darauf achten das du fuer jede Achse einen eigenen
Timer verwenden kannst. Es mag auch anders gehen, ist aber
mit Stress verbunden.

Des weiteren wuerde ich darauf achten das dein Controller
veraenderbare Interruptprioritaeten kann.

Ich wuerde privat sowieso nichts verwenden was weniger als 8kb Ram hat. 
Fuer die 1-2Euro die das kostet muss man sich keinen Stress antun. Und 
du hast ja schon erkannt das Ram nicht schaden kann wenn man eine MMC/SD 
Karte benutzen will.

Empfehlen wuerde ich dir einen M16C weil ich sowieso mit den Teilen 
arbeite, aber natuerlich wird es auch andere Prozessoren geben die
das alles bieten. Da du sicherlich oft mit Zahlen >8Bit arbeiten wirst,
macht es auch Sinn keinen 8Bit Prozessor zu verwenden. .-)

Olaf

von Michael H. (mah)


Lesenswert?

nimm emc2 - linuxcnc.org und dampf das auf ein PC-kompatibles Board ein

von James (Gast)


Lesenswert?

Nimm für jede Achse einen ATMega, und verbinde die mit dem
"Haupt-µC" über SPI, RS232 (hier dürfte es auch ohne Pegelwandler gehen)
Die "Achsen-ATMegas" erledigen die Fahrerei, melden Position erreicht
usw. Der Haupt-µC erledigt das Lesen der Speicherkarte, Steuerung von
der Anzeige (so vorhanden) und Tastenabfrage......

Obige Lösung hatte ich bei einem ähnlichen Projekt eingesetzt, 
funktioniert prima.

Gruß

James

von Jochen (Gast)


Lesenswert?

Hallo Gast,

die Aufgabe, den schrittmotorangetriebenen Tisch meiner Maschinen ohne
PC zu bewegen, hatte ich ich mir auch gestellt.
Evtl. kannt du aus meiner nichtvollendeten Lösung etwas gebrauchen.
Zu finden ist es hier:
http://www.hajo-te.homepage.t-online.de/PCDREH_Taktgeber.htm

MfG.
Jochen

von Uwe (Gast)


Lesenswert?

Hi!
Genau so wie es James schreibt, Achscontroller und ein Master.
Wenn nicht zu viele Ein/Ausgänge pro Achse notwendig sind reicht ein
Tiny2313. Meine waren so zu 63% ausgelastet. Beim Master hatte ich mich 
auch total verschätzt, ein  Mega32 ist mit knapp 7KB belegt, beschäftigt
2 Achsen, verarbeitet 6 Eingänge + 5 Ausgänge, kann 100 Zeilen Programm 
abarbeiten(aus EEPROM), hat einen Editor, Jog, Inc, Autom. und als
Anzeige ein 4 x 20 LCD. Ist allerdings in ASM geschrieben.
Also nicht irre machen lassen, mit einem guten Konzept kommt man schon
mit kleineren µCs recht weit.

Viel Erfolg, Uwe

von Armin D. (ardiehl)


Lesenswert?

Hi,

sowas habe ich vor ein paar Jahren auch mal gemacht, relativ primitiv, 
Mega128, die Schritte für die 3 Motoren werden in einem gemeinsamen 
TimerInt erzeugt. LCD und ein paar Tasten zur Konfiguration (auch 
Spielausgleich bei Richtungswechel).
Hatte ich primär zum Bohren von Platinen gemacht, mit egle excellon 
Datei erzeugen und einfach per cat x.txt >/dev/ttySO zum Kontroller 
kopieren.

Ist alles andere als optimal funktioniert aber sein Jahren prima zum 
bohren von Platinen und auch zum Fräsen von Frontplatten.

Bei Interesse stelle ich das mal ins Netz.

Armin

von Geri (Gast)


Lesenswert?

Hi,

vielleicht kannst du es so ähnlich machen. Eine Handsteuerung, die Takt 
und Richtungssignale erzeugt.

http://burger-web.com/ProductDescription/AKKON_HandWheel/de_AKKON_HandWheel.htm.de

Geri

von Gast (Gast)


Lesenswert?

Das hört sich alles sehr vielversprechend an.
Der kleine Tiny kostet ja auch nur rund 1€, d.h. ich wäre dann mit <5€ 
pro Achse dabei. Perfekt.
Dann würde ich eine Platine entwerfen, auf die man Master-Module 
aufstecken kann. So kann man die Steuerung bei Bedarf noch um 1-2 Achsen 
erweitern, ohne gleich die Controller kaufen zu müssen.

Als Master würde ich gleich etwas "großes" einsetzen, z.B. Mega128. Dann 
kann man die Steuerung auch einmal erweitern, z.B. Programme von 
SD-Karte fahren lassen, ohne an die Grenzen zu geraten.

Jetzt kommt eine weitere Frage auf:
Ich möchte mit 2 Achsen gleichzeitig fahren, z.B. für Kreise oder 
Schrägen.
Wenn ich jetzt jedes Achsen-Modul mit einem eigenen Quarz takte, habe 
ich die Befürchtung, dass mir die Steuerung irgendwann auseinander 
läuft.

Gibt es ICs, die den Takt von einem Quarz-Oszi auf z.B. 5 Atmegas 
verteilen können? Alle an einen Oszillator hängen wird diesen wohl 
überfordern, oder?

Sollte das nicht gehen, was haltet ihr von dieser Idee: Die 
Achsen-Controller werden alle am INT0-Pin verbunden, dieser kommt an 
einen IO-Pin vom Master.
Der Master taktet dann alle Module mit der maximalen Schrittfrequenz, 
z.B. 50 kHz durch. Diese bekommen alle Synchron den Interrupt und können 
dann, wenn z.B. alle Achsen auf 100% Geschwindigkeit stehen, synchron 
einen Schritt auslösen.

Außer dem Interrupt und dem Datenempfang vom Master müssten die Slaves 
dann ja nur die Anfahr-Rampe berechnen.
Könnte ich im Interrupt dann eigentlich auch die Berechnung von den 
Rampen machen? Dann müsste ich in der Main-Loop nicht irgendwelche 
Zähler o.ä. abfangen, sondern lege einfach die Aktion für den nächsten 
Interrupt irgendwo ab.
Wie schätzt ihr das ein, sind die nötigen Berechnungen schnell genug, 
oder blockiert mir dann der Controller?
Die Daten-Verteilung würde ich mit I2C oder SPI machen, über die 
Controller-Hardware.
(Gleich noch eine Frage, IMHO sollte doch I2C von der Geschwindigkeit 
reichen? Da hab ich nämlich schon eine schöne Lib mit CRC-Prüfung etc.)

Danke schonmal bis hier hin, das hilft mir viel. Ich hatte anfangs 
befürchtet, gleich einen FPGA nehmen zu müssen. Jetzt weiß ich schon 
mal, das es sich lohnt, das auszuprobieren. Beim Thema FPGA, mini-PC 
o.ä. wäre ich nämlich raus, das ist mir zu hoch und zu teuer.

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.