A cím láttán azt gondolhattad, hogy ismét egy Prusa Mk3 cikket írtam. De nem! Éppen azt az örömhírt szeretném megosztani, hogy bekerült Marlin-ba a P.I.N.D.A. hőmérséklet kompenzációja, így végre például HyperCube nyomtatón is teljes értékű módon használhatjuk ezt a szenzort.
Prusa Induction Autoleveling probe V2
A PINDA név egy rövidítés, tulajdonképpen csak azt jelenti, hogy Prusa indukciós szintező szenzor. 8mm átmérőjű, nagyon kis helyes szerkezet. Könnyen illeszthető bármilyen vezérlőhöz, mert 5V-os, NPN NC típusú. Azt hogy ez mit jelent, az előző cikkben fejtettem ki bővebben.
A kis mérete miatt, nagyon közel kell lennie a tálcához, nagyjából 1mm-re érdemes beállítani. Azonban ilyen közel a hőhöz, gyorsan felmelegszik, és ahogy az előz cikkben írtam, ez nagyban befolyásolja a mérés eredményét. Gyakorlatilag, ha hidegen állítjuk be az offset-et, akkor használhatatlan lesz meleg állapotban.
Zavarta ez Prusáékat is, ezért elkészítették a V2 változatot, amibe integráltak egy hőmérséklet szenzort. Ez azért nagyszerű, mert bár befolyásolja a hőmérséklet a mért távolságot, de azonos körülmények között mindig azonos eredményt kapunk. Tehát ha tudjuk különböző hőmérsékletértékekhez kalibrálni, és mérésközben is ismerjük a szenzor hőmérsékletét, akkor egészen pontos eredményhez jutunk.
A Prusa firmware-be került egy menüpont a PINDA kalibrálásához, ami pontosan úgy működik ahogy várnánk tőle: Különböző hőmérsékletekre felmelegíti a tálcát, miközben szorosan a tálca fölött tartja a szenzort, hogy az is átmelegedjen. Kitüntetett hőmérsékleteken próba méréseket végez és az eredményeket egy táblázat formájában az EEPROM-ba menti. Ezután minden bedleveling esetén a táblázatból vett adatok alapján interpolál egy kompenzációs értéket az aktuális hőmérséklethez.
Szükséges ez a hőmérséklet kompenzáció?
Magunk között szólva PLA, PET-G nyomtatásánál keletkező meleg nem olyan vészes, hogy ne lehetne kivárni két nyomtatás között, hogy vissza hűljön a szenzor. Főleg hobbi szinten, ahol nem kötelező 7/24 órában termelnie a 3D nyomtatónak. Együtt lehet élni vele, de azért néhány megszorításra szükség van: A legfontosabb, hogy tisztában kell lennünk a jelenséggel, mert egyébként nem fogjuk érteni, hogy miért mászik el az offset rendszeresen és ha még elkezdjük utána állítgatni is, akkor meg fogunk hibbanni. De ha értjük mindezt, akkor tudunk arra figyelni, hogy nyomtatás után elemeljük a fejet legalább 10cm-re a tálcától, hogy szellőzni tudjon és meg tudjuk várni, hogy tényleg lehűljön. Különösebb műszerre sincs szükség, ha a HotEnd és a tálca is kihűlt, akkor tuti a szenzor is, főleg, ha a HotEnd hűtése éri picit a szenzort.
Mivel egyébként sokkal jobban tetszenek a 8mm-es pici szenzorok a „standardnak” nevezhető 12mm-eseknél, ezért mindkét HyperCube-re ilyeneket szereltem:
Az egyikre „sima” LJ8A3-2-Z/AY-5V típust, a másikra klón PINDA-át. (A PINDA ponttalanabb, ahogy az előző cikkben mutattam, de majd látni fogjuk, hogy a pontatlansága nagyságrendekkel kisebb, mint amit a hőmérséklet változtatással össze lehet hozni.)
Ha nem tudnám, hogy van megoldás a hőmérséklet kompenzációra, akkor el lennék vele, de így, hogy a Prusa Mk3 nyomtatóm ezt kezeli, bosszant, hogy a HyperCube-ok „ilyen buták”.
Marlin 2.0.2
2020. január 27-én, hétfőn délelőtt olvastam a hírt, két újdonság került a Marlin aktuális verziójába:
- P.I.N.D.A. probe temperature compensation
- HeatedBed probe temperature compensation
(Azért is volt ez nagy öröm a számomra, mert próbáltam magam lefejleszteni a funkciót, de beletört a bicskám. Túl sok helyen kell belepiszkálni.)
A Prusa fimware-nél letisztultabban fogták meg a feladatot, világosan elválik a szenzor és a tálca hőmérsékletének kompenzációja.
Elsőre kicsit fura, hogy a tálca hőmérséklet kompenzáció nem érhető el PINDA szenzor telepítése nélkül. Tulajdonképpen minden indukciós szenzor esetében javítana a pontosságon ez a funkció, egyrészt mert a tálca hőmérséklete is befolyásolja a mérés eredményét, másrészt a gyakorlatban van összefüggés a szenzor és a tálca hőmérséklete között is, tehát ha nem tudjuk mérni a szenzor hőmérsékletét, talán a semminél jobb lenne, ha a heatbed hőmérsékletét figyelembe vennénk. Ha nem hülyeség a gondolatom, akkor szerintem a jövőben továbbfejlesztik ezt a funkciót, hogy önállóan is elérhetővé váljon. Az a nehéz benne, hogy a szenzor hőmérsékletének ismerete nélkül, nehéz egzakt módon kalibrálni a tálcát önmagában. A cikk végén érthetővé válik, hogy mi is a gond.
Vezetékek bekötése
Olyan alaplapra van szükségünk, amin van még szabad hőmérséklet érzékelő bemenet. Ha két HotEnd-et tud vezérelni a lap, és csak egyet használunk, akkor a második HotEnd termisztorának a helyére be tudjuk kötni a PINDA termisztorát.
Egyébként is érdemesebb ilyen módon kicsit túlméretezni a vezérlőt, mert például a második HotEnd fűtő kimenetet használhatjuk kontrollált HotEnd hűtésre is.
Elsőként egy MKS Gen 1.4 vezérlővel próbáltam ki a PINDA-t, így ezen mutatom meg a teendőket. De a logika teljesen hasonló más vezérlők esetében is.
A PINDA szenzornak ez a négy vezetéke van:
- Barna: 5V
- Kék: GND
- Fekete: Signal
- Fehér: thermistor
Az 5V, GND és Signal vezetékeket értelemszerűen a Z min EndStop-ra kötjük az ábra szerint. A fehér vezetéket pedig a második HotEnd termisztorának a helyére. Elég csak ezt az egy vezetéket bekötnünk méghozzá a csatlakozó táp felé eső pin-jére, ugyanis a másik pin egy GND.
Meglepő, de ez ennyi, készen is vagyunk!
Marlin konfiguráció
Értelemszerűen a legfrissebb Marlin verziót kell beszereznünk. Nem kell félni a 2.0-ás változattól, 8 bites vezérlőre ugyan úgy Arduion IDE segítségével fordíthatjuk le, mint az 1.x verziókat. Amit elsőre látunk, hogy végre rendet raktak a fájlok között és csak a két config fáljt hagyják elől, amiket piszkálnunk kell.
Configuration.h fájl módosításai
Be kell állítani a szenzor hőmérsékletét merő termisztor típusát. Egy-két perc Google-zással nem találtam meg, ezért a Prusa firmware-ből próbáltam kinézni. Nem valami szép a kód, de abban úgy látom, hogy a tálcához hasonlóan olvassa ki az értéket, ezért ugyan azt az 1-es értéket írtam ide is.
#define TEMP_SENSOR_PROBE 1
Amit innen rögtön hiányoltam, hogy oké a típus, de melyik pin? SKR lapoknál már definiálva van, logikusan a 2. HotEnd pinre, de más lapnál nincs, így az MKS_GEN_13.h-ban sincs beállítva, ezért itt mindjárt egy új sorként felvettem ezt az értéket. Ramps esetén, vagy más Ramps-ra épülő vezérlő esetén is jó lesz ez szerintem:
#define TEMP_PROBE_PIN 15 //TEMP_1_PIN
Beállítjuk, mint fix szintező szenzort:
#define FIX_MOUNTED_PROBE
Offset értékek:
#define NOZZLE_TO_PROBE_OFFSET { 28, 12, -0.5 }
Margó, a méréshez:
#define MIN_PROBE_EDGE 30
Egy kis gyorsítás:
#define Z_CLEARANCE_DEPLOY_PROBE 0 #define Z_CLEARANCE_BETWEEN_PROBES 1 #define Z_CLEARANCE_MULTI_PROBE 1
Engedélyezzük az M48-as parancsot amivel tesztelhető az ismétlések pontossága:
#define Z_MIN_PROBE_REPEATABILITY_TEST
Válasszuk ki a szintezés típusát:
#define AUTO_BED_LEVELING_BILINEAR
Elvileg ennyi beállítás elégséges. Amik még itt szóba kerülhetnek, azok esetében a default értékek megfelelőek.
PINDA szenzor automatikus kalibrációja
Azért dolgoztunk ennyit, hogy kiadhassuk a G76-os parancsot: https://marlinfw.org/docs/gcode/G076.html
Két paramétere van:
- B: tálca hőmérséklet kompenzáció (bed only)
- P: szenzor hőmérséklet kompenzáció (probe only)
Paraméterek nélkül mindkét műveletet elvégzi egymás után. Ahogy korábban írtam, szépen elválik a két kompenzáció, amíg a folyamat az egyik értéket kalibrálja, addig a másikat fixen tartja. A folyamat automatikus, de leírom, hogy mire számíthatsz, ha elindítod.
Tálca hőmérséklet kompenzáció kalibrálásának menete:
- A szenzort magasan a tálca fölé emeli és kimozgatja a bal első sarokba, hogy ne érje a tálca hője.
- A tálcát felmelegíti 60℃-ra.
- A szenzort a tálca közepére mozgatja és 1mm-re megközelíti a felszínt.
- Vár, amíg a szenzor 30℃-ra melegszik, majd végez egy távolságmérést, ez lesz a bázisérték.
- A tálca hőmérsékletét 5℃-al emeli, közben a szenzort megint elmozgatja a hűvösebb helyre, hogy lehűljön 30℃ alá.
- Amikor a tálca elérte a kívánt hőmérsékletet és a szenzor is lehűlt, akkor visszamozgatja a szenzort a mérési pontra.
- Amint a szenzor ismét éppen 30℃ hőmérsékletű, végez egy mérést, így megkapja az eltérést a bázishoz képest.
- Az 5. ponttól addig ismételgeti egyre melegebb tálcával a méréseket, amíg a tálca 110℃ hőmérsékletet el nem ér, vagy időtűlépés miatt megszakítja a folyamatot.
Az időtúllépést nagyon bölcsen tette bele a fejlesztő, ugyanis egy idő után egyre nehezebb 30 fok alá hűteni a forró tálcához szorított szenzort. Azokat az értékeket, amiket nem tudott méréssel meghatározni, extrapolálja a valós eredményekből. Ennél a feladatnál jobban járunk, ha éri a HotEnd hűtő a szenzort, mert az lesz a legidőigényesebb, hogy lehűljön. Ha automatikusan kapcsolódik a HotEnd hűtésünk, akkor állítsuk például hatvan fokosra a HotEnd-et.
PINDA hőmérséklet kompenzáció kalibrálásának menete:
- Itt is a fejet felemelve a sarokból kezdődik a folyamat, hogy hűvös maradjon a PINDA.
- A tálcát 110℃ -ra melegíti.
- A szenzort leengedi a tálca közepére és megvárja, hogy a tálca hőjétől 30℃-ra melegedjen.
- Végez egy mérést, ez lesz a bázisérték.
- Vár amíg a szenzor hőmérséklete öt fokkal megemelkedik.
- Ismét végez egy mérést.
- Az utolsó két lépést addig ismételgeti, amíg belátja, hogy egy ponton túl már nem tudja melegíteni a szenzort.
Itt is extrapolálja az értékeket… írnám, hogy a hiányzó értékeket, de lássuk be, valójában nem hiányoznak azok az értékek sehonnan. Az eljárás során minden szándékunk az volt, hogy felmelegítsük a PINDA-t, normál üzemben sosem lesz annál melegebb, mint amennyire most sem tudtuk felmelegíteni…
Ebben a menetben érdemes egy papírlappal elterelni a HotEnd hűtés levegőjét a szenzortól, mert most az a célunk, hogy fel tudjuk melegíteni.
Az eredményeket az M500-as paranccsal el kell menteni az EEPROM-ba, hogy meg is maradjanak!
Configuration_adv.h fájl módosításai
A kalibrációs folyamat rettentő sokáig is eltarthat. Sajnos nem lehet paraméterezni a G76-os utasítást, hogy mekkora hőmérsékletig akarjuk kínozni a 3D nyomtatót.
Viszont Configuration_adv.h fájlban megadhatjuk, hogy milyen maximális értékre fűtse a tálcát, 110 a default érték:
#define PTC_MAX_BED_TEMP 110
Ezen túl beállíthatjuk a hűvös pont koordinátáit. A deafult 100mm-es Z értéket érdemes a lehetőségeinket figyelembe véve még magasabbra állítani. Ha a HotEnd jobb oldalán van a PINDA, akkor talán érdemesebb a jobb sarokban hűteni, talán ott kevesebb felfelé áramló meleg éri.
#define PTC_PARK_POS_X 0.0F #define PTC_PARK_POS_Y 0.0F #define PTC_PARK_POS_Z 100.0F
Azt is megmondhatjuk, hogy pontosan hol gondoljuk megfelelőnek a legmelegebb pontot:
#define PTC_PROBE_POS_X 90.0F #define PTC_PROBE_POS_Y 100.0F
Kompenzációs értékek megtekintése, módosítása
Az M871 utasítással megtekinthetjük a beállított értékeket és módosíthatjuk is azokat: https://marlinfw.org/docs/gcode/M871.html
Paraméter nélkül megjeleníti az aktuális beállításokat. Nekem például a következő eredmény született:
Probe temp: 30.00 C; Offset: 0.00 um Probe temp: 35.00 C; Offset: 65.00 um Probe temp: 40.00 C; Offset: 157.00 um Probe temp: 45.00 C; Offset: 292.00 um Probe temp: 50.00 C; Offset: 415.00 um Probe temp: 55.00 C; Offset: 610.00 um Probe temp: 60.00 C; Offset: 754.00 um Probe temp: 65.00 C; Offset: 735.00 um Probe temp: 70.00 C; Offset: 869.00 um Probe temp: 75.00 C; Offset: 1004.00 um Probe temp: 80.00 C; Offset: 1138.00 um Bed temp: 60.00 C; Offset: 0.00 um Bed temp: 65.00 C; Offset: 25.00 um Bed temp: 70.00 C; Offset: 35.00 um Bed temp: 75.00 C; Offset: 37.00 um Bed temp: 80.00 C; Offset: 37.00 um Bed temp: 85.00 C; Offset: 46.00 um Bed temp: 90.00 C; Offset: 56.00 um Bed temp: 95.00 C; Offset: 66.00 um Bed temp: 100.00 C; Offset: 75.00 um Bed temp: 105.00 C; Offset: 85.00 um Bed temp: 110.00 C; Offset: 94.00 um
A távolságok mikrométerben értendők. Látszódik, hogy nem hülyeség ez az egész, a szenzor 30℃-os és 45℃-os hőmérséklete között 0,3mm különbséget kell kompenzálni!
Az értékek módosításánál HotEnd hőmérséklethez is megadhatunk kompenzációs értéket, de ez már talán túlzás lenne.
Ha kedvet kaptál ehhez a fejlesztéshez, akkor 10 dollár körül találsz az aliexpress-en klón P.I.N.D.A. szenzort. HyperCube-hoz pedig ezt a felfogatást készítettem: https://www.thingiverse.com/thing:4169219
Hi, thanks for the great guide. My problem is that when issuing the G76 command, the nozzle goes to X/Y/Z (0/0/100), then heats the bed to 60°C, then the nozzle is only moving in X and Y to the heating position but is not lowering the nozzle. So the probe waits at Z=100 to heat up to 30° but of course that is never happening. Do you have any idea, why it is not lowering Z when trying to heat the probe?
Thx in advance
Hey i have met the same issue, G28 and 29 before G76 solved my problem
Same problem here
You need to use the Marlin-2.0.x hotfix where this is fixed
I actually circumvented this bug by lowering Z via the LCD Controller to 0 for heating the probe during the procedure. Seems to work fine.
I did the same trick
At least for the first 5 measurements, and then gave up
Then I saw that it’s a known bug that have been fixed in latest release
Köszönöm a leírást. Ez a hőkompenzált szenzor a legpontosabb szerintem.
Javaslom még bekapcsolni a #define EXTRAPOLATE_BEYOND_GRID paramétert, mert ezek az acéllapok nagyon el tudnak görbülni a puha mágnes felett. Én 25 ponton mérek 0 marginnal. Ez az első alkalom, hogy meg vagyok elégedve az 1. réteggel.
M48 Average 0.002529mm
Percentage 1.26%layer @0.2mm layer