Stránka 3 z 3

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

Napsal: 10 lis 2024, 17:59
od hafca
Dík za vysvětlení, nechám to podle tebe.

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

Napsal: 21 úno 2025, 13:16
od hafca
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]

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

Napsal: 21 úno 2025, 14:41
od AstroMiK
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.

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

Napsal: 21 úno 2025, 14:54
od kiRRow
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).

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

Napsal: 21 úno 2025, 15:52
od kiRRow
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

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

Napsal: 21 úno 2025, 16:28
od hafca
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í.

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

Napsal: 21 úno 2025, 18:04
od kiRRow
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.

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

Napsal: 22 úno 2025, 08:32
od hafca
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.

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

Napsal: 22 úno 2025, 11:00
od kiRRow
Kvalitní zpřevodovaný motor má vůli prakticky nulovou.

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

Napsal: 23 úno 2025, 20:00
od hafca
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.