Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: StepperDriver.cpp
- Revision:
- 1:9888802e71b9
- Parent:
- 0:12be56dc6182
- Child:
- 2:70f593d34039
--- a/StepperDriver.cpp Thu Dec 01 13:35:45 2016 +0000 +++ b/StepperDriver.cpp Fri Dec 02 08:35:20 2016 +0000 @@ -3,12 +3,24 @@ StepperDriver::StepperDriver(PinName outputPin, PinName directionPin) : output(outputPin), direction(directionPin) { currentPosition = previousPosition = desiredPosition = 0; - maxPosition = 500; - minPosition = 0; + configure(1.8f, 0, 900); homePosition = (maxPosition - minPosition) / 2; + speed = 250; + pulseWidth = 100e-6; } -void StepperDriver::setPosition(uint32_t position) { +void StepperDriver::configure(uint32_t resolution, float minDegrees, float maxDegrees) { + setResolution(resolution); + setDegreesRange(minDegrees, maxDegrees); +} + +void StepperDriver::configure(float resolution, float minDegrees, float maxDegrees) { + setResolution(resolution); + setDegreesRange(minDegrees, maxDegrees); +} + +void StepperDriver::setPosition(float desiredDegrees) { + uint32_t position = desiredDegrees / degreesPerStep + 0.5f; // rounding if (position >= minPosition && position <= maxPosition) { desiredPosition = position; } @@ -17,6 +29,10 @@ } } +float StepperDriver::getPosition() { + return currentPosition * degreesPerStep; +} + void StepperDriver::update() { if (desiredPosition > currentPosition) { direction = 1; @@ -33,7 +49,7 @@ } void StepperDriver::attachTicker() { - ticker.attach(this, &StepperDriver::update, 4e-3); + ticker.attach(this, &StepperDriver::update, 1/speed); isTickerAttached = true; } @@ -44,9 +60,46 @@ void StepperDriver::generateImpulse() { output = 1; - timeout.attach(this, &StepperDriver::turnOutputOff, 100e-6); + timeout.attach(this, &StepperDriver::turnOutputOff, pulseWidth); } void StepperDriver::turnOutputOff() { output = 0; +} + +void StepperDriver::setResolution(uint32_t resolution) { + degreesPerStep = 360.0f / resolution; +} + +void StepperDriver::setResolution(float resolution) { + degreesPerStep = resolution; +} + +void StepperDriver::setDegreesRange(float minDegrees, float maxDegrees) { + minPosition = 0; + maxPosition = minPosition + 1/degreesPerStep * (maxDegrees - minDegrees); +} + +void StepperDriver::setSpeedSPS(float speedSPS) { + speed = speedSPS; +} + +void StepperDriver::setSpeedRPS(float speedRPS) { + speed = speedRPS * 360 / degreesPerStep; +} + +void StepperDriver::setSpeedRPM(float speedRPM) { + speed = speedRPM / 60 * 360 / degreesPerStep; +} + +float StepperDriver::getSpeedSPS() { + return speed; +} + +float StepperDriver::getSpeedRPS() { + return speed * degreesPerStep / 360; +} + +float StepperDriver::getSpeedRPM() { + return speed * degreesPerStep / 360 * 60; } \ No newline at end of file