Heeft iemand een kant en klare stepper besturing sketch ?

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Heeft iemand een kant en klare stepper besturing sketch

Berichtdoor shooter » 08 Jan 2021, 17:42

alkmaar is echt ver weg, maar ik wil als je een goede dag hebt best een keer een dagje komen kijken hoor, liefst in het weekend, want ik moet gewoon werken, en verder kan ik door het overlijden van mijn vrouw dus nu overal naar toe.
paul deelen
shooter@home.nl

Advertisement

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Heeft iemand een kant en klare stepper besturing sketch

Berichtdoor Gompy » 08 Jan 2021, 18:42

Echt heel aardig aangeboden, maar ik laat het hier even bij want voor mijn bloeddruk is wat ik aan het doen ben niet echt bevorderlijk meer.
Ik leg me (voorlopig) neer bij het feit dat die easydriver een onding is om mee te werken tot dat andere het tegendeel bewijzen.

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Heeft iemand een kant en klare stepper besturing sketch

Berichtdoor Gompy » 11 Jan 2021, 23:59

Het lukt wel als ik maar even de tijd er voor neem :)

https://www.youtube.com/watch?v=BZPOaYB ... hannel=WTF

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Heeft iemand een kant en klare stepper besturing sketch

Berichtdoor shooter » 12 Jan 2021, 17:15

Daar ben ik nu echt heel blij mee, je ziet wel met een beetje puzzelen lukt het je wel hoor, en nu dus inbouwen, Maak daar ook een filmpje van ben benieuwd.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 256
Geregistreerd: 05 Apr 2018, 00:44
Woonplaats: ALKMAAR

Re: Heeft iemand een kant en klare stepper besturing sketch

Berichtdoor Gompy » 12 Jan 2021, 17:29

Ik moest even een voorbeeld hebben ivm met step tijden enz, maar na eea gezien te hebben ben ik tot deze sketch gekomen.
Het zal volgens sommige waarschijnlijk niet zo mooi geschreven zijn of de txt zou misschien wat beter moeten, maar ik ben er tevreden mee voor nu.
Met MS1 en MS2 kan ik de snelheid instellen (welke niet echt nauwkeurig hoeft te zijn) en met de potmeter nauwkeuriger (A0 ligt nu aan ground).


Code: Alles selecteren
// set pin numbers:
const byte stepUpPin = 4;              // the number of the step pin UP
const byte stepDownPin = 5;            // the number of the step pin DOWN
const byte enablePin = 6;              // turn EasyDriver off when not turning (saves power but ONLY use when there's no need to hold position)
const byte stepOut = 2;                // steppuls
const byte directionOut = 3;           // dir
const byte ratePin = 0;                // A0 - analog 0 pin on Arduino to control the stepping dealy (RPM)
 
// Variables will change:
byte ledState = LOW;                   // the current state of the output pin
byte lastStepUpButtonState = HIGH;     // the previous reading from the step UP pin
byte lastStepDownButtonState = HIGH;   // the previous reading from the step DOWN pin
byte directionState=HIGH;              // the current direction
byte stepUpState=HIGH;                 // the current state of UP button
byte stepDownState=HIGH;               // the current state of DOWN button
int stepsPassed = 0;                   //how many steps?
int stepsPassedMax = 160;              // trying to calculate steps per revolution 1/8th is default

long lastStepUpDebounceTime = 0;       // the last time the output pin was toggled
long lastStepDownDebounceTime = 0;     // the last time the output pin was toggled
long debounceDelay = 50;               // the debounce time in ms; increase if the output flickers 50
 
long stepDelayBase = 1;                // 1ms base rate. Multiply by the reading from the RATE potentiometer for actual step delay
long stepDelay;         
long lastStepTime = 0;                 // last time the step signal was sent
 
void setup() {
  pinMode(stepUpPin, INPUT_PULLUP);
  pinMode(stepDownPin, INPUT_PULLUP);
  pinMode(ratePin, INPUT);
  pinMode(stepOut, OUTPUT); 
  pinMode(directionOut, OUTPUT);
  pinMode(enablePin, OUTPUT);
}
 
void loop()
{
// read the state of the switch into a local variable:
int readingStepUp = digitalRead(stepUpPin);
int readingStepDown = digitalRead(stepDownPin);
stepDelay = analogRead(ratePin) * stepDelayBase/50;
if(stepDelay < 1) stepDelay = 1;                      // reality check - a pot can read 0 and then it would mean infinite RMP - not possible
if(readingStepUp == LOW || readingStepDown == LOW)    // only read buttons if either one of them is LOW

  if (readingStepUp != lastStepUpButtonState)         // If the switch changed, due to noise or pressing:
{
  // reset the debouncing timer
  lastStepUpDebounceTime = millis();
  lastStepUpButtonState = readingStepUp;
  }
   if ((millis() - lastStepUpDebounceTime) > debounceDelay)
  {
  // whatever the reading is at, it's been there for longer than the debounce delay, so take it as the actual current state:
    lastStepUpButtonState = readingStepUp;
    lastStepUpDebounceTime = millis();
    stepUpState = readingStepUp;
  }
    if (readingStepDown != lastStepDownButtonState)      // If the switch changed, due to noise or pressing:
  {
  lastStepDownDebounceTime = millis();                   // reset the debouncing timer
  lastStepDownButtonState = readingStepDown;
  }
  if ((millis() - lastStepDownDebounceTime) > debounceDelay)
  {
    // whatever the reading is at, it's been there for longer than the debounce delay, so take it as the actual current state:
    lastStepDownButtonState = readingStepDown;
    lastStepDownDebounceTime = millis();   
    stepDownState = readingStepDown;
   }
}
   else
{
 stepUpState = HIGH;
 stepDownState = HIGH; 
}
    if(stepsPassed == 0 ) // end of if block that reads button states
{
   if(stepUpState == LOW || stepDownState == LOW)  // if the previous command has completed, make the direction decision
 {
   if(stepUpState == LOW && stepDownState == LOW)
 {
   directionState = LOW;
  }
     if(stepUpState == LOW && stepDownState == HIGH) // why are you holding both UP and DOWN buttons
    {
      directionState = HIGH;
    }
      if(stepUpState == HIGH && stepDownState == LOW)   // go up
    {
      directionState = LOW;
    }
      stepsPassed = stepsPassedMax+1;  // go down
  }
 }
if(stepsPassed > 0 ) // send step signals now
{
  digitalWrite(enablePin, LOW); // wake up
  digitalWrite(directionOut, directionState);
  if((millis() - lastStepTime) > stepDelay) // delay expired, send another step
{
   digitalWrite(stepOut, HIGH);
   stepsPassed--;
   lastStepTime = millis();
}
else
 {
  digitalWrite(stepOut, LOW); // time for one step not yet expired, hold the STEP signal low
 }
}
else
 {
 digitalWrite(enablePin, HIGH); // go to sleep
 }
}

Vorige

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten