get stepper function

This commit is contained in:
shrkey
2016-10-17 14:16:21 +01:00
parent 1b37bea0a1
commit 60113fcda9
2 changed files with 76 additions and 11 deletions

View File

@@ -29,6 +29,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "DW640.h"
#if (MICROSTEPS == 8)
uint8_t microstepcurve[] = {0, 50, 98, 142, 180, 212, 236, 250, 255};
#elif (MICROSTEPS == 16)
uint8_t microstepcurve[] = {0, 25, 50, 74, 98, 120, 141, 162, 180, 197, 212, 225, 236, 244, 250, 253, 255};
#endif
/** PCA9685 constructor.
* @param address I2C address
* @see DW640_DEFAULT_ADDRESS
@@ -276,6 +282,50 @@ DW_Servo *DW640::getServo(uint8_t servo) {
}
DW_Stepper *DW640::getStepper(uint16_t steps, uint8_t stepper) {
num--;
uint8_t ain1, ain2, bin1, bin2;
// Get the stepper
switch(stepper) {
case 0:
ain1 = 2;
ain2 = 3;
bin1 = 4;
bin2 = 5;
break;
case 1:
ain1 = 6;
ain2 = 7;
bin1 = 8;
bin2 = 9;
break;
case 2:
ain1 = 10;
ain2 = 11;
bin1 = 12;
bin2 = 13;
break;
default:
fprintf(stderr, "Stepper number must be between 1 and 3 inclusive");
}
if (steppers[stepper].stepper == 0) {
// not init'd yet!
steppers[stepper].stepper = stepper;
steppers[stepper].revsteps = steps;
steppers[stepper].MC = this;
steppers[stepper].AIN1pin = ain1;
steppers[stepper].AIN2pin = ain2;
steppers[stepper].BIN1pin = bin1;
steppers[stepper].BIN2pin = bin2;
}
return &steppers[stepper];
}
/* Motors code */
DW_Motor::DW_Motor(void) {

View File

@@ -57,6 +57,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define DW_ININ 0
#define DW_PHASE 1
#define MICROSTEPS 16 // 8 or 16
using namespace DarkWater;
class DW640;
@@ -95,6 +97,27 @@ class DW_Servo {
};
class DW_Stepper {
public:
DW_Stepper(void);
friend class DW640;
void off(void);
void setMotorSpeed(uint16_t speed);
uint8_t onestep(uint8_t dir, uint8_t style);
void step(uint16_t steps, uint8_t dir, uint8_t style = DW_SINGLE);
uint32_t usperstep;
private:
uint8_t AIN1pin, AIN2pin;
uint8_t BIN1pin, BIN2pin;
uint16_t revsteps; // # steps per revolution
uint8_t currentstep;
uint8_t stepper;
DW640 *DWC;
};
class DW640 {
public:
DW640(uint8_t address = DW640_DEFAULT_ADDRESS);
@@ -124,7 +147,8 @@ class DW640 {
void allOff();
DW_Motor *getMotor(uint8_t motor);
DW_Servo *getServo(uint8_t servo);
DW_Servo *getServo(uint8_t servo);
DW_Stepper *getStepper(uint16_t steps, uint8_t stepper);
// void setStepperOff(uint8_t stepper);
// void setStepperSpeed(uint8_t stepper, uint16_t speed);
@@ -140,17 +164,8 @@ class DW640 {
DW_Motor motors[6];
DW_Servo servos[2];
uint16_t revsteps; // # steps per revolution
uint8_t currentstep;
DW_Stepper steppers[3];
};
// class DW_Stepper {
// }
#endif // DW640_H