Dag heren,

ik ben bezig met een automatische liniaal met een stappenmotor, deze wil ik achter mijn afkortzaag zetten zodat ik met een potmeter een afstand kan ingeven. Dit heb ik allemaal werkend, echter de sketch werkt niet optimaal.
Ik heb geprobeerd dit op te zetten met chatgpt(omdat ik niet goed ben met het schrijven van de software van Arduino).

Deze sketch werkt, alleen in automatisch bedrijf krijg ik een lage snelheid. Deze snelheid wil ik verhogen maar krijg dit niet voor elkaar.
Wat ik wil:
- Na opstarten Arduino, richting Home positie(eindschakelaar).
- Na home procedure, setpoint ingeven met Potmeter bevestigen met schakelaar.
- Stappenmotor gaat na positie.
- 3s knop ingedrukt houden voor het in voeren van een offset.

Bovenstaande werkt allemaal, alleen gaat het tijdens het home proces sneller dan in normaal bedrijf. Ik wil een constante snelheid voor zo wel de home procedure als tijdens het normale bedrijf.

De volgende sketch heb ik:


#include <AccelStepper.h>
#include <LiquidCrystal_I2C.h>
// SCL--> A5
// SDA --->A4

// ===== Pin definities =====
const int pinPotentiometer = A0;
const int pinButton        = 5;
const int pinHomeSwitch    = 4;
const int enablePin        = 8;

// DRV8825
const int dirPin  = 2;
const int stepPin = 3;

// ===== Motor instellingen =====
const float lengteBereikMM   = 400.0;
const long totaalStappen     = 640000;    // PAS AAN op jouw mechanica
const float mmPerStep        = lengteBereikMM / totaalStappen;

// ===== Originele soft limits =====
const float softLimitMinMM = 0.0;
const float softLimitMaxMM = 600.0;

// ===== LCD instellingen =====
LiquidCrystal_I2C lcd(0x27, 16, 2);

// ===== AccelStepper =====
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);

// ===== Variabelen =====
bool homingOk       = false;
float setpointMM    = 0;
float currentPosMM  = 0;
float offsetMM      = 0;      // actieve offset (blijft gelden)
float tempOffsetMM  = 0;      // tijdelijk tijdens instellen

bool buttonPressedLast = false;
unsigned long buttonPressStart = 0;
unsigned long lastLCDUpdate = 0;
bool offsetMode = false;

// ===== Functieprototypes =====
bool performHoming();
void updateLCD();

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

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Stepper systeem");
  delay(1000);
  lcd.clear();

  pinMode(pinButton, INPUT_PULLUP);
  pinMode(pinHomeSwitch, INPUT_PULLUP);
  pinMode(enablePin, OUTPUT);
  digitalWrite(enablePin, LOW); // enable driver (active LOW)

  stepper.setMaxSpeed(32000);
  stepper.setAcceleration(1000);

  // Homing uitvoeren
  if (performHoming()) {
    homingOk = true;
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Homing OK");
    delay(1000);
    lcd.clear();
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Homing FOUT!");
    lcd.setCursor(0, 1);
    lcd.print("Controleer switch");
  }
}

void loop() {
  if (!homingOk) return;

  bool buttonPressed = (digitalRead(pinButton) == LOW);

  // Detecteer lange druk (3 sec)
  if (buttonPressed && !buttonPressedLast) {
    buttonPressStart = millis();
  }

  if (!buttonPressed && buttonPressedLast) {
    unsigned long pressDuration = millis() - buttonPressStart;

    if (pressDuration >= 3000) {
      // Lange druk &#8594; Offset modus aan/uit
      offsetMode = !offsetMode;
      lcd.clear();
      if (offsetMode) {
        lcd.setCursor(0, 0);
        lcd.print("Offset instellen");
        delay(400);
      } else {
        lcd.setCursor(0, 0);
        lcd.print("Offset actief");
        delay(400);
      }
      lcd.clear();
    } 
    else if (!offsetMode && pressDuration < 3000) {
      // Korte druk &#8594; normale beweging starten
      float target = constrain(setpointMM, softLimitMinMM + offsetMM, softLimitMaxMM + offsetMM);
      long targetSteps = (long)(target / mmPerStep);
      stepper.moveTo(targetSteps);
    } 
    else if (offsetMode && pressDuration < 3000) {
      // Korte druk tijdens offsetmodus &#8594; offset bevestigen
      offsetMM = tempOffsetMM;  // definitief maken

      // Motor niet bewegen, maar nulpunt aanpassen:
      long offsetSteps = (long)(offsetMM / mmPerStep);
      stepper.setCurrentPosition(offsetSteps);  // << POSITIEVE offset

      offsetMode = false;

      lcd.setCursor(0, 0);
      lcd.print("Offset opgeslagen ");
      lcd.setCursor(0, 1);
      lcd.print("Offset: ");
      lcd.print(offsetMM, 1);
      lcd.print("mm ");
      delay(1000);
      lcd.clear();
    }
  }

  buttonPressedLast = buttonPressed;

  // ===== Offset-instelmodus =====
  if (offsetMode) {
    int potValue = analogRead(pinPotentiometer);
    tempOffsetMM = ((float)potValue / 1023.0) * 200.0;  // 0&#8211;200mm offset instelbaar
  } 
  // ===== Normale modus =====
  else {
    int potValue = analogRead(pinPotentiometer);
    // Pas bereik aan op actieve offset
    setpointMM = (softLimitMinMM + offsetMM) + ((float)potValue / 1023.0) * (softLimitMaxMM - softLimitMinMM);
  }

  // Huidige positie uitlezen (met offset)
  currentPosMM = stepper.currentPosition() * mmPerStep;

  // Motor laten lopen
  stepper.run();

  // LCD regelmatig verversen
  if (millis() - lastLCDUpdate > 200) {
    lastLCDUpdate = millis();
    updateLCD();
  }
}

// ===== LCD functie =====
void updateLCD() {
  if (offsetMode) {
    lcd.setCursor(0, 0);
    lcd.print("Offset instellen ");
    lcd.setCursor(0, 1);
    lcd.print(tempOffsetMM, 1);
    lcd.print(" mm     ");
  } else {
    lcd.setCursor(0, 0);
    lcd.print("Pos:");
    lcd.print(currentPosMM, 1);
    lcd.print("mm   ");

    lcd.setCursor(0, 1);
    lcd.print("Set:");
    lcd.print(setpointMM, 1);
    lcd.print(" O:");
    lcd.print(offsetMM, 0);
    lcd.print("   ");
  }
}

// ===== Homing functie =====
bool performHoming() {
  Serial.println("Zoeken naar home...");
  lcd.setCursor(0, 0);
  lcd.print("HOMING bezig...");
  lcd.setCursor(0, 1);
  lcd.print("Wachten...");

  stepper.setMaxSpeed(16000);
  stepper.setAcceleration(1000);
  stepper.moveTo(-totaalStappen);

  unsigned long startHoming = millis();
  bool found = false;

  while (millis() - startHoming < 20000) {
    if (digitalRead(pinHomeSwitch) == LOW) {
      found = true;
      break;
    }
    stepper.run();
  }

  stepper.stop();
  stepper.setMaxSpeed(32000);
  stepper.setAcceleration(1000);

  if (found) {
    stepper.setCurrentPosition(0);
    Serial.println("Home bereikt");
    return true;
  } else {
    Serial.println("Homing mislukt!");
    return false;
  }
}

De volgende hardware heb ik:
- Arduino Nano
- I2C LCD
- Close loop Stepper Motor.
- DRV8825( 1/16 microstepping)

Zou iemand mij de sketch kunnen aanpassen zodat ik een constante snelheid heb, en op de maximale snelheid?

Alvast bedankt!

[Bericht gewijzigd door Sine op (0%)]

Het verschil zit hem (vermoed ik) in de waarde die gebruikt word voor stepper.setMaxSpeed(32000);

Deze functie staat drie keer in de code. Twee keer met de waarde 32000 en 1x met de waarde 16000
Echter zoals ik de code lees zou homing functie de helft langzamer moeten zijn als de andere functies.
Maar speel is met deze waarde. Maak ze overal 32000 of overal 16000 en controleer het effect.
Hoger getal zou meer stappen per seconde moeten zijn. Dus overal 32000 zou de oplossing zijn.

Of 32000 is te hoog en de stepper mist zo stappen.

Uit deze stepper library

Sets the desired constant speed for use with runSpeed().
/// \param[in] speed The desired constant speed in steps per
/// second. Positive is clockwise. Speeds of more than 1000 steps per
/// second are unreliable.

setMaxSpeed hoor je ook maar 1 keer te gebruiken. Die maximale snelheid zal je proefondervindelijk moeten vaststellen. Voor de rest gebruik je setSpeed. Zet je die nu hoger dan de maxSpeed, dan wordt deze laatste gebruikt.

Zet uw code ook een keer tussen code tags. Dat maakt het een stuk leesbaarder. Knop bovenaan met < >. Kies daar C als programmeertaal plaats dan je code net voor de [/.

edit: Een rotatie schakelaar werkt handiger dan een potmeter. Je kan dan per stap bijvoorbeeld 1mm ingeven maar bij snel draaien bijvoorbeeld 10mm.

Edit 2:

if (found) {
    stepper.setCurrentPosition(0);
    Serial.println("Home bereikt");
    return true;
} else {
    Serial.println("Homing mislukt!");
    return false;
}

return true en return false geven hier geen enkele meerwaarde. Dit zou wel zo zijn als dit een aangeroepen functie zou zijn. Maar dat is niet het staat gewoon in je oneindige loop. Je print ook naar de seriële uitgang. Dat brengt ook geen zoden aan de dijk. Je moet dit naar je LCD schrijven.

Ik heb al met deze waarde gespeeld maar dat heeft helaas geen effect

#include <AccelStepper.h>
#include <LiquidCrystal_I2C.h>
// SCL--> A5
// SDA --->A4

// ===== Pin definities =====
const int pinPotentiometer = A0;
const int pinButton = 5;
const int pinHomeSwitch = 4;
const int enablePin = 8;

// DRV8825
const int dirPin = 2;
const int stepPin = 3;

// ===== Motor instellingen =====
const float lengteBereikMM = 400.0;
const long totaalStappen = 640000; // PAS AAN op jouw mechanica
const float mmPerStep = lengteBereikMM / totaalStappen;

// ===== Originele soft limits =====
const float softLimitMinMM = 0.0;
const float softLimitMaxMM = 600.0;

// ===== LCD instellingen =====
LiquidCrystal_I2C lcd(0x27, 16, 2);

// ===== AccelStepper =====
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);

// ===== Variabelen =====
bool homingOk = false;
float setpointMM = 0;
float currentPosMM = 0;
float offsetMM = 0; // actieve offset (blijft gelden)
float tempOffsetMM = 0; // tijdelijk tijdens instellen

bool buttonPressedLast = false;
unsigned long buttonPressStart = 0;
unsigned long lastLCDUpdate = 0;
bool offsetMode = false;

// ===== Functieprototypes =====
bool performHoming();
void updateLCD();

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

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Stepper systeem");
  delay(1000);
  lcd.clear();

  pinMode(pinButton, INPUT_PULLUP);
  pinMode(pinHomeSwitch, INPUT_PULLUP);
  pinMode(enablePin, OUTPUT);
  digitalWrite(enablePin, LOW); // enable driver (active LOW)

  stepper.setMaxSpeed(32000);
  stepper.setAcceleration(1000);

// Homing uitvoeren
  if (performHoming()) {
    homingOk = true;
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Homing OK");
    delay(1000);
    lcd.clear();
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Homing FOUT!");
    lcd.setCursor(0, 1);
    lcd.print("Controleer switch");
  }
}

void loop() {
  if (!homingOk) return;

    bool buttonPressed = (digitalRead(pinButton) == LOW); 

    // Detecteer lange druk (3 sec)
    if (buttonPressed && !buttonPressedLast) {
      buttonPressStart = millis();
    }

    if (!buttonPressed && buttonPressedLast) {
      unsigned long pressDuration = millis() - buttonPressStart;

      if (pressDuration >= 3000) {
      // Lange druk &#8594; Offset modus aan/uit
        offsetMode = !offsetMode;
        lcd.clear();
        if (offsetMode) {
          lcd.setCursor(0, 0);
          lcd.print("Offset instellen");
          delay(400);
        } else {
          lcd.setCursor(0, 0);
          lcd.print("Offset actief");
          delay(400);
        }
        lcd.clear();
      }
      else if (!offsetMode && pressDuration < 3000) {
        // Korte druk &#8594; normale beweging starten
        float target = constrain(setpointMM, softLimitMinMM + offsetMM, softLimitMaxMM + offsetMM);
        long targetSteps = (long)(target / mmPerStep);
        stepper.moveTo(targetSteps);
      }
      else if (offsetMode && pressDuration < 3000) {
        // Korte druk tijdens offsetmodus &#8594; offset bevestigen
        offsetMM = tempOffsetMM; // definitief maken

        // Motor niet bewegen, maar nulpunt aanpassen:
        long offsetSteps = (long)(offsetMM / mmPerStep);
        stepper.setCurrentPosition(offsetSteps); // << POSITIEVE offset

        offsetMode = false;

        lcd.setCursor(0, 0);
        lcd.print("Offset opgeslagen ");
        lcd.setCursor(0, 1);
        lcd.print("Offset: ");
        lcd.print(offsetMM, 1);
        lcd.print("mm ");
        delay(1000);
        lcd.clear();
      }
    } 

    buttonPressedLast = buttonPressed;

    // ===== Offset-instelmodus =====
    if (offsetMode) {
      int potValue = analogRead(pinPotentiometer);
      tempOffsetMM = ((float)potValue / 1023.0) * 200.0; // 0&#8211;200mm offset instelbaar
    }
    // ===== Normale modus =====
    else {
      int potValue = analogRead(pinPotentiometer);
      // Pas bereik aan op actieve offset
      setpointMM = (softLimitMinMM + offsetMM) + ((float)potValue / 1023.0) * (softLimitMaxMM - softLimitMinMM);
    }

    // Huidige positie uitlezen (met offset)
    currentPosMM = stepper.currentPosition() * mmPerStep;

    // Motor laten lopen
    stepper.run();

    // LCD regelmatig verversen
    if (millis() - lastLCDUpdate > 200) {
    lastLCDUpdate = millis();
    updateLCD();
  }
}

// ===== LCD functie =====
void updateLCD() {
  if (offsetMode) {
    lcd.setCursor(0, 0);
    lcd.print("Offset instellen ");
    lcd.setCursor(0, 1);
    lcd.print(tempOffsetMM, 1);
    lcd.print(" mm ");
  } else {
    lcd.setCursor(0, 0);
    lcd.print("Pos:");
    lcd.print(currentPosMM, 1);
    lcd.print("mm ");

    lcd.setCursor(0, 1);
    lcd.print("Set:");
    lcd.print(setpointMM, 1);
    lcd.print(" O:");
    lcd.print(offsetMM, 0);
    lcd.print(" ");
  }
}

// ===== Homing functie =====
bool performHoming() {
  Serial.println("Zoeken naar home...");
  lcd.setCursor(0, 0);
  lcd.print("HOMING bezig...");
  lcd.setCursor(0, 1);
  lcd.print("Wachten...");

  stepper.setMaxSpeed(16000);
  stepper.setAcceleration(1000);
  stepper.moveTo(-totaalStappen);

  unsigned long startHoming = millis();
  bool found = false;

  while (millis() - startHoming < 20000) {
    if (digitalRead(pinHomeSwitch) == LOW) {
      found = true;
      break;
    }
    stepper.run();
  }

  stepper.stop();
  stepper.setMaxSpeed(32000);
  stepper.setAcceleration(1000);

  if (found) {
    stepper.setCurrentPosition(0);
    Serial.println("Home bereikt");
    return true;
  } else {
    Serial.println("Homing mislukt!");
    return false;
  }
}

De volgende hardware heb ik:
- Arduino Nano
- I2C LCD
- Close loop Stepper Motor.
- DRV8825( 1/16 microstepping)

Zet die max speed eens veel lager. Ik denk dat de max snelheid niet aangetikt wordt. (mogelijk door andere beperkingen in je systeem.)

Op zaterdag 1 november 2025 18:29:22 schreef Brian1989:
Ik heb al met deze waarde gespeeld maar dat heeft helaas geen effect

Welke waardes heb je geprobeerd? Overslaan van stappen klinkt idd wel logisch.
Probeer is Max van 2000 en 4000 en 8000 en 12000
Wat doet dit anders met de snelheid?

Je hebt de regels voor de setMaxSpeed en setAcceleration er meerdere keren in staan.
De set commondo's stellen de waarden in en dat word door het hele programma heen onthouden en veranderd pas als je dat zelf verandert.

  pinMode(pinButton, INPUT_PULLUP);
  pinMode(pinHomeSwitch, INPUT_PULLUP);
  pinMode(enablePin, OUTPUT);
  digitalWrite(enablePin, LOW); // enable driver (active LOW)

  stepper.setMaxSpeed(32000);
  stepper.setAcceleration(1000);

Dit is een stukje van de setup, maar verder op zet je de maximale snelheid ook nog een keer op 32000. Als je de max snelheid enkel hier hebt aangepast dan zal het niet werken omdat verderop in het programma dat weer wijzigt.

Verander deze regels in

  stepper.setMaxSpeed(16000);
  stepper.setAcceleration(1000);

Stel als eerste de snelheid en de versnelling in die wel goed werkt. Maar als je de maxsnelheid verandert kan daar best juist een lagere versnelling bij horen. Want een stepper heeft naast de maximum snelheid ook een maximum aan hoe snel die op gang kan komen.

Een stukje van bool performHoming()
Met stukken eruit gehaald die niet belangrijk zijn om uit te leggen.

  
  stepper.setMaxSpeed(16000);  // moet weg staat al in setup
  stepper.setAcceleration(1000); // moet weg staat al in setup
  stepper.moveTo(-totaalStappen);

  stepper.stop();
  stepper.setMaxSpeed(32000);  // Aanpassen naar 16000. 
  stepper.setAcceleration(1000); 


De eerste 2 regels moeten helemaal weg want die heb je in de setup al ingesteld
Maar hier zie je nu ook dat de maximale snelheid voor de 2x keer op 32000 word gezet Wat je eerder ook al in de setup deed. Dat staat er dubbel in in dat is niet handig want dat geeft fouten als je iets wilt veranderen en vergeet dat het dubbel staat. Voorkom altijd dubbele instellingen.

Deze 2de set regels voor setMaxspeed en setacceleration mogen blijven staan, maar wijzig dat nu eerst even in 16000.

Nog beter is om bij de variabel declaration dit te doe
int homingSpeed = 16000;
int homingAcceleration = 1000;
int workSpeed = 32000
int workAcceleration = 750;

Ik noem maar even wat.
verder in het programma gebruik je dan steeds deze variabelen en dan als je iets wilt wijzigen dan hoef je dat enkel maar op 1 plaats te doen waar alles onder elkaar staat.

Ik moet wel zeggen dat dit een heel mooi idee is. Ik worstel ook elke keer met het instellen van mijn afkortzaag. Dus ga ook eens kijken hoe dit op mijn zaag kan maken.
Wat is de maximale lengte die je kan instellen?
En hoe beweeg je de aanslag zelf, met een schroefdraad spindel?

Welke waarden heb je op de stepper driver ingesteld ?

Nu is de code tenminste wat leesbaarder.

Op zaterdag 1 november 2025 20:52:01 schreef benleentje:
[...]
En hoe beweeg je de aanslag zelf, met een schroefdraad spindel?

Heeft een spindel geen afstandsbeperking die je met een tandriem veel minder hebt?

Op zondag 2 november 2025 08:51:09 schreef buckfast_beekeeper:
Heeft een spindel geen afstandsbeperking die je met een tandriem veel minder hebt?

Ja. Maar bij dit soort metingen wordt vaak een tandheugel gebruikt.

Hier een voorbeeld, deze heeft een 24 meter lange tandheugel voor verplaatsen en meting. Hier heb ik de besturing voor gemaakt, jaren geleden.

https://youtu.be/PWZM9GUP3oM?si=8xBSBfV8JQqTnsjl

Ook een oplossing natuurlijk maar dat was alleszins geen hobby projectje met een arduino.

Op zondag 2 november 2025 10:37:48 schreef buckfast_beekeeper:
Ook een oplossing natuurlijk maar dat was alleszins geen hobby projectje met een arduino.

Nee zeker niet, daar zat een industriële computer in. Was een complexe machine.

Jammer dat je hem niet ziet snijden en dat je de contouren ziet die gesneden worden.

Maar deze lengte is dus niet mogelijk met een spindel. En dat is voor een lengte uitlezing voor de TS waarschijnlijk ook niet het geval.

Op zaterdag 1 november 2025 20:25:45 schreef rudig76:
[...]

Welke waardes heb je geprobeerd? Overslaan van stappen klinkt idd wel logisch.
Probeer is Max van 2000 en 4000 en 8000 en 12000
Wat doet dit anders met de snelheid?

Ik ben begonnen met 2000 en 4000, dit had echter ook geen effect. Er worden geen stappen overgeslagen want de afstand die ik in geef, komt overeen met de totaal afgelegde afstand

Op zaterdag 1 november 2025 20:52:01 schreef benleentje:
Je hebt de regels voor de setMaxSpeed en setAcceleration er meerdere keren in staan.
De set commondo's stellen de waarden in en dat word door het hele programma heen onthouden en veranderd pas als je dat zelf verandert.

  pinMode(pinButton, INPUT_PULLUP);
  pinMode(pinHomeSwitch, INPUT_PULLUP);
  pinMode(enablePin, OUTPUT);
  digitalWrite(enablePin, LOW); // enable driver (active LOW)

  stepper.setMaxSpeed(32000);
  stepper.setAcceleration(1000);

Dit is een stukje van de setup, maar verder op zet je de maximale snelheid ook nog een keer op 32000. Als je de max snelheid enkel hier hebt aangepast dan zal het niet werken omdat verderop in het programma dat weer wijzigt.

Verander deze regels in

  stepper.setMaxSpeed(16000);
  stepper.setAcceleration(1000);

Stel als eerste de snelheid en de versnelling in die wel goed werkt. Maar als je de maxsnelheid verandert kan daar best juist een lagere versnelling bij horen. Want een stepper heeft naast de maximum snelheid ook een maximum aan hoe snel die op gang kan komen.

Een stukje van bool performHoming()
Met stukken eruit gehaald die niet belangrijk zijn om uit te leggen.

  
  stepper.setMaxSpeed(16000);  // moet weg staat al in setup
  stepper.setAcceleration(1000); // moet weg staat al in setup
  stepper.moveTo(-totaalStappen);

  stepper.stop();
  stepper.setMaxSpeed(32000);  // Aanpassen naar 16000. 
  stepper.setAcceleration(1000); 


De eerste 2 regels moeten helemaal weg want die heb je in de setup al ingesteld
Maar hier zie je nu ook dat de maximale snelheid voor de 2x keer op 32000 word gezet Wat je eerder ook al in de setup deed. Dat staat er dubbel in in dat is niet handig want dat geeft fouten als je iets wilt veranderen en vergeet dat het dubbel staat. Voorkom altijd dubbele instellingen.

Deze 2de set regels voor setMaxspeed en setacceleration mogen blijven staan, maar wijzig dat nu eerst even in 16000.

Nog beter is om bij de variabel declaration dit te doe
int homingSpeed = 16000;
int homingAcceleration = 1000;
int workSpeed = 32000
int workAcceleration = 750;

Ik noem maar even wat.
verder in het programma gebruik je dan steeds deze variabelen en dan als je iets wilt wijzigen dan hoef je dat enkel maar op 1 plaats te doen waar alles onder elkaar staat.

Ik moet wel zeggen dat dit een heel mooi idee is. Ik worstel ook elke keer met het instellen van mijn afkortzaag. Dus ga ook eens kijken hoe dit op mijn zaag kan maken.
Wat is de maximale lengte die je kan instellen?
En hoe beweeg je de aanslag zelf, met een schroefdraad spindel?

Ik ga hier vanavond even na kijken om deze veranderingen door te voeren. Mijn maximale afstand is nog niet exact bekent. Ik heb er een leadscrew aanzitten van 500mm. Alleen de afstand tot het zaag blad zal ook nog is een Afstand X zijn.

Ik heb voor nu nog alleen een test opstelling liggen, wanneer ik het technisch aan de praat heb, ga ik nog wat dingen op de 3D printer gooien en zal ik een paar foto's plaatsen.

Ik ben er nog niet helemaal uit hoe ik dit ga koppelen aan mijn afkortzaag, ik wil namelijk wel graag dat het makkelijk afneembaar word.

Op zondag 2 november 2025 04:50:09 schreef Lead Acid:
Welke waarden heb je op de stepper driver ingesteld ?

Je doelt op de M0/M1/M2? die staan op 1/16 microsteppen

Op zondag 2 november 2025 08:51:09 schreef buckfast_beekeeper:
Nu is de code tenminste wat leesbaarder.
[...]
Heeft een spindel geen afstandsbeperking die je met een tandriem veel minder hebt?

Zeker maar zoals boven genoemd, moet dit een systeem worden wat ook afneembaar is. Wanneer ik evt later een vaste opstelling en een extra afkortzaag heb zal ik het systeem aanpassen, en is een tandriem/heugel een betere toepassing

Een spindel van 500mm is nog te doen. Die gaat ook niet geweldig doorzakken. Wat op grotere lengtes wel kan gebeuren. Al zeker als alles lange tijd stil staat. Een spindel met een slag in is ook niet direct wat je wil.

Bij een afkortzaag denk ik direct aan de veel gebruikte hout lengtes zoals 2m10, 2m70, ... 6m, ...

Ik heb ben gisteren nog even aan het spelen geweest met de instellingen en dergelijke. Het lijkt nu allemaal naar behoren te werken, ik ben wel naar full steps gegaan ivm de snelheid. de 16Mhz van de Arduino NANO is met 1/16 steps te langzaam.

Wellicht dat ik later nog terug ga naar 1/2 steps maar eerst verder nu met opbouwen.

Op dinsdag 4 november 2025 09:14:27 schreef Brian1989:
..., ik ben wel naar full steps gegaan ivm de snelheid. de 16Mhz van de Arduino NANO is met 1/16 steps te langzaam.

Je kunt toch gewoon de stapfrequentie verhogen, ik heb stappenmotoren lopen op 1/32 stap en die draaien gewoon snel.

In marlin (Firmware voor 3D printers, origineel voor Arduino Uno) willen ze niet verder gaan dan 100000 stappen per seconde op de arduino. Is dat een beperking? Het kan natuurlijk zijn dat de arduino stepper library minder goed is dan marlin.

[Bericht gewijzigd door rew op (13%)]

Bedenk ook dat het massatraagheidsmoment van de spindel belangrijker wordt naarmate het toerental toeneemt . Steppers hebben bijna geen koppel in hoge toeren .

Op dinsdag 4 november 2025 09:27:22 schreef Lambiek:
[...]
Je kunt toch gewoon de stapfrequentie verhogen, ik heb stappenmotoren lopen op 1/32 stap en die draaien gewoon snel.

Ik heb een half jaar geleden ook eens met de stepper library van arduino gespeeld en ik haalde ook maar een lage snelheid . Dat ligt dan gewoon aan de library die ik had en dat arduino uno ook maar een 8 bitter is.

Ik dacht iets van maximaal zo rond de 20kHz dat ik kon halen. Die 32kHz is dan ook te hoog.
IK weet niet welke library TS gebruikt en of het dezelfde is als die ik heb gebruikt. Het was voor mij toen meer om wat steppers te testen op werking en niet op snelheid en ik heb ook niet verder gekeken naar betere software.

Op dinsdag 4 november 2025 11:40:22 schreef Lead Acid:
Steppers hebben bijna geen koppel in hoge toeren .

Dan moet je ramp-up en ramp-down toepassen en de spanning omhoog op de driver.

Op dinsdag 4 november 2025 13:48:12 schreef benleentje:
Ik heb een half jaar geleden ook eens met de stepper library van arduino gespeeld en ik haalde ook maar een lage snelheid . Dat ligt dan gewoon aan de library die ik had en dat arduino uno ook maar een 8 bitter is.

Dat moet niet uitmaken of het een 8 bitter is, zelf gebruik ik ook 8 bitters en dat werkt goed. Maar ik gebruik geen Arduino's.

Ik dacht iets van maximaal zo rond de 20kHz dat ik kon halen. Die 32kHz is dan ook te hoog.

Dat ligt helemaal aan de driver en hoe je dat ding aanstuurt, spanning moet sowieso omhoog als je met hogere toerentallen wil werken.

Het was voor mij toen meer om wat steppers te testen op werking en niet op snelheid en ik heb ook niet verder gekeken naar betere software.

Kun je de software niet aanpassen dan?

Dat moet niet uitmaken of het een 8 bitter is, zelf gebruik ik ook 8 bitters en dat werkt goed. Maar ik gebruik geen Arduino's.

Dat ligt helemaal aan de driver en hoe je dat ding aanstuurt, spanning moet sowieso omhoog als je met hogere toerentallen wil werken.

Wat ik bedoel te zeggen is dat die arduino stepper library niet zo goed is en dat je daar geen hoge aanstuur frequentie mee haalt. En op een 8 bitter al helemaal geen hoge snelheden. Op een andere arduino heb ik niet geprobeerd want de stepper driver die toen gebruikte werkt niet op 3,3V en had geen zin om moeilijk te doen.