Encoder update for TMC
parent
0c27bac9f9
commit
7dc7f346fd
221
src/Movement.cpp
221
src/Movement.cpp
|
@ -241,85 +241,107 @@ void Movement::loadSettings()
|
|||
|
||||
motorCurrentZ = ParameterList::getInstance()->getValue(MOVEMENT_MOTOR_CURRENT_Z);
|
||||
stallSensitivityZ = ParameterList::getInstance()->getValue(MOVEMENT_STALL_SENSITIVITY_Z);
|
||||
microStepsX = ParameterList::getInstance()->getValue(MOVEMENT_MICROSTEPS_Z);
|
||||
microStepsZ = ParameterList::getInstance()->getValue(MOVEMENT_MICROSTEPS_Z);
|
||||
|
||||
stallSensitivityX = 0;
|
||||
stallSensitivityY = 0;
|
||||
stallSensitivityZ = 0;
|
||||
/**/
|
||||
|
||||
//Serial.print("=X=>");
|
||||
//Serial.print(" ");
|
||||
//Serial.print(microStepsX);
|
||||
//Serial.print(" ");
|
||||
//Serial.print(motorCurrentX);
|
||||
//Serial.print(" ");
|
||||
//Serial.print(stallSensitivityX);
|
||||
//Serial.println(" ");
|
||||
|
||||
//Serial.print("=Y=>");
|
||||
//Serial.print(" ");
|
||||
//Serial.print(microStepsY);
|
||||
//Serial.print(" ");
|
||||
//Serial.print(motorCurrentY);
|
||||
//Serial.print(" ");
|
||||
//Serial.print(stallSensitivityY);
|
||||
//Serial.println(" ");
|
||||
|
||||
//Serial.print("=Z=>");
|
||||
//Serial.print(" ");
|
||||
//Serial.print(microStepsZ);
|
||||
//Serial.print(" ");
|
||||
//Serial.print(motorCurrentZ);
|
||||
//Serial.print(" ");
|
||||
//Serial.print(stallSensitivityZ);
|
||||
//Serial.println(" ");
|
||||
|
||||
|
||||
if (microStepsX <= 0) { microStepsX = 1; }
|
||||
if (microStepsY <= 0) { microStepsY = 1; }
|
||||
if (microStepsZ <= 0) { microStepsZ = 1; }
|
||||
|
||||
|
||||
axisX.loadSettingsTMC2130(motorCurrentX, stallSensitivityX, microStepsX);
|
||||
axisY.loadSettingsTMC2130(motorCurrentX, stallSensitivityX, microStepsX);
|
||||
axisZ.loadSettingsTMC2130(motorCurrentX, stallSensitivityX, microStepsX);
|
||||
axisY.loadSettingsTMC2130(motorCurrentY, stallSensitivityY, microStepsY);
|
||||
axisZ.loadSettingsTMC2130(motorCurrentZ, stallSensitivityZ, microStepsZ);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int missedCount = 0;
|
||||
|
||||
void Movement::test()
|
||||
{
|
||||
axisX.enableMotor();
|
||||
|
||||
//axisY.test();
|
||||
|
||||
//axisX.enableMotor();
|
||||
//axisX.setMotorStep();
|
||||
//delayMicroseconds(10);
|
||||
//axisX.setMotorStep();
|
||||
//delayMicroseconds(10);
|
||||
//delayMicroseconds(500);
|
||||
//TMC2130X.read_STAT();
|
||||
//delayMicroseconds(500);
|
||||
//if (axisX.stallDetected()) { testA++; }
|
||||
//testB++;
|
||||
|
||||
bool stallGuard = false;
|
||||
bool standStill = false;
|
||||
uint8_t status_x = 0;
|
||||
|
||||
//digitalWrite(X_ENABLE_PIN, LOW);
|
||||
axisX.enableMotor();
|
||||
//digitalWrite(X_STEP_PIN, HIGH);
|
||||
//delayMicroseconds(10);
|
||||
axisX.setMotorStep();
|
||||
|
||||
delayMicroseconds(500);
|
||||
|
||||
//digitalWrite(X_STEP_PIN, LOW);
|
||||
//delayMicroseconds(10);
|
||||
axisX.resetMotorStep();
|
||||
|
||||
//axisX.setMotorStepWriteTMC2130();
|
||||
//axisX.test();
|
||||
TMC2130X.read_STAT();
|
||||
|
||||
//Serial.print("R99");
|
||||
//Serial.print(" mot x = ");
|
||||
//Serial.print(axisX.currentPosition());
|
||||
//Serial.print(" enc x = ");
|
||||
//Serial.print(encoderX.currentPosition());
|
||||
//Serial.print("\r\n");
|
||||
status_x = TMC2130X.getStatus();
|
||||
stallGuard = status_x & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
standStill = status_x & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
if (stallGuard || standStill) {
|
||||
testA++;
|
||||
}
|
||||
|
||||
//Serial.print("R99");
|
||||
//Serial.print(" mot y = ");
|
||||
//Serial.print(axisY.currentPosition());
|
||||
//Serial.print(" enc y = ");
|
||||
//Serial.print(encoderY.currentPosition());
|
||||
//Serial.print("\r\n");
|
||||
//if (axisX.stallDetected()) {
|
||||
// testA++;
|
||||
//}
|
||||
|
||||
|
||||
testB++;
|
||||
|
||||
delayMicroseconds(500);
|
||||
|
||||
//Serial.print("R99");
|
||||
//Serial.print(" mot z = ");
|
||||
//Serial.print(axisZ.currentPosition());
|
||||
//Serial.print(" enc z = ");
|
||||
//Serial.print(encoderZ.currentPosition());
|
||||
//Serial.print("\r\n");
|
||||
|
||||
// read changes in encoder
|
||||
//encoderX.readEncoder();
|
||||
//encoderY.readEncoder();
|
||||
//encoderZ.readEncoder();
|
||||
//reportPosition();
|
||||
|
||||
//bool test = axisX.endStopMin();
|
||||
//Serial.print("R99");
|
||||
//Serial.print(" test = ");
|
||||
//Serial.print(test);
|
||||
//Serial.print("\r\n");
|
||||
}
|
||||
|
||||
void Movement::test2()
|
||||
{
|
||||
|
||||
axisX.setMotorStep();
|
||||
//CurrentState::getInstance()->printPosition();
|
||||
//encoderX.test();
|
||||
//encoderY.test();
|
||||
//encoderZ.test();
|
||||
Serial.print("*");
|
||||
Serial.print(testA);
|
||||
Serial.print("/");
|
||||
Serial.print(testB);
|
||||
Serial.println();
|
||||
|
||||
//testA = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -503,25 +525,22 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS
|
|||
#endif
|
||||
|
||||
/**/
|
||||
if (loopCounts % 1000 == 0)
|
||||
{
|
||||
//if (loopCounts % 1000 == 0)
|
||||
//{
|
||||
// Serial.print("R99");
|
||||
// Serial.print(" missed step ");
|
||||
// Serial.print(motorConsMissedSteps[1]);
|
||||
// Serial.print(" axis pos ");
|
||||
// Serial.print(axisY.currentPosition());
|
||||
// Serial.print("\r\n");
|
||||
|
||||
//Serial.print("R99");
|
||||
//Serial.print(" missed step ");
|
||||
//Serial.print(motorConsMissedSteps[1]);
|
||||
//Serial.print(" axis pos ");
|
||||
//Serial.print(axisY.currentPosition());
|
||||
//Serial.print("\r\n");
|
||||
// Serial.print("X - ");
|
||||
// axisX.test();
|
||||
|
||||
//Serial.print("X - ");
|
||||
//axisX.test();
|
||||
|
||||
//Serial.print("Y - ");
|
||||
//axisY.test();
|
||||
|
||||
}
|
||||
loopCounts++;
|
||||
|
||||
// Serial.print("Y - ");
|
||||
// axisY.test();
|
||||
//}
|
||||
//loopCounts++;
|
||||
|
||||
checkAxisSubStatus(&axisX, &axisSubStep[0]);
|
||||
checkAxisSubStatus(&axisY, &axisSubStep[1]);
|
||||
|
@ -1391,22 +1410,56 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder,
|
|||
// Serial.print(*lastPosition);
|
||||
// */
|
||||
//
|
||||
// if (*encoderEnabled) {
|
||||
// if (axis->stallDetected()) {
|
||||
// // In case of stall detection, count this as a missed step
|
||||
// (*missedSteps)++;
|
||||
// axis->setCurrentPosition(*lastPosition);
|
||||
// }
|
||||
// else {
|
||||
// // Decrease amount of missed steps if there are no missed step
|
||||
// if (*missedSteps > 0)
|
||||
// {
|
||||
// (*missedSteps) -= (*encoderStepDecay);
|
||||
// }
|
||||
// *lastPosition = axis->currentPosition();
|
||||
// encoder->setPosition(axis->currentPosition());
|
||||
// }
|
||||
// }
|
||||
|
||||
//if (axis->stallDetected()) {
|
||||
// Serial.print("X");
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// Serial.print(".");
|
||||
//}
|
||||
|
||||
/**/
|
||||
bool stallGuard = false;
|
||||
bool standStill = false;
|
||||
uint8_t status = 0;
|
||||
|
||||
if (*encoderEnabled) {
|
||||
|
||||
//TMC2130X.read_STAT();
|
||||
|
||||
status = axis->getStatus();
|
||||
|
||||
stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
standStill = status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
|
||||
if (stallGuard || standStill) {
|
||||
//Serial.print(".");
|
||||
// In case of stall detection, count this as a missed step
|
||||
(*missedSteps)++;
|
||||
axis->setCurrentPosition(*lastPosition);
|
||||
|
||||
|
||||
//if (int(*missedSteps) % 10 == 0) {
|
||||
// Serial.println();
|
||||
// Serial.print(*missedSteps);
|
||||
// Serial.print("/");
|
||||
// Serial.print(axis->currentPosition());
|
||||
// Serial.println();
|
||||
//}
|
||||
|
||||
}
|
||||
else {
|
||||
// Decrease amount of missed steps if there are no missed step
|
||||
if (*missedSteps > 0)
|
||||
{
|
||||
(*missedSteps) -= (*encoderStepDecay);
|
||||
}
|
||||
*lastPosition = axis->currentPosition();
|
||||
encoder->setPosition(axis->currentPosition());
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// //Serial.print(" new last pos ");
|
||||
// //Serial.print(*lastPosition);
|
||||
|
|
|
@ -145,6 +145,11 @@ private:
|
|||
int axisServicedNext = 0;
|
||||
bool motorMotorsEnabled = false;
|
||||
|
||||
|
||||
int testA = 0;
|
||||
int testB = 0;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif /* MOVEMENT_H_ */
|
||||
|
|
|
@ -97,10 +97,18 @@ void MovementAxis::initTMC2130()
|
|||
TMC2130A = &TMC2130Z;
|
||||
}
|
||||
|
||||
setMotorStepWrite = &MovementAxis::setMotorStepWriteTMC2130;
|
||||
setMotorStepWrite2 = &MovementAxis::setMotorStepWriteTMC2130_2;
|
||||
resetMotorStepWrite = &MovementAxis::resetMotorStepWriteTMC2130;
|
||||
resetMotorStepWrite2 = &MovementAxis::resetMotorStepWriteTMC2130_2;
|
||||
setMotorStepWrite = &MovementAxis::setMotorStepWriteDefault;
|
||||
setMotorStepWrite2 = &MovementAxis::setMotorStepWriteDefault2;
|
||||
resetMotorStepWrite = &MovementAxis::resetMotorStepWriteDefault;
|
||||
resetMotorStepWrite2 = &MovementAxis::resetMotorStepWriteDefault2;
|
||||
|
||||
/**/ // Not using the edge driving now, only standard pulse driving
|
||||
// as edge driving causes issues with stall detection routines
|
||||
|
||||
//setMotorStepWrite = &MovementAxis::setMotorStepWriteTMC2130;
|
||||
//setMotorStepWrite2 = &MovementAxis::setMotorStepWriteTMC2130_2;
|
||||
//resetMotorStepWrite = &MovementAxis::resetMotorStepWriteTMC2130;
|
||||
//resetMotorStepWrite2 = &MovementAxis::resetMotorStepWriteTMC2130_2;
|
||||
|
||||
TMC2130A->init();
|
||||
|
||||
|
@ -120,14 +128,9 @@ void MovementAxis::loadSettingsTMC2130(int motorCurrent, int stallSensitivity,
|
|||
}
|
||||
}
|
||||
|
||||
bool MovementAxis::stallDetected() {
|
||||
/**/
|
||||
bool stallGuard = TMC2130A->getStatus() & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
bool standStill = TMC2130A->getStatus() & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
|
||||
//return (TMC2130A->isStandstill() || TMC2130A->isStallguard());
|
||||
//return stallGuard || standStill;
|
||||
return false;
|
||||
uint8_t MovementAxis::getStatus() {
|
||||
return TMC2130X.read_STAT();
|
||||
//return TMC2130A->getStatus();
|
||||
}
|
||||
|
||||
uint16_t MovementAxis::getLoad() {
|
||||
|
|
|
@ -95,8 +95,8 @@ public:
|
|||
#if defined(FARMDUINO_EXP_V20)
|
||||
void initTMC2130();
|
||||
void loadSettingsTMC2130(int motorCurrent, int stallSensitivity, int microSteps);
|
||||
bool stallDetected();
|
||||
uint16_t getLoad();
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20)
|
||||
|
@ -105,6 +105,8 @@ public:
|
|||
void resetMotorStepWriteTMC2130();
|
||||
void resetMotorStepWriteTMC2130_2();
|
||||
|
||||
uint8_t getStatus();
|
||||
|
||||
unsigned int getLostSteps();
|
||||
|
||||
bool tmcStep = true;
|
||||
|
|
|
@ -23,7 +23,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current,
|
|||
//Serial.print(sensitivity);
|
||||
//Serial.println(" ");
|
||||
|
||||
/**/
|
||||
/*
|
||||
tb->init();
|
||||
|
||||
uint8_t data = 0;
|
||||
|
@ -107,6 +107,69 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current,
|
|||
tb->set_CHOPCONF(FB_TMC_COOLCONF_SEMAX, 0b01);
|
||||
tb->set_CHOPCONF(FB_TMC_COOLCONF_SGT, sensitivity);
|
||||
|
||||
*/
|
||||
|
||||
uint32_t data = 0;
|
||||
uint32_t value = 0;
|
||||
|
||||
tb->init();
|
||||
|
||||
switch (microsteps) {
|
||||
case 1:
|
||||
data = 8;
|
||||
break;
|
||||
case 2:
|
||||
data = 7;
|
||||
break;
|
||||
case 4:
|
||||
data = 6;
|
||||
break;
|
||||
case 8:
|
||||
data = 5;
|
||||
break;
|
||||
case 16:
|
||||
data = 4;
|
||||
break;
|
||||
case 32:
|
||||
data = 3;
|
||||
break;
|
||||
case 64:
|
||||
data = 2;
|
||||
break;
|
||||
case 128:
|
||||
data = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(data) << FB_TMC_CHOPCONF_MRES, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_MRES] << FB_TMC_CHOPCONF_MRES);
|
||||
|
||||
uint16_t mA = current;
|
||||
float multiplier = 0.5;
|
||||
float RS = 0.11;
|
||||
uint8_t CS = 32.0*1.41421*mA / 1000.0*(RS + 0.02) / 0.325 - 1;
|
||||
if (CS < 16) {
|
||||
CS = 32.0*1.41421*mA / 1000.0*(RS + 0.02) / 0.180 - 1;
|
||||
}
|
||||
data = ((uint32_t(CS)&FB_TMC_IHOLD_MASK) << FB_TMC_IHOLD);
|
||||
data |= ((uint32_t(CS)&FB_TMC_IRUN_MASK) << FB_TMC_IRUN);
|
||||
data |= ((uint32_t(16)&FB_TMC_IHOLDDELAY_MASK) << FB_TMC_IHOLDDELAY);
|
||||
tb->write_REG(FB_TMC_REG_IHOLD_IRUN, data);
|
||||
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(sensitivity) << FB_TMC_COOLCONF_SGT, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SGT] << FB_TMC_COOLCONF_SGT);
|
||||
|
||||
tb->set_GCONF(FB_TMC_GCONF_I_SCALE_ANALOG, 1);
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(3) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF);
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_TBL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TBL] << FB_TMC_CHOPCONF_TBL);
|
||||
tb->set_GCONF(FB_TMC_GCONF_DIAG1_STALL, 1);
|
||||
tb->set_GCONF(FB_TMC_GCONF_DIAG1_ONSTATE, 1);
|
||||
tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK);
|
||||
tb->write_REG(FB_TMC_REG_THIGH, 0 & FB_TMC_THIGH_MASK);
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(5) << FB_TMC_COOLCONF_SEMIN, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SEMIN] << FB_TMC_COOLCONF_SEMIN);
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(2) << FB_TMC_COOLCONF_SEMAX, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SEMAX] << FB_TMC_COOLCONF_SEMAX);
|
||||
tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_COOLCONF_SEDN, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SEDN] << FB_TMC_COOLCONF_SEDN);
|
||||
|
||||
delay(100);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -19,14 +19,15 @@ void TMC2130_Basics::init() {
|
|||
void TMC2130_Basics::init_SPI() {
|
||||
SPI.setDataMode(FB_TMC_SPI_DATA_MODE);
|
||||
SPI.setBitOrder(FB_TMC_SPI_BIT_ORDER);
|
||||
SPI.setClockDivider(FB_TMC_SPI_CLOCK_DIVIDER);
|
||||
//SPI.setClockDivider(FB_TMC_SPI_CLOCK_DIVIDER);/**
|
||||
SPI.setClockDivider(SPI_CLOCK_DIV4);
|
||||
SPI.begin();
|
||||
}
|
||||
|
||||
// read status
|
||||
uint8_t TMC2130_Basics::read_STAT()
|
||||
{
|
||||
init_SPI();
|
||||
//init_SPI();
|
||||
digitalWrite(_csPin, LOW);
|
||||
|
||||
// read address
|
||||
|
@ -110,6 +111,20 @@ uint8_t TMC2130_Basics::alter_REG(uint8_t address, uint32_t data, uint32_t mask)
|
|||
return _status;
|
||||
}
|
||||
|
||||
|
||||
// check the stallguard status
|
||||
boolean TMC2130_Basics::isStallguard()
|
||||
{
|
||||
return _status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
}
|
||||
|
||||
// check the standstill status
|
||||
boolean TMC2130_Basics::isStandstill()
|
||||
{
|
||||
return _status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
}
|
||||
|
||||
|
||||
// set single bits in the GCONF register
|
||||
uint8_t TMC2130_Basics::set_GCONF(uint8_t position, uint8_t value)
|
||||
{
|
||||
|
@ -129,4 +144,5 @@ uint8_t TMC2130_Basics::set_CHOPCONF(uint8_t position, uint8_t value)
|
|||
uint8_t TMC2130_Basics::getStatus()
|
||||
{
|
||||
return _status;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -29,8 +29,9 @@ public:
|
|||
|
||||
//boolean isReset();
|
||||
//boolean isError();
|
||||
//boolean isStallguard();
|
||||
//boolean isStandstill();
|
||||
boolean isStallguard();
|
||||
boolean isStandstill();
|
||||
|
||||
//String debug();
|
||||
|
||||
private:
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
// Do not remove the include below
|
||||
#include "farmbot_arduino_controller.h"
|
||||
|
||||
#if !defined(FARMDUINO_EXP_V20)
|
||||
/**/
|
||||
//#if !defined(FARMDUINO_EXP_V20)
|
||||
#include "TimerOne.h"
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
bool stepperInit = false;
|
||||
bool stepperFlip = false;
|
||||
|
@ -51,7 +52,7 @@ unsigned long interruptDurationMax = 0;
|
|||
bool interruptBusy = false;
|
||||
int interruptSecondTimer = 0;
|
||||
|
||||
#if !defined(FARMDUINO_EXP_V20)
|
||||
//#if !defined(FARMDUINO_EXP_V20)
|
||||
void interrupt(void)
|
||||
{
|
||||
if (!debugInterrupt)
|
||||
|
@ -68,11 +69,11 @@ void interrupt(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
/**/ // unsigned long intrCounter = 0;
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20)
|
||||
#if defined(FARMDUINO_EXP_V20xxx)
|
||||
ISR(TIMER2_OVF_vect) {
|
||||
|
||||
if (interruptBusy == false)
|
||||
|
@ -121,6 +122,7 @@ void periodicChecksAndReport()
|
|||
if ((currentTime - lastAction) > reportingPeriod)
|
||||
{
|
||||
// After an idle time, send the idle message
|
||||
//Movement::getInstance()->test2();
|
||||
|
||||
if (CurrentState::getInstance()->isEmergencyStop())
|
||||
{
|
||||
|
@ -281,11 +283,10 @@ void checkParamsChanged()
|
|||
CurrentState::getInstance()->printQAndNewLine();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20)
|
||||
loadTMC2130paraeters();
|
||||
Movement::getInstance()->loadSettingsTMC2130();
|
||||
#endif
|
||||
*/
|
||||
|
||||
Movement::getInstance()->loadSettings();
|
||||
PinGuard::getInstance()->loadConfig();
|
||||
|
@ -584,18 +585,18 @@ void startInterrupt()
|
|||
// Interrupt management code library written by Paul Stoffregen
|
||||
// The default time 100 micro seconds
|
||||
|
||||
#if !defined(FARMDUINO_EXP_V20)
|
||||
//#if !defined(FARMDUINO_EXP_V20)
|
||||
Timer1.attachInterrupt(interrupt);
|
||||
Timer1.initialize(MOVEMENT_INTERRUPT_SPEED);
|
||||
Timer1.start();
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#if defined(FARMDUINO_EXP_V20)
|
||||
Serial.println("set timer");
|
||||
TIMSK2 = (TIMSK2 & B11111110) | 0x01; // Enable timer overflow
|
||||
TCCR2B = (TCCR2B & B11111000) | 0x01; // Set divider to 1
|
||||
OCR2A = 4; // Set overflow to 4 for total of 64 µs
|
||||
#endif
|
||||
//#if defined(FARMDUINO_EXP_V20)
|
||||
// Serial.println("set timer");
|
||||
// TIMSK2 = (TIMSK2 & B11111110) | 0x01; // Enable timer overflow
|
||||
// TCCR2B = (TCCR2B & B11111000) | 0x01; // Set divider to 1
|
||||
// OCR2A = 4; // Set overflow to 4 for total of 64 ľs
|
||||
//#endif
|
||||
}
|
||||
|
||||
void homeOnBoot()
|
||||
|
@ -802,15 +803,28 @@ void setupTestForDebug()
|
|||
//loadTMC2130ParametersMotor(&controllerTMC2130_Z, 8, 500, 0); delay(100);
|
||||
//loadTMC2130ParametersMotor(&controllerTMC2130_E, 8, 500, 0); delay(100);
|
||||
|
||||
/*
|
||||
Serial.println("Init");
|
||||
|
||||
loadTMC2130ParametersMotor(&TMC2130X, 8, 200, 0);
|
||||
loadTMC2130ParametersMotor(&TMC2130Y, 8, 200, 0);
|
||||
loadTMC2130ParametersMotor(&TMC2130Z, 8, 200, 0);
|
||||
loadTMC2130ParametersMotor(&TMC2130E, 8, 200, 0);
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool left = false;
|
||||
int missedX = 0;
|
||||
int missedY = 0;
|
||||
int missedZ = 0;
|
||||
int missedE = 0;
|
||||
|
||||
void runTestForDebug()
|
||||
{
|
||||
|
||||
/*
|
||||
currentTime = millis();
|
||||
if (currentTime < lastAction)
|
||||
{
|
||||
|
@ -824,27 +838,40 @@ void runTestForDebug()
|
|||
if ((currentTime - lastAction) > reportingPeriod)
|
||||
{
|
||||
blinkLed();
|
||||
Serial.print(".");
|
||||
//Serial.print(".");
|
||||
lastAction = currentTime;
|
||||
|
||||
Serial.print(">");
|
||||
Serial.print(" X = ");
|
||||
Serial.print(missedX);
|
||||
Serial.print(" Y = ");
|
||||
Serial.print(missedY);
|
||||
Serial.print(" Z = ");
|
||||
Serial.print(missedZ);
|
||||
Serial.print(" E = ");
|
||||
Serial.print(missedE);
|
||||
Serial.print(CRLF);
|
||||
|
||||
if (left) {
|
||||
left = false;
|
||||
digitalWrite(X_DIR_PIN, LOW);
|
||||
digitalWrite(Y_DIR_PIN, LOW);
|
||||
digitalWrite(Z_DIR_PIN, LOW);
|
||||
digitalWrite(E_DIR_PIN, LOW);
|
||||
//digitalWrite(X_DIR_PIN, LOW);
|
||||
//digitalWrite(Y_DIR_PIN, LOW);
|
||||
//digitalWrite(Z_DIR_PIN, LOW);
|
||||
//digitalWrite(E_DIR_PIN, LOW);
|
||||
}
|
||||
else {
|
||||
left = true;
|
||||
digitalWrite(X_DIR_PIN, HIGH);
|
||||
digitalWrite(Y_DIR_PIN, HIGH);
|
||||
digitalWrite(Z_DIR_PIN, HIGH);
|
||||
digitalWrite(E_DIR_PIN, HIGH);
|
||||
//digitalWrite(X_DIR_PIN, HIGH);
|
||||
//digitalWrite(Y_DIR_PIN, HIGH);
|
||||
//digitalWrite(Z_DIR_PIN, HIGH);
|
||||
//digitalWrite(E_DIR_PIN, HIGH);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// make a step
|
||||
digitalWrite(X_STEP_PIN, HIGH);
|
||||
digitalWrite(Y_STEP_PIN, HIGH);
|
||||
|
@ -858,38 +885,44 @@ void runTestForDebug()
|
|||
digitalWrite(E_STEP_PIN, LOW);
|
||||
delayMicroseconds(100);
|
||||
|
||||
/*
|
||||
bool stallGuard = false;
|
||||
bool standStill = false;
|
||||
uint8_t status = 0;
|
||||
*/
|
||||
|
||||
Movement::getInstance()->test();
|
||||
|
||||
/*
|
||||
TMC2130X.read_STAT();
|
||||
if (TMC2130X.isStandstill() || TMC2130X.isStallguard()) {
|
||||
Serial.print("X");
|
||||
}
|
||||
|
||||
TMC2130Y.read_STAT();
|
||||
if (TMC2130Y.isStandstill() || TMC2130Y.isStallguard()) {
|
||||
Serial.print("Y");
|
||||
}
|
||||
|
||||
TMC2130Z.read_STAT();
|
||||
if (TMC2130Z.isStandstill() || TMC2130Z.isStallguard()) {
|
||||
Serial.print("Z");
|
||||
}
|
||||
|
||||
TMC2130E.read_STAT();
|
||||
if (TMC2130E.isStandstill() || TMC2130E.isStallguard()) {
|
||||
Serial.print("E");
|
||||
}
|
||||
*/
|
||||
|
||||
status = TMC2130X.getStatus();
|
||||
stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
standStill = status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
if (stallGuard || standStill) { missedX++;}
|
||||
|
||||
/*
|
||||
digitalWrite(X_STEP_PIN, HIGH);
|
||||
digitalWrite(E_STEP_PIN, HIGH);
|
||||
delayMicroseconds(100);
|
||||
status = TMC2130Y.getStatus();
|
||||
stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
standStill = status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
if (stallGuard || standStill) { missedY++; }
|
||||
|
||||
digitalWrite(X_STEP_PIN, LOW);
|
||||
digitalWrite(E_STEP_PIN, LOW);
|
||||
delayMicroseconds(100);
|
||||
*/
|
||||
status = TMC2130Z.getStatus();
|
||||
stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
standStill = status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
if (stallGuard || standStill) { missedZ++; }
|
||||
|
||||
status = TMC2130E.getStatus();
|
||||
stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false;
|
||||
standStill = status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false;
|
||||
if (stallGuard || standStill) { missedE++; }
|
||||
*/
|
||||
|
||||
//if (TMC2130X.isStandstill() || TMC2130X.isStallguard()) {missedX++;}
|
||||
//if (TMC2130Y.isStandstill() || TMC2130Y.isStallguard()) {missedY++;}
|
||||
//if (TMC2130Z.isStandstill() || TMC2130Z.isStallguard()) {missedZ++;}
|
||||
//if (TMC2130E.isStandstill() || TMC2130E.isStallguard()) {missedE++;}
|
||||
|
||||
//Movement::getInstance()->test();
|
||||
//delayMicroseconds(100);
|
||||
|
|
100
src/src.ino
100
src/src.ino
|
@ -43,106 +43,6 @@ void setup()
|
|||
Serial.print(SPACE);
|
||||
Serial.print("ARDUINO STARTUP COMPLETE");
|
||||
Serial.print(CRLF);
|
||||
|
||||
/*
|
||||
Serial.begin(115200); //init serial port and set baudrate
|
||||
while (!Serial); //wait for serial port to connect (needed for Leonardo only)
|
||||
Serial.println("Start...");
|
||||
*/
|
||||
|
||||
/*
|
||||
// pins
|
||||
pinMode(X_ENABLE_PIN, OUTPUT);
|
||||
pinMode(X_DIR_PIN, OUTPUT);
|
||||
pinMode(X_STEP_PIN, OUTPUT);
|
||||
digitalWrite(X_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(X_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(X_STEP_PIN, LOW); // no step yet
|
||||
|
||||
pinMode(Y_ENABLE_PIN, OUTPUT);
|
||||
pinMode(Y_DIR_PIN, OUTPUT);
|
||||
pinMode(Y_STEP_PIN, OUTPUT);
|
||||
digitalWrite(Y_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(Y_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(Y_STEP_PIN, LOW); // no step yet
|
||||
|
||||
pinMode(Z_ENABLE_PIN, OUTPUT);
|
||||
pinMode(Z_DIR_PIN, OUTPUT);
|
||||
pinMode(Z_STEP_PIN, OUTPUT);
|
||||
digitalWrite(Z_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(Z_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(Z_STEP_PIN, LOW); // no step yet
|
||||
|
||||
pinMode(E_ENABLE_PIN, OUTPUT);
|
||||
pinMode(E_DIR_PIN, OUTPUT);
|
||||
pinMode(E_STEP_PIN, OUTPUT);
|
||||
digitalWrite(E_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(E_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(E_STEP_PIN, LOW); // no step yet
|
||||
*/
|
||||
|
||||
/*
|
||||
Serial.println("Init");
|
||||
|
||||
loadTMC2130ParametersMotor(&TMC2130X, 8, 200, 0);
|
||||
loadTMC2130ParametersMotor(&TMC2130Y, 8, 200, 0);
|
||||
loadTMC2130ParametersMotor(&TMC2130Z, 8, 200, 0);
|
||||
loadTMC2130ParametersMotor(&TMC2130E, 8, 200, 0);
|
||||
*/
|
||||
|
||||
/*
|
||||
pinMode(X_ENABLE_PIN, OUTPUT);
|
||||
pinMode(X_DIR_PIN, OUTPUT);
|
||||
pinMode(X_STEP_PIN, OUTPUT);
|
||||
digitalWrite(X_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(X_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(X_STEP_PIN, LOW); // no step yet
|
||||
|
||||
pinMode(Y_ENABLE_PIN, OUTPUT);
|
||||
pinMode(Y_DIR_PIN, OUTPUT);
|
||||
pinMode(Y_STEP_PIN, OUTPUT);
|
||||
digitalWrite(Y_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(Y_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(Y_STEP_PIN, LOW); // no step yet
|
||||
|
||||
pinMode(Z_ENABLE_PIN, OUTPUT);
|
||||
pinMode(Z_DIR_PIN, OUTPUT);
|
||||
pinMode(Z_STEP_PIN, OUTPUT);
|
||||
digitalWrite(Z_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(Z_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(Z_STEP_PIN, LOW); // no step yet
|
||||
|
||||
pinMode(E_ENABLE_PIN, OUTPUT);
|
||||
pinMode(E_DIR_PIN, OUTPUT);
|
||||
pinMode(E_STEP_PIN, OUTPUT);
|
||||
digitalWrite(E_ENABLE_PIN, HIGH); // disable driver
|
||||
digitalWrite(E_DIR_PIN, LOW); // chose direction
|
||||
digitalWrite(E_STEP_PIN, LOW); // no step yet
|
||||
*/
|
||||
|
||||
//loadTMC2130drivers();
|
||||
//startupTmc();
|
||||
//loadTMC2130parameters();
|
||||
|
||||
/**/
|
||||
//Movement::getInstance()->initTMC2130();
|
||||
//loadTMC2130parameters();
|
||||
|
||||
//loadTMC2130ParametersMotor(&TMC2130X, 8, 200, 0);
|
||||
//loadTMC2130ParametersMotor(&TMC2130Y, 8, 200, 0);
|
||||
//loadTMC2130ParametersMotor(&TMC2130Z, 8, 200, 0);
|
||||
//loadTMC2130ParametersMotor(&TMC2130E, 8, 200, 0);
|
||||
|
||||
|
||||
//Serial.println("Enable pins");
|
||||
|
||||
//digitalWrite(X_ENABLE_PIN, LOW); // enable driver
|
||||
//digitalWrite(Y_ENABLE_PIN, LOW); // enable driver
|
||||
//digitalWrite(Z_ENABLE_PIN, LOW); // enable driver
|
||||
//digitalWrite(E_ENABLE_PIN, LOW); // enable driver
|
||||
|
||||
//Serial.println("Enable");
|
||||
|
||||
}
|
||||
|
||||
// the loop function runs over and over again until power down or reset
|
||||
|
|
Loading…
Reference in New Issue