mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
stepmotor: made some small API changes for consistency and usability
Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
parent
091bd9b381
commit
4dc679af70
@ -51,24 +51,24 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
while (doWork) {
|
while (doWork) {
|
||||||
cout << "1 Revolution forward and back at 60 rpm" << endl;
|
cout << "1 Revolution forward and back at 60 rpm" << endl;
|
||||||
sensor->setSpeed (60);
|
sensor->setSpeed(60);
|
||||||
sensor->stepForward(200);
|
sensor->stepForward(200);
|
||||||
usleep (1000000);
|
usleep(1000000);
|
||||||
sensor->stepBackwards(200);
|
sensor->stepBackward(200);
|
||||||
usleep (1000000);
|
usleep(1000000);
|
||||||
|
|
||||||
cout << "1 Revolution forward and back at 150 rpm" << endl;
|
cout << "1 Revolution forward and back at 150 rpm" << endl;
|
||||||
sensor->setSpeed (150);
|
sensor->setSpeed(150);
|
||||||
sensor->stepForward(200);
|
sensor->stepForward(200);
|
||||||
usleep (1000000);
|
usleep(1000000);
|
||||||
sensor->stepBackwards(200);
|
sensor->stepBackward(200);
|
||||||
usleep (1000000);
|
usleep(1000000);
|
||||||
|
|
||||||
cout << "1 Revolution forward and back at 300 rpm" << endl;
|
cout << "1 Revolution forward and back at 300 rpm" << endl;
|
||||||
sensor->setSpeed (300);
|
sensor->setSpeed(300);
|
||||||
sensor->stepForward (200);
|
sensor->stepForward(200);
|
||||||
usleep (1000000);
|
usleep (1000000);
|
||||||
sensor->stepBackwards (200);
|
sensor->stepBackward(200);
|
||||||
usleep (1000000);
|
usleep (1000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,21 +34,21 @@ public class StepMotorSample {
|
|||||||
sensor.setSpeed(60);
|
sensor.setSpeed(60);
|
||||||
sensor.stepForward(200);
|
sensor.stepForward(200);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
sensor.stepBackwards(200);
|
sensor.stepBackward(200);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
|
||||||
System.out.println("One complete rotation forward and back at 150 rpm.");
|
System.out.println("One complete rotation forward and back at 150 rpm.");
|
||||||
sensor.setSpeed(150);
|
sensor.setSpeed(150);
|
||||||
sensor.stepForward(200);
|
sensor.stepForward(200);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
sensor.stepBackwards(200);
|
sensor.stepBackward(200);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
|
|
||||||
System.out.println("One complete rotation forward and back at 300 rpm.");
|
System.out.println("One complete rotation forward and back at 300 rpm.");
|
||||||
sensor.setSpeed(300);
|
sensor.setSpeed(300);
|
||||||
sensor.stepForward(200);
|
sensor.stepForward(200);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
sensor.stepBackwards(200);
|
sensor.stepBackward(200);
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
}
|
}
|
||||||
// ! [Interesting]
|
// ! [Interesting]
|
||||||
|
@ -48,21 +48,21 @@ console.log("Rotating 1 revolution forward and back at 60 rpm.");
|
|||||||
stepper.setSpeed(60);
|
stepper.setSpeed(60);
|
||||||
stepper.stepForward(200);
|
stepper.stepForward(200);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
stepper.stepBackwards(200);
|
stepper.stepBackward(200);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
|
||||||
console.log("Rotating 1 revolution forward and back at 150 rpm.");
|
console.log("Rotating 1 revolution forward and back at 150 rpm.");
|
||||||
stepper.setSpeed(150);
|
stepper.setSpeed(150);
|
||||||
stepper.stepForward(200);
|
stepper.stepForward(200);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
stepper.stepBackwards(200);
|
stepper.stepBackward(200);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
|
||||||
console.log("Rotating 1 revolution forward and back at 300 rpm.");
|
console.log("Rotating 1 revolution forward and back at 300 rpm.");
|
||||||
stepper.setSpeed(300);
|
stepper.setSpeed(300);
|
||||||
stepper.stepForward(200);
|
stepper.stepForward(200);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
stepper.stepBackwards(200);
|
stepper.stepBackward(200);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
|
|
||||||
stepper.quit();
|
stepper.quit();
|
||||||
|
@ -46,19 +46,19 @@ print "Rotating 1 revolution forward and back at 60 rpm."
|
|||||||
stepper.setSpeed(60)
|
stepper.setSpeed(60)
|
||||||
stepper.stepForward(200)
|
stepper.stepForward(200)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
stepper.stepBackwards(200)
|
stepper.stepBackward(200)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
print "Rotating 1 revolution forward and back at 150 rpm."
|
print "Rotating 1 revolution forward and back at 150 rpm."
|
||||||
stepper.setSpeed(150)
|
stepper.setSpeed(150)
|
||||||
stepper.stepForward(200)
|
stepper.stepForward(200)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
stepper.stepBackwards(200)
|
stepper.stepBackward(200)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
print "Rotating 1 revolution forward and back at 300 rpm."
|
print "Rotating 1 revolution forward and back at 300 rpm."
|
||||||
stepper.setSpeed(300)
|
stepper.setSpeed(300)
|
||||||
stepper.stepForward(200)
|
stepper.stepForward(200)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
stepper.stepBackwards(200)
|
stepper.stepBackward(200)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
@ -34,10 +34,13 @@ using namespace upm;
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
StepMotor::StepMotor (int dirPin, int stePin, int steps, int enPin)
|
StepMotor::StepMotor (int dirPin, int stePin, int steps, int enPin)
|
||||||
: m_dirPinCtx(dirPin), m_stePinCtx(stePin), m_enPinCtx(0), m_steps(steps) {
|
: m_dirPinCtx(dirPin),
|
||||||
|
m_stePinCtx(stePin),
|
||||||
|
m_enPinCtx(0),
|
||||||
|
m_steps(steps) {
|
||||||
m_name = "StepMotor";
|
m_name = "StepMotor";
|
||||||
setSpeed(60);
|
setSpeed(60);
|
||||||
setStep(0);
|
setPosition(0);
|
||||||
|
|
||||||
if (m_dirPinCtx.dir(mraa::DIR_OUT) != mraa::SUCCESS) {
|
if (m_dirPinCtx.dir(mraa::DIR_OUT) != mraa::SUCCESS) {
|
||||||
throw std::runtime_error(string(__FUNCTION__) +
|
throw std::runtime_error(string(__FUNCTION__) +
|
||||||
@ -95,7 +98,7 @@ StepMotor::setSpeed (int speed) {
|
|||||||
mraa::Result
|
mraa::Result
|
||||||
StepMotor::step (int ticks) {
|
StepMotor::step (int ticks) {
|
||||||
if (ticks < 0) {
|
if (ticks < 0) {
|
||||||
return stepBackwards(abs(ticks));
|
return stepBackward(abs(ticks));
|
||||||
} else {
|
} else {
|
||||||
return stepForward(ticks);
|
return stepForward(ticks);
|
||||||
}
|
}
|
||||||
@ -106,37 +109,37 @@ StepMotor::stepForward (int ticks) {
|
|||||||
dirForward();
|
dirForward();
|
||||||
for (int i = 0; i < ticks; i++) {
|
for (int i = 0; i < ticks; i++) {
|
||||||
move();
|
move();
|
||||||
if (++m_position >= m_steps) {
|
m_position++;
|
||||||
m_position = 0;
|
|
||||||
}
|
|
||||||
delayus(m_delay - MINPULSE_US - OVERHEAD_US);
|
delayus(m_delay - MINPULSE_US - OVERHEAD_US);
|
||||||
}
|
}
|
||||||
return mraa::SUCCESS;
|
return mraa::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
mraa::Result
|
mraa::Result
|
||||||
StepMotor::stepBackwards (int ticks) {
|
StepMotor::stepBackward (int ticks) {
|
||||||
dirBackwards();
|
dirBackward();
|
||||||
for (int i = 0; i < ticks; i++) {
|
for (int i = 0; i < ticks; i++) {
|
||||||
move();
|
move();
|
||||||
if (--m_position < 0) {
|
m_position--;
|
||||||
m_position = m_steps - 1;
|
|
||||||
}
|
|
||||||
delayus(m_delay - MINPULSE_US - OVERHEAD_US);
|
delayus(m_delay - MINPULSE_US - OVERHEAD_US);
|
||||||
}
|
}
|
||||||
return mraa::SUCCESS;
|
return mraa::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
StepMotor::setStep (int step) {
|
StepMotor::setPosition (int pos) {
|
||||||
if (step <= m_steps) {
|
m_position = pos;
|
||||||
m_position = step;
|
}
|
||||||
}
|
|
||||||
|
int
|
||||||
|
StepMotor::getPosition () {
|
||||||
|
return m_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
StepMotor::getStep () {
|
StepMotor::getStep () {
|
||||||
return m_position;
|
return m_position < 0 ? m_steps + m_position % m_steps :
|
||||||
|
m_position % m_steps;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -157,7 +160,7 @@ StepMotor::dirForward () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mraa::Result
|
mraa::Result
|
||||||
StepMotor::dirBackwards () {
|
StepMotor::dirBackward () {
|
||||||
mraa::Result error = m_dirPinCtx.write(LOW);
|
mraa::Result error = m_dirPinCtx.write(LOW);
|
||||||
if (error != mraa::SUCCESS) {
|
if (error != mraa::SUCCESS) {
|
||||||
throw std::runtime_error(string(__FUNCTION__) +
|
throw std::runtime_error(string(__FUNCTION__) +
|
||||||
|
@ -69,7 +69,7 @@ namespace upm {
|
|||||||
* and/or microstepping on stepper drivers that support such features.
|
* and/or microstepping on stepper drivers that support such features.
|
||||||
*
|
*
|
||||||
* @image html stepmotor.jpg
|
* @image html stepmotor.jpg
|
||||||
* <br><em>ECS1030 Sensor image provided by SparkFun* under
|
* <br><em>EasyDriver Sensor image provided by SparkFun* under
|
||||||
* <a href=https://creativecommons.org/licenses/by-nc-sa/3.0/>
|
* <a href=https://creativecommons.org/licenses/by-nc-sa/3.0/>
|
||||||
* CC BY-NC-SA-3.0</a>.</em>
|
* CC BY-NC-SA-3.0</a>.</em>
|
||||||
*
|
*
|
||||||
@ -128,20 +128,28 @@ class StepMotor {
|
|||||||
*
|
*
|
||||||
* @param ticks Number of steps the motor moves
|
* @param ticks Number of steps the motor moves
|
||||||
*/
|
*/
|
||||||
mraa::Result stepBackwards (int ticks);
|
mraa::Result stepBackward (int ticks);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current step. Useful if the motor is not at 0 when the
|
* Sets the current position. Useful if the motor is not at 0 when the
|
||||||
* driver is initialized.
|
* driver is initialized.
|
||||||
*
|
*
|
||||||
* @param step Current shaft position
|
* @param step Current position
|
||||||
*/
|
*/
|
||||||
void setStep (int step);
|
void setPosition (int pos);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current step.
|
* Gets the current position. This is cumulative and the result of all
|
||||||
|
* the step commands sent to the motor.
|
||||||
*
|
*
|
||||||
* @return Current shaft position.
|
* @return Stepper's position.
|
||||||
|
*/
|
||||||
|
int getPosition ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current step. This is relative to one revolution.
|
||||||
|
*
|
||||||
|
* @return Current step, ranges from 0 to number of steps per revolution.
|
||||||
*/
|
*/
|
||||||
int getStep ();
|
int getStep ();
|
||||||
|
|
||||||
@ -157,7 +165,7 @@ class StepMotor {
|
|||||||
int m_position;
|
int m_position;
|
||||||
|
|
||||||
mraa::Result dirForward ();
|
mraa::Result dirForward ();
|
||||||
mraa::Result dirBackwards ();
|
mraa::Result dirBackward ();
|
||||||
void move ();
|
void move ();
|
||||||
void delayus (int us);
|
void delayus (int us);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user