Deploying to gh-pages from @ Klipper3d/klipper@2c441b4502 🚀
This commit is contained in:
@@ -1396,7 +1396,7 @@
|
||||
<li>Amikor a ToolHead._process_moves() meghívásra kerül, a mozgással kapcsolatban minden ismert a kezdőhelye, a véghelye, a gyorsulása, a kezdő/körözési/végsebessége és a gyorsulás/körözési/végsebesség alatt megtett távolság. Minden információ a Move() osztályban tárolódik, és cartesian térben, milliméter és másodperc egységekben van megadva.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>A Klipper egy <a href="https://en.wikipedia.org/wiki/Root-finding_algorithm">iteratív megoldót</a> használ az egyes léptetők lépésidejének létrehozásához. Hatékonysági okokból a léptető impulzusidőket C kódban generálja. A mozgásokat először egy "trapézmozgás várólistára" helyezzük: <code>ToolHead._process_moves() -> trapq_append()</code> (a klippy/chelper/trapq.c-ben). A lépésidők ezután generálódnak: <code>ToolHead._process_moves() -> ToolHead._update_move_time() -> MCU_Stepper.generate_steps() -> itersolve_generate_steps() -> itersolve_gen_steps_range()</code> (a klippy/chelper/itersolve.c-ben). Az iteratív megoldó célja, hogy lépésidőket találjon egy olyan függvényt adva, amely egy időből kiszámítja a lépéshelyzetet. Ez úgy történik, hogy többször "találgatja" a különböző időket, amíg a léptető pozíció képlet vissza nem adja a léptető következő lépésének kívánt pozícióját. Az egyes találgatásokból származó visszajelzéseket a jövőbeli találgatások javítására használja, hogy a folyamat gyorsan konvergáljon a kívánt időhöz. A kinematikus léptető pozíció képletek a klippy/chelper/ könyvtárban találhatók (pl. kin_cart.c, kin_corexy.c, kin_delta.c, kin_extruder.c).</li>
|
||||
<li>A Klipper egy <a href="https://hu.wikipedia.org/wiki/Gy%C3%B6kkeres%C5%91_algoritmus">iteratív megoldót</a> használ az egyes léptetők lépésidejének létrehozásához. Hatékonysági okokból a léptető impulzusidőket C kódban generálja. A mozgásokat először egy "trapézmozgás várólistára" helyezzük: <code>ToolHead._process_moves() -> trapq_append()</code> (a klippy/chelper/trapq.c-ben). A lépésidők ezután generálódnak: <code>ToolHead._process_moves() -> ToolHead._update_move_time() -> MCU_Stepper.generate_steps() -> itersolve_generate_steps() -> itersolve_gen_steps_range()</code> (a klippy/chelper/itersolve.c-ben). Az iteratív megoldó célja, hogy lépésidőket találjon egy olyan függvényt adva, amely egy időből kiszámítja a lépéshelyzetet. Ez úgy történik, hogy többször "találgatja" a különböző időket, amíg a léptető pozíció képlet vissza nem adja a léptető következő lépésének kívánt pozícióját. Az egyes találgatásokból származó visszajelzéseket a jövőbeli találgatások javítására használja, hogy a folyamat gyorsan konvergáljon a kívánt időhöz. A kinematikus léptető pozíció képletek a klippy/chelper/ könyvtárban találhatók (pl. kin_cart.c, kin_corexy.c, kin_delta.c, kin_extruder.c).</li>
|
||||
<li>Vegye figyelembe, hogy az extruder saját kinematikai osztályban van kezelve: <code>ToolHead._process_moves() -> PrinterExtruder.move()</code>. Mivel a Move() osztály pontosan megadja a mozgás idejét, és mivel a lépésimpulzusokat meghatározott időzítéssel küldi a mikrokontrollerhez, az extruder osztály által előállított léptetőmozgások szinkronban lesznek a fejmozgással, annak ellenére, hogy a kódot elkülönítve tartjuk.</li>
|
||||
<li>Miután az iteratív megoldó kiszámítja a lépésidőket, azok egy tömbhöz kerülnek hozzáadásra: <code>itersolve_gen_steps_range() -> stepcompress_append()</code> (in klippy/chelper/stepcompress.c). A tömb (struct stepcompress.queue) minden lépéshez tárolja a mikrokontroller megfelelő óraszámláló idejét. Itt a "mikrokontroller óraszámláló" értéke közvetlenül megfelel a mikrokontroller hardveres számlálójának, a mikrokontroller utolsó bekapcsolásának időpontjához viszonyítva.</li>
|
||||
<li>A következő fontos lépés a lépések tömörítése: <code>stepcompress_flush() -> compress_bisect_add()</code> (in klippy/chelper/stepcompress.c). Ez a kód generálja és kódolja a mikrokontroller "queue_step" parancsainak sorozatát, amelyek megfelelnek az előző szakaszban felépített léptető lépésidők listájának. Ezek a "queue_step" parancsok ezután sorba kerülnek, prioritást kapnak, és elküldésre kerülnek a mikrokontrollernek (a stepcompress.c:steppersync és a serialqueue.c:serialqueue kódokon keresztül).</li>
|
||||
@@ -1430,7 +1430,7 @@
|
||||
<p>Ez a szakasz néhány tippet ad a Klipper további nyomtató kinematikai típusok támogatásának hozzáadásához. Az ilyen típusú tevékenységhez a cél kinematikához tartozó matematikai képletek kiváló ismerete szükséges. Szoftverfejlesztési ismereteket is igényel, bár csak a gazdaszoftvert kell frissíteni.</p>
|
||||
<p>Hasznos lépések:</p>
|
||||
<ol>
|
||||
<li>Kezdd "<a href="#code-flow-of-a-move-command">Egy mozgás kódfolyamata</a>" szakasz és a <a href="Kinematics.html">Kinematika dokumentum</a> tanulmányozásával.</li>
|
||||
<li>Kezdd "<a href="#mozgasparancs-kodfolyama">Egy mozgás kódfolyamata</a>" szakasz és a <a href="Kinematics.html">Kinematika dokumentum</a> tanulmányozásával.</li>
|
||||
<li>Tekintse át a klippy/kinematics/ könyvtárban található kinematikai osztályokat. A kinematikai osztályok feladata egy cartesian koordinátákban megadott mozgás átalakítása az egyes léptetőkön történő mozgássá. Kiindulópontként le kell tudni másolni az egyik ilyen fájlt.</li>
|
||||
<li>Implementáljuk a C léptetőket kinematikai pozíciófüggvényeit minden léptetőhöz, ha azok még nem állnak rendelkezésre (lásd a kin_cart.c, kin_corexy.c és kin_delta.c fájlokat a klippy/chelper/ állományban). A függvénynek meg kell hívnia <code>move_get_coord()</code>, hogy egy adott mozgásidőt (másodpercben) cartesian koordinátává (milliméterben) konvertáljon, majd ebből a cartesian koordinátából kiszámítsa a kívánt léptető pozíciót (milliméterben).</li>
|
||||
<li>Az új kinematikai osztályban implementáljuk a <code>calc_position()</code> módszert. Ez a metódus kiszámítja a nyomtatófej pozícióját cartesian koordinátákban az egyes léptetőmotorok pozíciójából. Nem kell, hogy hatékony legyen, mivel jellemzően csak a kezdőpont és az érintési műveletek során hívjuk meg.</li>
|
||||
|
||||
Reference in New Issue
Block a user