Skip to main content

Stepper Motor

Digital
output
Medium RAM
2.4.0

#Description

A stepper motor is a very powerful and precise motor as you can define the position precisely to a step. It is often used in CNC machines like 3D printers.

To use a stepper motor, you should connect a the motor to a driver. Compatible drivers are the A4988 or DRV8825 (or similar). Please refer to our documentation website to see how it is connected. The first pin of the component should be connected to the DIR pin and the second pin of the component should be connected to the STEP pin (unless the "Flip Pins" option is set).

This component requires 2 pins.

#Functions

#Connecting the driver

A fritzing schematic diagram on how to connect the stepper motor with a DRV8825 driver.

Here you can see a schematic diagram on how to connect the stepper motor with a DRV8825 driver and an Arduino. (Source Makerguides).

Please refert to Makerguides’s tutorial to see more details on how to connect the DRV8825 driver or the A4988 driver with a stepper and Arduino board.



#JavaScript / Node.js

ClassStepperMotorextends ComponentBase

StepperMotor component for controlling stepper motors via AccelStepper (STEP/DIR driver). Extends ComponentBase directly as a complex output component with custom serial commands.

#Constructor options

OptionTypeRequiredDescription
pinnumber | DigitalPinrequired
dirPinnumber | DigitalPinrequired
stepsPerRevolutionnumberoptional
flipPinsbooleanoptional

#Methods

moveTo(absoluteSteps: number)this

Move to an absolute position in steps.

move(relativeSteps: number)this

Move a relative number of steps from current position.

setSpeed(stepsPerSecond: number)this

Set constant speed in steps per second (bypasses acceleration).

setMaxSpeed(stepsPerSecond: number)this

Set maximum speed in steps per second.

setAcceleration(stepsPerSecondSquared: number)this

Set acceleration in steps per second squared.

setDeceleration(stepsPerSecondSquared: number)this

Set deceleration in steps per second squared. When set to a value > 0, the motor uses this rate when slowing down instead of the acceleration rate.

setCurrentPosition(position: number)this

Reset the current position counter without moving.

stop()this

Decelerate to a stop.

stopNow()this

Stop immediately (no deceleration).

get positionnumber

Get the current position in steps.

get valuenumber | undefinedfrom ComponentBase

Get the current value of the component.

#Example

JavaScript
import { Board, StepperMotor } from "@blokdots/components";

const board = new Board("/dev/ttyACM0");
await board.open();

const stepperMotor = new StepperMotor({ board, pin: "D5", dirPin: "D5" });


#C++ (Arduino)

ClassStepperMotorextends ComponentBase

Default: DRIVER mode (STEP/DIR). Non-blocking: tick() calls stepper.run().

#Required libraries

#Setup

C++
#include "blokdots.h"

StepperMotor myComponent(5, 5);

#Constructor

StepperMotor(stepPin, dirPin, stepsPerRevolution, enablePin, invertDir, invertStep, enableOutputsOnBegin)
ParameterTypeDefault
stepPinuint8_trequired
dirPinuint8_trequired
stepsPerRevolutionint32_t200
enablePinint8_t-1
invertDirboolfalse
invertStepboolfalse
enableOutputsOnBeginbooltrue
StepperMotor(bus, stepPin, dirPin, evtChanged, evtTargetReached, stepsPerRevolution, enablePin, invertDir, invertStep, minEmitIntervalMs, emitPositionStep, enableOutputsOnBegin)
ParameterTypeDefault
busEventBusrequired
stepPinuint8_trequired
dirPinuint8_trequired
evtChangeduint8_trequired
evtTargetReacheduint8_t0
stepsPerRevolutionint32_t200
enablePinint8_t-1
invertDirboolfalse
invertStepboolfalse
minEmitIntervalMsuint16_t20
emitPositionStepint32_t1
enableOutputsOnBeginbooltrue

#Methods

setStepsPerRevolution(steps)StepperMotor&
ParameterTypeDefault
stepsint32_trequired
stepsPerRevolution()int32_t
setMaxSpeed(stepsPerSecond)StepperMotor&
ParameterTypeDefault
stepsPerSecondfloatrequired
setAcceleration(stepsPerSecond2)StepperMotor&
ParameterTypeDefault
stepsPerSecond2floatrequired
setDeceleration(stepsPerSecond2)StepperMotor&
ParameterTypeDefault
stepsPerSecond2floatrequired
setSpeed(stepsPerSecond)StepperMotor&
ParameterTypeDefault
stepsPerSecondfloatrequired
setCurrentPosition(pos)StepperMotor&
ParameterTypeDefault
posint32_trequired
setEnablePin(pin, enableActiveLow)StepperMotor&
ParameterTypeDefault
pinint8_trequired
enableActiveLowbooltrue
enableOutputs()StepperMotor&
disableOutputs()StepperMotor&
moveTo(absoluteSteps)StepperMotor&
ParameterTypeDefault
absoluteStepsint32_trequired
move(relativeSteps)StepperMotor&
ParameterTypeDefault
relativeStepsint32_trequired
stop()StepperMotor&
stopNow()StepperMotor&
moveToRevolutions(revs)StepperMotor&
ParameterTypeDefault
revsfloatrequired
moveRevolutions(revsDelta)StepperMotor&
ParameterTypeDefault
revsDeltafloatrequired
moveToDegrees(degrees)StepperMotor&
ParameterTypeDefault
degreesfloatrequired
moveDegrees(degreesDelta)StepperMotor&
ParameterTypeDefault
degreesDeltafloatrequired
emittedValue()int