Bestand: Portalmaschine, ca. 500 Ă 500 Ă 200, mit Schrittmotoren und Endschaltern, von ISEL, ohne Stecker. âFlachbetteinheit E18?â â Ein Link dazu. Vorhandene Hardware fĂŒr Schrittmotorsteuerung inklusive Box.
Auftrag: Beides zusammenbringen; notwendige Kabel und Stecker beschaffen; am besten mit MACH4 in Betrieb nehmen.
Dokumentation:
Da sich die passenden M23-Kupplungen nur mit schier endlosen Lieferzeiten liefern lassen (30 Wochen!!) wurden diese kurzerhand durch SubD-Buchsen in ISEL-Belegung ersetzt. VorlÀufig gehen die Schalter auf Masse. Die Endschalter öffnen beim Erreichen des Endes! Nur die Z-Achse hat eine Bremse (Elektromagnet). Die SubD-Buchsen befinden sich in einfachen 3D-gedruckten Adaptern.
Motorspule 1A | 1 | |||
6 | Bremse | |||
Motorspule 1B | 2 | |||
7 | Endschalter motorfern ES2 | |||
Motorspule 2A | 3 | |||
8 | 0 V, gemeinsamer Anschluss der Endschalter | |||
Motorspule 2B | 4 | |||
9 | Endschalter motornah (Referenz) ES1 | |||
Bremse (Isel: +24 V) | 5 | |||
Nachdem sich eine Reihe von Maschinenbauern daran abgeeichelt und alles nur verschlimmbessert hat (viele nutzlose 3D-Druckteile) steht das Problem nun wieder vor mir. Die Box ist weg. Es soll zu einer HolzfrĂ€se werden. (Doch nicht etwa fĂŒr Schwibbogen-Zubehör?) Mit einer benutzbaren CNC-Steuerung.
MACH4 oder auch jede andere kostenpflichtige(!)
SteueungsoberflĂ€che fĂŒr Windows ist vom Tisch. Juhu!
Es soll nur G-Code fressen können.
Das extra gekaufte SteuerungsgerÀt
CSMIO/IP-S
(600 ⏠oder mehr) ist ebenfalls fĂŒr die Katz!
Na endlich! Der Ethernetanschluss macht eh' nur Probleme.
Inzwischen kenne ich mich etwas grbl aus.
Beim benachbarten Maschinenbau ist es auf einem
Arduino
Uno im Einsatz bei einer kleineren Demo-FrÀse.
Nutzlose Arduinos liegen massenhaft als Fehlkauf herum.
grbl kennenlernen:
Das ist eine Open-Spource-Lösung fĂŒr ATmega328
und passt dass es pufft und kracht geradeso
in die 30 freien KByte Flash des Controllers hinein
(aber nur mit
avr-gcc
5.3.0),
wobei der Uno 2 KByte fĂŒr seinen seriellen Catarina-Urlader
0,5 KByte fĂŒr den unbenannten Urlader wegschnappt.
Es ist die Ausgangssoftware fĂŒr alle 3D-Drucker.
grbl verarbeitet G-Code, der vom PC ĂŒber die serielle Schnittstelle âeingeströmtâ
(per XON/XOFF-Protokoll gedrosselt) kommt,
kann Geraden- und Kreisinterpolation machen sowie GeradenstĂŒcke nahtlos zusammensetzen.
Die Ausgabe sind STEP- und DIR-Signale fĂŒr die gĂ€ngigen chinesischen
(Mikro-)Schrittmotor-Endstufen.
Mit beachtlichen 30 kHz Schrittfrequenz.
(Meine alte
machte nur 8 kHz, auf einem ATmega8,
aber dafĂŒr auch Mehrfachschritte einer Mikroschritt-Endstufe.)
Ist fĂŒr genau 3 Achsen und 3 Endschalter â sowie 1 PWM-Ausgang
zur Geschwindigkeitsvorgabe der Werkzeugspindel.
Kommandos zur Handbedienung (Jog) sind ebenfalls implementiert aber dĂŒrftig dokumentiert.
EinigermaĂen verstĂ€ndlicher C-Quelltext.
Leider ĂŒberhaupt kein C++, dadurch unschön strukturiert:
Alles im globalen Namensraum.
Die Bremse der Z-Achse macht deutlich hörbare KlickgerÀusche und hat folgende gemessene Eigenschaften:
Daher ist es am besten, die Bremse mit einer Stromkontrolle zu betreiben, um die EigenerwÀrmung der Z-Achse zu minimieren.
Der Freigabeeingang der Schrittmotortreiber ist ein Disable-Eingang! Ohne Beschaltung schluckt dieser 0,5 A bei 24 V (bei maximal eingestelltem Schrittmotor-Spulenstrom). Mit 5 V 30 mA.
Schlachtplan:
GegrĂŒbelt habe ich einige Zeit, wie beim aktuellen Firmware-Stand das Streaming von g-code vonstatten gehen soll, ohne PufferĂŒberlĂ€ufe. Ich bin davon ausgegangen, dass man der FrĂ€se einfach mit
die abzuarbeitenden Schritte aus dem CAM-Postprozessor ĂŒbertrĂ€gt und sich eine wie-auch-immer-geartete Synchronisationslogik um die Drosselung der Ăbertragung kĂŒmmert, damit keine PufferĂŒberlĂ€ufe auftreten.copy /b gcodefile.gcode com9
Da gcode 7-Bit-ASCII ist, bietet sich zur Synchronisation das XON/XOFF-Protokoll an.
Unter Windows lĂ€sst sich XON/XOFF zur Synchronisation zwar aktivieren, die Wirkung verpufft jedoch durch den relativ groĂen Puffer des USB-Seriell-Konverters. Das heiĂt, ehe XOFF beim EmpfĂ€nger ankommt mĂŒssen sĂ€mtliche noch gepufferten Sendedaten raus, oder es wird erst nach einer ZeitĂŒberschreitung gesendet, da der Konverter vermeiden will, lauter 1-Byte-Pakete zu senden. Dabei bietet USB selbst einen Synchronisierungsmechanismus an: Bei USB drohen schlicht keine PufferĂŒberlĂ€ufe: Kann ein USB-Device keine Daten entgegennehmen, antwortet es auf das OUT-Paket mit NAK. Und kann der USB-Host keine Daten entgegennehmen, sendet er keine IN-Tokens.
GĂ€ngige, zumeist in Python geschriebene âG-Code-Senderâ gehen den folgenden oder Ă€hnlichen Umweg:
Das hat zur Folge, dass die Maschine, je nach USB-Seriell-Konverter, gelegentlich auf Geschwindigkeit 0 herunterfÀhrt oder hÀngen bleibt. Ein Irrweg!
Die richtige Lösung ist demnach XON/XOFF auf dem USB-Seriell-Konverter! Leider sieht der CDC-Standard (IMHO) keine Lösung dafĂŒr vor. Daher fallen Arduino-Uno-Nachbauten aus China mit generischem USB-Seriell-Konverter-Chip heraus. Hinreichend originale Unos mit ATmega16U2 als USB-Seriell-Konverter lassen sich jedoch umprogrammieren, um XON/XOFF permanent zu aktivieren. Eine ausfĂŒhrliche ErlĂ€uterung ist auf Github, lĂ€sst jedoch auĂer Acht, den ATmega16U2 umzuprogrammieren. FTDI FT232 wiederum basiert nicht auf CDC sondern verwendet einen eigenen Treiber, der offenbar XON/XOFF korrekt umsetzt.
ATmega16U2-Firmware ohne LUFA!!!
Drei GerÀte: HID, WebUSB, CDC. Mit LandingPage.
Zurzeit nur CDC und WebUSB funktionstĂŒchtig. Eine LandingPage gibt's nur bei WebUSB.
Die String-Deskriptoren sind im EEPROM und können spÀter mal mit
SetDescriptor(0,7,wValue,-,wLength)
vom Anwender angepasst werden.
Die Firmware verwendet eine richtungsweisende Von-Neumannisierung von
RAM, EEPROM und Flash.
Das Problem mit dem avrdude löste sich durch Anwendung des altmodischen avr-size -C: Der ATmega16U2 hat ja nur ein halbes Kilobyte RAM und war schlicht zu voll! Und modernere avr-size bemerken das nicht, weil sie keine FĂŒllgradausgabe haben: Benutzerunfreundlichkeit von GNU-Software at its best!
Das XON/XOFF-Protokoll funktioniert nun endlich korrekt, und das sogar mit 2 MBaud. Entscheidend war â die Empfangs-ISR mit Tail-Chaining auszustatten und ⥠das XOFF nicht via Interrupt sondern direkt aus der Empfangs-ISR zu senden.
Bei dieser Gelegenheit habe ich den Quarz des ATmega16U2 samt RC-Beschaltung ausgebaut und lasse den Mikrocontroller fortan vom ATmega328P mit einem kurzen Verbindungsdraht von ATmega328P XTAL2 nach ATmega16U2 XTAL1 takten. Dazu mĂŒssen oder zumindest sollten die Fuses der beiden Controller folgendermaĂen geĂ€ndert werden:
avrdude -c avrisp2 -p m328p -U lfuse:w:0xf7:m # Full swing crystal oscillator avrdude -c avrisp2 -p m16u2 -U lfuse:w:0xe0:m # External clock
Ich habe die Durchsteck-Quarze fĂŒr mein Projekt avrpp benötigt. Richtiger ist die Taktspeisung in die andere Richtung. So bekommt man 1 weiteres Pin des ATmega328P frei. Mit dem SMD-Resonator CSâTâCEâ16M0âVâ5â3 konnte ich nichts anfangen. (USB Full-Speed fordert â€2,5 â° Toleranz, deshalb wohl der Extra-Quarz!) Erstaunlich: Vermeintliche âQuarzeâ mit 3 AnschlĂŒssen sind auch 2025 stets Keramikresonatoren! Niemand scheint Quarze mit integrierten BallastÂkondensatoren zu verkaufen.
Herrjemine, bevor ich irgendwas brauchbares in die Finger bekomme, lieber gleich als Offline-Webanwendung programmieren.
Die Webanwendung unterstĂŒtzt sowohl WebSerial (nur auf PCs) als auch WebUSB (auf Smartphones die einzige Option). Sie funktioniert mit allen modernen Browsern auĂer Firefox!
Zurzeit hÀngt es noch an folgenden Punkten:
Siehe auch: