Krokový motor se nechce zastavit.

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Pan Pomelo
Příspěvky: 10
Registrován: 07 led 2020, 17:38
Reputation: 0

Krokový motor se nechce zastavit.

Příspěvek od Pan Pomelo » 15 úno 2020, 13:37

Zdravím,
mám rozdělaný jeden projekt na ovladač tří krokových motorů, XYZ osy, +/- směry a ovládání rychlosti potenciometrem na platformě Arduino NANO. Ve finále má být ovladač k motorům připjojen přes desku http://www.cnc1.eu/sk/h5controller.htm, která bere signály STEP/DIR. Tu momentálně nemám po ruce, tak jsem to zkusil rozchodit aspoň na nějakém harampádí z číny, motor 28BY-J-48 a driver ULN2003APG.
program:

Kód: Vybrat vše

int Xplus = 2; //inputy pro tlačítka 
int Xmin = 3;

#include <AccelStepper.h> //outputy pro motory
#define HALFSTEP 8
//AccelStepper StepperX(AccelStepper::DRIVER ,9,10)
AccelStepper StepperX(HALFSTEP,9,10,11,12); 

#define SPEED_PIN_1 7 //analog pro rychlost 1x
#define MAX_SPEED  1500//nastavit (kroky/(?)
#define MIN_SPEED  0
;float current_speed_X = 0;
int analog_value  = 0;

void setup() {
  pinMode(Xplus, INPUT); pinMode(Xmin, INPUT);
  StepperX.setMaxSpeed(MAX_SPEED);
  StepperX.setAcceleration(1000); //donastavit
  }
void loop()
{ //pro X 
  analog_value=analogRead(SPEED_PIN_1);
  
  if (digitalRead(Xplus)==HIGH) 
  {
  current_speed_X = map(analog_value,0,1023,MAX_SPEED,MIN_SPEED);
  }
  else if (digitalRead(Xmin)==HIGH)
  {
  current_speed_X = (map(analog_value,0,1023,MAX_SPEED,MIN_SPEED))*-1;
  }
 else
    {
  current_speed_X = 0;
    }

  StepperX.setSpeed(current_speed_X);
  StepperX.runSpeed();
 
}
Podařilo se mi rozjet nastavení rychlosti a tlačítka pro směr, vechno jede krásně, až na ten problém, že motor se prostě nezastaví.
Po načtení programu nebo zapnutí napájení desky se motor začne otáčet v kladném směru a reaguje i na štelování rychosti potenciometrem. Po stisknutí tlačítka pro opačný směr se normálně rozjede do druhé strany.
část programu "else { current_speed_X = 0; }" by podle mých představ právě měla obstarat to zastavení se v případě, že nemačkám žádné tlačítko. Pokud do StepperX.setSpeed() dosadím za current_speed_X natvrdo 0, tak správně stojí.
Potřebuju aby motory jely jen když budu mačkat přísluné tlačítko. Budu rád za každou radu, pokud by to bylo tím ovladačem, budu se snažit co nejrychleji sehnatu desku.
Děkuji všem
Přílohy
IMG_20200215_132856.jpg
IMG_20200215_132930.jpg

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Krokový motor se nechce zastavit.

Příspěvek od ondraN » 15 úno 2020, 15:39

Tlačítka připojuješ na GND, ale nemáš zapnuté pullup rezistory.

Kód: Vybrat vše

 pinMode(Xplus, INPUT_PULLUP); pinMode(Xmin, INPUT_PULLUP);

Pan Pomelo
Příspěvky: 10
Registrován: 07 led 2020, 17:38
Reputation: 0

Re: Krokový motor se nechce zastavit.

Příspěvek od Pan Pomelo » 15 úno 2020, 16:29

ondraN píše:
15 úno 2020, 15:39
Tlačítka připojuješ na GND, ale nemáš zapnuté pullup rezistory.

Kód: Vybrat vše

 pinMode(Xplus, INPUT_PULLUP); pinMode(Xmin, INPUT_PULLUP);
Tisiceré díky za navedení na správnou stopu. v programu jsem měl počítal s tím, že Xmin,Xplus == HIGH tak se motor pohybuje, ale tlačítko vlastně při stisknutí vrací LOW.
Děkuji

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: luger a 9 hostů