komunikace zpomaluje arduino?

DavidO
Příspěvky: 1005
Registrován: 01 kvě 2013, 21:27

Re: komunikace zpomaluje arduino?

Příspěvek od DavidO »

stepper.setMaxSpeed(1000); 1000 kroků/s
stepper.setAcceleration(500); se zrychlením z nuly na 100 za dvě vteřiny - slušný žihadlo :D

Při max otáčkách to má udělat krok zhruba stejně často, jako se posílá jeden znak při 9600 Bd do toho displeje, takže když se posílá znaků víc blokujícím způsobem, motor vypadá.
jova
Příspěvky: 341
Registrován: 16 pro 2013, 11:40

Re: komunikace zpomaluje arduino?

Příspěvek od jova »

Jasně to jsou maximální hodnoty. Proto se ptám jaké se budou využívat reálně v tom diskutovaném projektu. Protože 300otáček za minutu mi třeba na ten slider připadá nějak moc.
Takhle mě to třeba fungovalo s picaxem a jedním motorem když jsem řešil kolísání otáček rušením:
https://www.youtube.com/watch?v=YufUuTbI13s
Naposledy upravil(a) jova dne 05 dub 2017, 13:50, celkem upraveno 2 x.
jova
Příspěvky: 341
Registrován: 16 pro 2013, 11:40

Re: komunikace zpomaluje arduino?

Příspěvek od jova »

Osobně arduino nedělám, ale tihle kluci to nějak řešit museli, třeba někdo z nich poradí:
http://www.c-n-c.cz/viewtopic.php?f=48&t=14928&start=45
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: komunikace zpomaluje arduino?

Příspěvek od packa »

Ahoj
mám problém , potřebuji hýbat krokovým motorem sem a tam prostě z pozice na pozicy a (používám knihovnu accelstepper)
a mezitím potřebuji počítat impulzy co mi jdou ze snímací sondy vřetene a při nastaveném počtu pulzů zastavit jak krokáč tak hlavní motor (rele).

jedná se o navíječku kde krokáč rozrovnává vinutí do různých komor cívky a navíjení řeší motor s měničem.

jde mi ot to že když mi krokáč rovná tak mi to špatně čítá .
Poradí někdo jak to zapsat ?
Dík Packa


stepper1.moveTo(300);
stepper1.runToPosition();
stepper1.moveTo(250);
stepper1.runToPosition();
Uživatelský avatar
jrt
Příspěvky: 1813
Registrován: 17 úno 2013, 17:13

Re: komunikace zpomaluje arduino?

Příspěvek od jrt »

V manuálu píší:

"void AccelStepper::runToPosition(). Otáčí motorem (se zrychlením i zpomalením) až do dosažení cílové pozice. Nepoužívejte ve smyčce, která zpracovává událostí, protože funkce blokuje další provádění programu až do doby dosažení nové cílové pozice."

Takže tam bude asi ten zakopaný pes a bude se to muset řešit jinak. Jak, to ti neporadím, protože mám málo informací o tvém projektu.
jrt
jederobot.cz, hobbyrobot.cz, profirobot.cz
edurobot.cz, robodoupe.cz
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: komunikace zpomaluje arduino?

Příspěvek od packa »

zatím jsem to udělal tak že vstup na čítání impulzů mám přes přerušení a zdá se že to tak bude funkční , jen je problém cokoli posílat na LCD tam se to zabrzdí.
Uživatelský avatar
jrt
Příspěvky: 1813
Registrován: 17 úno 2013, 17:13

Re: komunikace zpomaluje arduino?

Příspěvek od jrt »

Přerušení zase nejspíš zastaví vykonávání runToPosition(), takže asi dojde ke ztrátě kroku.

Nebylo by jednodušší nepoužívat accelstepper a generovat kroky přímo v hlavní smyčce programu taháním za pin step?
jrt
jederobot.cz, hobbyrobot.cz, profirobot.cz
edurobot.cz, robodoupe.cz
Vladimir66
Příspěvky: 353
Registrován: 02 dub 2014, 15:30

Re: komunikace zpomaluje arduino?

Příspěvek od Vladimir66 »

Ahoj,
jako programatorsky (L)AMAter bych to resil timto zpusobem.
snazil bych se zjistit, kde mam v kodu Accel Stepperu nejakou casovou rezervu.
zkusil bych pak v prihodnou dobu cist promennou "current position" (snad nejaka podobna v A.S. je) jinym Arduinem.
podle casu, ktery by byl k dsipozici(pocet instrukci), bych volil zpusob predani dat.
Vlastni obsluhu displeje bych resil mimo Arduino, ktere dela vypocty pro toceni.

-V66
packa
Příspěvky: 43
Registrován: 15 zář 2015, 12:32

Re: komunikace zpomaluje arduino?

Příspěvek od packa »

Ahoj jo to zní logicky , každopádně to přerušení mi moc nevadí kroky to neztratí jen se to zastaví , ale je to moment a ten nevadí , lcd asi obsloužím druhým arduinem.
hubacekp
Příspěvky: 259
Registrován: 24 úno 2013, 13:40

Re: komunikace zpomaluje arduino?

Příspěvek od hubacekp »

Ahoj,
nevím, zda odpovím na dotaz, ale třeba malou troškou. Já jsem (po radě jrt) začal používat accelstepper.h a zde níže mám pokusný kód, kdy jsem potřeboval zároveň hýbat krokovým motorem i několika servy => zdá se, že se nic nekouše a jede to plynule:
Funkci servoMove() uvádět nebudu, jen se tam něco každých 40 ms přičítá/odčítá (DIY akcelerace serva) a nakonec to zavolá myservo1.writeMicroseconds(myservo_val1);

Plánuju hodnoty 1200 a 0 upravovat v kódu a while přepsat na if pro čtení příkazů ze serialu...a samozřejmě se to potom ve výsledku zpomalí. To u arduina normálně zažívám. :-)

Kód: Vybrat vše

void setup()
{
  stepper.setMaxSpeed(600);
  stepper.setAcceleration(600);
  myservo1.attach(7);
  myservo2.attach(8);
  myservo3.attach(9);
}

void loop()
{
  stepper.moveTo(3000);
  while (stepper.currentPosition() != 1200) { // Full speed up to 300
    stepper.run();
    servoMove();
  }
  stepper.moveTo(0);
  while (stepper.currentPosition() != 0) { // Full speed up to 300
    stepper.run();
    servoMove();
  }
}
Odpovědět