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