Marlin bufferuje příkazy?
Tento můj dotaz nesouvisí přímo s produkty PR a já se tímto omlouvám, že ho zde kladu. Bohužel jsem narazil na problém, s kterým si nevím rady a ani nevím, jak mám formulovat dotaz na Google nebo někam jinam (a kam).
Mám starší nevyužitou desku Rambo 1.2 a nějaké krokové motory, konkrétně SX17-1003LQEF (resp. 1005LQEF). Napadlo mě s tím něco provést a využít při tom software Marlin a řízení pomocí gcodu.
Přeložil jsem si tedy Marlin 1.0.2 a protože chci ovládat motor po jednom kroku bez microsteppingu, přeložil jsem to s volbami
#define DEFAULT_AXIS_STEPS_PER_UNIT {1, 1, 1, 1}
#define MICROSTEP_MODES {1,1,1,1,1}
Nahrál jsem to na Rambo, připojil motor na výstup pro osu X a provádím následující příkazy ručně přes Pronterface:
M17 (zapne motor)
G91 (přepne relativní souřadnice)
G1 X1
G1 X1
G1 X1
...
Očekávám, že po každém G1 X1 se mi motor pootočí o jeden krok, celkem by jich mělo být na jednu celou otáčku 200.
Jenomže ono se to chová nějak divně. Chová se to tak, že prvních 5 se nestane nic a teprve každý šestý G1 X1 se to pootočí o 6 kroků. Když dám G1 X200, tak to projede naprosto plynule a hned celou jednu otáčku kolem dokola. Když dám G1 X50, udělá to čtvrt otáčky. Ale když dám G1 X1, tak se to nehne, dokud jich nedám přesně 6 po sobě.
Úplně stejně se to chová, když zapnu microstepping pomocí
#define MICROSTEP_MODES {16,16,16,16,16}
Zvedne se rozlišení, na jednu otáčku potřebuju 3200 kroků, větší úseky to bez problému projede plynule, hladce a najednou, ale jakmile začnu krokovat po jednom, tak se to pohne jenom každý 6. příkaz.
Nevíte někdo, čím to je a jak se toho zbavit?
Re: Marlin bufferuje příkazy?
Vložte G4 mezi přikazy.
Marlin bufferuje příkazy, na to existuje rutina, která se jmenuje planner. Její hlavní význam je v tom, že kontroluje pracovní obálku stroje (rychlosti, zrychlení, cuknutí - jerk v jednotlvých osách) tak, aby pracovní obálka nebyla překročena. Planner navazuje jednotlivé pohyby, takže například při interpolaci kružnice mnoha segmenty se pohyb na konci každého segmentu nezastaví, ale pokud možno přejde plynule do následujícího segmentu.
Vojta Bubník
Re: Marlin bufferuje příkazy?
Díky za odpověď, ale bohužel to nepomáhá. I když proložím každý jeden příkaz G1 X1 příkazem G4, tak se stejně motor pohne až když G1 X1 dám pošesté. To spíš vypadá, jako by tam bylo někde nějaké nastavení typu "hýbej se až když odchylka od aktuální polohy je větší než něco". Protože když tam posílám
G1 X1
G1 X1
G1 X-1
G1 X1
G1 X1
G1 X-1
...
tak se motor nepohne po šestém příkazu ale až po čtrnátcém, tzn. když je součet všech pohybů roven 6.
Re: Marlin bufferuje příkazy?
Tak už jsem na to přišel. :ugeek: Inspirovalo mě to, že se to vždycky pohne až když je rozdíl větší než 5. Prohledal jsem zdrojáky na výskyt "5" a našel jsem v Configuration_adv.h tento řádek:
const unsigned int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
Když jsem tu hodnotu změnil na 0, tak už se to hýbe i o jeden jediný krok.