Induktív közelítésérzékelők

Tökéletes első réteg nyomtatáshoz ismerni kell a tálca felszínének magasságát. A 3d nyomtató nem nyomhatja nagyon bele a fúvókát a felületbe, mert akkor nem tud kijönni az anyag, de túl távol sem kerülhet, ekkor ugyanis nem tapadna le a filament. A pontatlanság adódhat abból, hogy nincs vízszintben a tálca a nyomtató X,Y tengelyéhez képest, másrészt lehet picit görbe is a felület. Ahhoz, hogy elképzeljük, mennyire kell pontosnak lennie egy 3D nyomtatónak, gondoljuk meg, hogy 0,15mm rétegvastagság esetén 0,1mm már egy réteg 2/3-át jelenti!

Első réteg 3d nyomtatása

Nem lehetetlen kézzel beállítani az asztal vízszintjét és egy üveglap tud elég egyenes lenni. De mégis a nagyobb pontosság érdekében érdemes egy szenzort alkalmaznunk ehhez a feladathoz. Számtalan típus létezik, amik nyomtatás előtt letapogatják a felületet, így pontos mérés ismeretében tud dolgozni a 3D nyomtató. Léteznek ezoterikusabb megoldások, például magát a nyomtató hegyét is lehet szenzornak használni. A mérés úgy történik, hogy odakocogtatja a tálcához a hegyet és az ütközést vagy a fejben, vagy a tálcán elhelyezett piezo érzékelők regisztrálják. Meglepően pontos eredményt ad a módszer és az az igazán szép benne, hogy nem kell offsetet állítani a szenzor és a hegy között, hiszen a hegy maga a szenzor. Még elvetemültebbek piezo érzékelőket sem használnak, hanem TMC motor vezérlő segítségével a Z motor ütközéskor keletkező ellenállást érzékelve határozzák meg a felszínt. Ha érdekel, olvass utána (sensorless probing), vannak korlátai a nyomtató felépítését tekintve, például több Z motor esetén biztosan nem működik és sok áttétel sem lehet, de a Marlin firmware-ben már választható opció.

Valójában két megoldás terjedt el igazán, az egyik a címben szereplő induktív szenzor, ami fémből készült tárgyak távolságát tudja érzékelni, a másik pedig a BLTouch nevű szerkezet, ami tényleges érintéssel bármilyen anyagból készült felületen működik. Mindkettő nagyon jó, könnyen implementálható és pontos.

BLTouch

Mégis, ha választani kell, akkor a következő korlátokat vegyük figyelembe. Ha nem (kizárólag) fém felületet használunk, akkor természetesen csak a BLTouch jöhet szóba, viszont ez sokkal lassabban működik, hiszen ez egy mechanikus szerkezet. Mivel szerintem legjobb felület a rugóacéllapra ragasztott PEI, így én inkább az induktív szenzorotok részesítem előnybe. Legalább kilenc ponton mérem a tálcát, hogy ne csak vízszintet, hanem az esetleges görbületet is le tudja követni az első réteg és egyszerűen sokáig tart a BLTouch-nak kilencszer kidugnia a kis pálcikáját, majd szépen megérintenie a tálcát. Persze nem vészes, de ha felesleges, akkor minek menjen ezzel az idő minden nyomtatás előtt. (Persze nem kötelező minden nyomtatás előtt mérni, EEPROM-ba elmenthetőek a mérés eredményei.)

Induktív szenzor működése

Az induktív és kapacitív érzékelők működése egy olyan rezgőkör alkalmazásán alapul amelynek rezgésamplitúdóját a közelítéskapcsoló aktív zónájában elhelyezkedő tárgy befolyásolja. … Az induktív közelítéskapcsolóban egy mágnesesen nyitott vasmagon helyezkedik el az LC rezgőkör tekercse. A rezgőkör frekvenciája általában 100 – 1000 kHz. Az LC rezgőkör egy nagy frekvenciával változó mágneses mezőt hoz létre, amely kilép az érzékelő aktív felületénél. A rezgésamplitúdó lecsökken, ha a mágneses mezőbe egy fémtárgyat helyezünk. Ennek oka a fémtárgyban indukált örvényáramok által okozott energia-elvétel.

induktív és kapacitív érzékelők működése

Az idézetet innen vettem, ha esetleg bővebben is érdekel a téma alaposan el tudod olvasni: http://zeus.nyf.hu/~elat/Szenzorika_Festo.pdf

Nekünk elég azt az egy részletet kiemelni, hogy az ismétlési pontosság csak azonos körülmények között értelmezhető. Ugyanis az érzékelés távolságának mértéke függ a tárgy méretétől, tömegétől és a hőmérséklettől is. Tehát nem arra használjuk az induktív szenzort, hogy megmondja, hol van pontosan a 2mm távolság, hanem arra használjuk, hogy ha egyszer belőttünk egy távolságot, akkor mindig ugyan ezt a távolságot detektálja. Ezt nagyon pontosan tudja megismételni.

Ez az oka annak, hogy újra offset-et kell állítani, ha másik tálcát helyezünk az asztalra. Nagyon menő, hogy a Prusa Mk3 legújabb firmware el tudja tárolni a különböző tálcákhoz való offset értékeket, remélem idővel a Marlin-ba is bekerül ez a funkció.

A hőmérséklet kompenzációról a következő cikkben fogok bővebben írni, most maradjunk abban, hogy érdemes két nyomtatás között megvárni, hogy lehűljön a szenzor és az asztal is hasonló hőmérsékletű legyen, mint amikor az offsetet beállítottuk. Lehet azzal trükközni, hogy eleve 50 fokos tálcán állítjuk be az offsetet és a start gcode-ban előbb 50 fokra melegítjük a tálcát és utána adjuk ki a G29-es parancsot.

Na de mennyire pontos?

Ha kíváncsiak vagyunk rá, hogy mennyire pontos a szenzorunk, akkor engedélyezzük Marlinban Z_MIN_PROBE_REPEATABILITY_TEST opciót. Ekkor elérhető lesz az M48-as parancs, amivel tesztelhetjük, hogy mekkora az eltérés többször ismételt mérések között: https://marlinfw.org/docs/gcode/M048.html

A két HyperCube-om ezeket az eredményeket adja:

LJ8A3-2-Z/AY-5V szenzor:

Mean: -0.089500 Min: -0.090 Max: -0.087 Range: 0.002
Standard Deviation: 0.001000

P.I.N.D.A. klón szenzor:

Mean: -0.098750 Min: -0.105 Max: -0.090 Range: 0.015
Standard Deviation: 0.005031

Induktív szenzorok típusai

Amikor vásárolni szeretnénk egy ilyen szenzort, akkor ilyesmi meghatározásokat kell dekódólnunk: LJ12A3-4-Z/BY 6-36V PNP NO

Sorra veszem, hogy itt mi mit jelent, majd megvilágítom, hogyan kell beüzemelni az egyes típusokat. Lehet, hogy a következőkben lesznek műszakilag pontatlan megfogalmazások (akár hibák is, de ha jelzed, javítom!), viszont szerintem a lényeget meg fogod érteni.

Méretek

Két méret jellemez egy ilyen érzékelőt, az első és a harmadik szám, itt konkrétan a 12mm és 4mm: LJ 12 A3- 4 -Z/BY

A nagyobb szám a fizikai méretére utal, vagyis a ház átmérőjére. Természetesen ez összefüggésben van a tömeggel is, csavar anyákkal mért hozzávetőleges értékeket írtam a kép alá. A 18mm-es brutál nagy, amikor megrendeltem nem fogtam még fel, hogy ez mekkora lesz, de amikor kibontottam a csomagot, a hasamat fogtam a röhögéstől. Ezt inkább valami spéci feladatra tudom elképzelni, mert amúgy jó nagy távolságot tud mérni.

Induktív szenzorok
18mm/50g, 12mm/22g, 8mm/10g

A másik szám az érzékelés távolságát határozza meg nagyjából. Ahogy a működésnél írtam, azért csak nagyjából, mert függ például a mért anyag sűrűségétől is ez a távolság. Amit megadnak értéket az inkább valami masszív vastárgyra jellemző, az alumínium tálcáinkat ennél kisebb távolságról veszik csak észre.

Ez azt jelenti, hogy a 8 és 12 milliméteres átmérővel rendelkező 4 és 2 milliméterről érzékelő szenzorokat nem lehet üveglappal használni, mert vastagabb az üveg, mint az a távolság amennyire meg kellene közelítenie a szenzornak az alumíniumot az üveg alatt. És még ennél is nagyobb távolság kellene, hiszen a nyomtatványba sem érhet bele a szenzor. Ráadásul lehet, hogy teljesen téves ez az irány, hiszen ha görbe a tálca az üveg alatt, akkor a szenzor a görbe tálcát méri, miközben az üveg egyenes felette. Tehát ha ragaszkodunk az üveghez, akkor a BLTouch szenzor a megfelelő választás.

Kimeneti tranzisztor típusa, BX/BY, NPN/PNP

A kimenet kétféle értékű lehet:

  • PNP (BY): A kimenet kapcsolt állapotában a tápfeszültség
  • NPN (BX): A kimenet kapcsolt állapotában a nulla feszültség

Tehát ez azt mondja meg, hogy a Signal jelnek valójában mit kell várnunk.

Nem kapcsolt állapotban mindkét típusnál olyan, mintha nem lenne bekötve a vezeték, de hogy ne „lebegjen” az érték, ezért ellenállással az ellentétes értékre húzzuk a kimenetet. Erre valók Marlinban a következő opciók:

//#define ENDSTOPPULLUP_ZMIN
//#define ENDSTOPPULLDOWN_ZMIN

Tehát ez azt jelenti, hogy ha NPN típusú szenzort szeretnénk beüzemelni, akkor jelként 0V-ot várunk kapcsolás esetén. Ekkor ENDSTOPPULLUP_ZMIN opciót kell bekapcsolnunk, hogy kapcsolás nélkül 5V-ot érzékeljünk.

PNP esetén fordítva: jelként 5V-ot várunk kapcsolás esetén, ezért PULLDOWN opciót kell bekapcsolnunk, hogy kapcsolás nélkül 0V-ot érzékeljünk.

Sajnos bonyolítja a helyzetet, ha a board fizikailag direkt bekötve tartalmaz lehúzó/felhúzó ellenállást. Az MKS GEN 1.4 board például ilyen, tehát ott akármit konfigurálunk, az eredmény mindig az lesz, mintha ENDSTOPPULLUP_ZMIN lenne beállítva. Az a gond ezzel, hogy kapcsolás esetén is 5V jön és kapcsolás nélkül is 5V-ot mérünk, nem tudunk különbséget tenni.

Ebben az esetben jobban járnánk NPN típusú szenzorral, de ha már megvettük a PNP-ét és kiderült ilyen a boradunk, akkor sem kell kétségbe esni. Egy filléres 2N3904-es tranzisztorral meg tudjuk fordítani az értékeket. Itt egy vázlat, hogy mi is a teendő:

Ez a kapcsolási rajz PNP-NPN átfordításon kívül azt is megoldja, hogy 5V helyett 12V-ot adjunk a szenzornak, majd ismét 5V-ot kapjunk vissza signal-ként. A feszültségről kicsit lejjebb lesz még szó.

NO/NC záró/bontó kapcsolás

A kapcsolt jelszinttől függetlenül a kimenet lehet:

  • NO (Normally Open) alaphelyzetben nyitott
  • NC (Normally closed) alaphelyzetben zárt

Tehát ez azt jelenti, hogy NPN, PNP működéstől függetlenül az is egy tulajdonsága a szenzornak, hogy mikor adja a jelet. Akkor, amikor érzi a tárgyat (NO), vagy akkor amikor távol van az érzékelő a tárgytól (NC).

Marlin-ban ezt a következő sorral szabályozhatjuk:

#define Z_MIN_ENDSTOP_INVERTING true/false

NC esetében false értéket kell választanunk, NO esetében true-t.

De természetesen konfigurálás után, még az első Home elindítása előtt teszteld a működést, erre való az M119-es utasítás: https://marlinfw.org/docs/gcode/M119.html

Feszültség

De még nincs vége. 🙂 További tulajdonsága a szenzoroknak az a feszültség amin működni tudnak. Jellemzően a kisebb 8mm-es átmérőjű változatok 5V-osak, a nagyobbak 6V-36V között működnek.

Nekünk 5V-os az alaplapunk így 5V érzékelő esetén nincs dolgunk a feszültséggel. Fórumokon azt olvastam, hogy egyes 12mm átmérőjű szenzoroknak (felirattól függetlenül) elég az 5V, így ha szerencsénk van az adott példánnyal, akkor ebben az esetben sincs teendőnk.

Viszont ha nem reagál az 5V-ra, akkor a tápról 12V-ot kell adnunk neki. Ez egyáltalán nem nehéz, viszont ebben az esetben a Signal jel is 0V-12V között lesz, ezt viszont vissza kell konvertálnunk 0V-5V közé.

Lehet ezt feszültségosztóval is megoldani, de használhatunk egy filléres 1n4007 diódát. Bővebben ebben a videóban megnézheted, hogy is megy ez: https://www.youtube.com/watch?v=wih4fNkKUCc

Vezetékek bekötése

Ha sikerült eddig elolvasnod a cikket, akkor jutalmul elárulom melyik vezeték melyik:

  • Barna: 5V
  • Kék: GND
  • Fekete: Signal

Nekem ez már fejből megy, ugyanis túl sokszor kötöttem a feketét a GND-re és értetlenkedtem miért nem működik. 🙂

Marlin konfiguráció

A fentieken túl a következőket kell még beállítanunk a Marlinban. Először tudatni kell, hogy felszereltünk egy fix vízszint szenzort:

#define FIX_MOUNTED_PROBE

Be kell állítani a szenzor és nozzle pozíciójának különbségét. Marlin 1.X-ben külön soron az X,Y és Z értéket, 2.X-ben már egy utasítással:

#define NOZZLE_TO_PROBE_OFFSET { 28, 12, 0.0 } 
    // X, Y, Z, must calibration Z offset

Majd meghatározhatjuk, hogy mennyire menjen ki a tálca szélére mérés közben:

#define MIN_PROBE_EDGE 30

Ez nem mindig egyértelmű nekem, hogy az offset értéket figyelembe veszi-e, de próbálgatással be tudjuk lőni. Nyilván minél inkább kimegyünk a tálca szélére, annál nagyobb terület lesz pontos. De rendszerint nem nyomtatjuk telibe az egész tálcát, így ha középen egy kisebb részt mérünk le alaposabban, akkor az a kisebb rész még pontosabb lesz és persze gyorsabban be is járja a kisebb területet.

És hogy valóbban gyors legyen a mérés, vegyük le minimálisra azokat az értékeket, amik a Z magasság mozgatásért felelnek mérés közben:

#define Z_CLEARANCE_DEPLOY_PROBE   0 //10 
#define Z_CLEARANCE_BETWEEN_PROBES 1 // 5 
#define Z_CLEARANCE_MULTI_PROBE    1 // 5 

Többféle stratégia közül választhatunk, a bilineárt szoktam beállítani:

#define AUTO_BED_LEVELING_BILINEAR

És a default 3 x 3 -as mérésipontokat hagyom meg:

  #define GRID_MAX_POINTS_X 3
  #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

HyperCube P.I.N.D.A.

Ha kedvet kaptál rá, hogy a HyperCube-odon a 12mm-es, 12V-os szenzorodat lecseréld egy helyes kis 8mm-es 5V-osra, akkor itt találsz felfogatást hozzá: P.I.N.D.A. mount for HyperCube


Bízom benne, hogy a cikk nem zavart össze teljesen és ad némi támpontot, hogy merre indulj el, ha be szeretnél üzemelni egy induktív ágy szintező szenzort.

Subscribe
Visszajelzés
guest

1 hozzászólás
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Kristóf Kárpáti
Kristóf Kárpáti
4 éve

Tisztelt Zen3d,

Nemrég vettem egy 12mm es érzékelőt és azt tapasztaltam hogy az ender 3 aluminium(?) tálcáját nem veszi be. Viszont gondolkodtam egy pár percet és eszembe jutott hogy a mágneses tálca alá elfér még egy réteg alufolia. Hát megtáltosodott az érzékelő 🙂 másoknak is ajánlom kiprobálásra.

1
0
Mit gondolsz erről? Kérlek szólj hozzá Te is!x