Kihagyás

# MCU parancsok

Ez a dokumentum a Klipper "gazdagép" szoftvere által küldött és a Klipper mikrokontroller szoftvere által feldolgozott alacsony szintű mikrokontroller-parancsokról nyújt információt. Ez a dokumentum nem hiteles hivatkozás ezekre a parancsokra, és nem is az összes rendelkezésre álló parancs kizárólagos listája.

Ez a dokumentum hasznos lehet az alacsony szintű mikrokontroller-parancsok megértése iránt érdeklődő fejlesztők számára.

A parancsok formátumával és továbbításával kapcsolatos további információkért lásd a protokol dokumentumot. A parancsok itt a "printf" stílusú szintaxisukkal vannak leírva - azok számára, akik nem ismerik ezt a formátumot, csak azt kell megjegyezni, hogy ahol egy '%...' szekvencia látható, azt egy tényleges egész számmal kell helyettesíteni. Például a "count=%c" leírást a "count=10" szöveggel lehet helyettesíteni. Vegyük figyelembe, hogy a "felsorolásnak" tekintett paraméterek (lásd a fenti protokolldokumentumot) string értéket vesznek fel, amelyet a mikrokontroller automatikusan egész értékké konvertál. Ez a "pin" nevű (vagy "_pin" utótaggal rendelkező) paramétereknél gyakori.

## Indítási parancsok

A mikrokontroller és perifériái konfigurálásához szükség lehet bizonyos egyszeri műveletek elvégzésére. Ez a szakasz erre a célra rendelkezésre álló általános parancsokat sorolja fel. A mikrokontroller legtöbb parancsától eltérően ezek a parancsok a fogadásuk után azonnal lefutnak, és nem igényelnek különösebb beállításokat.

Gyakori indítási parancsok:

- `set_digital_out pin=%u value=%c` : Ez a parancs az adott tűt azonnal digitális kimeneti GPIO-ként konfigurálja, és vagy alacsony (value=0) vagy magas (value=1) szintre állítja. Ez a parancs hasznos lehet a LED-ek kezdeti értékének konfigurálásához és a léptető vezérlő mikrolépés tűk kezdeti értékének konfigurálásához.
- `set_pwm_out pin=%u cycle_ticks=%u value=%hu` : Ez a parancs azonnal beállítja az adott tűt, hogy hardveres impulzusszélesség-modulációt (PWM) használjon a megadott számú cycle_tickkel. A "cycle_ticks" az MCU órajelének a száma, ameddig az egyes bekapcsolási és kikapcsolási ciklusoknak tartaniuk kell. Az 1-es cycle_ticks értékkel a lehető leggyorsabb ciklusidő kérhető. A "value" paraméter 0 és 255 között van, 0 a teljesen kikapcsolt állapotot, 255 pedig a teljesen bekapcsolt állapotot jelenti. Ez a parancs hasznos lehet a CPU és a nyomtatófej hűtő ventilátorok engedélyezéséhez.

## Alacsony szintű mikrokontroller konfiguráció

A mikrokontroller legtöbb parancsa a sikeres indítás előtt kezdeti beállítást igényel. Ez a szakasz áttekintést nyújt a konfigurációs folyamatról. Ez és a következő szakaszok valószínűleg csak a Klipper belső részletei iránt érdeklődő fejlesztők számára érdekesek.

Amikor a gazdagép először csatlakozik a mikrokontrollerhez, mindig egy adatszótár lekérésével kezdi (további információkért lásd protokolt). Az adatszótár lekérése után a gazdagép ellenőrzi, hogy a mikrokontroller "konfigurált" állapotban van-e, és ha nem, akkor konfigurálja. A konfigurálás a következő fázisokat foglalja magában:

- `get_config` : A gazdagép ellenőrzi, hogy a mikrokontroller már konfigurálva van-e. A mikrokontroller erre a parancsra egy "config" válaszüzenettel válaszol. A mikrokontroller szoftvere bekapcsoláskor mindig konfigurálatlan állapotban indul. Ebben az állapotban marad mindaddig, amíg a gazdagép be nem fejezi a konfigurációs folyamatokat (a finalize_config parancs kiadásával). Ha a mikrokontroller már konfigurálva van egy korábbi munkamenetből (és a kívánt beállításokkal van konfigurálva), akkor a gazdagépnek nincs szüksége további lépésekre, és a konfigurációs folyamat sikeresen befejeződik.
- `allocate_oids count=%c` : Ezt a parancsot azért adjuk ki, hogy tájékoztassuk a mikrokontrollert az objektum-id-k (oid) maximális számáról, amelyre a gazdagépnek szüksége van. Ezt a parancsot csak egyszer lehet kiadni. Az oid egy egész számú azonosító, amely minden egyes léptetőhöz, minden végálláshoz és minden ütemezhető GPIO tűhöz hozzárendelt. A gazdagép előre meghatározza a hardver működtetéséhez szükséges oid-ek számát, és ezt átadja a mikrokontrollernek, hogy az elegendő memóriát rendelhessen az oid-ről a belső objektumra való leképezés tárolásához.
- `config_XXX oid=%c ...` : A konvenció szerint minden "config_" előtaggal kezdődő parancs létrehoz egy új mikrokontroller objektumot, és hozzárendeli a megadott oid-et. Például a config_digital_out parancs a megadott tűt digitális kimeneti GPIO-ként konfigurálja, és létrehoz egy belső objektumot, amelyet a gazdagép használhat az adott GPIO módosításainak ütemezésére. A config parancsba átadott oid paramétert a gazdagép választja ki, és annak nulla és az allocate_oids parancsban megadott maximális szám között kell lennie. A config parancsok csak akkor futtathatók, ha a mikrokontroller nincs konfigurált állapotban (azaz a gazdagép által elküldött finalize_config parancs előtt) és az allocate_oids parancs elküldése után.
- `finalize_config crc=%u` : A finalize_config parancs a mikrokontrollert egy konfigurálatlan állapotból egy konfigurált állapotba helyezi át. A mikrokontrollernek átadott crc paraméter tárolásra kerül, és a "config" válaszüzenetekben visszaküldésre kerül a gazdagépnek. A konvenció szerint az állomás 32 bites CRC-t vesz az általa kért konfigurációról, és a későbbi kommunikációs munkamenetek kezdetén ellenőrzi, hogy a mikrokontrollerben tárolt CRC pontosan megegyezik-e a kívánt CRC-vel. Ha a CRC nem egyezik, akkor a gazdagép tudja, hogy a mikrokontroller nem az általa kívánt állapotba lett konfigurálva.

### Gyakori mikrokontroller objektumok

Ez a szakasz néhány gyakran használt konfigurációs parancsot sorol fel.

- `config_digital_out oid=%c pin=%u value=%c default_value=%c max_duration=%u` : Ez a parancs létrehoz egy belső mikrokontroller objektumot a megadott GPIO 'tű' számára. A tű digitális kimeneti módban lesz konfigurálva, és a 'value' által megadott kezdeti értékre lesz beállítva (0 az alacsony, 1 a magas). A digital_out objektum létrehozása lehetővé teszi a gazdagép számára, hogy az adott tű GPIO frissítéseit meghatározott időpontokban ütemezze (lásd az alább ismertetett queue_digital_out parancsot). Ha a mikrokontroller szoftvere kikapcsolási módba kerül, akkor az összes konfigurált digital_out objektum 'default_value' értékre kerül. A 'max_duration' paraméter egy biztonsági ellenőrzés megvalósítására szolgál. Ha nem nulla, akkor ez a maximális órajelek száma, amelyet a gazdagép további frissítés nélkül az adott GPIO-t nem alapértelmezett értékre állíthatja. Például, ha az alapértelmezett érték nulla, a max_duration pedig 16000, akkor ha egy értékre állítja a GPIO-t, akkor 16000 órajelen belül újabb frissítést kell ütemeznie a GPIO-n (nullára vagy egyre). Ez a biztonsági funkció használható a fűtési kimenetek biztosítására, hogy a gazdagép ne kapcsolja be a fűtést, majd ne kapcsoljon ki.
- `config_pwm_out oid=%c pin=%u cycle_ticks=%u value=%hu default_value=%hu max_duration=%u` : Ez a parancs létrehoz egy belső objektumot a hardveralapú PWM-tűkhöz, amelyek frissítését a gazdagép be tudja ütemezni. Használata analóg a config_digital_out paranccsal. A paraméterek leírását lásd a 'set_pwm_out' és a 'config_digital_out' parancsok leírásában.
- `config_analog_in oid=%c pin=%u` : Ez a parancs egy tű analóg bemeneti mintavételezési módban történő konfigurálására szolgál. A konfigurálás után a tű rendszeres időközönként mintavételezhető a query_analog_in paranccsal (lásd alább).
- `config_stepper oid=%c step_pin=%c dir_pin=%c invert_step=%c step_pulse_ticks=%u` : Ez a parancs létrehoz egy belső léptető objektumot. A 'step_pin' és 'dir_pin' paraméterek megadják a lépést és irányokat; ez a parancs digitális kimeneti módban konfigurálja őket. Az 'invert_step' paraméter meghatározza, hogy a lépés emelkedő élre (invert_step=0) vagy csökkenő élre (invert_step=1) történjen. A 'step_pulse_ticks' paraméter a lépésimpulzus minimális időtartamát határozza meg. Ha az MCU a 'STEPPER_BOTH_EDGE=1' konstansot exportálja, akkor a step_pulse_ticks=0 és az invert_step=-1 beállítása a step_pin emelkedő és csökkenő éleire történő lépést is beállítja.
- `config_endstop oid=%c pin=%c pull_up=%c stepper_count=%c` : Ez a parancs létrehoz egy belső "endstop" objektumot. Ez a végállási tűk megadására és a "kezdőpont" műveletek engedélyezésére szolgál (lásd alább az endstop_home parancsot). A parancs a megadott tűt digitális bemeneti módban konfigurálja. A 'pull_up' paraméter határozza meg, hogy a hardver által biztosított pullup ellenállások a tűhöz (ha vannak) engedélyezve lesznek-e. A 'stepper_count' paraméter meghatározza a maximális számú stepper-t, amelyet ennek a végállásnak meg kell állítania egy kezdőpont művelet során (lásd az endstop_home parancsot alább).
- `config_spi oid=%c bus=%u pin=%u mode=%u rate=%u shutdown_msg=%*s` : Ez a parancs létrehoz egy belső SPI objektumot. Az spi_transfer és spi_send parancsokkal együtt használható (lásd alább). A "bus" azonosítja a használni kívánt SPI-buszt (ha a mikrokontroller egynél több SPI-busszal rendelkezik). A "pin" az eszköz chipkiválasztó (CS) tűjét határozza meg. A "mode" az SPI módot jelöli (0 és 3 között kell lennie). A "rate" paraméter az SPI-busz sebességét adja meg (másodpercenkénti ciklusokban). Végül a "shutdown_msg" egy SPI-parancs, amelyet az adott eszköznek kell küldeni, ha a mikrokontroller leállási állapotba kerül.
- `config_spi_without_cs oid=%c bus=%u mode=%u rate=%u shutdown_msg=%*s` : Ez a parancs hasonló a config_spi parancshoz, de CS tű definíció nélkül. Hasznos olyan SPI eszközöknél, amelyek nem rendelkeznek Chip Select vonallal.

## Gyakori parancsok

Ez a szakasz néhány gyakran használt futásidejű parancsot sorol fel. Valószínűleg csak a Klipperbe betekintést nyerni kívánó fejlesztők számára érdekes.

- `set_digital_out_pwm_cycle oid=%c cycle_ticks=%u` : Ez a parancs egy (config_digital_out által létrehozott) digitális kimeneti tűt úgy konfigurál, hogy "szoftveres PWM"-et használjon. A 'cycle_ticks' a PWM-ciklushoz tartozó órajelek száma. Mivel a kimeneti kapcsolás a mikrokontroller szoftverében valósul meg, ajánlott, hogy a 'cycle_ticks' 10 ms vagy annál nagyobb időnek feleljen meg.
- `queue_digital_out oid=%c clock=%u on_ticks=%u` : Ez a parancs egy digitális kimeneti GPIO tű váltását ütemezi a megadott órajelen. A parancs használatához a mikrokontroller konfigurálása során ki kell adni egy 'config_digital_out' parancsot ugyanazzal a 'oid' paraméterrel. Ha a 'set_digital_out_pwm_cycle' parancsot hívták, akkor az 'on_ticks' a pwm-ciklus bekapcsolási időtartama (órajelekben). Ellenkező esetben az 'on_ticks' értékének vagy 0-nak (alacsony feszültség esetén) vagy 1-nek (magas feszültség esetén) kell lennie.
- `queue_pwm_out oid=%c clock=%u value=%hu` : Beütemezi a hardveres PWM kimeneti tű változását. Lásd a 'queue_digital_out' és a 'config_pwm_out' parancsokat további információkért.
- `query_analog_in oid=%c clock=%u sample_ticks=%u sample_count=%c rest_ticks=%u min_value=%hu max_value=%hu` : Ez a parancs beállítja az analóg bemeneti minták ismétlődő ütemezését. A parancs használatához a mikrokontroller konfigurálása során ki kell adni egy 'config_analog_in' parancsot ugyanazzal az 'oid' paraméterrel. A minták a 'clock' időponttól kezdődnek, a kapott értékről minden 'rest_ticks' óraütemenként jelentést készít, a 'sample_count' számú alkalommal túlmintázza a mintát, és a túlmintázott minták között 'sample_ticks' számú óraütemnyi szünetet tart. A 'min_value' és 'max_value' paraméterek egy biztonsági funkciót valósítanak meg. A mikrokontroller szoftvere ellenőrizni fogja, hogy a mintavételezett érték (az esetleges túlmintavételezés után) mindig a megadott tartományon belül van-e. Ezt a fűtőtesteket vezérlő hőszenzorokhoz csatlakoztatott tűkkel való használatra szánják. Ezzel ellenőrizhető, hogy a fűtőtest egy hőmérséklet tartományon belül van-e.
- `get_clock` : E parancs hatására a mikrokontroller egy "órajel" válaszüzenetet generál. A gazdagép másodpercenként egyszer küldi el ezt a parancsot, hogy megkapja a mikrokontroller órajel értékét, és megbecsülje a gazdagép és a mikrokontroller órajelei közötti eltérést. Ez lehetővé teszi a gazdagép számára a mikrokontroller órajelének pontos becslését.

### Léptető parancsok

- `queue_step oid=%c interval=%u count=%hu add=%hi` : Ez a parancs ütemezi a 'számítási' lépést az adott léptetőhöz, az 'intervallum' lépések közötti órajellel. Az első lépés az 'intervallum' órajelek száma lesz az adott léptető utolsó ütemezett lépése óta. Ha az 'add' nem nulla, akkor az intervallum minden lépés után az 'add' értékkel módosul. Ez a parancs a megadott intervallum/count/add szekvenciát egy léptetőkénti sorba illeszti. A normál működés során több száz ilyen szekvencia állhat a sorban. Az új szekvenciák a sor végére kerülnek, és amint minden szekvencia teljesíti a 'count' lépések számát, a sor elejére kerülnek. Ez a rendszer lehetővé teszi a mikrokontroller számára, hogy több százezer lépést állítson sorba. Mindezt megbízható és kiszámítható ütemezési idővel.
- `set_next_step_dir oid=%c dir=%c` : Ez a parancs adja meg a következő queue_step parancs által használt dir_pin értékét.
- `reset_step_clock oid=%c clock=%u` : Normális esetben a lépés időzítése az adott léptető utolsó lépéséhez viszonyítva történik. Ez a parancs visszaállítja az órajelet, így a következő lépés a megadott 'órajel' időponthoz képest történik. A gazdagép általában csak a nyomtatás kezdetén küldi ezt a parancsot.
- `stepper_get_position oid=%c` : E parancs hatására a mikrokontroller egy "stepper_position" válaszüzenetet generál a léptető aktuális pozíciójával. A pozíció a dir=1-gyel generált lépések teljes száma mínusz a dir=0-val generált lépések teljes száma.
- `endstop_home oid=%c clock=%u sample_ticks=%u sample_count=%c rest_ticks=%u pin_value=%c` : Ezt a parancsot a léptető "kezdőpont" műveletek során használják. A parancs használatához a mikrokontroller konfigurálása során ki kell adni egy 'config_endstop' parancsot ugyanazzal az 'oid' paraméterrel. Amikor ez a parancs meghívásra kerül, a mikrokontroller minden 'rest_ticks' órajelenként mintavételezi az endstop-tűt, és ellenőrzi, hogy annak értéke megegyezik-e a 'pin_value' értékkel. Ha az érték megegyezik (és továbbra is megegyezik a 'sample_count' további 'sample_ticks' távolságra elosztott mintákon keresztül), akkor a kapcsolódó léptető mozgási sora törlődik, és a léptető azonnal megáll. A gazdagép ezt a parancsot a kezdőpont megvalósítására használja. A gazdagép utasítja a végállást, hogy mintavételezzen a végállási triggerre, majd egy sor queue_step parancsot ad ki a léptető mozgatására a végállás felé. Amint a léptető eléri a végállást, a kapcsoló érzékeli, a mozgás megáll, és a gazdagépet értesíti.

### Sor áthelyezése

Minden queue_step parancs a mikrovezérlő "move queue" sorában lévő bejegyzést használja. Ez a várólista a "finalize_config" parancs fogadásakor kerül kiosztásra, és a "config" válaszüzenetekben jelenti a rendelkezésre álló várólista-bejegyzések számát.

A gazdagép felelőssége, hogy a queue_step parancs elküldése előtt megbizonyosodjon arról, hogy van-e szabad hely a várólistán. A gazdagép ezt úgy teszi, hogy kiszámítja az egyes queue_step parancsok mikor fejeződnek be, és ennek megfelelően ütemezi az új queue_step parancsokat.

### SPI parancsok

- `spi_transfer oid=%c data=%*s` : Ez a parancs arra készteti a mikrokontrollert, hogy a 'data'-t a 'oid' által megadott SPI eszközre küldje, és egy "spi_transfer_response" válaszüzenetet generál az átvitel során visszaküldött adatokkal.
- `spi_send oid=%c data=%*s` : Ez a parancs hasonló az "spi_transfer" parancshoz, de nem generál "spi_transfer_response" üzenetet.

Back to top