Drehbank schneidet Gewinde unsauber

  • Hallo liebe CNC-Area Gemeinde!


    Ich stehe seit Wochen vor einem Problem auf dessen Lösung ich nicht komme und zu dem mir so langsam auch die Ideen ausgehen.


    Und zwar weigert sich meine selbst auf CNC umgebaute Drehmaschine, ordentliche Gewinde zu produzieren.


    Da Bilder ja bekanntlich mehr als 1000 Worte sagen, fange ich damit an:




    Das sollte eigentlich ein "normales" metrisches Gewinde sein mit 60° Winkel, 3mm Steigung und 0,8mm Tiefe.

    Verwendet haben ich hierfür einen Meißel für Außengewinde, der schon die passenden 60° hat.

    Das System ist ein LinuxCNC das noch mit der parallelen Schnittstelle arbeitet.

    Der G-Code dafür sieht folgendermaßen aus:

    %

    (GEWINDE TEST)

    M3

    G97S85

    G0X19Z5

    G76 P3 Z-5 I-1 J0.05 R1 K0.8

    G0X16Z180

    M5

    %


    Wie man sieht, oder vielleicht auch nicht weil G-Code ja sehr unterschiedlich definiert sein kann, drehe ich das Gewinde bei 85 U/min. Vorm einstechen hat die Maschine 5mm Weg um sich zur Spindel zu synchronisieren.



    Wenn das Gewinde geschnitten wird, kann man schön erkennen, dass der jeweils nächste Schnitt, leicht versetzt vor dem letzten statt findet. Diese laufen dann immer parallel. Das Gewinde verschiebt dich dadurch also immer weiter nach links, was dann links den definierten 30° Winkel entstehen lässt und rechts, nun ja, diese Rampe da...

    Bisher dachte ich fälschlicher weiße, dass der nächste Schnitt immer leicht hinter dem ersten liegt. Das also die CNC zu spät einschneidet oder zu langsam wäre. Wie auch immer ich das so lange glauben konnte ^^ Die CNC setzt, wie oben beschrieben, definitiv zu früh ein. Sie kann also, zumindest würd ich das jetzt mal denken, nicht zu langsam sein.


    Und genau dazu habe ich jetzt überhaupt keine Idee mehr. In meinem Kopf schwirrt ein "Zu früh? Wtf?"

    Für einen Moment dachte ich vielleicht ein eine Korrektur die LinuxCNC ausführt, aber ich habe nirgends etwas entsprechendes eingestellt.



    Was ich bisher schon alles versucht habe:

    -PC neu aufgesetzt

    -anderen PC versucht

    -LPT Kabel frei gelegt und weit von jedem Störeinfluss verlegt (Kabel ist erst 2 Jahre alt)

    -SPP, EPP, ECP, EPP+ECP und "Normal". Falls es ver. Versionen gab hab ich auch diese getestet.

    -verschiedene U/min an der Spindel

    -habe mit dem G76 Befehl rumprobiert, wobei nichts raus kam was mich einer Lösung näher brachte



    Noch ein paar Daten (falls mehr benötigt werden, bitte einfach sagen welchen):


    -DB25-1205 Breakout Board

    -Motoren laufen in 1/8 Schritten

    -Drehzahlsensor: 62 Impulse pro Umdrehung


    Und ganz wichtig: Die Maschine läuft ansonsten einwandfrei! Ich habe schon mehrere Teile gedreht, die sie selbst, ganz alleine gefahren hat. Alles funktioniert genau so wie es soll. Außer Gewinde:cursing:^^




    So, ich hoffe ich habe alles wichtige geschrieben und ihr könnt mich retten:)


    Gespannt und mit Grüßen verbleibend

    Matthias

  • Hallo Peter,


    danke für deine neuen Ansätze. Bin gerade dazu gekommen sie zu probieren. Also:


    -G97 vorher weg zu lassen brachte leider keine Veränderung. Ergebnis sieht genau gleich aus.

    -der Beispielcode läuft, aber ich finde ihn wenig aussagekräftig oder ich verstehe was falsch. Zumindest ist er, so wie er dort steht, erst einmal ohne Wirkung. Bei einer Driveline von 0.2, einem Innenversatz von -0.075 und einer Schnitttiefe von 0.045, was insgesamt 0.12 macht, berührt er damit nicht einmal das Werkstück. Wenn ich die Driveline dann auf 0.05 setze, bekomme ich zwar ein Ergebnis, aber bei einer Steigung von 0.05 kann ich leider nichts erkennen.


    -in meiner Hal habe ich mal nachgeschaut, ich meine, sie würde alle Anforderungen erfüllen. motion.spindle-at-speed und encoder.0.phase-Z sind vorhanden. Bei mir ist es allerdings encoder.0.phase-Z statt encoder.n.phase-Z . Ich weiß nicht, wo der Unterschied liegt oder ob das etwas aus macht. Damit kenne ich mich leider zu wenig mit der Hal aus. Ich poste sie mal mit. Vielleicht fällt ja dir oder jemand anderem ein Fehler auf.


    -hab eben auch grad nochmal schnell die 0 durch das n ersetzt, damit startet es dann das Programm nicht mehr sondern gibt nur eine Fehlermeldung aus




    Besten Dank und liebe Grüße

    Matthias

  • Hast du mal die Encoderleitung abgeklemmt und das Programm laufen lassen? Sollte ja stehen bleiben da kein Feedback.


    Aber in deiner HAL sehe ich nur


    net spindle-phase-a <= parport.0.pin-12-in

    net spindle-phase-b <=

    net spindle-phase-z <=


    b und z sind nicht mit der Außenwelt verbunden.

    Wenn ich das richtig verstehe orientiert sich LinuxCNC am Z Signal und da ist bei dir kein Pin vom parport angeschlossen.

    Du nutzt "spindle-phase-a" ich gehe mal davon aus als Drehzahlanzeige.

    Das PWM Signal wird starr rausgegeben und nicht geregelt. Denn einen PID Regler sehe ich in der HAL nicht.

    Somit wird bestimmt die Achsgeschwindigkeit an der akutellen Drehzal angepasst. Wenn richtig in der HAL vernetzt.


    Gruß Peter


    Hier noch ein Beispiel mit parport und verknüpften a und z signal .

  • Hallo Peter,


    heute bin ich mal wieder dazu gekommen. Du liegst vollkommen richtig, ich stelle den Motor an und dann richtet dich die CNC nach dem Eingangssignal des Sensores an der Spindel. Und das funktioniert eigentlich auch. Wenn ich die Spindel schneller drehen lasse, ist die Vorschubgeschwindigkeit höher, bei langsamer langsamer und wenn ich den Motor aus mache, verfolgt es schön noch den Nachlauf bis zu, Stillstand und steht dann auch still.


    Danach verstehe ich leider nicht mehr so viel. Was ich noch sagen kann und was ich heute noch probiert habe ist:

    Ja, ich lasse mir die Spindeldrehzahl auf den Bildschirm ausgeben.


    Probiert habe ich heute mal


    net spindle-phase-a <= parport.0.pin-12-in zu net spindle-phase-z <= parport.0.pin-12-in setzen.


    Einfach weil ich mir gedacht habe, a brauch ich doch eigentlich nicht, die z Achse muss doch synchron sein. Resultat: Die Maschine fährt in die Startposition an und bleibt dort stehen. Beginnt als nicht mit dem Schneiden.


    Dann hab ich mir überlegt ob das was damit zu tun hat, dass ich erst etwas in der .hal ändern musste bevor die Maschine überhaupt synchron zur Spindel gelaufen ist. Damals habe ich


    net spindle-index encoder.0.phase-Z zu net spindle-phase-a encoder.0.phase-Z geändert.


    Also habe ich es wieder zu net spindle-index encoder.0.phase-Z gemacht. Das Ergebnis bleibt aber leider gleich. Fährt zur Startposition und rührt sich dann nicht mehr. Als letztes habe ich dann noch versucht


    net spindle-phase-a <= parport.0.pin-12-in und net spindle-phase-z <= parport.0.pin-12-in


    gleichzeitig zu setzen. Das brachte einen Error und das CNC Programm startete nicht. Liegt das daran, weil beide auf Pin 12 zugreifen möchten?


    Dann hatte ich noch die Idee


    net spindle-phase-a encoder.0.phase-Z zu    net spindle-phase-z encoder.0.phase-Z zu machen. Leider wieder nur Stillstand.


    Als letztes dann noch in Kombination mit


    net spindle-phase-z <= parport.0.pin-12-in aber leider immer noch nur Stillstand.


    Jetzt ist wieder alles auf a eingestellt und sie läuft wie bisher. Leider.




    Wieder ein liebes Dankeschön, aber leider immernoch offen für neue Ideen.



    Liebe Grüße

    Matthias

  • Hallo Goldschmiedel,


    ja, die Umdrehungen stimmen. Die Steigung der Gewindes ist auch richtig, nur die Flanke ist verschoben dadurch, dass er den jeweils nächsten Schritt einen Hauch VOR den davor setzt. Deswegen denke ich auch, dass es nicht an der elektrischen Seite liegt, da er ja zu früh und nicht zu spät einsticht.


    Danke und liebe Grüße

    Matthias

  • Also Elektronik denke ich ja. Ich kann mir nicht vorstellen wie sie zu früh einsetzten soll. Sie bekommt ja erst den Befehl und dann setzt sie ein. Also muss der Befehl zu früh kommen.

    An die Mechanik habe ich auch schon gedacht, habe demletzt mal mit backlash nochmal am Umkehrspiel rumprobiert, leider ohne Verbesserung.

    Was mich so fuchst ist vor allem, dass er jeden Schnitt gleichmäßig weiter nach vorne versetzt.

    Also quasi erster Einstich bei 0.0 zweiter bei 0.1 dritter bei 0.2 vierter bei 0.3 usw. Die laufen dann genau parallel, also mit der gleichen Steigung, zum ersten Schnitt. Als würde das Programm sagen, es muss beim nächsten Schritt jeweils 0.1 früher ansetzen.

    Das kann ich mir dann auch durch einen mechanisches Problem nicht mehr erklären, weil dann dürfte sich der Versatz nicht immer weiter nach vorne verschieben.

    Bei mir sind auch alle Achsen Direkt angetrieben, als eine ungenaue Übersetzung fällt auch weg.

  • Den Code schreibe ich selbst nach den Angaben von LinuxCNC auf die Peter verwiesen hat.

    Aber so Fragen sind durchaus gut, meist ist es ja irgendwas einfaches was man übersieht weil man direkt davor steht.


    So, ich war heute Abend natürlich nicht faul und hatte noch einen Einfall welcher kuriose Ergebnisse brachte.

    Und zwar dachte ich mir, ich setze die Impulse pro Umdrehung in Linux einfach mal auf 63 statt 62.


    Das Ergebnis: Mit meinem Testcode


    G76 P3 Z-5 I-1 J0.05 R1 K0.8


    kommt ein echtes Gewinde raus! :D Hurra! Dachte ich schon. Endlich! ABER, zu früh gefreut.


    Nächster Gedanke: Jetzt will ich es mal länger als 5mm haben damit man auch richtig was sieht.

    Was macht es, es fängt an viele Gewindegänge zu fahren, sprich, es setzt scheinbar willkürlich wieder an einem anderen Punkt an und am Ende ist dann das ganze Teil einfach nur noch abgeschruppt und gar kein Gewinde zu erkennen.


    Na gut, wieder zurück zu 5mm Länge. Wie sieht es da mit 1mm statt 0.8mm Tiefe aus?

    Es entsteht eine Rampe wie man sie ganz oben im ersten Post im Bild erkennen kann, nur diesmal nach links statts rechts. Ergo, der Drehmeißel sticht jedes mal einen Hauch zu spät ein.

    Und was macht er bei 0.6mm statt 0.8mm Gewindetiefe, er macht wieder eine Rampe nach rechts. Genau so, wie er es auch die ganze Zeit gemacht hat.


    Ich bin ratlos, kann mir keinen Reim darauf machen und musste bei der Erkenntnis fast schon lachen^^



    Damit das Rätsel zum Sonntag und liebe Grüße

    Matthias

  • Ehr weniger. Das Programm das ich habe gibt einen G84 Code aus, der wird offiziell nicht unterstützt. Aber, da ich ja eh gerade nur am rumprobieren bin, könnt ich es einfach mal versuchen. Dabei fällt mir auch ein, es gibt auch ein G33 Befehl mit dem man, wenn auch nicht so bequem, eigentlich auch Gewinde schneiden könnte.

    Wenn ich dazu komme, werde ich die beiden mal testen und euch berichten was die kleine damit anstellt^^


    Um nochmal zum G76 zurück zu kommen:

    Also der sollte eigentlich schon richtig sein.


    G0X19Z5

    G76 P3 Z-5 I-1 J0.05 R1 K0.8


    Mit der ersten Zeile fahre ich auf den Ausgangspunkt x19 und z5


    Dann G76

    die Steigung ist P = 3mm

    Z ist die Länge die geht bis -5

    I ist die Entfernung zur "Driveline" welche durch den Startpunkt festgelegt wird, das wäre bei x19. I-1 heißt dann also, ansetzen bei x18 was dann einen Durchmesser von 36mm entspricht.

    J ist die Tiefe je Durchgang. Also immer 0.05mm tiefer schneiden je Durchgang.

    R1 sagt, dass er konstant immer die 0.05 runter gehen soll

    K gibt an, wie tief es am Ende werden soll, nämlich 0.8mm


    Und das steht alles genau in der Reihenfolge wie es auf der LinuxCNC Seite beschrieben wird.

    Was ich mal noch versuchen könnt, wäre ein Q0 dahinter zu stellen. Ich habe bisher glaube nur Q29.5 Q30 und Q90 versucht. Aber nahm bisher immer an, er geht von Q0 aus wenn nichts weiter angegeben.

  • Hallo,


    hier bekommst du ein sehr gutes Tool für das Gewindeschneiden mit Mach3

    Bitte dazu auch die Hilfe im Programm lesen.


    https://sourceforge.net/projec…lper/?source=typ_redirect


    Hier findest du die Webseite mit Erklärungen zu dem Programm.

    http://www.stephan-brunker.de/…erung/programmierung.html


    Gruß Dieter

    Ich repariere alles solange ganz, bis meine Frau entscheidet,
    dass wir es wegen Überreparatur wegwerfen können. :thumbsup:

  • Hallo Dieter,


    habe mir mal das Programm herunter geladen und kurz meine Werte eingetippelt, dass kam dabei raus:


    G21

    G77 r XX x17.88 k0.0 z XX

    G76 p3.0 r17.88 x15.652 h0.705 i29.5 k11.1 z-18.0 l360 q0


    Damit kann meine Maschine leider nichts anfangen :( G77 kennt sie nicht und mit G76 wird sie Probleme bekommen weil die Parameter anders definiert sind als bei LinuxCNC. Z.B. ist i bei mir die Offset Angabe zur Driveline, also der Versatz zum (freien) Fahrweg und hier ist es als die Winkelangabe vom Drehmeißel definiert.


    Habe jetzt auch leider keine Möglichkeit gesehen, dass Programm auf LinuxCNC (EMC2) um zu stellen.


    Danke für den Versuch und liebe Grüße

    Matthias

  • So, neuer Tag, neues Pech^^


    Also: Mein Programm gibt nicht wie oben beschrieben einen G84 Code raus, sondern einen G92. Da habe ich mich vertan. Pech an der Sache ist, G92 wird nicht nur nicht unterstützt, es ist auch anderweitig belegt. Fällt also komplett raus als Option.


    Und als ich gerade den G33 schreiben wollte fiel mir wieder ein, warum er nur bedingt für Gewinde schneiden geeignet ist. Ich dachte zu erst nur an den Aufwand, da man alles für jeden Schnitt wiederholen muss, aber ein Gewinde in mehreren Schnitten zu fahren ist damit leider gar nicht erst möglich. Der Befehl bietet mir zwar die Möglichkeit an, synchron zur Drehzahl zu arbeiten, aber nicht immer wieder an der gleichen an zu setzen :( Es wäre dann also immer Zufall, wo er beim nächsten Schnitt einsticht.


    Q0 habe ich versucht ohne eine Änderung feststellen zu können.



    Ich bin auch am überlegen, warum das bei 63 P/U auf einmal ging? Mein Zahnrad das, ich mit Hilfe einer Lichtschranke, zur Drehzahl Messung missbrauche, hat 62 Zähne und natürlich auch 62 Täler.




    Bis dahin

    Matthias