motor nezvládá rychlost jakou po něm požaduješ, proto ztrácí kroky, musíš po něm chtít menší rychlost a vybalancovat hodnoty pro svůj motor, ten kód neni univerzální, každej motor (typ, ne úplně každej kus) potřebuje svý nastavení,tarvisio píše:melsoft píše:Díky za tohle vlákno! Zaujalo mě to natolik, že jsem si koupil Arduino, připojil jsem driver krokového motoru a začal experimentovat (na jedné z prvních verzí zde uveřejněného kódu).
Bohužel pozoruji takové chování, že pro rychlosti menší nebo rovno 1 je akcelerace plynulá až do maximální rychlosti ale jakmile dám rychlost třeba 1,5, akceleruje to jen do určitého momentu a pak to skočí na maximální rychlost a při rychlostech větších než 1,9 to spolehlivě ztratí kroky.
Nevíte někdo co s tím?
Ja jsem zacatecnik takze ti asi moc neporadim,ale zalezi jake pouzivas motory, drivery.
Ja nezenu motory na velke rychlosti, protoze to ztraci kroky a taky moment.
Pouzivam motory Microcon a drivery Leadshine.
doporučil bych poslední verzi programu a přes serial monitor uvidíš co se tam děje krok po kroku,
to co popisuješ bude asi pocitový, motor naběhne plynule, ale ve chvíli kdy ztratí kroky se ti zdá že najel skokem, protože udělá takovej divnej zvuk, prověřoval sem tu rovnici v algoritmu a dává správný výsledky i pro tvoje hodnoty, co máš nastavený v programu
rozjezd motoru počítá přestávku mezi krokama takhle:
začátek cyklu:
MKD=1/1,4*70+3000-3000/500*1
MKD = 3044 mikrosekund
konec cyklu:
MKD=1/1,4*70+3000-3000/500*500
MKD = 50 mikrosekund
MKD = pauza mezi krokem
1,4 je koeficient rychlosti nastavenej v programu uživatelem (rotate(4500, 1.40);)
3000 = (float maxDelay = 3000;) nastavení náběhu motoru
500 = počet rozjezdových kroků (0-500) (int zrychleni = 500;) hodnota na konci cyklu musí být stejná jako hodnota v dalším cyklu:
MKD = (1/1,4)*70
MKD = 50 mikrosekund
a dojezd je start jenom opačně, takže v cyklu žádnej problém není