Elektronik_Header_3Lüftersteuerung mit ESP-01

 

3DTouch Interface

Nachdem ich zwei 3DTouch Sensoren fĂŒr die Höhenprofilerstellung mittels OpenCNCPilot in Verbindung mit einer Standard GRBL Version an einer CNC-FrĂ€se umgebaut hatte - die erste Quick&Dirty Version und der Nachfolger in schön und praktisch fĂŒr nachtrĂ€gliche Anpassungen - und sich deren Brauchbarkeit im praktischen Einsatz erwiesen hatte, ĂŒberlegte ich mir eine Vereinfachung im Sinne von “einfacher nachzubauen”.

Der klassische 3DTouch Sensor senkt und hebt den Taststift vom Controller des 3D-Druckers gesteuert. GRBL fĂŒr CNC-FrĂ€sen stellt diese Ansteuerung nicht zur VerfĂŒgung, also muss die Steuerung des Stiftes irgendwie anders erfolgen.

Der Ausweg ist die Zwischenschaltung einer kleinen Elektronik, die den Stift steuert, das Probe-Signal des Sensors aber direkt an GRBL weiterleitet, damit keine Verzögerungen impliziert werden. Die Steuersignale zum Anheben und Absenken des Taststiftes werden mit einem Microcontroller erzeugt, dessen Funktion erschöpft sich im Erkennen des Probesignals und der Erzeugung von Signalen fĂŒr aus dem Modellbau bekannte Servos.

Ein kleines Problem existiert in Form des Pegels der Meldung eines Touchevents. Die 3DTouch Sensoren melden Kontakt mit einem Aktiv HIGH Signal. An der FrĂ€se hat sich hingegen eingebĂŒrgert, dass ein Touchevent als Aktiv LOW Signal gemeldet wird, da z.B. beim Erstellen eines Höhenprofils einer Leiterplatte die Platine mit Masse zu verbinden ist und der Taststift den Kontakt nach Masse meldet.

GRBL lÀsst sich zwar umparametrieren, will man aber nichtleitende und leitende Materialien wechselweise abtasten, sollte beides mit der gleichen PolaritÀt gemeldet werden.

Folglich muss das Ausgangssignal des Sensors invertiert werden, bevor es an GRBL weitergeleitet wird. Die Invertierung mit dem ”C wÀre prinzipiell möglich, um aber Verzögerungen so weit wie möglich zu vermeiden, wird das Signal mit einem Transistor oder MOSFET invertiert.

Damit die Schaltung schön klein ausfĂ€llt, verwende ich als Microcontroller einen Digispark Baustein. Der lĂ€sst sich einfach ĂŒber USB programmieren und hat genĂŒgend Ein- und AusgĂ€nge fĂŒr den gedachten Einsatzfall.

Die Schaltung ist unspektakulĂ€r und besteht im Wesentlichen aus dem Digispark und ein paar Steckern. Der Inverter fĂŒr das Probe Signal in Form eines Transistors oder MOSFET kommt hinzu, ein Blockkondensator verhindert Störungen.

3DTouch Interface          (Cllick fĂŒr grĂ¶ĂŸere Darstellung)

Die Stecker fĂŒr den Anschluss des 3DTouch sowie den Ausgang Richtung GRBL habe ich in der abgewinkelten Version vorgesehen, der Digispark ist ebenfalls steckbar. Alle Bauteile bis auf den MOSFET sind normale TH Bauteile, der FET ist SMD und wird ggf. auf der Unterseite der Platine montiert.

3DTouch Interface

Es darf natĂŒrlich nur entweder der MOSFET oder der Transistor bestĂŒckt werden. Bei Verwendung des MOSFET ist R2 zu bestĂŒcken, wird der Transistor eingesetzt, mĂŒssen stattdessen R3 und R4 eingelötet werden.

Sollte der eigene Touch Sensor ein aktiv LOW Signal erzeugen, kann die Invertierung durch setzen einer LötbrĂŒcke umgangen werden. In diesem Fall werden der Transistor, der MOSFET und die WiderstĂ€nde R2..R4 nicht bestĂŒckt.

Sollte der wechselnde Einsatz mit leitfĂ€higem und nicht leitendem Material nicht geplant sein, man also immer nur den Sensor einsetzt, kann auf die Invertierung per Transistor oder FET natĂŒrlich ebenfalls verzichtet werden und man stellt die passende PolaritĂ€t in GRBL ein.


Update
Nach einigen Irrwegen durch die Syntaxgepflogenheiten des Digispark Biotops habe ich heraus bekommen, dass der Aufruf

attachInterrupt(0, SensorInput, RISING);

als ersten Parameter nicht die Pin-Nummer sondern die gewĂŒnschte Interrupt-Nummer erwartet. HĂ€tte man aus der Tatsache schließen können, dass beim Arduino traditionell das Makro digitalPinToInterrupt(Pin-Nummer) als erster Parameter angegeben wird, also

attachInterrupt(digitalPinToInterrupt(Pin-Nummer), SensorInput, RISING);

und man sich den Namen des Makros mal im Ohr zergehen lÀsst. Das Makro wandelt beim Arduino die Pin-Nummer in den Interrupt um.

Dieses Makro gibt es bei Digispark nicht, es lÀsst sich aber leicht aus der Arduino-Version ableiten:

 

Nachdem diese HĂŒrde umschifft war, konnte ich feststellen, dass meine Pinzuweisung mit PB0 als Eingang fĂŒr das Sensorsignal vom 3DTouch und PB2 als Ausgang fĂŒr das Steuersignal zum Sensor etwas unglĂŒcklich gewĂ€hlt war. Cleverer weil zielfĂŒhrend wĂ€re gewesen, diese beidne SIgnale umgekehrt zuzuweisen, also PB2 als Eingang, der reagiert nĂ€mlich auf den INT0 Interrupt, und PB0 als Ausgang zum Steuern des Sensors.

An meinem bereits fertig aufgebauten Testboard kann ich diese Änderung mit zwei kleinen Cutter-Schnitten und zwei kurzen DrĂ€hten realisieren und so die Programmentwicklung abschließen.

FĂŒr den geneigten Nachbauer gibt es natĂŒrlich die aktualisierte Version.

3DTouch Interface V1.1          (Cllick fĂŒr grĂ¶ĂŸere Darstellung)

3DTouch Interface V1.1

Wer die Schaltung nachbauen will, findet hier die Unterlagen im EAGLE V7 Format.


Wie oben bereits erwĂ€hnt, war mein Ziel, den Nachbau so einfach wie möglich zu gestalten und deshalb als Controller ein Digispark Modul zu verwenden, das sich unkompliziert ĂŒber USB programmieren lĂ€sst (vorausgesetzt, man hat die Arduino IDE passend erweitert. Anleitungen dazu findet man im Netz, das fĂŒhre ich hier nicht weiter aus).

Das fertige Programm ist im Prinzip recht ĂŒbersichtlich gestaltet, der etwas grĂ¶ĂŸere Umfang ergibt sich aus der Möglichkeit, als Controller alternativ einen Arduino Nano oder Uno zu verwenden. Möchte man diese Möglichkeit nutzen, einfach in der INO Datei direkt unter dem einleitenden Kommentar das Define NANO einkommentieren (Kommentarzeichen davor löschen). Die AnschlĂŒsse des Sensors an die Hardware sucht man sich in diesem Fall aus den Definitionen im Code heraus, man suche nach der Zeile

// Definition der Pins.

Der hier vorgestellte Code funktioniert mit einem 3DTouch Sensor der neuesten Generation (Platine mit außenliegendem Stecker fĂŒr die AnschlĂŒsse), ob er auch mit einem 3DTouch oder einem Original BLTouch Sensor zusammen arbeitet, kann ich mangels passender Hardware nicht selbst ĂŒberprĂŒfen. Falls jemand die Schaltung nachbaut und mit einem alten oder Ă€lteren Sensor testet, freue ich mich ĂŒber RĂŒckmeldungen.

Hier also die Firmware fĂŒr den Controller (Digispark oder Arduino), die die OberflĂ€chenabtastung von nichtleitenden Materialien mit Hilfe eines unverĂ€nderten 3DTouch oder BLTouch Sensors in Verbindung mit GRBL V1.1 erlaubt.

Hinweis
Wird der Sensorpin blockiert, kann also nicht den Kommandos fĂŒr Aus- oder Einfahren folgen, geht der Sensor in Störung und blinkt fortan trotzig mit der roten LED.
Aus diesem Zustand kann er nur noch durch ausschalten der Versorgungsspannung erlöst werden - > Power Cycle.

 


Besucherzaehler

Besucher seit
25.11.2000

>