Inhaltsverzeichnis:

CNC-Vorschubmessgerät aus Schrott - Gunook
CNC-Vorschubmessgerät aus Schrott - Gunook

Video: CNC-Vorschubmessgerät aus Schrott - Gunook

Video: CNC-Vorschubmessgerät aus Schrott - Gunook
Video: Styrodurplatten mit CNC-Fräse bearbeiten 2024, Juli
Anonim
CNC-Vorschubmessgerät aus Schrott
CNC-Vorschubmessgerät aus Schrott

Wollte schon mal jemand den tatsächlichen Vorschub auf einer CNC-Maschine messen? Wahrscheinlich nicht, bis die Fräser nach einem CNC-Job intakt sind… aber wenn sie regelmäßig brechen, ist es vielleicht an der Zeit, nachzuforschen. In diesem anweisbaren können Sie einer Suche bei der Bestimmung der tatsächlichen Vorschubgeschwindigkeit einer CNC-Maschine folgen. Es wird den Reverse-Engineering-Teil eines Druckers, Arduino-Firmware, PC-Software und die Ergebnisse, die ich mit Hilfe meiner Kollegen erzielt habe, und ein Müll, der in einen Schatz verwandelt wurde, behandeln.

Schritt 1: Materialien, Werkzeuge, Geräte, die verwendet werden, um das Projekt zum Laufen zu bringen

Als ich anfing, daran zu arbeiten, habe ich mir eine kurze Liste der Dinge ausgedacht, die wir brauchen werden:

  • zerlegter Druckerschlittenmechanismus
  • Handwerkzeuge, um das zu optimieren
  • Lötkolben, Lötzinn, Drähte
  • Multimeter
  • Oszilloskop oder Logikanalysator - das ist nicht zwingend notwendig
  • Energieversorgung
  • Mikroskop
  • Arduino Nano + Pinbelegung
  • PC mit Arduino IDE, Visual Studio 2008 Express + MS Charting Tools installiert
  • (MPU6050 - Ich habe das am Ende nicht verwendet)
  • bereit, nach allem zu suchen, was Sie nicht tun können

Am Anfang dachte ich, dass ich mit einer MPU6050-Platine den Vorschub auf allen drei Achsen gleichzeitig messen kann. Mit dem Beschleunigungsmesser darin war ich mir sicher, dass das Aufsummieren der Beschleunigungsmesserdaten den gewünschten Wert ergibt - die Geschwindigkeit auf jeder Achse. Nachdem ich ein Arduino-Snippet heruntergeladen und modifiziert hatte, das Rohdaten auf dem seriellen Monitor anzeigte, schrieb ich ein kleines PC-Programm in Visual Studio, das die Daten verarbeitete und zur einfacheren Interpretation in ein Diagramm einfügte. Dazu musste ich sowohl Visual Studio C# Express 2008 als auch die Diagrammtools herunterladen.

Nachdem ich eine Weile codiert und alle Dinge gesucht hatte, die ich für die serielle Kommunikation benötigte, waren die Werte aufgezeichnet, aber egal, was ich tat, es war nicht verwendbar. Kleine, aber plötzliche Bewegungen würden zu riesigen Spitzen führen, während längere Reisen nicht einmal in den Charts auftauchen würden. Nachdem ich zwei Tage lang auf den MPU6050 gehämmert hatte, gab ich schließlich auf und wandte mich etwas anderem zu - dem Positionsrückmeldemechanismus eines zerlegten Druckers.

Schritt 2: Hardware-Sachen, die getan werden mussten

Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste
Hardware-Zeug, die erledigt werden musste

Reverse Engineering

Natürlich hatte der Druckermechanismus keine Teilenummer, mit der ich seine genauen Eigenschaften hätte bestimmen können, es war ein wenig Reverse-Engineering erforderlich, um dorthin zu gelangen, wo wir wollten. Nachdem ich den Mechanismus und die Elektronik genau untersucht hatte, entschied ich, dass als erstes die Identifizierung der optischen Sensorpins erfolgen muss. Dies musste getan werden, um das Ganze mit dem Arduino zu verbinden. Ich zerlegte das schwarze Plastikteil, zog die Platine heraus und untersuchte den Sensor: darauf stand ROHM RPI-2150. Das hat mich gefreut, die Hoffnung war groß, dass ich ein Datenblatt finde. Leider ist dies entweder ein altes oder ein benutzerdefiniertes Teil - es gab nirgendwo im Internet ein Datenblatt. Das bedeutete, dass ich die Sache selbst in die Hand nehmen musste: Da ich wusste, dass diese Sensoren normalerweise eine Infrarot-LED und zwei Fototransistoren im Inneren haben, schnappte ich mir ein Multimeter, stellte es auf den Diodenmessmodus und begann zwischen den Pins zu messen.

Die Power-Pins sind normalerweise leicht zu finden - sie haben Kondensatoren über ihnen und sie sind normalerweise mit breiten Leiterbahnen auf den PCB-s verbunden. Erdungsspuren werden oft mit mehreren Pads verbunden, um eine bessere Rauschunterdrückung zu erzielen.

Die Eingangs- und Ausgangspins sind jedoch nicht so trivial. Beim Messen über eine Diode zeigt das Messgerät seine Durchlassspannung in einer Richtung und eine Überlastung (unendlich) in der anderen an. Ich konnte vier Dioden zwischen den Pins identifizieren und kam zu dem Schluss, dass die vierte Diode eine Art Zener- oder TVS-Diode sein muss, da sie sich direkt zwischen den Power-Pins der Komponente befand. Das Auffinden des Infrarotsenders war einfach, da ein 89R-Widerstand in Reihe geschaltet war. Ich blieb mit zwei Diodenmessungen an den verbleibenden beiden Pins, das mussten die beiden Empfänger sein.

Hinweis: Diese Sensoren verfügen über zwei Empfänger, um neben der Positionsbestimmung durch Zählen der Impulse auch die Bewegungsrichtung bestimmen zu können. Diese beiden Ausgangswellenformen sind um 90° phasenverschoben, dies wird verwendet, um einen Aufwärts- oder einen Abwärtszählimpuls zu erzeugen. Durch Verfolgen der Anzahl dieser Impulse kann die genaue Position des Druckkopfes bestimmt werden.

Als der Sender und die beiden Empfänger lokalisiert waren, lötete ich Drähte an ihren Pins, damit ich den Sensor mit dem Arduino verbinden kann. Zuvor habe ich den Sensor mit 3,3 V versorgt, den Streifen ein paar Mal zwischen den Sensor gezogen und die Rechteckwelle an den Ausgängen beobachtet. Die Frequenz der Rechteckwelle variierte mit der Bewegungsgeschwindigkeit, und ich kam zu dem Schluss, dass das Messsystem jetzt bereit ist, mit dem Arduino verbunden zu werden.

Anschließen des Arduino

Das Anschließen dieses neuen „Sensors“ist sehr einfach. Einfach die Sensorausgänge an D2 und D3 (interruptfähige Pins!) und die Versorgungsleitungen anschließen und schon kann die Codierung beginnen.

Schritt 3: Arduino-Codierung

Arduino-Codierung
Arduino-Codierung

Der Arduino-Code ist recht einfach. Ich habe eine Funktion zugewiesen, die jedes Mal ausgeführt wird, wenn D2 eine steigende Flanke sieht. Dies ist die Elapse-Funktion aus dem Arduino-Code, den ich angehängt habe. Wenn Sie sich die Signale eines quadratischen Encoders ansehen, sehen Sie Folgendes:

  • in eine Richtung ist Phase A bei jeder steigenden Flanke von Phase B logisch hoch
  • in die andere Richtung ist Phase A bei jeder steigenden Flanke von Phase B logisch niedrig

Dies war die Eigenschaft des Encoders, den ich ausgenutzt habe: Da die Elapse-Funktion jedes Mal ausgeführt wird, wenn D2 eine steigende Flanke hat, habe ich nur geschrieben, wenn das einen Zähler erhöht, wenn D3 hoch ist, und ihn verringert, wenn D3 niedrig ist. Dies funktionierte beim ersten Versuch, ich habe den Zählerwert an den seriellen Monitor gesendet und beobachtet, wie er sich erhöht / verringert, wenn ich den Druckkopf auf der Welle bewegt habe.

Lange Rede, kurzer Sinn, die Firmware macht in der Loop-Funktion Folgendes:

  1. überprüft den seriellen Empfangspuffer auf eingehende Daten
  2. Wenn Daten eintreffen, überprüfen Sie, ob es eine '1' ist oder nicht
  3. Wenn es eine '1' ist, bedeutet dies, dass die PC-Software den Zählerwert anfordert
  4. den Zählerwert seriell an den PC senden
  5. fang nochmal bei 1 an.

Damit liegt der Ball nun im Spielfeld der PC-Software. Lassen Sie uns darauf eingehen!

Schritt 4: Visual Studio C#-Software

Der Zweck des VS C#-Programms bestand darin, die Rechenlast vom Arduino auf den PC zu verlagern. Diese Software empfängt die Daten, die das Arduino bereitstellt, berechnet und zeigt die Geschwindigkeit in Form eines Diagramms an.

Was ich zuerst tat, war zu googeln, wie man die serielle Kommunikation in C# durchführt. Ich habe auf MSDN.com viele gute Informationen zusammen mit einem guten Beispiel gefunden, dann habe ich einfach weggeworfen, was ich nicht brauchte - im Grunde alles außer dem Leseteil. Ich habe den COM-Port und die Geschwindigkeit so eingerichtet, dass sie mit der des Arduino übereinstimmt, dann habe ich es einfach ein paar Versuche gemacht und alles, was über den seriellen Port kam, in ein mehrzeiliges Textfeld geschrieben.

Nachdem die Werte gelesen wurden, konnte ich einfach die Funktionen readto & split verwenden, um eine Messung voneinander und von Trennzeichen zu isolieren. Diese wurden auf einem Chart-Steuerelement aufgetragen, und die Werte begannen auf dem Bildschirm zu erscheinen.

Wenn Sie das Chart-Steuerelement in Ihrer VS-Toolbox nicht sehen können, können Sie das Problem googeln und die Lösung hier finden (suchen Sie nach Antwort Nr. 1): Link

Das Messprinzip

Um den Zusammenhang zwischen der Anzahl der Zählungen und der Distanz, die der Kopf zurücklegt, herauszufinden, haben wir den Zählwert auf Null gesetzt, den Druckkopf 100 mm von Hand bewegt und die Änderung der Zählungen beobachtet. Wir haben schließlich folgendes Verhältnis gefunden: 1 count = 0,17094 mm.

Da wir den Abstand abfragen und die Zeit zwischen den Abtastungen messen können, können wir die Geschwindigkeit berechnen, mit der die Positionsverschiebung stattfindet - wir können die Geschwindigkeit berechnen!

Dank TMR0 gibt es ein grobes Software-Timing von 50 ms, aber wir haben festgestellt, dass diese Timings nicht zu genau waren. Tatsächlich haben wir nach einigen Software-Geschwindigkeitsmessungen festgestellt, dass die zeitgesteuerten 50 ms überhaupt nicht 50 ms sind. Dies bedeutete, dass die Stichproben nicht in festen Intervallen genommen wurden, sodass die Geschwindigkeitsberechnung auch keine feste Zeitbasis verwenden konnte. Sobald wir dieses Problem gefunden hatten, war es einfach, weiterzumachen: Wir nahmen die Distanz- und Zeitdifferenz und berechneten die Geschwindigkeit als D_Distanz/D_time (statt D-Distanz/50ms).

Da unsere Gleichung die Geschwindigkeit in Einheiten von mm/50ms zurückgeben würde, müssen wir dies mit 1200 multiplizieren, um die Entfernung zu erhalten, die der Kopf in einer Minute in [mm/Minute] zurücklegen würde.

Hinweis: Die CNC-Frässteuerungssoftware Mach 3 definiert die Vorschubgeschwindigkeiten in Einheiten von [mm/Minute]

Filtern

Von diesem Punkt an schienen die Messungen ziemlich genau zu sein, aber das gemessene Signal war verrauscht. Wir vermuteten, dass dies auf mechanische Unstimmigkeiten in der Welle, Wellenkupplung usw. zurückzuführen war, also entschieden wir uns, es herauszufiltern, um einen schönen Mittelwert des gemessenen zu erhalten.

Feineinstellungen an der Software

Um die Samplerate und Filterrate während der Laufzeit zu ändern, wurden Scrollbars hinzugefügt - jeweils einer. Außerdem wurde die Möglichkeit eingeführt, die Plots auszublenden.

Schritt 5: Ergebnisse

Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse

Nachdem die Hardware- und Softwareteile fertig waren, führten wir drei Messreihen mit mach 3 + meiner Software durch, die Ergebnisse können Sie auf den beigefügten Bildern sehen. Spätere Experimente zeigten eine bessere Genauigkeit, wobei sowohl Filter- als auch Abtastraten erhöht wurden. Die Diagramme zeigen die gemessene Geschwindigkeit mit durchgehendem Rot und den Durchschnitt mit strichpunktiertem Blau.

Davon abgesehen sieht es so aus, als ob Mach 3 diese Geschwindigkeitseinstellungen ziemlich genau handhabt, aber jetzt wissen wir es mit Sicherheit:)

Ich hoffe, Sie haben dieses kurze anweisbare über Reverse-Engineering und das Verwandeln von Wasser in Wein genossen!

Danke schön!

Empfohlen: