private void ReferenceDrive(Duration waitTimeBetweenSteps, bool direction) { StepperDriveControl.DriveToReferenceSwitch(waitTimeBetweenSteps, direction, _stopDrivingTokenSource.Token); if (!_stopDrivingTokenSource.IsCancellationRequested) { StepperDriveControl.SetPosition(DriveSetting.ReferencePosition); _currentStatus.OnNext(Status.Ready); } }
private bool DriveSteps(Length distanceToGo) { var isDistanceOk = CheckLimitSwitches(distanceToGo); if (!isDistanceOk) { return(false); } var steps = distanceToGo.ToSteps(DriveSetting); var numberOfSteps = Math.Abs(steps); var maxSpeedinStepsPerSecond = DriveSetting.MaxSpeed.ToStepsPerSecond(DriveSetting); var maxAccelerationInStepsPerSecondSquare = DriveSetting.Acceleration.ToAccelerationPerSecondSquare(DriveSetting); var numberOfStepsForAcceleration = Convert.ToInt32(Math.Pow(maxSpeedinStepsPerSecond, 2) / maxAccelerationInStepsPerSecondSquare / 2); var numberOfStepsForDecceleration = numberOfStepsForAcceleration; var numberOfStepsWithMaxSpeed = 0; if (2 * numberOfStepsForAcceleration < numberOfSteps) { numberOfStepsForDecceleration = numberOfStepsForAcceleration; numberOfStepsWithMaxSpeed = numberOfSteps - numberOfStepsForAcceleration - numberOfStepsForDecceleration; } else { numberOfStepsForAcceleration = numberOfSteps / 2; numberOfStepsForDecceleration = numberOfSteps / 2; } var waitTimeBetweenSteps = CalculateWaitTimeBetweenSteps( numberOfStepsForAcceleration, numberOfStepsWithMaxSpeed, numberOfStepsForDecceleration, maxSpeedinStepsPerSecond, maxAccelerationInStepsPerSecondSquare); var drive = GetDriveDirection(steps); StepperDriveControl.SetOutput(waitTimeBetweenSteps, drive.direction, drive.distanceOfOneStep, _stopDrivingTokenSource.Token); return(true); }
public void SetPosition(Length position) => StepperDriveControl.SetPosition(position);