Moc děkuju ale bohužel takhle to nechodí. Procedura stepper.run() je volaná "málo často" tudíž motor se pohybuje rychlostí 1 krok za sekundu (asi ty pauzy = delay(1000) a tudíž je to nepoužitelné. Taky se to spouští bez ohledu na stav tlačítka. Pomoc, jsem ztracen! Půjde ten accel.stepper na tohle vůbec použít?jeykey píše:to: melsoft
upozorňuju, že program sem netestoval na motorech, takže sem ani nepřenastavoval žádný hodnoty, doladění je na Tobě
3 osý manipulátor bez PC
-
melsoft
- Příspěvky: 318
- Registrován: 25. 1. 2012, 5:41
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Je možno změnit v tom programu prodlevu mezi jednotlivými řádky ?
Jsou například tyto příkazy na jednu osu a je dlouhá doba mezi jednotlivými řádky když se provádí program.
moveX(40, 3.7);
moveX(80, 3.1);
moveX(40, 3.7);
moveX(0, 3.7);
Je to způsobeny tím Serial.print ?
Když začíná vykonávat jeden řádek tak blikne TX.
Jsou například tyto příkazy na jednu osu a je dlouhá doba mezi jednotlivými řádky když se provádí program.
moveX(40, 3.7);
moveX(80, 3.1);
moveX(40, 3.7);
moveX(0, 3.7);
Je to způsobeny tím Serial.print ?
Když začíná vykonávat jeden řádek tak blikne TX.
-
jeykey
- Příspěvky: 114
- Registrován: 25. 8. 2014, 8:02
print to nedělá, to mělo smysl jen když je za každým krokem, takhle je to nepodstatný, možná zkrátit náběh motoru, ten má vliv na dýlku posledního kroku a může to vypadat jako pauza,.tarvisio píše:Je možno změnit v tom programu prodlevu mezi jednotlivými řádky ?
Jsou například tyto příkazy na jednu osu a je dlouhá doba mezi jednotlivými řádky když se provádí program.
moveX(40, 3.7);
moveX(80, 3.1);
moveX(40, 3.7);
moveX(0, 3.7);
Je to způsobeny tím Serial.print ?
Když začíná vykonávat jeden řádek tak blikne TX.
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Je to pěkný, ale já tam pauzu nepotřebuji. Mám jí tam už tak dost protože to dlouho čeká mezi řádky.kutil_tim píše:to se bojíš tam dát pauzu třeba tak ?
int spocni = 10;
moveX(40, 3.7);
delay(spocni);
moveX(80, 3.1);
delay(spocni);
moveX(40, 3.7);
delay(spocni);
moveX(0, 3.7);
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Zkoušel jsem, bohužel to nepomohlo.kutil_tim píše:zkrátit že by tu ?
// functions
void moveX(float posun, float rychlost) {
Serial.println("pohyb na ose X zahajen");
int Current = 1;
float Bx = Xcounter - posun;
Bx = Bx * (-1);
int Ot = Bx * (kroku_na_otacku_X / stoupani_sroubu_X);
int zrychleni = 400; // tady se mění zrychlení motoru při rozjezdu (počet kroků na plnou rychlost)
float maxDelay = 700; // tady se mění prudkost náběhu motoru (když dělá velký rázy, zvýší se číslo)
float Ost = 1 / (kroku_na_otacku_X / stoupani_sroubu_X);
rotate(Ot, rychlost, DIR_X_PIN, STEP_X_PIN, Current, zrychleni, maxDelay, Ost);
}
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
kutil_tim píše:a co toto ?
if (view == 1) Serial.println(Ost); //pokud je cosi pravda
delay(1000);//tak spočni sekundu a pak
toč
//rotate a specific number of steps - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
To je ono ! Super, díky moc !
-
melsoft
- Příspěvky: 318
- Registrován: 25. 1. 2012, 5:41
Tak teď je to "much better". Jen jsem ještě překopal toto:
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}}
delay(long_pause);
}
na toto:
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}
delay(long_pause);
}
}
neb to nedělalo pauzy mezi protáčením v cyklu a trochu jsem poladil rychlosti a už to fiští. Ještě si musím ten status vyčíst z přepínačů a bude hotovo.
Díky moc jeykey, jsi génius!!!
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}}
delay(long_pause);
}
na toto:
if (status_L_S = 1){
for (int i = 0; i<=long_repeats; i++){
stepper.setSpeed(long_speed);
stepper.setCurrentPosition(0);
stepper.moveTo(16000);
while (stepper.currentPosition()!=16000){
stepper.run();
}
delay(long_pause);
}
}
neb to nedělalo pauzy mezi protáčením v cyklu a trochu jsem poladil rychlosti a už to fiští. Ještě si musím ten status vyčíst z přepínačů a bude hotovo.
Díky moc jeykey, jsi génius!!!
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Nevěděl bys co je v programu špatně že to na základě příkazů jezdí jinak ?
První řádek příkazu to udělá správně, ale pak se to zamotá a jezdí jinak. Jak kdyby přičítalo k tomu prvnímu.
Popřehazoval jsem směry motorů aby mi to jezdilo správně, jinak nic.
Vím že tam byl nastavený absolutní systém, ale ten teď neposlouchá.
Děkuji za pomoc.
Poslední funkční program:
První řádek příkazu to udělá správně, ale pak se to zamotá a jezdí jinak. Jak kdyby přičítalo k tomu prvnímu.
Popřehazoval jsem směry motorů aby mi to jezdilo správně, jinak nic.
Vím že tam byl nastavený absolutní systém, ale ten teď neposlouchá.
Děkuji za pomoc.
Poslední funkční program:
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Toš to je škoda
Ja myslím že už mi tam vše chodí podle mých představ, jen si to počítá nyní jak chce a pak to i jezdí jak chce
Ja myslím že už mi tam vše chodí podle mých představ, jen si to počítá nyní jak chce a pak to i jezdí jak chce
-
jeykey
- Příspěvky: 114
- Registrován: 25. 8. 2014, 8:02
jak si přehazoval ty směry otáček tak tam zůstalo starý počítání
if (dir == LOW) Ost = Ost*(-1);
musíš přepsat na:
if (dir == HIGH) Ost = Ost*(-1);
klidně to předělej kutile Time, já tak trochu nestíhám, tak to vždycky dodělávám narychlo s hromadou jiných věcí
Tarvisio jestli to máš už v nějaký koncový podobě, tak bychom tam měli použít knihovnu accelstepper a doladit to do finálový podoby, bez těch evolučních zbytků.
if (dir == LOW) Ost = Ost*(-1);
musíš přepsat na:
if (dir == HIGH) Ost = Ost*(-1);
klidně to předělej kutile Time, já tak trochu nestíhám, tak to vždycky dodělávám narychlo s hromadou jiných věcí
Tarvisio jestli to máš už v nějaký koncový podobě, tak bychom tam měli použít knihovnu accelstepper a doladit to do finálový podoby, bez těch evolučních zbytků.
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
jeykey píše:jak si přehazoval ty směry otáček tak tam zůstalo starý počítání
if (dir == LOW) Ost = Ost*(-1);
musíš přepsat na:
if (dir == HIGH) Ost = Ost*(-1);
klidně to předělej kutile Time, já tak trochu nestíhám, tak to vždycky dodělávám narychlo s hromadou jiných věcí
Tarvisio jestli to máš už v nějaký koncový podobě, tak bychom tam měli použít knihovnu accelstepper a doladit to do finálový podoby, bez těch evolučních zbytků.
Děkuji za pomoc. Už vše funguje, jsem happy
Jdu tvořit dále to zařízení ...
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Věděl by si mi poradit proč mi to na několik tlačítek pouští různé programy, které tam mám předvolené ?
Na každé tlačítko mám jiný pohyb, ale tlačítka mi někdy zablbnou a udělají program z druhého tlačítka.
Vstupy mám jako INPUT a taky nastaveny na HIGH.
Zde je schéma zapojení.
Děkuji za pomoc.
Na každé tlačítko mám jiný pohyb, ale tlačítka mi někdy zablbnou a udělají program z druhého tlačítka.
Vstupy mám jako INPUT a taky nastaveny na HIGH.
Zde je schéma zapojení.
Děkuji za pomoc.
Naposledy upravil(a) tarvisio dne 4. 10. 2014, 10:26, celkem upraveno 2 x.
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Myslím že to mám vyřešeno, byl problém v UNO.tarvisio píše:Věděl by si mi poradit proč mi to na několik tlačítek pouští různé programy, které tam mám předvolené ?
Na každé tlačítko mám jiný pohyb, ale tlačítka mi někdy zablbnou a udělají program z druhého tlačítka.
Vstupy mám jako INPUT a taky nastaveny na HIGH.
Zde je schéma zapojení.
Děkuji za pomoc.
-
tarvisio
- Příspěvky: 289
- Registrován: 25. 10. 2013, 3:11
Ahoj jeykey,
chci se zeptat proč je tam potřeba použít knihovnu accelstepper ?
Ono to takhle nebude spolehlivě fungovat ?
Ja to nyní už používám ten program. Vrtá mi to na tom malém soustruhu díly. Pohyby chodí zatím v pohodě.
Program trvá asi 23 sekund. Díly se mění ručně a potom se program spouští tlačítkem cca každých 10 sekund znova. Stává se mi, že mi program zahapruje a zastaví se a pak se znova rozjete, ale jakoby se celý posune v jedné ose o několik mm a pak mi to narazí, protože to přijede rychloposuvem dál něž by mělo. Musím restartovat, najet znovu výchozí polohy. Stává se mi to ca každých 200 ks když to vrtá v kuse.
Je to napojeno na arduino Mega, myslíš že kdyby tam bylo Due tak by problém mohl zmizet, protože je to výkonější ?
chci se zeptat proč je tam potřeba použít knihovnu accelstepper ?
Ono to takhle nebude spolehlivě fungovat ?
Ja to nyní už používám ten program. Vrtá mi to na tom malém soustruhu díly. Pohyby chodí zatím v pohodě.
Program trvá asi 23 sekund. Díly se mění ručně a potom se program spouští tlačítkem cca každých 10 sekund znova. Stává se mi, že mi program zahapruje a zastaví se a pak se znova rozjete, ale jakoby se celý posune v jedné ose o několik mm a pak mi to narazí, protože to přijede rychloposuvem dál něž by mělo. Musím restartovat, najet znovu výchozí polohy. Stává se mi to ca každých 200 ks když to vrtá v kuse.
Je to napojeno na arduino Mega, myslíš že kdyby tam bylo Due tak by problém mohl zmizet, protože je to výkonější ?