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”. Schließlich möchte oder kann sich nicht Jedermann mit den Innereien des Sensors abgeben um ihn an seiner FrĂ€se einzusetzen. Aber Abhilfe ist möglich :)


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, mit $6=1 reagiert GRBL auf ein aktiv HIGH Signal am Probe-Eingang. Will man aber nichtleitende und leitende Materialien wechselweise abtasten, sollte der Einfachheit halber 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          (Click 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. Ok, das 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 die zugehörige Interrupt Nummer um.

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

// Definition von digitalPinToInterrupt() fĂŒr Digispark. FĂŒr den AtMega (Arduino) ist das Makro bereits (anders) definiert

#ifndef digitalPinToInterrupt
 #define NOT_AN_INTERRUPT -1
 #define digitalPinToInterrupt(p) \
   ((p) == 2 ? 0 : \
   ((p) == 0 || (p) == 1 || (p) == 3 || (p) == 4 || (p) == 5) ? 1 : NOT_AN_INTERRUPT)
#endif

Aufgedröselt ergibt sich, dass PB2 im IRQ0 resultiert, alle anderen Pins des AtTiny im IRQ1, wobei PB5 normalerweise RESET ist und somit keine nutzbaren Interrupts erzeugt.

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 beiden 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          (Click fĂŒr grĂ¶ĂŸere Darstellung)

3DTouch Interface V1.1

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

Update
Da meine FrĂ€se keine 5 V Versorgung in unkompliziert erreichbarer NĂ€he zur VerfĂŒgung stellt, der Digispark aber einen ausreichend dimensionierten 5 V Spannungsregler an Bord hat, habe ich eine weitere Version erstellt, die diesen Spannungsregler zur Versorgung des Sensors einbindet.

3DTouch Adapter V1.2          (Click fĂŒr grĂ¶ĂŸere Darstellung)

3DTouch Adapter V1.2

Der Stecker Richtung FrĂ€sen-Controller ist jetzt 4-polig und fĂŒhrt sowohl 5 V als auch 12 V als Eingang.

Soll die Schaltung mit 12 V versorgt werden, sind die im Bild oberen Drei die Pins der Wahl, die Belegung ist dann (von oben zÀhlend)

  • 12 V
  • GND
  • Touch-Signal

Erfolgt die Versorgung mit 5 V, werden die im Bild unteren drei Pins verwendet, die Belegung ist dann (von oben zÀhlend)

  • GND
  • Touch-Signal
  • 5 V

Den alternativen Transistor habe ich aus PlatzgrĂŒnden entfernt, der Lötjumper zum ÜberbrĂŒcken des (dann nicht zu bestĂŒckenden) FET blieb erhalten.

Auch hierfĂŒr stelle ich die  Unterlagen im EAGLE V7 Format zur VerfĂŒgung.

Hinweis
Der Spannungsregler auf dem Digispark ist ein 78M05, dessen zulĂ€ssige Eingangsspannung 35 V betrĂ€gt. Falls also an der eigenen FrĂ€se weder 5 V noch 12 V zur VerfĂŒgung stehen, kann eine beliebige Gleichspannung bis zu diesem Wert am obersten Pin angeschlossen werden. Gegebenenfalls sollte bei hohen Spannungen die ErwĂ€rmung des Reglers geprĂŒft werden. Ich erwarte aber keine Probleme, da die Stromaufnahme des 3DTouch Sensors immer nur kurzzeitig beim Ein- oder Ausfahren des Pin ansteigt.

Hinweis
Wenn man auf seiner FrĂ€se immer nur nichtleitendes Material verarbeitet und somit die PolaritĂ€t des Touch-Signals fest in GRBL umstellen kann (Parameter $6=1), können der FET und R1 entfallen, der Ausgang des Sensors wird dann ĂŒber den Löt-Jumper direkt mit dem GRBL Controller verbunden.


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.

Update
Der vom 3DTouch gelieferte Impuls ist mit 10 ms deutlich zu kurz, GRBL erkennt das nicht als Probe Event.

Abhilfe: Der AtTiny auf dem Digispark bekommt ja sowieso den Trigger-Impuls von Sensor um den Timer zu starten, der dafĂŒr sorgt, dass der Pin des Sensors nach einem Touch-Event zeitgesteuert wieder ausgefahren wird. Jetzt ziehe ich gleichzeitig einen weiteren IO des AtTiny (PB3) auf LOW, der parallel zum Ausgang des FET verdrahtet wird. Dieser Ausgang schaltet Laufzeit bedingt etwas verzögert auf LOW, da aber der FET das Sensor-Signal mehr oder weniger unverzögert durchschaltet, hat der Microprozessor 10 ms Zeit, den Ausgang zu aktivieren.

In den folgenden Bildern stellt das blaue Signal den Ausgangsimpuls des 3DTouch dar, der gelbe Kurvenzug ist das Signal am Ausgang des Interface.

Das klappt prima, auf dem Oszi sieht man schön, wie der ”C nach 10 ms “ĂŒbernimmt” (die kleine Stufe im gelben Signal nach der fallenden Flanke des blauen Signals).

ImpulsverlÀngerung

Das Ganze mit Bemaßung (blauer Impuls 10 ms):

ImpulsverlÀngerung

Der resultierende Impuls am Ausgang Richtung GRBL hat in Summe dann ca. 320 ms:

ImpulsverlÀngerung

Das geÀnderte Schaltbild zur oben beschriebenen Erweiterung...

3DTouch Adapter V1.3          (Click fĂŒr grĂ¶ĂŸere Darstellung)

sowie das Layout

3DTouch Adapter V1.3

 

Hier also die aktualisierte und zu Version 1.3 des Interface passende Firmware V1.2 fĂŒr den Controller (Digispark oder Arduino), die zusammen die OberflĂ€chenabtastung von nichtleitenden Materialien mit Hilfe eines unverĂ€nderten 3DTouch oder BLTouch Sensors in Verbindung mit GRBL V1.1 erlauben.

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 abschalten der Versorgungsspannung erlöst werden - > Power Cycle.


Leider kann ich mangels Hardware keine Vergleichsmessungen zwischen dem alten und neuen Design der 3DTouch Sensoren durchfĂŒhren, meine alten 3DTouch Sensoren sind allesamt auf meine eigene Firmware mit negativem Impuls umgeflasht und somit nicht mehr am Interface betreibbar.

Ich kann also nicht sagen, ob die beobachteten Ungenauigkeiten von meinem Interface oder vom neuen Sensordesign verursacht werden.


Wer mich kennt oder zumindest Teile meiner Homepage gelesen hat, weiß, das hĂ€lt mich nicht lange auf...
Da ich am umgebauten 3DTouch Sensor V2 einen Programmieranschluss nach außen gefĂŒhrt habe, kann ich die Firmware problemlos so anpassen, dass der generierte Touch -Impuls aktiv HIGH ist und somit kompatibel zum 3DTouch Interface.

Das ist mittlerweile zumindest teilweise geklÀrt, Ergebnisse hier.

 


Besucherzaehler

Besucher seit
25.11.2000

>