NEMA17 - ruční krokování

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.
hafca
Příspěvky: 119
Registrován: 23 říj 2017, 23:05

Re: NEMA17 - ruční krokování

Příspěvek od hafca » 10 lis 2024, 17:59

Dík za vysvětlení, nechám to podle tebe.

hafca
Příspěvky: 119
Registrován: 23 říj 2017, 23:05

Re: NEMA17 - ruční krokování

Příspěvek od hafca » 21 úno 2025, 13:16

Konečně se mi podařilo dotánhout mechanickou část. Ale objevil se zásadní problém. Motor se po každém pohybu chová jako při vypnutém napájení. A při dalším pootočení se nejdřív nastaví na nejbližší pozici a tím dochází k rozházení nastavení délky posunu. Jednou okénko o kousek přejede, jindy nedojede.
Potřeboval bych aby se motor po zastavení "nevypínal", ale zůstal stát zabržděný a startoval z pozice kde zůstal po zastavení.
Co mi v programu chybí?

Kód: Vybrat vše

[code]#include <Arduino.h>
#include "A4988.h"

const int Step = 3; //GPIO3 in Arduino UNO --- Step of stepper motor driver
int Dire  = 2; //GPIO2 in Arduino UNO --- Direction of stepper motor driver
int Sleep = 4; //GPIO4 in Arduino UNO --- Control Sleep Mode on A4988
int MS1 = 7; //GPIO7 in Arduino UNO --- MS1 for A4988
int MS2 = 6; //GPIO6 in Arduino UNO --- MS2 for A4988
int MS3 = 5; //GPIO5 in Arduino UNO --- MS3 for A4988
int BLT_pin = 11;
int ENB_pin = 9;
int STEP_pin = 10;
int BUTT_pin = 8;
//Motor Specs
const int spr =160; //Steps per revolution
int RPM = 3; //Motor Speed in revolutions per minute
int Microsteps = 16; //Stepsize (1 for full steps, 2 for half steps, 4 for quarter steps, etc)

//Providing parameters for motor control
A4988 stepper(spr, Dire, Step, MS1, MS2, MS3);

void setup() {
 Serial.begin(9600);

pinMode(MS1, INPUT_PULLUP); 
pinMode(MS2, INPUT_PULLUP); 
pinMode(MS3, INPUT_PULLUP); 
 
  pinMode(BUTT_pin, INPUT);
 pinMode(STEP_pin, INPUT);
 pinMode(BLT_pin, OUTPUT);
 pinMode(ENB_pin, OUTPUT);
    pinMode(Step, OUTPUT); //Step pin as output
  pinMode(Dire,  OUTPUT); //Direcction pin as output
  pinMode(Sleep,  OUTPUT); //Set Sleep OUTPUT Control button as output
  digitalWrite(Step, LOW); // Currently no stepper motor movement
  digitalWrite(Dire, LOW);
  digitalWrite(Sleep, LOW); //A logic high allows normal operation of the A4988 by removing from sleep
    digitalWrite(ENB_pin, HIGH);
  delay(1000);//Wait 1000 milliseconds (1 second) proceeding
   digitalWrite(BLT_pin, LOW);
   digitalWrite(ENB_pin, LOW);
    digitalWrite(BUTT_pin, HIGH);
    digitalWrite(STEP_pin, HIGH);
  // Set target motor RPM to and microstepping setting
  stepper.begin(RPM, Microsteps);
  delay(5000);
}

void loop() {
digitalRead(STEP_pin);
// STEP_pin - zapínání ručního krokování
if(digitalRead(STEP_pin) == LOW){
    
    digitalWrite(Sleep, HIGH); //A logic high allows normal operation of the A4988 by removing from sleep
    stepper.move(159);//Move  steps clockwise 800 = 50 kroků
    digitalWrite(Sleep, LOW);
    delay(200);//Wait 1000 milliseconds 
   digitalWrite(BLT_pin, LOW);
    delay(500);//Wait 1000 milliseconds 
    digitalWrite(BLT_pin, HIGH);
    delay(2500);//Wait 1000 milliseconds
    digitalWrite(STEP_pin, LOW);
}

else {


  if(digitalRead(BUTT_pin) == LOW) // krok na stisk tlačítka
  {
    digitalWrite(Sleep, HIGH);  
       delay(600);
    stepper.move(32);//Move  steps clockwise 1 krok
    digitalWrite(Sleep, LOW);
}

   }
   }
[/code]

AstroMiK
Příspěvky: 649
Registrován: 08 pro 2017, 19:05

Re: NEMA17 - ruční krokování

Příspěvek od AstroMiK » 21 úno 2025, 14:41

Není problém v tom, že po každém pootočení přepínáš pin 'Sleep' do LOW?

Co se stane, když ho necháš trvale v HIGH?
Podle mě se asi bude motor víc hřát, ale měl by držet pozici.

Uživatelský avatar
kiRRow
Příspěvky: 1313
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: NEMA17 - ruční krokování

Příspěvek od kiRRow » 21 úno 2025, 14:54

Bude, pokud má motor držet pozici nesmí být ve sleep modu (povypínáno skoro vše) a musí být enabled (tj povoleny FET tranzostory na výstupu pro motor).

Uživatelský avatar
kiRRow
Příspěvky: 1313
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: NEMA17 - ruční krokování

Příspěvek od kiRRow » 21 úno 2025, 15:52

Hlavně jak člověk používá mikrokrokování, program se zastaví na 8mém kroku z 16ti, pak se uspí/vypne driver - vzhledem k tomu jak rychle procesor pracuje, tak se uspí/vypne dříve než se zastaví - a motor setrvační silou ještě kousek otočky udělá, takže se dostane třeba do pozice prvního kroku z 16ti. Po obživnutí driveru je ale na cívkách napětí odpovídající osmému kroku a motor se prostě do toho stavu dostane škubnutím jedním, nebo druhým směrem.

Takže, fakt, nevypínat/neuspávat. A pokud i přesto budou problémy se setrvačnými silami, tak hodně pomáhá postupná akcelerace/deakcelerace. Ani to nemusí být nějak brutálně šílený kód, stačí si jen určit počet kroků na akceleraci, počet kroků na aktualizaci rychlosti, minimální rychlost, maximální rychlost a konstantu kterou budu dělit rozdíl mezi maximem a současnou rychlostí.

RychlostMotoru = minimalka
pokud počet kroků co udělal motor je menší než počet kroků na akceleraci tak
dokud RychlostMotoru není větší jak maximálka, tak to každých početKrokuNaAkceleraci/početKrokuNaAktualizaci přepočtu ...
RychlostMotoru = RychlostMotoru + (MaximalníRychlost - RychlostMotoru) / konstanta ...
pokud výpočet překročí maximálku, tak nastavím maximálku ... stejně ji nakonec vždy nastavím na maximálku ať se vypočte cokoliv

hafca
Příspěvky: 119
Registrován: 23 říj 2017, 23:05

Re: NEMA17 - ruční krokování

Příspěvek od hafca » 21 úno 2025, 16:28

Tak dlouho do toho koukám a toho sleep jsem si nevšiml. :shock:
Rychlost nepotřebuji, jde o přesnost posunu. Ale s ní je to horší. Je to mechanická záležitost, která teď vyplavala. Jsou to staré filmy, mají slepky nebo vypálená políčka a tam to poskočí a je to jinde. S tím se budu muset nějak poprat.
Dík všem za nakopnutí.

Uživatelský avatar
kiRRow
Příspěvky: 1313
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: NEMA17 - ruční krokování

Příspěvek od kiRRow » 21 úno 2025, 18:04

Jestli ti jde spíše o přesnost než o rychlost, tak zvol motor s převodem a velmi doporučuji jinačí driver ... TMC vyrábí brutálně kvalitní drivery s pokročilými funkcemi.

hafca
Příspěvky: 119
Registrován: 23 říj 2017, 23:05

Re: NEMA17 - ruční krokování

Příspěvek od hafca » 22 úno 2025, 08:32

Převodu jsem se chtěl vyhnout kvůli možným vůlím v převodech. Tady to jede prakticky bez zatížení. S tím driverem uvidím, podle toho jestli to bude koktat.

Uživatelský avatar
kiRRow
Příspěvky: 1313
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: NEMA17 - ruční krokování

Příspěvek od kiRRow » 22 úno 2025, 11:00

Kvalitní zpřevodovaný motor má vůli prakticky nulovou.

hafca
Příspěvky: 119
Registrován: 23 říj 2017, 23:05

Re: NEMA17 - ruční krokování

Příspěvek od hafca » 23 úno 2025, 20:00

Zkusím jiný driver. Mám objednaný DRV8825, ale asi nebude sedět program. Je to sice pin to pin náhrada, ale softwarově to asi neklapne. Ale hodilo by se mi to krokování s krokem až 32.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host