void StepperModel::resetStepper() { enableStepper(false); currentStepcount=0; targetStepcount=0; delta=0; }
/*********************************************************** * Digital I/O f?r Motorensteuerung werden als Output * definiert. * @param Pointer auf Motor * @return void ***********************************************************/ void initStepper(stepper_t *aStepper) { pinMode(aStepper->statusPin, OUTPUT); pinMode(aStepper->modePin, OUTPUT); pinMode(aStepper->directionPin, OUTPUT); pinMode(aStepper->clockPin, OUTPUT); digitalWrite(aStepper->clockPin, HIGH); switch (aStepper->stepperStatus){ case DISABLED: disableStepper(aStepper); break; case ENABLED: enableStepper(aStepper); break; case RUN: enableStepper(aStepper); break; } switch (aStepper->stepperMode){ case FULL: fullStep(aStepper); break; case HALF: halfStep(aStepper); break; } switch (aStepper->direction){ case FORWARD: forward(aStepper); break; case BACKWARD: backward(aStepper); break; } }
void StepperModel::resetSteppersForObjectDiameter(double diameter) { // Calculate the motor steps required to move per mm. steps_per_mm = (int)((kStepsPerRevolution/(diameter*M_PI))*kMicroStepping+0.5); if(endStopPin>=0) { #ifdef AUTO_HOMING autoHoming(); #endif enableStepper(false); } else resetStepper(); }
void StepperModel::autoHoming() { enableStepper(true); digitalWrite(dirPin, LOW); while(digitalRead(endStopPin)) { digitalWrite(stepPin, HIGH); digitalWrite(stepPin, LOW); delay(1); } currentStepcount= minStepCount-16; }
void StepperModel::setTargetPosition(double pos) { targetPosition = pos; targetStepcount = getStepsForMM(targetPosition); //Serial.println(targetStepcount); delta = targetStepcount-currentStepcount; direction = true; if (delta != 0) { enableStepper(true); } if (delta < 0) { delta = -delta; direction = false; } }
/* * inEnablePin < 0 => No Endstop */ StepperModel::StepperModel( int inDirPin, int inStepPin, int inEnablePin, int inEndStopPin, int inMs1Pin, int inMs2Pin, int inMs3Pin, int inSleepPin, int inResetPin, bool vms1, bool vms2, bool vms3, long minSC, long maxSC, double in_kStepsPerRevolution, int in_kMicroStepping) { kStepsPerRevolution=in_kStepsPerRevolution; kMicroStepping=in_kMicroStepping; dirPin = inDirPin; stepPin = inStepPin; enablePin = inEnablePin; endStopPin = inEndStopPin; sleepPin = inSleepPin; resetPin = inResetPin; ms1Pin = inMs1Pin; ms2Pin = inMs2Pin; ms3Pin = inMs3Pin; minStepCount=minSC; maxStepCount=maxSC; pinMode(dirPin, OUTPUT); pinMode(stepPin, OUTPUT); pinMode(enablePin, OUTPUT); if((sleepPin >=0)) { pinMode(sleepPin, OUTPUT); digitalWrite(sleepPin, HIGH); } if((resetPin >=0)) { pinMode(resetPin, OUTPUT); digitalWrite(resetPin, HIGH); } if(endStopPin>=0) pinMode(endStopPin, INPUT); if((ms1Pin >=0)) { pinMode(ms1Pin, OUTPUT); digitalWrite(ms1Pin, vms1); } if((ms2Pin >=0)) { pinMode(ms2Pin, OUTPUT); digitalWrite(ms2Pin, vms1); } if((ms3Pin >=0)) { pinMode(ms3Pin, OUTPUT); digitalWrite(ms3Pin, vms1); } digitalWrite(dirPin, LOW); digitalWrite(stepPin, LOW); currentStepcount=0; targetStepcount=0; steps_per_mm = (int)((kStepsPerRevolution/(45.*M_PI))*kMicroStepping+0.5); // default value for a "normal" egg (45 mm diameter) enableStepper(false); }