From 8f3f2e144e7d7d5f619edf1ec31c9d18662c85fc Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 25 May 2021 09:28:45 -0700 Subject: [PATCH 01/71] add farmduino_k16 board --- .circleci/config.yml | 2 +- Makefile | 2 +- README.md | 1 + lib/targets/farmduino_k16.Makefile | 2 +- src/Board.h | 6 ++ src/Config.h | 6 +- src/Movement.cpp | 76 ++++++++-------- src/Movement.h | 2 +- src/MovementAxis.cpp | 28 +++--- src/MovementAxis.h | 8 +- src/MovementEncoder.cpp | 10 +- src/TMC2130.cpp | 6 +- src/TMC2130.h | 4 +- src/farmbot_arduino_controller.cpp | 37 +++++--- src/farmbot_arduino_controller.h | 6 +- src/pins.h | 141 ++++++++++++++++++++++++++++- src/src.ino | 2 +- 17 files changed, 250 insertions(+), 89 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3129d6b..76e7313 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,7 +45,7 @@ jobs: command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k15 remove_temp when: always - run: - name: Compile Genesis v1.6 (FARMDUINO_V30) + name: Compile Genesis v1.6 (FARMDUINO_V32) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k16 remove_temp when: always - run: diff --git a/Makefile b/Makefile index b4bf2a7..e21e097 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ strings_test: all @strings $(TARGET_farmduino_v10_HEX).bin | grep -q ".F.genesisK13" @strings $(TARGET_farmduino_k14_HEX).bin | grep -q ".G.genesisK14" @strings $(TARGET_farmduino_k15_HEX).bin | grep -q ".H.genesisK15" - @strings $(TARGET_farmduino_k16_HEX).bin | grep -q ".H.genesisK15" + @strings $(TARGET_farmduino_k16_HEX).bin | grep -q ".I.genesisK16" @strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10" force_clean: remove_temp diff --git a/README.md b/README.md index 3e21796..fb1f525 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Board Feature Overview | FARMDUINO_V10 | Genesis v1.3 | x | | | | | FARMDUINO_V14 | Genesis v1.4 | | x | | | | FARMDUINO_V30 | Genesis v1.5 | | x | x | | +| FARMDUINO_V32 | Genesis v1.6 | | x | x | | | FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | Codes used for communication diff --git a/lib/targets/farmduino_k16.Makefile b/lib/targets/farmduino_k16.Makefile index 25b70cd..a122253 100644 --- a/lib/targets/farmduino_k16.Makefile +++ b/lib/targets/farmduino_k16.Makefile @@ -13,7 +13,7 @@ $(TARGET_farmduino_k16_BUILD_DIR)/farmduino_k16.elf: $(TARGET_farmduino_k16_OBJ) $(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_farmduino_k16_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS) $(TARGET_farmduino_k16_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS) - $(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=4 $(DEPS_CFLAGS) $< -o $@ + $(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=5 $(DEPS_CFLAGS) $< -o $@ $(TARGET_farmduino_k16_BUILD_DIR): $(MKDIR_P) $(TARGET_farmduino_k16_BUILD_DIR) diff --git a/src/Board.h b/src/Board.h index a0cf1dd..596345c 100644 --- a/src/Board.h +++ b/src/Board.h @@ -9,6 +9,9 @@ // Farmbot Genesis 1.5 //#define FARMDUINO_V30 + // Farmbot Genesis 1.6 + //#define FARMDUINO_V32 + // Farmbot Express //#define FARMDUINO_EXP_V20 @@ -18,6 +21,7 @@ #undef FARMDUINO_V10 #undef FARMDUINO_V14 #undef FARMDUINO_V30 + #undef FARMDUINO_V32 #undef FARMDUINO_EXP_V20 #if FARMBOT_BOARD_ID == 0 @@ -30,6 +34,8 @@ #define FARMDUINO_EXP_V20 #elif FARMBOT_BOARD_ID == 4 #define FARMDUINO_V30 + #elif FARMBOT_BOARD_ID == 5 + #define FARMDUINO_V32 #endif #endif diff --git a/src/Config.h b/src/Config.h index 3b33df5..97bdfcd 100644 --- a/src/Config.h +++ b/src/Config.h @@ -244,7 +244,7 @@ const long STATUS_GENERAL_DEFAULT = 0; -#define NSS_PIN 22 +#define NSS_PIN 22 #define READ_ENA_PIN 49 #define NULL 0 @@ -274,6 +274,10 @@ enum MdlSpiEncoders #define SOFTWARE_VERSION_SUFFIX ".H.genesisK15\0" #endif +#if defined(FARMDUINO_V32) && !defined(SOFTWARE_VERSION_SUFFIX) +#define SOFTWARE_VERSION_SUFFIX ".I.genesisK16\0" +#endif + #if defined(FARMDUINO_EXP_V20) && !defined(SOFTWARE_VERSION_SUFFIX) #define SOFTWARE_VERSION_SUFFIX ".E.expressK10\0" #endif diff --git a/src/Movement.cpp b/src/Movement.cpp index 3aa453d..66bc906 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -58,7 +58,7 @@ void Movement::getEncoderReport() } void Movement::reportStatus(MovementAxis *axis, int axisStatus) -{ +{ serialBuffer += COMM_REPORT_CMD_STATUS; serialBuffer += " "; serialBuffer += axis->channelLabel; @@ -208,7 +208,7 @@ void Movement::loadSettings() } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void Movement::initTMC2130() { axisX.initTMC2130(); @@ -315,7 +315,7 @@ void Movement::loadSettings() void Movement::test() { - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //axisX.enableMotor(); //axisX.setMotorStep(); //delayMicroseconds(500); @@ -579,7 +579,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS // Let the interrupt handle all the movements while ((axisActive[0] || axisActive[1] || axisActive[2]) && !emergencyStop) { - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) checkEncoders(); #endif @@ -599,7 +599,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS // Serial.print("Y - "); // axisY.test(); //} - //loopCounts++; + //loopCounts++; checkAxisSubStatus(&axisX, &axisSubStep[0]); checkAxisSubStatus(&axisY, &axisSubStep[1]); @@ -671,14 +671,14 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS } #if defined(FARMDUINO_EXP_V20) - if + if ( axisX.isAxisActive() && axisX.missedStepHistory[0] >= motorConsMissedStepsMax[0] //&& axisX.missedStepHistory[1] >= motorConsMissedStepsMax[0] //&& axisX.missedStepHistory[2] >= motorConsMissedStepsMax[0] //&& axisX.missedStepHistory[3] >= motorConsMissedStepsMax[0] - //&& axisX.missedStepHistory[4] >= motorConsMissedStepsMax[0] + //&& axisX.missedStepHistory[4] >= motorConsMissedStepsMax[0] ) #else if (axisX.isAxisActive() && motorConsMissedSteps[0] >= motorConsMissedStepsMax[0]) @@ -713,10 +713,10 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS } #if defined(FARMDUINO_EXP_V20) - if + if ( axisY.isAxisActive() - && axisY.missedStepHistory[0] >= motorConsMissedStepsMax[1] + && axisY.missedStepHistory[0] >= motorConsMissedStepsMax[1] //&& axisY.missedStepHistory[1] >= motorConsMissedStepsMax[1] //&& axisY.missedStepHistory[2] >= motorConsMissedStepsMax[1] //&& axisY.missedStepHistory[3] >= motorConsMissedStepsMax[1] @@ -732,7 +732,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialBuffer += " deactivate motor Y due to "; #if defined(FARMDUINO_EXP_V20) - if (axisY.isDriverError()) + if (axisY.isDriverError()) { serialBuffer += "driver error"; } @@ -765,7 +765,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS } #if defined(FARMDUINO_EXP_V20) - if + if ( axisZ.isAxisActive() && axisZ.missedStepHistory[0] >= motorConsMissedStepsMax[2] @@ -799,7 +799,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS if (zHome) { encoderZ.setPosition(0); - axisZ.setCurrentPosition(0); + axisZ.setCurrentPosition(0); } else { @@ -919,13 +919,13 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS case 1: serialBuffer += CurrentState::getInstance()->getPosition(); serialBuffer += CurrentState::getInstance()->getQAndNewLine(); - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) getEncoderReport(); #endif break; case 2: - //#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + //#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //serialBuffer += "R89"; //serialBuffer += " X"; //serialBuffer += axisX.getLoad(); @@ -933,9 +933,9 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS //serialBuffer += axisY.getLoad(); //serialBuffer += " Z"; //serialBuffer += axisZ.getLoad(); - //serialBuffer += CurrentState::getInstance()->getQAndNewLine(); + //serialBuffer += CurrentState::getInstance()->getQAndNewLine(); //#endif - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) highestX = 0; highestY = 0; @@ -973,7 +973,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialBuffer += axisZ.getNrOfSteps(); serialBuffer += " Z"; serialBuffer += highestZ; - serialBuffer += CurrentState::getInstance()->getQAndNewLine(); + serialBuffer += CurrentState::getInstance()->getQAndNewLine(); #endif @@ -993,7 +993,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS #endif #if defined(FARMDUINO_EXP_V20) - + if (serialMessageNr > 2) { serialMessageNr = 0; @@ -1001,7 +1001,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS #endif serialBufferSending = 0; - + if (debugMessages /*&& debugInterrupt*/) { @@ -1276,7 +1276,7 @@ int Movement::calibrateAxis(int axis) // Prepare for movement //tickDelay = (1000.0 * 1000.0 / MOVEMENT_INTERRUPT_SPEED / speedHome[axis] / 2); tickDelay = (1000.0 * 1000.0 / MOVEMENT_INTERRUPT_SPEED / speedHome[axis] / 4); - + #if defined(FARMDUINO_EXP_V20) //stepDelay = 1000000 / speedHome[axis] / 4; stepDelay = 1000000 / speedHome[axis] / 2; @@ -1396,9 +1396,9 @@ int Movement::calibrateAxis(int axis) *axisStatus = COMM_REPORT_MOVE_STATUS_START_MOTOR; reportStatus(calibAxis, axisStatus[0]); - // Enable the motor and move away from the home position until an end is detected. + // Enable the motor and move away from the home position until an end is detected. - calibAxis->enableMotor(); + calibAxis->enableMotor(); calibAxis->setDirectionAway(); calibAxis->setCurrentPosition(calibEncoder->currentPosition()); @@ -1424,7 +1424,7 @@ int Movement::calibrateAxis(int axis) // Check if end is reached by checking encoders or motor feedback to detect missed steps - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) checkEncoders(); #endif @@ -1481,9 +1481,9 @@ int Movement::calibrateAxis(int axis) #if defined(FARMDUINO_EXP_V20) if ( - (!calibAxis->endStopMin() && !calibAxis->endStopMax()) && - !movementDone - && + (!calibAxis->endStopMin() && !calibAxis->endStopMax()) && + !movementDone + && !( calibAxis->missedStepHistory[0] >= *missedStepsMax //&& //calibAxis->missedStepHistory[1] >= *missedStepsMax && @@ -1545,9 +1545,9 @@ int Movement::calibrateAxis(int axis) } else { - // Encoders detected a bump. Try again. + // Encoders detected a bump. Try again. // After a few tries, assume this is the end of the axis - + stepsCountLastStop = stepsCount; if (calibRetries < *calibRetriesMax) @@ -1666,7 +1666,7 @@ int Movement::calibrateAxis(int axis) while (!movementDone && error == 0) { - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) checkEncoders(); #endif @@ -1728,8 +1728,8 @@ int Movement::calibrateAxis(int axis) #if defined(FARMDUINO_EXP_V20) if ( - ((!invertEndStops && !calibAxis->endStopMin()) || (invertEndStops && !calibAxis->endStopMax())) && - !movementDone && + ((!invertEndStops && !calibAxis->endStopMin()) || (invertEndStops && !calibAxis->endStopMax())) && + !movementDone && !( calibAxis->missedStepHistory[0] >= *missedStepsMax //&& //calibAxis->missedStepHistory[1] >= *missedStepsMax && @@ -1778,7 +1778,7 @@ int Movement::calibrateAxis(int axis) { stepsCountLastStop = stepsCount; - // Encoders detected a bump. Try again. + // Encoders detected a bump. Try again. // After a few tries, assume this is the end of the axis if (calibRetries < *calibRetriesMax) { @@ -1919,7 +1919,7 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, Serial.print(*encoderEnabled); Serial.print("\r\n"); } - + } // Decrease amount of missed steps if there are no missed step @@ -1927,7 +1927,7 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, { (*missedSteps) -= (*encoderStepDecay); } - + // Check if the encoder goes in the wrong direction or nothing moved if ((axis->movingUp() && *encoderLastPosition > encoder->currentPositionRaw()) || (!axis->movingUp() && *encoderLastPosition < encoder->currentPositionRaw())) @@ -1965,7 +1965,7 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, axis->readDriverStatus(); - if (*encoderEnabled) { + if (*encoderEnabled) { //status = axis->getStatus(); //stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false; @@ -1987,7 +1987,7 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, // Serial.println("R99 STANDSTILL !!**"); //} - // Reset every hunderd steps, so the missed steps represents the number of missed steps + // Reset every hunderd steps, so the missed steps represents the number of missed steps // out of every hundred steps done if (axis->getNrOfSteps() % 100 == 0) { @@ -2121,7 +2121,7 @@ void Movement::loadMotorSettings() stepsPerMm[1] = ParameterList::getInstance()->getValue(MOVEMENT_STEP_PER_MM_Y); stepsPerMm[2] = ParameterList::getInstance()->getValue(MOVEMENT_STEP_PER_MM_Z); - if (stepsPerMm[0] < 1) + if (stepsPerMm[0] < 1) { stepsPerMm[0] = 1; } @@ -2145,7 +2145,7 @@ void Movement::loadMotorSettings() /**/ /* -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) loadSettingsTMC2130(); #endif */ diff --git a/src/Movement.h b/src/Movement.h index e290f38..bd3be6f 100644 --- a/src/Movement.h +++ b/src/Movement.h @@ -37,7 +37,7 @@ class Movement void handleMovementInterrupt(); void checkEncoders(); - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void initTMC2130(); void loadSettingsTMC2130(); void loadSettingsTMC2130_X(); diff --git a/src/MovementAxis.cpp b/src/MovementAxis.cpp index be5fb16..297b115 100644 --- a/src/MovementAxis.cpp +++ b/src/MovementAxis.cpp @@ -71,7 +71,7 @@ void MovementAxis::test() } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) unsigned int MovementAxis::getLostSteps() { @@ -130,7 +130,7 @@ void MovementAxis::loadSettingsTMC2130(int motorCurrent, int stallSensitivity, void MovementAxis::readDriverStatus() { - TMC2130A->read_REG(FB_TMC_REG_DRV_STATUS, &driverStatus); + TMC2130A->read_REG(FB_TMC_REG_DRV_STATUS, &driverStatus); } bool MovementAxis::isStallGuard() @@ -220,7 +220,7 @@ uint8_t MovementAxis::getStatus() { uint16_t MovementAxis::getLoad() { //return TMC2130A->sg_result(); - /**/ + /**/ return 0; } @@ -256,7 +256,7 @@ unsigned int MovementAxis::calculateSpeed(long sourcePosition, long currentPosit // so the calculation code still works after the changes staPos = 0; endPos = abs(destinationPosition - sourcePosition); - + if (sourcePosition < destinationPosition) { curPos = currentPosition - sourcePosition; @@ -273,7 +273,7 @@ unsigned int MovementAxis::calculateSpeed(long sourcePosition, long currentPosit // Set the homing speed if the position would be out of bounds if ( (curPos < staPos || curPos > endPos) - // || + // || // Also limit the speed to a crawl when the move would pass the home position // (sourcePosition > 0 && destinationPosition < 0) || (sourcePosition < 0 && destinationPosition > 0) // (!motorHomeIsUp && currentPosition <= 0) || (motorHomeIsUp && currentPosition >= 0) ||) @@ -590,7 +590,7 @@ void MovementAxis::loadMotorSettings( { motorSpeedMax = speedMax; - motorSpeedMin = speedMin; + motorSpeedMin = speedMin; motorStepsAcc = stepsAcc; motorSpeedMaxHome = speedMaxHome; @@ -617,13 +617,13 @@ void MovementAxis::loadMotorSettings( setMotorStepWrite = &MovementAxis::setMotorStepWrite54; resetMotorStepWrite = &MovementAxis::resetMotorStepWrite54; } - + if (pinStep == 60) { setMotorStepWrite = &MovementAxis::setMotorStepWrite60; resetMotorStepWrite = &MovementAxis::resetMotorStepWrite60; } - + if (pinStep == 46) { @@ -735,7 +735,7 @@ void MovementAxis::setDirectionUp() //#endif /* -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) // The TMC2130 uses a command to change direction, not a pin if (motorMotorInv) @@ -784,7 +784,7 @@ void MovementAxis::setDirectionDown() //#endif /* - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) // The TMC2130 uses a command to change direction, not a pin if (motorMotorInv) @@ -1070,15 +1070,15 @@ void MovementAxis::resetMotorStepWrite46() PORTL &= B11110111; } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //// TMC2130 Functions void MovementAxis::setMotorStepWriteTMC2130() { - // TMC2130 works on each edge of the step pulse, - // so instead of setting the step bit, + // TMC2130 works on each edge of the step pulse, + // so instead of setting the step bit, // toggle the bit here - + if (tmcStep) { digitalWrite(pinStep, HIGH); diff --git a/src/MovementAxis.h b/src/MovementAxis.h index 3a61081..7d5227c 100644 --- a/src/MovementAxis.h +++ b/src/MovementAxis.h @@ -29,7 +29,7 @@ class MovementAxis public: MovementAxis(); -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) TMC2130_Basics *TMC2130A; TMC2130_Basics *TMC2130B; #endif @@ -95,7 +95,7 @@ class MovementAxis char channelLabel; bool movementStarted; -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void initTMC2130(); void loadSettingsTMC2130(int motorCurrent, int stallSensitivity, int microSteps, bool stealth); uint16_t getLoad(); @@ -103,7 +103,7 @@ class MovementAxis #endif -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void setMotorStepWriteTMC2130(); void setMotorStepWriteTMC2130_2(); void resetMotorStepWriteTMC2130(); @@ -128,7 +128,7 @@ class MovementAxis int lastCalcLog = 0; bool debugPrint = false; -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) uint32_t driverStatus = 0; #endif diff --git a/src/MovementEncoder.cpp b/src/MovementEncoder.cpp index 149eb96..4aac8b0 100644 --- a/src/MovementEncoder.cpp +++ b/src/MovementEncoder.cpp @@ -80,7 +80,7 @@ void MovementEncoder::setPosition(long newPosition) position = newPosition; #endif - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) if (newPosition == 0) { position = newPosition; @@ -109,7 +109,7 @@ long MovementEncoder::currentPosition() } else { - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) floatScalingFactor = scalingFactor / 40000.0; return position * floatScalingFactor * encoderInvert; #endif @@ -131,7 +131,7 @@ void MovementEncoder::checkEncoder(bool channelA, bool channelB, bool channelAQ, processEncoder(); #endif - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) processEncoder(); #endif @@ -173,7 +173,7 @@ void MovementEncoder::processEncoder() #endif // If using farmduino, revision 1.4, use the SPI interface to read from the Motor Dynamics Lab chip - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) const byte read_cmd = 0x0F; int readSize = 4; long encoderVal = 0; @@ -314,7 +314,7 @@ void MovementEncoder::checkMissedSteps() #endif /* - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) if (encoderEnabled) { if (axis->stallDetected()) { diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 6cfd592..736dfe7 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -8,7 +8,7 @@ #include "TMC2130.h" -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //void loadTMC2130ParametersMotor(Trinamic_TMC2130 *myStepper, int microsteps, int current, int sensitivity) void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth) @@ -235,7 +235,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, // Set minimum speed tb->write_REG(FB_TMC_REG_VDCMIN, uint32_t(0) & FB_TMC_VDCMIN_MASK); tb->write_REG(FB_TMC_REG_TCOOLTHRS, uint32_t(0) & FB_TMC_TCOOLTHRS_MASK); - + // Set maximum speed tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK); @@ -272,4 +272,4 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, } -#endif \ No newline at end of file +#endif diff --git a/src/TMC2130.h b/src/TMC2130.h index 16e6438..56c97ad 100644 --- a/src/TMC2130.h +++ b/src/TMC2130.h @@ -14,7 +14,7 @@ #include "pins.h" #include "Board.h" -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) #include "TMC2130_Basics.h" static TMC2130_Basics TMC2130X(X_CHIP_SELECT); @@ -25,4 +25,4 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth); #endif -#endif /* TMC2130_H_ */ \ No newline at end of file +#endif /* TMC2130_H_ */ diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 2a8181b..48455a2 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -2,7 +2,7 @@ #include "farmbot_arduino_controller.h" /**/ -//#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +//#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) #include "TimerOne.h" //#endif @@ -53,7 +53,7 @@ unsigned long interruptDurationMax = 0; bool interruptBusy = false; int interruptSecondTimer = 0; -//#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +//#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void interrupt(void) { if (!debugInterrupt) @@ -285,7 +285,7 @@ void checkParamsChanged() } - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) if (lastTmcParamChangeNr != ParameterList::getInstance()->tmcParamChangeNumber()) { lastTmcParamChangeNr = ParameterList::getInstance()->tmcParamChangeNumber(); @@ -300,12 +300,12 @@ void checkParamsChanged() void checkEncoders() { - - #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) + + #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) // Check encoders out of interrupt for farmduino 1.4 Movement::getInstance()->checkEncoders(); #endif - + } // Set pins input output @@ -508,7 +508,7 @@ void setPinInputOutput() } #endif -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void setPinInputOutput() { Serial.print(COMM_REPORT_COMMENT); @@ -571,6 +571,10 @@ void setPinInputOutput() pinMode(LIGHTING_PIN, OUTPUT); pinMode(PERIPHERAL_4_PIN, OUTPUT); pinMode(PERIPHERAL_5_PIN, OUTPUT); + #if defined(FARMDUINO_V32) + pinMode(ROTARY_TOOL_FORWARD, OUTPUT); + pinMode(ROTARY_TOOL_REVERSE, OUTPUT); + #endif digitalWrite(LED_PIN, LOW); digitalWrite(VACUUM_PIN, LOW); @@ -578,12 +582,19 @@ void setPinInputOutput() digitalWrite(LIGHTING_PIN, LOW); digitalWrite(PERIPHERAL_4_PIN, LOW); digitalWrite(PERIPHERAL_5_PIN, LOW); + #if defined(FARMDUINO_V32) + pinMode(ROTARY_TOOL_FORWARD, LOW); + pinMode(ROTARY_TOOL_REVERSE, LOW); + #endif pinMode(LIGHTING_CURRENT_PIN, INPUT_PULLUP); pinMode(WATER_CURRENT_PIN, INPUT_PULLUP); pinMode(VACUUM_CURRENT_PIN, INPUT_PULLUP); pinMode(PERIPHERAL_4_CURRENT_PIN, INPUT_PULLUP); pinMode(PERIPHERAL_5_CURRENT_PIN, INPUT_PULLUP); + #if defined(FARMDUINO_V32) + pinMode(ROTARY_TOOL_CURRENT_PIN, INPUT_PULLUP); + #endif pinMode(UTM_C, INPUT_PULLUP); pinMode(UTM_D, INPUT_PULLUP); @@ -606,7 +617,7 @@ void setPinInputOutput() digitalWrite(SERVO_2_PIN, LOW); digitalWrite(SERVO_3_PIN, LOW); - #if defined(FARMDUINO_V30) + #if defined(FARMDUINO_V30) || defined(FARMDUINO_V32) reportingPeriod = 500; @@ -751,7 +762,7 @@ void startServo() ServoControl::getInstance()->attach(); } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void loadTMC2130drivers() { @@ -873,7 +884,7 @@ void runTestForDebug() Serial.print(">"); Serial.print(" X = "); - Serial.print(missedX); + Serial.print(missedX); Serial.print(" Y = "); Serial.print(missedY); Serial.print(" Z = "); @@ -914,7 +925,7 @@ void runTestForDebug() digitalWrite(Z_STEP_PIN, LOW); digitalWrite(E_STEP_PIN, LOW); delayMicroseconds(100); - + bool stallGuard = false; bool standStill = false; uint8_t status = 0; @@ -928,7 +939,7 @@ void runTestForDebug() TMC2130Z.read_STAT(); TMC2130E.read_STAT(); - status = TMC2130X.getStatus(); + 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++;} @@ -952,7 +963,7 @@ void runTestForDebug() //if (TMC2130X.isStandstill() || TMC2130X.isStallguard()) {missedX++;} //if (TMC2130Y.isStandstill() || TMC2130Y.isStallguard()) {missedY++;} //if (TMC2130Z.isStandstill() || TMC2130Z.isStallguard()) {missedZ++;} - //if (TMC2130E.isStandstill() || TMC2130E.isStallguard()) {missedE++;} + //if (TMC2130E.isStandstill() || TMC2130E.isStallguard()) {missedE++;} //Movement::getInstance()->test(); //delayMicroseconds(100); diff --git a/src/farmbot_arduino_controller.h b/src/farmbot_arduino_controller.h index ca71b34..016c00f 100644 --- a/src/farmbot_arduino_controller.h +++ b/src/farmbot_arduino_controller.h @@ -16,7 +16,7 @@ #include "MemoryFree.h" #include "Debug.h" -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) #include "TMC2130.h" #endif @@ -49,7 +49,7 @@ void setup(); void setPinInputOutput(); void startSerial(); - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void loadTMC2130drivers(); void loadTMC2130parameters(); void startupTmc(); @@ -74,4 +74,4 @@ void setup(); //Do not add code below this line -#endif /* _farmbot_arduino_controller_H_ */ \ No newline at end of file +#endif /* _farmbot_arduino_controller_H_ */ diff --git a/src/pins.h b/src/pins.h index 00ff488..5a34482 100644 --- a/src/pins.h +++ b/src/pins.h @@ -145,7 +145,7 @@ #define X_MAX_PIN 68 #define X_ENCDR_A 16 #define X_ENCDR_B 17 - + #define X2_ENCDR_A 22 #define X2_ENCDR_B 39 #define X_ENCDR_A_Q -1 // N/A @@ -392,3 +392,142 @@ #define ENC_Z_B_Q_BYTE 0x80 #endif + +#if defined(FARMDUINO_V32) + + // X1-AXIS + #define X_STEP_PIN 26 // X1_STEP_PIN + #define X_DIR_PIN 27 // X1_DIR_PIN + #define X_ENABLE_PIN 25 // X1_ENABLE_PIN + #define X_CHIP_SELECT 24 // X1_CHIP_SELECT + #define X_MIN_PIN 69 + #define X_MAX_PIN 68 + #define X_ENCDR_A 16 + #define X_ENCDR_B 17 + #define X_ENCDR_A_Q -1 // N/A + #define X_ENCDR_B_Q -1 // N/A + + // X2-AXIS + #define E_STEP_PIN 15 // X2_STEP_PIN + #define E_DIR_PIN 30 // X2_DIR_PIN + #define E_ENABLE_PIN 14 // X2_ENABLE_PIN + #define E_CHIP_SELECT 29 // X2_CHIP_SELECT + #define X2_ENCDR_A 22 + #define X2_ENCDR_B 39 + + // Y-AXIS + #define Y_STEP_PIN 32 + #define Y_DIR_PIN 33 + #define Y_ENABLE_PIN 31 + #define Y_CHIP_SELECT 28 // Y_CHIP_SELECT + #define Y_MIN_PIN 67 + #define Y_MAX_PIN 66 + #define Y_ENCDR_A 23 + #define Y_ENCDR_B 24 + #define Y_ENCDR_A_Q -1 // N/A + #define Y_ENCDR_B_Q -1 // N/A + + // Z-AXIS + #define Z_STEP_PIN 35 + #define Z_DIR_PIN 36 + #define Z_ENABLE_PIN 34 + #define Z_CHIP_SELECT 23 // Z_CHIP_SELECT + #define Z_MIN_PIN 65 + #define Z_MAX_PIN 64 + #define Z_ENCDR_A 29 + #define Z_ENCDR_B 28 + #define Z_ENCDR_A_Q -1 // N/A + #define Z_ENCDR_B_Q -1 // N/A + + // UTM + #define UTM_C 63 // TOOL VERIFICATION + #define UTM_D 59 // SOIL SENSOR + #define UTM_E -1 // rotary tool forward + #define UTM_F -1 + #define UTM_G -1 + #define UTM_H -1 // rotary tool reverse + #define UTM_I -1 + #define UTM_J -1 + #define UTM_K -1 + #define UTM_L -1 // PE + // Available digital pins: 18,19,38,42,43,44,45,46,47,48,49 + // Available analog pins: 7,8 + + #define LED_PIN 13 + + // Peripherals + #define LIGHTING_PIN 7 + #define WATER_PIN 8 + #define VACUUM_PIN 9 + #define PERIPHERAL_4_PIN 10 + #define PERIPHERAL_5_PIN 12 + #define ROTARY_TOOL_FORWARD 2 + #define ROTARY_TOOL_REVERSE 3 + + // Peripheral current sensors + #define LIGHTING_CURRENT_PIN 54 // A0 + #define WATER_CURRENT_PIN 55 // A1 + #define VACUUM_CURRENT_PIN 58 // A4 + #define PERIPHERAL_4_CURRENT_PIN 57 // A3 + #define PERIPHERAL_5_CURRENT_PIN 56 // A2 + #define ROTARY_TOOL_CURRENT_PIN 60 // A6 + + // Auxiliary motors + #define AUX_STEP_PIN 40 + #define AUX_DIR_PIN 41 + #define AUX_ENABLE_PIN 37 + + #define SERVO_0_PIN 4 + #define SERVO_1_PIN 5 + #define SERVO_2_PIN 6 + #define SERVO_3_PIN 11 + + // Encoder X channel A: pin 16, port H1 + #define ENC_X_A_PORT PINH + #define ENC_X_A_BYTE 0x02 + + // Encoder X channel B: pin 17, port H0 + #define ENC_X_B_PORT PINH + #define ENC_X_B_BYTE 0x01 + + // Encoder X channel A Q (disabled, use LED pin): pin 13, port B7 + #define ENC_X_A_Q_PORT PINB + #define ENC_X_A_Q_BYTE 0x80 + + // Encoder X channel B Q (disabled, use LED pin): pin 13, port B7 + #define ENC_X_B_Q_PORT PINB + #define ENC_X_B_Q_BYTE 0x80 + + // Encoder Y channel A: pin 23, port A1 + #define ENC_Y_A_PORT PINA + #define ENC_Y_A_BYTE 0x02 + + // Encoder Y channel B: pin 24, port A2 + #define ENC_Y_B_PORT PINA + #define ENC_Y_B_BYTE 0x04 + + // Encoder Y channel A Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_A_Q_PORT PINB + #define ENC_Y_A_Q_BYTE 0x80 + + // Encoder Y channel B Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_B_Q_PORT PINB + #define ENC_Y_B_Q_BYTE 0x80 + + // Encoder Z channel A: pin 29, port A7 + #define ENC_Z_A_PORT PINA + #define ENC_Z_A_BYTE 0x80 + + // Encoder Z channel B: pin 28, port A6 + #define ENC_Z_B_PORT PINA + #define ENC_Z_B_BYTE 0x40 + + // Encoder Z channel A Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_A_Q_PORT PINB + #define ENC_Z_A_Q_BYTE 0x80 + + // Encoder Z channel B Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_B_Q_PORT PINB + #define ENC_Z_B_Q_BYTE 0x80 + +#endif diff --git a/src/src.ino b/src/src.ino index f275267..f915303 100644 --- a/src/src.ino +++ b/src/src.ino @@ -19,7 +19,7 @@ void setup() readParameters(); -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) loadTMC2130drivers(); startupTmc(); loadTMC2130parameters(); From 16f468d3da227978cf5ab2bac65218b86277c073 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 25 May 2021 09:39:08 -0700 Subject: [PATCH 02/71] bump version (6.5.37) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 97bdfcd..3f90946 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.5.36\0"; + const char SOFTWARE_VERSION[] = "6.5.37\0"; const int LOGGING = 0; From ca9f77846d8264f0eca5fc9a1f9be64ac1846516 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 28 May 2021 10:42:43 -0700 Subject: [PATCH 03/71] fix calibration debug messages --- src/F15Handler.cpp | 2 +- src/F16Handler.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/F15Handler.cpp b/src/F15Handler.cpp index f60e514..fd5b198 100644 --- a/src/F15Handler.cpp +++ b/src/F15Handler.cpp @@ -29,7 +29,7 @@ int F15Handler::execute(Command *command) if (LOGGING) { - Serial.print("R99 HOME Z\r\n"); + Serial.print("R99 CALIBRATE Y\r\n"); } ret = Movement::getInstance()->calibrateAxis(1); diff --git a/src/F16Handler.cpp b/src/F16Handler.cpp index d88f1c3..24bd5ee 100644 --- a/src/F16Handler.cpp +++ b/src/F16Handler.cpp @@ -29,7 +29,7 @@ int F16Handler::execute(Command *command) if (LOGGING) { - Serial.print("R99 HOME Z\r\n"); + Serial.print("R99 CALIBRATE Z\r\n"); } ret = Movement::getInstance()->calibrateAxis(2); From e77a7bb017b5101d17b8c8078508b870370dcc8d Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 28 May 2021 10:43:23 -0700 Subject: [PATCH 04/71] bump version (6.5.38) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 3f90946..eb23c64 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.5.37\0"; + const char SOFTWARE_VERSION[] = "6.5.38\0"; const int LOGGING = 0; From 89d6a807011592a7d0cf0cefdf48108ea7ba026c Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Wed, 30 Jun 2021 22:19:05 +0200 Subject: [PATCH 05/71] Implementing stealth mode as completely different setting separate setting instead of only changing a few values. --- src/Board.h | 4 +- src/MovementAxis.cpp | 20 +---- src/TMC2130.cpp | 180 ++++++++++++------------------------------- 3 files changed, 53 insertions(+), 151 deletions(-) diff --git a/src/Board.h b/src/Board.h index a0cf1dd..12ea91e 100644 --- a/src/Board.h +++ b/src/Board.h @@ -1,7 +1,7 @@ #ifndef FARMBOT_BOARD_ID // Farmbot using RAMPS board - #define RAMPS_V14 + //#define RAMPS_V14 //#define FARMDUINO_V10 //#define FARMDUINO_V14 @@ -10,7 +10,7 @@ //#define FARMDUINO_V30 // Farmbot Express - //#define FARMDUINO_EXP_V20 + #define FARMDUINO_EXP_V20 #else diff --git a/src/MovementAxis.cpp b/src/MovementAxis.cpp index be5fb16..67d0c29 100644 --- a/src/MovementAxis.cpp +++ b/src/MovementAxis.cpp @@ -102,14 +102,9 @@ void MovementAxis::initTMC2130() resetMotorStepWrite = &MovementAxis::resetMotorStepWriteDefault; resetMotorStepWrite2 = &MovementAxis::resetMotorStepWriteDefault2; - /**/ // Not using the edge driving now, only standard pulse driving + // 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(); if (channelLabel == 'X') @@ -145,19 +140,6 @@ bool MovementAxis::isStandStill() bool MovementAxis::isDriverError() { - //uint32_t x = driverStatus; - //x = x >> 24; - - //if (x > 1) - //{ - // Serial.print("R99"); - // Serial.print(" "); - // Serial.print("x ="); - // Serial.print(""); - // Serial.print(x); - // Serial.print("\r\n"); - //} - return ((driverStatus & 0x7E000000) != 0); } diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 6cfd592..f503f90 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -10,105 +10,9 @@ #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) -//void loadTMC2130ParametersMotor(Trinamic_TMC2130 *myStepper, int microsteps, int current, int sensitivity) void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth) { - //Serial.print("==>"); - //Serial.print(" "); - //Serial.print(microsteps); - //Serial.print(" "); - //Serial.print(current); - //Serial.print(" "); - //Serial.print(sensitivity); - //Serial.println(" "); - - /* - tb->init(); - - uint8_t data = 0; - - 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); - - tb->set_GCONF(FB_TMC_GCONF_I_SCALE_ANALOG, 1); - - // load drive current for motors - { - 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 Current Scale is too low, turn on high sensitivity R_sense and calculate again - if (CS < 16) { - CS = 32.0*1.41421*mA / 1000.0*(RS + 0.02) / 0.180 - 1; - } - { - uint32_t data; - // adding ihold - data = ((uint32_t(CS)&FB_TMC_IHOLD_MASK) << FB_TMC_IHOLD); - // adding irun - data |= ((uint32_t(CS)&FB_TMC_IRUN_MASK) << FB_TMC_IRUN); - // adding iholddelay - data |= ((uint32_t(16)&FB_TMC_IHOLDDELAY_MASK) << FB_TMC_IHOLDDELAY); - - // writing data - tb->write_REG(FB_TMC_REG_IHOLD_IRUN, data); - } - } - - tb->set_CHOPCONF(FB_TMC_CHOPCONF_TOFF, 3); - tb->set_CHOPCONF(FB_TMC_CHOPCONF_TBL, 1); - tb->set_GCONF(FB_TMC_GCONF_DIAG1_STALL, 1); - tb->set_GCONF(FB_TMC_GCONF_DIAG1_ONSTATE, 1); - { - uint32_t data; - - data = 0xFFFFF & FB_TMC_TCOOLTHRS_MASK; - - tb->write_REG(FB_TMC_REG_TCOOLTHRS, data); - } - { - uint32_t data; - - data = 0 & FB_TMC_THIGH_MASK; - - tb->write_REG(FB_TMC_REG_THIGH, data); - } - { - tb->set_CHOPCONF(FB_TMC_COOLCONF_SEMIN, 5); - } - tb->set_CHOPCONF(FB_TMC_COOLCONF_SEMAX, 2); - tb->set_CHOPCONF(FB_TMC_COOLCONF_SEMAX, 0b01); - tb->set_CHOPCONF(FB_TMC_COOLCONF_SGT, sensitivity); - - */ - uint32_t data = 0; uint32_t value = 0; @@ -162,47 +66,63 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, // Chop and cool conf - 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(4) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(2) << FB_TMC_CHOPCONF_TBL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TBL] << FB_TMC_CHOPCONF_TBL); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); - - //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(1) << 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); - - //tb->write_REG(FB_TMC_REG_TPWMTHRS, uint32_t(35000)); - tb->write_REG(FB_TMC_REG_TPWMTHRS, uint32_t(0xFFFFFFFF)); - tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK); - tb->write_REG(FB_TMC_REG_THIGH, 10000 & FB_TMC_THIGH_MASK); - - //dcStep settings - //tb->write_REG(FB_TMC_REG_VDCMIN, 1); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(8) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF); - tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(100) << FB_TMC_DCCTRL_DC_TIME, FB_TMC_DCCTRL_DC_TIME_MASK << FB_TMC_DCCTRL_DC_TIME); - tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(8) << FB_TMC_DCCTRL_DC_SG, FB_TMC_DCCTRL_DC_SG_MASK << FB_TMC_DCCTRL_DC_SG); + if (!stealth) + { + 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(4) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(2) << FB_TMC_CHOPCONF_TBL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TBL] << FB_TMC_CHOPCONF_TBL); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); + + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << 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); + + tb->write_REG(FB_TMC_REG_TPWMTHRS, uint32_t(0xFFFFFFFF)); + tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK); + tb->write_REG(FB_TMC_REG_THIGH, 10000 & FB_TMC_THIGH_MASK); + + //dcStep settings + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(8) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF); + tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(100) << FB_TMC_DCCTRL_DC_TIME, FB_TMC_DCCTRL_DC_TIME_MASK << FB_TMC_DCCTRL_DC_TIME); + tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(8) << FB_TMC_DCCTRL_DC_SG, FB_TMC_DCCTRL_DC_SG_MASK << FB_TMC_DCCTRL_DC_SG); + + tb->write_REG(FB_TMC_REG_THIGH, uint32_t(10000)); + + // Enable diagnostics + tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 1); + tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 1); + 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->write_REG(FB_TMC_REG_THIGH, uint32_t(10000)); + if (stealth) + { - // Enable diagnostics - tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 1); - tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 1); - 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->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->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(4) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(-2) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); + //tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); - if (stealth) - { // Enbable stealth tb->set_GCONF(FB_TMC_GCONF_EN_PWM_MODE, 1); tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_AUTOSCALE, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AUTOSCALE] << FB_TMC_PWMCONF_PWM_AUTOSCALE); - tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(2) << FB_TMC_PWMCONF_PWM_FREQ, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_FREQ] << FB_TMC_PWMCONF_PWM_FREQ); - tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(0) << FB_TMC_PWMCONF_PWM_GRAD, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_GRAD] << FB_TMC_PWMCONF_PWM_GRAD); + tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(0) << FB_TMC_PWMCONF_PWM_FREQ, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_FREQ] << FB_TMC_PWMCONF_PWM_FREQ); + tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_GRAD, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_GRAD] << FB_TMC_PWMCONF_PWM_GRAD); + + + // 2020-05-15 copy of settings before experiments + 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); + } From c2a5f23ab22e808f43e4cb1fd835b1f310e8bab7 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 30 Jun 2021 13:34:08 -0700 Subject: [PATCH 06/71] bump version (6.5.39) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index eb23c64..7033d90 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.5.38\0"; + const char SOFTWARE_VERSION[] = "6.5.39\0"; const int LOGGING = 0; From c422d598e50758b4bf0f272156bbf2c48d407011 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 2 Jul 2021 13:37:28 -0700 Subject: [PATCH 07/71] allow writing to analog pins --- src/PinControl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PinControl.cpp b/src/PinControl.cpp index 8cb7054..5907402 100644 --- a/src/PinControl.cpp +++ b/src/PinControl.cpp @@ -14,7 +14,7 @@ PinControl *PinControl::getInstance() PinControl::PinControl() { - for (int pinNr = 1; pinNr <= 52; pinNr++) + for (int pinNr = 1; pinNr <= 69; pinNr++) { pinWritten[0][pinNr] = false; pinWritten[1][pinNr] = false; @@ -30,7 +30,7 @@ int PinControl::setMode(int pinNr, int mode) int PinControl::writeValue(int pinNr, int value, int mode) { - if (pinNr > 0 && pinNr <= 52 && (mode == 0 || mode == 1)) + if (pinNr > 0 && pinNr <= 69 && (mode == 0 || mode == 1)) { pinWritten[mode][pinNr] = true; @@ -51,7 +51,7 @@ int PinControl::writeValue(int pinNr, int value, int mode) // Set all pins that were once used for writing to zero void PinControl::resetPinsUsed() { - for (int pinNr = 1; pinNr <= 52; pinNr++) + for (int pinNr = 1; pinNr <= 69; pinNr++) { if (pinWritten[0][pinNr]) { From cbf813b985416abf0f2f46eee99addd4198b2cbb Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 2 Jul 2021 13:38:27 -0700 Subject: [PATCH 08/71] bump version (6.5.40) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 7033d90..9ef8daa 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.5.39\0"; + const char SOFTWARE_VERSION[] = "6.5.40\0"; const int LOGGING = 0; From 951b31c82e10e62202fb7780d4ee2bb453ffcfcc Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Tue, 13 Jul 2021 22:05:50 +0200 Subject: [PATCH 09/71] Stealth mode, for real --- src/Movement.cpp | 125 ++++------------------------- src/MovementAxis.cpp | 5 -- src/ParameterList.h | 2 +- src/TMC2130.cpp | 95 ++++------------------ src/TMC2130.h | 8 +- src/TMC2130_Basics.cpp | 9 ++- src/TMC2130_Basics.h | 6 +- src/farmbot_arduino_controller.cpp | 3 - 8 files changed, 49 insertions(+), 204 deletions(-) diff --git a/src/Movement.cpp b/src/Movement.cpp index fd3a9be..95ded96 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -166,8 +166,6 @@ Movement::Movement() void Movement::loadSettings() { - /**/ //Serial.println("== load pin numbers =="); - // Load motor settings axisX.loadPinNumbers(X_STEP_PIN, X_DIR_PIN, X_ENABLE_PIN, X_MIN_PIN, X_MAX_PIN, E_STEP_PIN, E_DIR_PIN, E_ENABLE_PIN); @@ -178,29 +176,27 @@ void Movement::loadSettings() axisSubStep[1] = COMM_REPORT_MOVE_STATUS_IDLE; axisSubStep[2] = COMM_REPORT_MOVE_STATUS_IDLE; - /**/ //Serial.println("== load motor settings =="); + // Load motor settings loadMotorSettings(); // Load encoder settings - /**/ //Serial.println("== load encoder settings =="); - loadEncoderSettings(); - /**/ //Serial.println("== load mdl encoder settings =="); + // Load mdl encoder settings encoderX.loadMdlEncoderId(_MDL_X1); encoderY.loadMdlEncoderId(_MDL_Y); encoderZ.loadMdlEncoderId(_MDL_Z); - /**/ //Serial.println("== load encoder pin numbers =="); + // load encoder pin numbers encoderX.loadPinNumbers(X_ENCDR_A, X_ENCDR_B, X_ENCDR_A_Q, X_ENCDR_B_Q); encoderY.loadPinNumbers(Y_ENCDR_A, Y_ENCDR_B, Y_ENCDR_A_Q, Y_ENCDR_B_Q); encoderZ.loadPinNumbers(Z_ENCDR_A, Z_ENCDR_B, Z_ENCDR_A_Q, Z_ENCDR_B_Q); - /**/ //Serial.println("== load encoder load settings 2 =="); + // Load encoder settings part 2 encoderX.loadSettings(motorConsEncoderType[0], motorConsEncoderScaling[0], motorConsEncoderInvert[0]); encoderY.loadSettings(motorConsEncoderType[1], motorConsEncoderScaling[1], motorConsEncoderInvert[1]); @@ -221,40 +217,6 @@ void Movement::loadSettings() loadSettingsTMC2130_X(); loadSettingsTMC2130_Y(); loadSettingsTMC2130_Z(); - - /**/ - //int motorCurrentX; - //int stallSensitivityX; - //int microStepsX; - - //int motorCurrentY; - //int stallSensitivityY; - //int microStepsY; - - //int motorCurrentZ; - //int stallSensitivityZ; - //int microStepsZ; - - //motorCurrentX = ParameterList::getInstance()->getValue(MOVEMENT_MOTOR_CURRENT_X); - //stallSensitivityX = ParameterList::getInstance()->getValue(MOVEMENT_STALL_SENSITIVITY_X); - //microStepsX = ParameterList::getInstance()->getValue(MOVEMENT_MICROSTEPS_X); - - //motorCurrentY = ParameterList::getInstance()->getValue(MOVEMENT_MOTOR_CURRENT_Y); - //stallSensitivityY = ParameterList::getInstance()->getValue(MOVEMENT_STALL_SENSITIVITY_Y); - //microStepsY = ParameterList::getInstance()->getValue(MOVEMENT_MICROSTEPS_Y); - - //motorCurrentZ = ParameterList::getInstance()->getValue(MOVEMENT_MOTOR_CURRENT_Z); - //stallSensitivityZ = ParameterList::getInstance()->getValue(MOVEMENT_STALL_SENSITIVITY_Z); - //microStepsZ = ParameterList::getInstance()->getValue(MOVEMENT_MICROSTEPS_Z); - - //if (microStepsX <= 0) { microStepsX = 1; } - //if (microStepsY <= 0) { microStepsY = 1; } - //if (microStepsZ <= 0) { microStepsZ = 1; } - - - //axisX.loadSettingsTMC2130(motorCurrentX, stallSensitivityX, microStepsX); - //axisY.loadSettingsTMC2130(motorCurrentY, stallSensitivityY, microStepsY); - //axisZ.loadSettingsTMC2130(motorCurrentZ, stallSensitivityZ, microStepsZ); } void Movement::loadSettingsTMC2130_X() @@ -333,28 +295,27 @@ void Movement::test() //digitalWrite(X_STEP_PIN, HIGH); axisX.setMotorStep(); - delayMicroseconds(500); + delayMicroseconds(100); //digitalWrite(X_STEP_PIN, LOW); axisX.resetMotorStep(); TMC2130X.read_STAT(); - 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++; - } + //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++; + //} //if (axisX.stallDetected()) { // testA++; //} + //testB++; - testB++; - - delayMicroseconds(500); + delayMicroseconds(100); @@ -384,9 +345,6 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS bool xHome, bool yHome, bool zHome) { - /**/ //Serial.println("AAA"); - /**/ //test(); - long xDest = xDestScaled * stepsPerMm[0]; long yDest = yDestScaled * stepsPerMm[1]; long zDest = zDestScaled * stepsPerMm[2]; @@ -581,25 +539,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS { #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) checkEncoders(); - #endif - - /**/ - //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("X - "); - // axisX.test(); - - // Serial.print("Y - "); - // axisY.test(); - //} - //loopCounts++; + #endif checkAxisSubStatus(&axisX, &axisSubStep[0]); checkAxisSubStatus(&axisY, &axisSubStep[1]); @@ -905,9 +845,6 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS if (serialMessageDelay > 300 && serialBuffer.length() == 0 && serialBufferSending == 0) { - //Serial.print("Y-"); - //axisY.test();/**/ - serialMessageDelay = 0; switch(serialMessageNr) @@ -1499,7 +1436,7 @@ int Movement::calibrateAxis(int axis) // If encoder did not detected an end, take a normal step if (*missedSteps < *missedStepsMax) { -/**/ + if ((stepsCount - stepsCountLastStop) > (*missedSteps + *calibRetryDeadzone)) { // Out of the dead zone, so that means there are no consecutive @@ -1954,7 +1891,7 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, #if defined(FARMDUINO_EXP_V20) void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, float *missedSteps, long *lastPosition, long *encoderLastPosition, int *encoderUseForPos, float *encoderStepDecay, bool *encoderEnabled) { - /**/ + bool stallGuard = false; bool standStill = false; bool driverError = false; @@ -1965,26 +1902,10 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, if (*encoderEnabled) { - //status = axis->getStatus(); - //stallGuard = status & FB_TMC_SPISTATUS_STALLGUARD_MASK ? true : false; - //standStill = status & FB_TMC_SPISTATUS_STANDSTILL_MASK ? true : false; - //driverError = status & FB_TMC_SPISTATUS_ERROR_MASK ? true : false; - stallGuard = axis->isStallGuard(); standStill = axis->isStandStill(); driverError = axis->isDriverError(); - //if (driverError) - //{ - // Serial.println("R99 DRIVER ERROR !!**"); - //} - - - //if (standStill) - //{ - // Serial.println("R99 STANDSTILL !!**"); - //} - // Reset every hunderd steps, so the missed steps represents the number of missed steps // out of every hundred steps done if (axis->getNrOfSteps() % 100 == 0) @@ -1996,18 +1917,6 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, axis->missedStepHistory[1] = axis->missedStepHistory[0]; axis->missedStepHistory[0] = *missedSteps; - // test print - //Serial.print("R99"); - //Serial.print(" "); - //Serial.print("S = "); - //Serial.print(" "); - //Serial.print(axis->getNrOfSteps()); - //Serial.print(" "); - //Serial.print("M = "); - //Serial.print(" "); - //Serial.print(*missedSteps); - //Serial.print("\r\n"); - // reset missed steps *missedSteps = 0; } @@ -2140,8 +2049,6 @@ void Movement::loadMotorSettings() axisY.loadMotorSettings(speedMax[1], speedMax[1], speedMin[1], speedMin[1], speedHome[1], stepsAcc[1], stepsAcc[1], timeOut[1], homeIsUp[1], motorInv[1], endStInv[1], endStInv2[1], MOVEMENT_INTERRUPT_SPEED, motor2Enbl[1], motor2Inv[1], endStEnbl[1], motorStopAtHome[1], motorMaxSize[1], motorStopAtMax[1]); axisZ.loadMotorSettings(speedMax[2], speedMaxHome[2], speedMin[2], speedMinHome[2], speedHome[2], stepsAcc[2], stepsAccHome[2], timeOut[2], homeIsUp[2], motorInv[2], endStInv[2], endStInv2[2], MOVEMENT_INTERRUPT_SPEED, motor2Enbl[2], motor2Inv[2], endStEnbl[2], motorStopAtHome[2], motorMaxSize[2], motorStopAtMax[2]); - /**/ - /* #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) loadSettingsTMC2130(); diff --git a/src/MovementAxis.cpp b/src/MovementAxis.cpp index 67d0c29..be6e6fe 100644 --- a/src/MovementAxis.cpp +++ b/src/MovementAxis.cpp @@ -75,8 +75,6 @@ void MovementAxis::test() unsigned int MovementAxis::getLostSteps() { - /**/ - //return TMC2130A->get_MSCNT(); return 0; } @@ -145,8 +143,6 @@ bool MovementAxis::isDriverError() uint8_t MovementAxis::getStatus() { - /**/ - // Nog test uint32_t missed_step = 0; TMC2130A->read_REG(FB_TMC_REG_LOST_STEPS, &missed_step); @@ -202,7 +198,6 @@ uint8_t MovementAxis::getStatus() { uint16_t MovementAxis::getLoad() { //return TMC2130A->sg_result(); - /**/ return 0; } diff --git a/src/ParameterList.h b/src/ParameterList.h index 445d14f..d88cd4c 100644 --- a/src/ParameterList.h +++ b/src/ParameterList.h @@ -133,7 +133,7 @@ enum ParamListEnum MOVEMENT_AXIS_NR_STEPS_Y = 142, MOVEMENT_AXIS_NR_STEPS_Z = 143, - MOVEMENT_AXIS_NR_STEPS_H_X = 151,/**/ + MOVEMENT_AXIS_NR_STEPS_H_X = 151, MOVEMENT_AXIS_NR_STEPS_H_Y = 152, MOVEMENT_AXIS_NR_STEPS_H_Z = 153, diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index f503f90..0a88a22 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -62,8 +62,6 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, data |= ((uint32_t(16)&FB_TMC_IHOLDDELAY_MASK) << FB_TMC_IHOLDDELAY); tb->write_REG(FB_TMC_REG_IHOLD_IRUN, data); - - // Chop and cool conf if (!stealth) @@ -101,95 +99,36 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, if (stealth) { - - 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->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(4) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(-2) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); - //tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); + + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); + + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); + + // Disable settings from non-stealth mode + tb->set_GCONF(FB_TMC_GCONF_I_SCALE_ANALOG, 0); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); // Enbable stealth - tb->set_GCONF(FB_TMC_GCONF_EN_PWM_MODE, 1); tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_AUTOSCALE, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AUTOSCALE] << FB_TMC_PWMCONF_PWM_AUTOSCALE); tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(0) << FB_TMC_PWMCONF_PWM_FREQ, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_FREQ] << FB_TMC_PWMCONF_PWM_FREQ); tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_GRAD, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_GRAD] << FB_TMC_PWMCONF_PWM_GRAD); + tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(128) << FB_TMC_PWMCONF_PWM_AMPL, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AMPL] << FB_TMC_PWMCONF_PWM_AMPL); + tb->set_GCONF(FB_TMC_GCONF_EN_PWM_MODE, uint32_t(1)); - // 2020-05-15 copy of settings before experiments - 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); - - } - - - /* - 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); // even afgezet voor test - tb->set_GCONF(FB_TMC_GCONF_DIAG1_ONSTATE, 1); // even afgezet voor test - tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK); - tb->write_REG(FB_TMC_REG_THIGH, 0xFFFFF & 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(15) << FB_TMC_COOLCONF_SEMAX, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SEMAX] << FB_TMC_COOLCONF_SEMAX); -*/ + // Disable diagnostics + tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 0); + tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 0); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_COOLCONF_SGT, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SGT] << FB_TMC_COOLCONF_SGT); - // om later te testen in dcStep modus - - // DirectX for test - //tb->alter_REG(FB_TMC_REG_XDIRECT, uint32_t(248) << FB_TMC_XDIRECT_COIL_A, FB_TMC_XDIRECT_COIL_A_MASK << FB_TMC_XDIRECT_COIL_A); - //tb->alter_REG(FB_TMC_REG_XDIRECT, uint32_t(248) << FB_TMC_XDIRECT_COIL_B, FB_TMC_XDIRECT_COIL_B_MASK << FB_TMC_XDIRECT_COIL_B); - - /*dc experiment eruit gehaald 2020-06-02 - // set to dcStep mode - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(8) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF); - - // Set minimum speed - tb->write_REG(FB_TMC_REG_VDCMIN, uint32_t(0) & FB_TMC_VDCMIN_MASK); - tb->write_REG(FB_TMC_REG_TCOOLTHRS, uint32_t(0) & FB_TMC_TCOOLTHRS_MASK); - - - // Set maximum speed - tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK); - - // Set sensitivity - tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(1024) << FB_TMC_DCCTRL_DC_TIME, FB_TMC_DCCTRL_DC_TIME_MASK); - tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(256) << FB_TMC_DCCTRL_DC_SG, FB_TMC_DCCTRL_DC_SG_MASK); - 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); - - // Set chopper - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(8) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF); - - // enable diagnostics - tb->set_GCONF(FB_TMC_GCONF_DIAG0_STALL, 1); - tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 1); - - tb->set_GCONF(FB_TMC_GCONF_DIAG1_STALL, 0); - tb->set_GCONF(FB_TMC_GCONF_DIAG1_INDEX, 0); - tb->set_GCONF(FB_TMC_GCONF_DIAG1_ONSTATE, 0); - - tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 0); - */ - - - /* // 2020-05-15 copy of settings before experiments - 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 \ No newline at end of file diff --git a/src/TMC2130.h b/src/TMC2130.h index 16e6438..db447e5 100644 --- a/src/TMC2130.h +++ b/src/TMC2130.h @@ -17,10 +17,10 @@ #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) #include "TMC2130_Basics.h" - static TMC2130_Basics TMC2130X(X_CHIP_SELECT); - static TMC2130_Basics TMC2130Y(Y_CHIP_SELECT); - static TMC2130_Basics TMC2130Z(Z_CHIP_SELECT); - static TMC2130_Basics TMC2130E(E_CHIP_SELECT); + static TMC2130_Basics TMC2130X(X_CHIP_SELECT, 1); + static TMC2130_Basics TMC2130Y(Y_CHIP_SELECT, 2); + static TMC2130_Basics TMC2130Z(Z_CHIP_SELECT, 3); + static TMC2130_Basics TMC2130E(E_CHIP_SELECT, 4); void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth); #endif diff --git a/src/TMC2130_Basics.cpp b/src/TMC2130_Basics.cpp index 03985ea..2a925c8 100644 --- a/src/TMC2130_Basics.cpp +++ b/src/TMC2130_Basics.cpp @@ -1,10 +1,11 @@ #include "TMC2130_Basics.h" -TMC2130_Basics::TMC2130_Basics(uint8_t csPin) +TMC2130_Basics::TMC2130_Basics(uint8_t csPin, uint8_t axisNumber) { _csPin = csPin; _status = 0; - _debug = ""; + _axisNumber = axisNumber; + //_debug = ""; } // initialize the driver with its CS/SS pin @@ -146,3 +147,7 @@ uint8_t TMC2130_Basics::getStatus() return _status; } +uint8_t TMC2130_Basics::getAxisNumber() +{ + return _axisNumber; +} diff --git a/src/TMC2130_Basics.h b/src/TMC2130_Basics.h index 3c52bba..7a09194 100644 --- a/src/TMC2130_Basics.h +++ b/src/TMC2130_Basics.h @@ -13,7 +13,7 @@ class TMC2130_Basics { public: - TMC2130_Basics(uint8_t csPin); + TMC2130_Basics(uint8_t csPin, uint8_t axisNumber); void init(); void init_SPI(); @@ -26,6 +26,7 @@ class TMC2130_Basics { uint8_t set_CHOPCONF(uint8_t position, uint8_t value); uint8_t getStatus(); + uint8_t getAxisNumber(); //boolean isReset(); //boolean isError(); @@ -39,7 +40,8 @@ class TMC2130_Basics { uint32_t _pwmconf; uint8_t _csPin; uint8_t _status; - String _debug; + uint8_t _axisNumber; + //String _debug; }; diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 4b533db..f690cab 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -1,7 +1,6 @@ // Do not remove the include below #include "farmbot_arduino_controller.h" -/**/ //#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) #include "TimerOne.h" //#endif @@ -71,8 +70,6 @@ void interrupt(void) } //#endif -/**/ // unsigned long intrCounter = 0; - #if defined(FARMDUINO_EXP_V20xxx) ISR(TIMER2_OVF_vect) { From ad1f6179153516ee2e6ea17eaf86ba2224c08314 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 13 Jul 2021 13:34:42 -0700 Subject: [PATCH 10/71] bump version (6.6.0) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 9ef8daa..73f69ea 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.5.40\0"; + const char SOFTWARE_VERSION[] = "6.6.0\0"; const int LOGGING = 0; From 36ea6238db45ca8ba6e9a8e22def2c7d9a82f3d4 Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Wed, 14 Jul 2021 22:32:38 +0200 Subject: [PATCH 11/71] Adding IntPol --- src/TMC2130.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 24cc4fc..40914f9 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -104,6 +104,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); + /**/tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_INTPOL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_INTPOL] << FB_TMC_CHOPCONF_INTPOL); tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); From 11622905ec182bb2df04c1a71b99772d090f6287 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 14 Jul 2021 14:25:40 -0700 Subject: [PATCH 12/71] bump version (6.6.1) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 73f69ea..53e0678 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.0\0"; + const char SOFTWARE_VERSION[] = "6.6.1\0"; const int LOGGING = 0; From 6067924fde0784f73be39ffbfd29e6982f77bc96 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 20 Jul 2021 08:40:36 -0700 Subject: [PATCH 13/71] fix pin array size --- src/PinControl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PinControl.h b/src/PinControl.h index 788e147..d927333 100644 --- a/src/PinControl.h +++ b/src/PinControl.h @@ -32,7 +32,7 @@ class PinControl PinControl(PinControl const &); void operator=(PinControl const &); - bool pinWritten[2][56]; + bool pinWritten[2][70]; }; From e329e3dd8f933f502f73c202dedd813827425e12 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 20 Jul 2021 08:41:02 -0700 Subject: [PATCH 14/71] bump version (6.6.2) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 53e0678..2441b3d 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.1\0"; + const char SOFTWARE_VERSION[] = "6.6.2\0"; const int LOGGING = 0; From d1a96fcc163d68c06407bdc582231f9e8e01968d Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Jul 2021 15:24:22 -0700 Subject: [PATCH 15/71] clean up unused pins --- src/pins.h | 104 ++++++++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/src/pins.h b/src/pins.h index 5a34482..4892bb6 100644 --- a/src/pins.h +++ b/src/pins.h @@ -266,8 +266,8 @@ #define X_CHIP_SELECT 24 // X1_CHIP_SELECT #define X_MIN_PIN 69 #define X_MAX_PIN 68 - #define X_ENCDR_A 16 - #define X_ENCDR_B 17 + #define X_ENCDR_A -1 // N/A + #define X_ENCDR_B -1 // N/A #define X_ENCDR_A_Q -1 // N/A #define X_ENCDR_B_Q -1 // N/A @@ -276,8 +276,8 @@ #define E_DIR_PIN 30 // X2_DIR_PIN #define E_ENABLE_PIN 14 // X2_ENABLE_PIN #define E_CHIP_SELECT 29 // X2_CHIP_SELECT - #define X2_ENCDR_A 22 - #define X2_ENCDR_B 39 + #define X2_ENCDR_A -1 // N/A + #define X2_ENCDR_B -1 // N/A // Y-AXIS #define Y_STEP_PIN 32 @@ -286,8 +286,8 @@ #define Y_CHIP_SELECT 28 // Y_CHIP_SELECT #define Y_MIN_PIN 67 #define Y_MAX_PIN 66 - #define Y_ENCDR_A 23 - #define Y_ENCDR_B 24 + #define Y_ENCDR_A -1 // N/A + #define Y_ENCDR_B -1 // N/A #define Y_ENCDR_A_Q -1 // N/A #define Y_ENCDR_B_Q -1 // N/A @@ -298,8 +298,8 @@ #define Z_CHIP_SELECT 23 // Z_CHIP_SELECT #define Z_MIN_PIN 65 #define Z_MAX_PIN 64 - #define Z_ENCDR_A 29 - #define Z_ENCDR_B 28 + #define Z_ENCDR_A -1 // N/A + #define Z_ENCDR_B -1 // N/A #define Z_ENCDR_A_Q -1 // N/A #define Z_ENCDR_B_Q -1 // N/A @@ -314,7 +314,7 @@ #define UTM_J -1 #define UTM_K -1 #define UTM_L -1 - // Available digital pins: 2,3,18,19,38,42,43,44,45,46,47,48,49 + // Available digital pins: 2,3,16,17,18,19,22,38,39,42,43,44,45,46,47,48,49 // Available analog pins: 6,7,8 #define LED_PIN 13 @@ -343,13 +343,13 @@ #define SERVO_2_PIN 6 #define SERVO_3_PIN 11 - // Encoder X channel A: pin 16, port H1 - #define ENC_X_A_PORT PINH - #define ENC_X_A_BYTE 0x02 + // Encoder X channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_X_A_PORT PINB + #define ENC_X_A_BYTE 0x80 - // Encoder X channel B: pin 17, port H0 - #define ENC_X_B_PORT PINH - #define ENC_X_B_BYTE 0x01 + // Encoder X channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_X_B_PORT PINB + #define ENC_X_B_BYTE 0x80 // Encoder X channel A Q (disabled, use LED pin): pin 13, port B7 #define ENC_X_A_Q_PORT PINB @@ -359,13 +359,13 @@ #define ENC_X_B_Q_PORT PINB #define ENC_X_B_Q_BYTE 0x80 - // Encoder Y channel A: pin 23, port A1 - #define ENC_Y_A_PORT PINA - #define ENC_Y_A_BYTE 0x02 + // Encoder Y channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_A_PORT PINB + #define ENC_Y_A_BYTE 0x80 - // Encoder Y channel B: pin 24, port A2 - #define ENC_Y_B_PORT PINA - #define ENC_Y_B_BYTE 0x04 + // Encoder Y channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_B_PORT PINB + #define ENC_Y_B_BYTE 0x80 // Encoder Y channel A Q (disabled, use LED pin): pin 13, port B7 #define ENC_Y_A_Q_PORT PINB @@ -375,13 +375,13 @@ #define ENC_Y_B_Q_PORT PINB #define ENC_Y_B_Q_BYTE 0x80 - // Encoder Z channel A: pin 29, port A7 - #define ENC_Z_A_PORT PINA + // Encoder Z channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_A_PORT PINB #define ENC_Z_A_BYTE 0x80 - // Encoder Z channel B: pin 28, port A6 - #define ENC_Z_B_PORT PINA - #define ENC_Z_B_BYTE 0x40 + // Encoder Z channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_B_PORT PINB + #define ENC_Z_B_BYTE 0x80 // Encoder Z channel A Q (disabled, use LED pin): pin 13, port B7 #define ENC_Z_A_Q_PORT PINB @@ -402,8 +402,8 @@ #define X_CHIP_SELECT 24 // X1_CHIP_SELECT #define X_MIN_PIN 69 #define X_MAX_PIN 68 - #define X_ENCDR_A 16 - #define X_ENCDR_B 17 + #define X_ENCDR_A -1 // N/A + #define X_ENCDR_B -1 // N/A #define X_ENCDR_A_Q -1 // N/A #define X_ENCDR_B_Q -1 // N/A @@ -412,8 +412,8 @@ #define E_DIR_PIN 30 // X2_DIR_PIN #define E_ENABLE_PIN 14 // X2_ENABLE_PIN #define E_CHIP_SELECT 29 // X2_CHIP_SELECT - #define X2_ENCDR_A 22 - #define X2_ENCDR_B 39 + #define X2_ENCDR_A -1 // N/A + #define X2_ENCDR_B -1 // N/A // Y-AXIS #define Y_STEP_PIN 32 @@ -422,8 +422,8 @@ #define Y_CHIP_SELECT 28 // Y_CHIP_SELECT #define Y_MIN_PIN 67 #define Y_MAX_PIN 66 - #define Y_ENCDR_A 23 - #define Y_ENCDR_B 24 + #define Y_ENCDR_A -1 // N/A + #define Y_ENCDR_B -1 // N/A #define Y_ENCDR_A_Q -1 // N/A #define Y_ENCDR_B_Q -1 // N/A @@ -434,8 +434,8 @@ #define Z_CHIP_SELECT 23 // Z_CHIP_SELECT #define Z_MIN_PIN 65 #define Z_MAX_PIN 64 - #define Z_ENCDR_A 29 - #define Z_ENCDR_B 28 + #define Z_ENCDR_A -1 // N/A + #define Z_ENCDR_B -1 // N/A #define Z_ENCDR_A_Q -1 // N/A #define Z_ENCDR_B_Q -1 // N/A @@ -450,7 +450,7 @@ #define UTM_J -1 #define UTM_K -1 #define UTM_L -1 // PE - // Available digital pins: 18,19,38,42,43,44,45,46,47,48,49 + // Available digital pins: 16,17,18,19,22,38,39,42,43,44,45,46,47,48,49 // Available analog pins: 7,8 #define LED_PIN 13 @@ -482,13 +482,13 @@ #define SERVO_2_PIN 6 #define SERVO_3_PIN 11 - // Encoder X channel A: pin 16, port H1 - #define ENC_X_A_PORT PINH - #define ENC_X_A_BYTE 0x02 + // Encoder X channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_X_A_PORT PINB + #define ENC_X_A_BYTE 0x80 - // Encoder X channel B: pin 17, port H0 - #define ENC_X_B_PORT PINH - #define ENC_X_B_BYTE 0x01 + // Encoder X channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_X_B_PORT PINB + #define ENC_X_B_BYTE 0x80 // Encoder X channel A Q (disabled, use LED pin): pin 13, port B7 #define ENC_X_A_Q_PORT PINB @@ -498,13 +498,13 @@ #define ENC_X_B_Q_PORT PINB #define ENC_X_B_Q_BYTE 0x80 - // Encoder Y channel A: pin 23, port A1 - #define ENC_Y_A_PORT PINA - #define ENC_Y_A_BYTE 0x02 + // Encoder Y channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_A_PORT PINB + #define ENC_Y_A_BYTE 0x80 - // Encoder Y channel B: pin 24, port A2 - #define ENC_Y_B_PORT PINA - #define ENC_Y_B_BYTE 0x04 + // Encoder Y channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_B_PORT PINB + #define ENC_Y_B_BYTE 0x80 // Encoder Y channel A Q (disabled, use LED pin): pin 13, port B7 #define ENC_Y_A_Q_PORT PINB @@ -514,13 +514,13 @@ #define ENC_Y_B_Q_PORT PINB #define ENC_Y_B_Q_BYTE 0x80 - // Encoder Z channel A: pin 29, port A7 - #define ENC_Z_A_PORT PINA + // Encoder Z channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_A_PORT PINB #define ENC_Z_A_BYTE 0x80 - // Encoder Z channel B: pin 28, port A6 - #define ENC_Z_B_PORT PINA - #define ENC_Z_B_BYTE 0x40 + // Encoder Z channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_B_PORT PINB + #define ENC_Z_B_BYTE 0x80 // Encoder Z channel A Q (disabled, use LED pin): pin 13, port B7 #define ENC_Z_A_Q_PORT PINB From f31cbc408d4d7fcb11f45a8289592db27898e4d1 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Jul 2021 15:25:01 -0700 Subject: [PATCH 16/71] bump version (6.6.3) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 2441b3d..744ae68 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.2\0"; + const char SOFTWARE_VERSION[] = "6.6.3\0"; const int LOGGING = 0; From 3393ca263f5bd183621e5e2c284061aceadf7d9f Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Jul 2021 15:43:09 -0700 Subject: [PATCH 17/71] remove used pin from available pins --- src/pins.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pins.h b/src/pins.h index 4892bb6..ff78722 100644 --- a/src/pins.h +++ b/src/pins.h @@ -184,7 +184,7 @@ #define UTM_J -1 #define UTM_K -1 #define UTM_L -1 - // Available digital pins: 2,3,18,19,38,42,43,44,45,46,47,48,49 + // Available digital pins: 2,3,18,19,38,42,43,44,45,46,47,48 // Available analog pins: 0,1,2,3,4,6,7,8 #define LED_PIN 13 @@ -314,7 +314,7 @@ #define UTM_J -1 #define UTM_K -1 #define UTM_L -1 - // Available digital pins: 2,3,16,17,18,19,22,38,39,42,43,44,45,46,47,48,49 + // Available digital pins: 2,3,16,17,18,19,22,38,39,42,43,44,45,46,47,48 // Available analog pins: 6,7,8 #define LED_PIN 13 @@ -450,7 +450,7 @@ #define UTM_J -1 #define UTM_K -1 #define UTM_L -1 // PE - // Available digital pins: 16,17,18,19,22,38,39,42,43,44,45,46,47,48,49 + // Available digital pins: 16,17,18,19,22,38,39,42,43,44,45,46,47,48 // Available analog pins: 7,8 #define LED_PIN 13 From 17d72b4712a705652f18fb4a7a0d3428a47934d3 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Jul 2021 17:02:37 -0700 Subject: [PATCH 18/71] refactor alter_reg --- src/TMC2130.cpp | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 40914f9..494e5af 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -46,7 +46,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, 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); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_MRES, data); // Set the current @@ -68,24 +68,25 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, { 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(4) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(2) << FB_TMC_CHOPCONF_TBL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TBL] << FB_TMC_CHOPCONF_TBL); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_TOFF, 3); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_HSTRT, 4); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << 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); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_HEND, 1); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_TBL, 2); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_CHM, 0); + + tb->set_CHOPCONF(FB_TMC_COOLCONF_SEMIN, 1); + tb->set_CHOPCONF(FB_TMC_COOLCONF_SEMAX, 2); + tb->set_CHOPCONF(FB_TMC_COOLCONF_SEDN, 0b01); tb->write_REG(FB_TMC_REG_TPWMTHRS, uint32_t(0xFFFFFFFF)); tb->write_REG(FB_TMC_REG_TCOOLTHRS, 0xFFFFF & FB_TMC_TCOOLTHRS_MASK); tb->write_REG(FB_TMC_REG_THIGH, 10000 & FB_TMC_THIGH_MASK); //dcStep settings - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b01) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(8) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_VHIGHCHM, 0b01); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_VHIGHFS, 0b01); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_TOFF, 8); tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(100) << FB_TMC_DCCTRL_DC_TIME, FB_TMC_DCCTRL_DC_TIME_MASK << FB_TMC_DCCTRL_DC_TIME); tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(8) << FB_TMC_DCCTRL_DC_SG, FB_TMC_DCCTRL_DC_SG_MASK << FB_TMC_DCCTRL_DC_SG); @@ -94,24 +95,24 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, // Enable diagnostics tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 1); tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 1); - 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_CHOPCONF(FB_TMC_COOLCONF_SGT, sensitivity); } if (stealth) { - 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_CHOPCONF(FB_TMC_CHOPCONF_TOFF, 3); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_TBL, 1); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); - /**/tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_INTPOL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_INTPOL] << FB_TMC_CHOPCONF_INTPOL); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_HSTRT, 0); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_HEND, 0); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_INTPOL, 1); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_CHM, 0); // Disable settings from non-stealth mode tb->set_GCONF(FB_TMC_GCONF_I_SCALE_ANALOG, 0); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_VHIGHCHM, 0b00); + tb->set_CHOPCONF(FB_TMC_CHOPCONF_VHIGHFS, 0b00); // Enbable stealth tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_AUTOSCALE, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AUTOSCALE] << FB_TMC_PWMCONF_PWM_AUTOSCALE); @@ -125,7 +126,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, // Disable diagnostics tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 0); tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 0); - tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_COOLCONF_SGT, FB_TMC_CHOPCONF_MASKS[FB_TMC_COOLCONF_SGT] << FB_TMC_COOLCONF_SGT); + tb->set_CHOPCONF(FB_TMC_COOLCONF_SGT, 0); } From 75e7df74cb3517adefcaa4c2cd8885d073acfc7a Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Jul 2021 17:12:39 -0700 Subject: [PATCH 19/71] try switching driver comms to spi transactions --- src/TMC2130_Basics.cpp | 24 +++++++++++++++--------- src/TMC2130_Basics.h | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/TMC2130_Basics.cpp b/src/TMC2130_Basics.cpp index 2a925c8..ffac496 100644 --- a/src/TMC2130_Basics.cpp +++ b/src/TMC2130_Basics.cpp @@ -12,23 +12,24 @@ TMC2130_Basics::TMC2130_Basics(uint8_t csPin, uint8_t axisNumber) void TMC2130_Basics::init() { pinMode(_csPin, OUTPUT); digitalWrite(_csPin, HIGH); - init_SPI(); + // init_SPI(); read_STAT(); } // initialize SPI -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(SPI_CLOCK_DIV4); - SPI.begin(); -} +// 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(SPI_CLOCK_DIV4); +// SPI.begin(); +// } // read status uint8_t TMC2130_Basics::read_STAT() { //init_SPI(); + SPI.beginTransaction(SPISettings(FB_TMC_SPI_CLOCK_DIVIDER, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // read address @@ -40,6 +41,7 @@ uint8_t TMC2130_Basics::read_STAT() } digitalWrite(_csPin, HIGH); + SPI.endTransaction(); return _status; } @@ -47,7 +49,8 @@ uint8_t TMC2130_Basics::read_STAT() // read a register uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) { - init_SPI(); + // init_SPI(); + SPI.beginTransaction(SPISettings(FB_TMC_SPI_CLOCK_DIVIDER, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // read address @@ -75,6 +78,7 @@ uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) *data |= SPI.transfer(0x00) & 0xFF; digitalWrite(_csPin, HIGH); + SPI.endTransaction(); return _status; } @@ -82,6 +86,7 @@ uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) // write to a register uint8_t TMC2130_Basics::write_REG(uint8_t address, uint32_t data) { + SPI.beginTransaction(SPISettings(FB_TMC_SPI_CLOCK_DIVIDER, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // write address @@ -94,6 +99,7 @@ uint8_t TMC2130_Basics::write_REG(uint8_t address, uint32_t data) SPI.transfer((data >> 0UL) & 0xFF); digitalWrite(_csPin, HIGH); + SPI.endTransaction(); return _status; } diff --git a/src/TMC2130_Basics.h b/src/TMC2130_Basics.h index 7a09194..6f2fc98 100644 --- a/src/TMC2130_Basics.h +++ b/src/TMC2130_Basics.h @@ -15,7 +15,7 @@ class TMC2130_Basics { public: TMC2130_Basics(uint8_t csPin, uint8_t axisNumber); void init(); - void init_SPI(); + // void init_SPI(); uint8_t read_STAT(); uint8_t read_REG(uint8_t address, uint32_t *data); From 6d0613d648bc8c7d6c5d547b874927168f6c4cb9 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 21 Jul 2021 17:13:12 -0700 Subject: [PATCH 20/71] bump version (6.6.4) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 744ae68..3983853 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.3\0"; + const char SOFTWARE_VERSION[] = "6.6.4\0"; const int LOGGING = 0; From 4978c316d526457298f713f7f2a6d76a0da336f8 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Jul 2021 10:29:38 -0700 Subject: [PATCH 21/71] switch to SPI_MODE3 --- src/MovementEncoder.cpp | 12 ++++++++++-- src/farmbot_arduino_controller.cpp | 6 ------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/MovementEncoder.cpp b/src/MovementEncoder.cpp index 4aac8b0..36d00f7 100644 --- a/src/MovementEncoder.cpp +++ b/src/MovementEncoder.cpp @@ -87,7 +87,11 @@ void MovementEncoder::setPosition(long newPosition) const byte reset_cmd = 0x00; - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #if defined(FARMDUINO_V32) + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE3)); + #else + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #endif digitalWrite(NSS_PIN, LOW); delayMicroseconds(2); SPI.transfer(reset_cmd | (mdlEncoder << mdl_spi_encoder_offset)); @@ -178,7 +182,11 @@ void MovementEncoder::processEncoder() int readSize = 4; long encoderVal = 0; - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #if defined(FARMDUINO_V32) + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE3)); + #else + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #endif digitalWrite(NSS_PIN, LOW); delayMicroseconds(2); SPI.transfer(read_cmd | (mdlEncoder << mdl_spi_encoder_offset)); diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 2a0519d..26e837a 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -497,9 +497,6 @@ void setPinInputOutput() pinMode(NSS_PIN, OUTPUT); digitalWrite(NSS_PIN, HIGH); - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); - SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.begin(); #endif } @@ -622,9 +619,6 @@ void setPinInputOutput() pinMode(NSS_PIN, OUTPUT); digitalWrite(NSS_PIN, HIGH); - SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); - SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.begin(); #endif } From e8f13dfc90afcd590fe6fd963d1d689df4fdc019 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 23 Jul 2021 10:30:04 -0700 Subject: [PATCH 22/71] bump version (6.6.5) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 3983853..ba0efcd 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.4\0"; + const char SOFTWARE_VERSION[] = "6.6.5\0"; const int LOGGING = 0; From a717a30827960b7e224ce3dbb43700f0213cb525 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 13 Aug 2021 05:42:42 -0700 Subject: [PATCH 23/71] update readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fb1f525..872b1f2 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,9 @@ Value |Description 4 |Calibration error 14 |Invalid command 15 |No config +31 |Stall detected X axis +32 |Stall detected Y axis +33 |Stall detected Z axis Axis states (R05) ----------------- From c0117876ce7d1d77577fd5fe79b7742647d45009 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 13:36:11 -0700 Subject: [PATCH 24/71] change tmc spi clock frequency --- src/TMC2130_Basics.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/TMC2130_Basics.cpp b/src/TMC2130_Basics.cpp index ffac496..7a0e6cf 100644 --- a/src/TMC2130_Basics.cpp +++ b/src/TMC2130_Basics.cpp @@ -29,7 +29,7 @@ void TMC2130_Basics::init() { uint8_t TMC2130_Basics::read_STAT() { //init_SPI(); - SPI.beginTransaction(SPISettings(FB_TMC_SPI_CLOCK_DIVIDER, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // read address @@ -50,7 +50,7 @@ uint8_t TMC2130_Basics::read_STAT() uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) { // init_SPI(); - SPI.beginTransaction(SPISettings(FB_TMC_SPI_CLOCK_DIVIDER, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // read address @@ -86,7 +86,7 @@ uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) // write to a register uint8_t TMC2130_Basics::write_REG(uint8_t address, uint32_t data) { - SPI.beginTransaction(SPISettings(FB_TMC_SPI_CLOCK_DIVIDER, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // write address From 3dbc8cd8e3ff1d980bc1855c99934c280c1d6daf Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 13:36:39 -0700 Subject: [PATCH 25/71] bump version (6.6.6) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index ba0efcd..985dee9 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.5\0"; + const char SOFTWARE_VERSION[] = "6.6.6\0"; const int LOGGING = 0; From c6c6e50c8bd2dfb3c4ed58e3527308115ff5a510 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 15:20:39 -0700 Subject: [PATCH 26/71] remove tmc spi transactions --- src/TMC2130_Basics.cpp | 26 ++++++++++---------------- src/TMC2130_Basics.h | 3 +-- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/TMC2130_Basics.cpp b/src/TMC2130_Basics.cpp index 7a0e6cf..943fbd9 100644 --- a/src/TMC2130_Basics.cpp +++ b/src/TMC2130_Basics.cpp @@ -12,24 +12,23 @@ TMC2130_Basics::TMC2130_Basics(uint8_t csPin, uint8_t axisNumber) void TMC2130_Basics::init() { pinMode(_csPin, OUTPUT); digitalWrite(_csPin, HIGH); - // init_SPI(); + init_SPI(); read_STAT(); } // initialize SPI -// 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(SPI_CLOCK_DIV4); -// SPI.begin(); -// } + 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(SPI_CLOCK_DIV4); + SPI.begin(); + } // read status uint8_t TMC2130_Basics::read_STAT() { - //init_SPI(); - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); + init_SPI(); digitalWrite(_csPin, LOW); // read address @@ -41,7 +40,6 @@ uint8_t TMC2130_Basics::read_STAT() } digitalWrite(_csPin, HIGH); - SPI.endTransaction(); return _status; } @@ -49,8 +47,7 @@ uint8_t TMC2130_Basics::read_STAT() // read a register uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) { - // init_SPI(); - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); + init_SPI(); digitalWrite(_csPin, LOW); // read address @@ -78,7 +75,6 @@ uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) *data |= SPI.transfer(0x00) & 0xFF; digitalWrite(_csPin, HIGH); - SPI.endTransaction(); return _status; } @@ -86,7 +82,6 @@ uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) // write to a register uint8_t TMC2130_Basics::write_REG(uint8_t address, uint32_t data) { - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, FB_TMC_SPI_BIT_ORDER, FB_TMC_SPI_DATA_MODE)); digitalWrite(_csPin, LOW); // write address @@ -99,7 +94,6 @@ uint8_t TMC2130_Basics::write_REG(uint8_t address, uint32_t data) SPI.transfer((data >> 0UL) & 0xFF); digitalWrite(_csPin, HIGH); - SPI.endTransaction(); return _status; } diff --git a/src/TMC2130_Basics.h b/src/TMC2130_Basics.h index 6f2fc98..5b7a29b 100644 --- a/src/TMC2130_Basics.h +++ b/src/TMC2130_Basics.h @@ -15,7 +15,7 @@ class TMC2130_Basics { public: TMC2130_Basics(uint8_t csPin, uint8_t axisNumber); void init(); - // void init_SPI(); + void init_SPI(); uint8_t read_STAT(); uint8_t read_REG(uint8_t address, uint32_t *data); @@ -47,4 +47,3 @@ class TMC2130_Basics { #endif - From ab1676c43e3fe6e43b25a8af537061af64d61bef Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 15:21:02 -0700 Subject: [PATCH 27/71] bump version (6.6.7) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 985dee9..bd59333 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.6\0"; + const char SOFTWARE_VERSION[] = "6.6.7\0"; const int LOGGING = 0; From 277da0fd7620521e2eeccb3fa78da42f8eee0130 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 15:30:04 -0700 Subject: [PATCH 28/71] update defaults --- src/Config.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Config.h b/src/Config.h index bd59333..8c0ae67 100644 --- a/src/Config.h +++ b/src/Config.h @@ -123,9 +123,9 @@ const long MOVEMENT_MIN_SPD_Z2_DEFAULT = 50; // Speed used for homing and calibration - const long MOVEMENT_HOME_SPEED_X_DEFAULT = 50; - const long MOVEMENT_HOME_SPEED_Y_DEFAULT = 50; - const long MOVEMENT_HOME_SPEED_Z_DEFAULT = 50; + const long MOVEMENT_HOME_SPEED_X_DEFAULT = 400; + const long MOVEMENT_HOME_SPEED_Y_DEFAULT = 400; + const long MOVEMENT_HOME_SPEED_Z_DEFAULT = 400; // Maximum speed in steps per second const long MOVEMENT_MAX_SPD_X_DEFAULT = 400; @@ -139,29 +139,29 @@ const long MOVEMENT_INVERT_2_ENDPOINTS_Z_DEFAULT = 0; // Stop at the home position or continue to other size of axis - const long MOVEMENT_STOP_AT_HOME_X_DEFAULT = 0; - const long MOVEMENT_STOP_AT_HOME_Y_DEFAULT = 0; - const long MOVEMENT_STOP_AT_HOME_Z_DEFAULT = 0; + const long MOVEMENT_STOP_AT_HOME_X_DEFAULT = 1; + const long MOVEMENT_STOP_AT_HOME_Y_DEFAULT = 1; + const long MOVEMENT_STOP_AT_HOME_Z_DEFAULT = 1; // Stop at the maximum size of the axis - const long MOVEMENT_STOP_AT_MAX_X_DEFAULT = 0; - const long MOVEMENT_STOP_AT_MAX_Y_DEFAULT = 0; - const long MOVEMENT_STOP_AT_MAX_Z_DEFAULT = 0; + const long MOVEMENT_STOP_AT_MAX_X_DEFAULT = 1; + const long MOVEMENT_STOP_AT_MAX_Y_DEFAULT = 1; + const long MOVEMENT_STOP_AT_MAX_Z_DEFAULT = 1; // The retry when calibrating - const long MOVEMENT_CALIBRATION_RETRY_X_DEFAULT = 3; - const long MOVEMENT_CALIBRATION_RETRY_Y_DEFAULT = 3; - const long MOVEMENT_CALIBRATION_RETRY_Z_DEFAULT = 3; + const long MOVEMENT_CALIBRATION_RETRY_X_DEFAULT = 1; + const long MOVEMENT_CALIBRATION_RETRY_Y_DEFAULT = 1; + const long MOVEMENT_CALIBRATION_RETRY_Z_DEFAULT = 1; // deadzone for the retry for the calibration - const long MOVEMENT_CALIBRATION_DEADZONE_X_DEFAULT = 10; - const long MOVEMENT_CALIBRATION_DEADZONE_Y_DEFAULT = 10; - const long MOVEMENT_CALIBRATION_DEADZONE_Z_DEFAULT = 10; + const long MOVEMENT_CALIBRATION_DEADZONE_X_DEFAULT = 50; + const long MOVEMENT_CALIBRATION_DEADZONE_Y_DEFAULT = 50; + const long MOVEMENT_CALIBRATION_DEADZONE_Z_DEFAULT = 250; // use stealth setting or TMC2130 - const long MOVEMENT_AXIS_STEALTH_X_DEFAULT = 0; - const long MOVEMENT_AXIS_STEALTH_Y_DEFAULT = 0; - const long MOVEMENT_AXIS_STEALTH_Z_DEFAULT = 0; + const long MOVEMENT_AXIS_STEALTH_X_DEFAULT = 1; + const long MOVEMENT_AXIS_STEALTH_Y_DEFAULT = 1; + const long MOVEMENT_AXIS_STEALTH_Z_DEFAULT = 1; // motor current (used with TMC2130) const long MOVEMENT_MOTOR_CURRENT_X_DEFAULT = 600; @@ -169,9 +169,9 @@ const long MOVEMENT_MOTOR_CURRENT_Z_DEFAULT = 600; // stall sensitivity (used with TMC2130) - const long MOVEMENT_STALL_SENSITIVITY_X_DEFAULT = 30; - const long MOVEMENT_STALL_SENSITIVITY_Y_DEFAULT = 30; - const long MOVEMENT_STALL_SENSITIVITY_Z_DEFAULT = 30; + const long MOVEMENT_STALL_SENSITIVITY_X_DEFAULT = 63; + const long MOVEMENT_STALL_SENSITIVITY_Y_DEFAULT = 63; + const long MOVEMENT_STALL_SENSITIVITY_Z_DEFAULT = 63; // micro steps setting (used with TMC2130) const long MOVEMENT_MICROSTEPS_X_DEFAULT = 0; From fe87847203dae62f74aa114c3b3cee9c14215402 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 15:30:48 -0700 Subject: [PATCH 29/71] bump version (6.6.8) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 8c0ae67..1f1df12 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.7\0"; + const char SOFTWARE_VERSION[] = "6.6.8\0"; const int LOGGING = 0; From 730b94dc72c3f19d898b17f67c010fb85ceea672 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 16:14:45 -0700 Subject: [PATCH 30/71] fix tmc init issue --- src/TMC2130_Basics.cpp | 18 +++++++++--------- src/TMC2130_Basics.h | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/TMC2130_Basics.cpp b/src/TMC2130_Basics.cpp index 943fbd9..2a925c8 100644 --- a/src/TMC2130_Basics.cpp +++ b/src/TMC2130_Basics.cpp @@ -17,18 +17,18 @@ void TMC2130_Basics::init() { } // initialize SPI - 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(SPI_CLOCK_DIV4); - SPI.begin(); - } +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(SPI_CLOCK_DIV4); + SPI.begin(); +} // read status uint8_t TMC2130_Basics::read_STAT() { - init_SPI(); + //init_SPI(); digitalWrite(_csPin, LOW); // read address @@ -47,7 +47,7 @@ uint8_t TMC2130_Basics::read_STAT() // read a register uint8_t TMC2130_Basics::read_REG(uint8_t address, uint32_t *data) { - init_SPI(); + init_SPI(); digitalWrite(_csPin, LOW); // read address diff --git a/src/TMC2130_Basics.h b/src/TMC2130_Basics.h index 5b7a29b..7a09194 100644 --- a/src/TMC2130_Basics.h +++ b/src/TMC2130_Basics.h @@ -47,3 +47,4 @@ class TMC2130_Basics { #endif + From 3c7c16754319e4dd528c6f61626f685ddc1fedce Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 16:15:14 -0700 Subject: [PATCH 31/71] bump version (6.6.9) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 1f1df12..f8c1130 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.8\0"; + const char SOFTWARE_VERSION[] = "6.6.9\0"; const int LOGGING = 0; From 1d0539a8143bbc5a71bff778c63218944a10ffef Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 16 Aug 2021 16:21:51 -0700 Subject: [PATCH 32/71] improve diff --- src/TMC2130.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 494e5af..b831121 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -70,7 +70,6 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->set_CHOPCONF(FB_TMC_CHOPCONF_TOFF, 3); tb->set_CHOPCONF(FB_TMC_CHOPCONF_HSTRT, 4); - tb->set_CHOPCONF(FB_TMC_CHOPCONF_HEND, 1); tb->set_CHOPCONF(FB_TMC_CHOPCONF_TBL, 2); tb->set_CHOPCONF(FB_TMC_CHOPCONF_CHM, 0); From af00588c74e0952978b70308a24fdb2da91e244e Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 17 Aug 2021 15:42:07 -0700 Subject: [PATCH 33/71] revert changes --- src/Config.h | 42 +++++++++++++++--------------- src/farmbot_arduino_controller.cpp | 6 +++++ 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/Config.h b/src/Config.h index f8c1130..a3cfa29 100644 --- a/src/Config.h +++ b/src/Config.h @@ -123,9 +123,9 @@ const long MOVEMENT_MIN_SPD_Z2_DEFAULT = 50; // Speed used for homing and calibration - const long MOVEMENT_HOME_SPEED_X_DEFAULT = 400; - const long MOVEMENT_HOME_SPEED_Y_DEFAULT = 400; - const long MOVEMENT_HOME_SPEED_Z_DEFAULT = 400; + const long MOVEMENT_HOME_SPEED_X_DEFAULT = 50; + const long MOVEMENT_HOME_SPEED_Y_DEFAULT = 50; + const long MOVEMENT_HOME_SPEED_Z_DEFAULT = 50; // Maximum speed in steps per second const long MOVEMENT_MAX_SPD_X_DEFAULT = 400; @@ -139,29 +139,29 @@ const long MOVEMENT_INVERT_2_ENDPOINTS_Z_DEFAULT = 0; // Stop at the home position or continue to other size of axis - const long MOVEMENT_STOP_AT_HOME_X_DEFAULT = 1; - const long MOVEMENT_STOP_AT_HOME_Y_DEFAULT = 1; - const long MOVEMENT_STOP_AT_HOME_Z_DEFAULT = 1; + const long MOVEMENT_STOP_AT_HOME_X_DEFAULT = 0; + const long MOVEMENT_STOP_AT_HOME_Y_DEFAULT = 0; + const long MOVEMENT_STOP_AT_HOME_Z_DEFAULT = 0; // Stop at the maximum size of the axis - const long MOVEMENT_STOP_AT_MAX_X_DEFAULT = 1; - const long MOVEMENT_STOP_AT_MAX_Y_DEFAULT = 1; - const long MOVEMENT_STOP_AT_MAX_Z_DEFAULT = 1; + const long MOVEMENT_STOP_AT_MAX_X_DEFAULT = 0; + const long MOVEMENT_STOP_AT_MAX_Y_DEFAULT = 0; + const long MOVEMENT_STOP_AT_MAX_Z_DEFAULT = 0; // The retry when calibrating - const long MOVEMENT_CALIBRATION_RETRY_X_DEFAULT = 1; - const long MOVEMENT_CALIBRATION_RETRY_Y_DEFAULT = 1; - const long MOVEMENT_CALIBRATION_RETRY_Z_DEFAULT = 1; + const long MOVEMENT_CALIBRATION_RETRY_X_DEFAULT = 3; + const long MOVEMENT_CALIBRATION_RETRY_Y_DEFAULT = 3; + const long MOVEMENT_CALIBRATION_RETRY_Z_DEFAULT = 3; // deadzone for the retry for the calibration - const long MOVEMENT_CALIBRATION_DEADZONE_X_DEFAULT = 50; - const long MOVEMENT_CALIBRATION_DEADZONE_Y_DEFAULT = 50; - const long MOVEMENT_CALIBRATION_DEADZONE_Z_DEFAULT = 250; + const long MOVEMENT_CALIBRATION_DEADZONE_X_DEFAULT = 10; + const long MOVEMENT_CALIBRATION_DEADZONE_Y_DEFAULT = 10; + const long MOVEMENT_CALIBRATION_DEADZONE_Z_DEFAULT = 10; // use stealth setting or TMC2130 - const long MOVEMENT_AXIS_STEALTH_X_DEFAULT = 1; - const long MOVEMENT_AXIS_STEALTH_Y_DEFAULT = 1; - const long MOVEMENT_AXIS_STEALTH_Z_DEFAULT = 1; + const long MOVEMENT_AXIS_STEALTH_X_DEFAULT = 0; + const long MOVEMENT_AXIS_STEALTH_Y_DEFAULT = 0; + const long MOVEMENT_AXIS_STEALTH_Z_DEFAULT = 0; // motor current (used with TMC2130) const long MOVEMENT_MOTOR_CURRENT_X_DEFAULT = 600; @@ -169,9 +169,9 @@ const long MOVEMENT_MOTOR_CURRENT_Z_DEFAULT = 600; // stall sensitivity (used with TMC2130) - const long MOVEMENT_STALL_SENSITIVITY_X_DEFAULT = 63; - const long MOVEMENT_STALL_SENSITIVITY_Y_DEFAULT = 63; - const long MOVEMENT_STALL_SENSITIVITY_Z_DEFAULT = 63; + const long MOVEMENT_STALL_SENSITIVITY_X_DEFAULT = 30; + const long MOVEMENT_STALL_SENSITIVITY_Y_DEFAULT = 30; + const long MOVEMENT_STALL_SENSITIVITY_Z_DEFAULT = 30; // micro steps setting (used with TMC2130) const long MOVEMENT_MICROSTEPS_X_DEFAULT = 0; diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 26e837a..2a0519d 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -497,6 +497,9 @@ void setPinInputOutput() pinMode(NSS_PIN, OUTPUT); digitalWrite(NSS_PIN, HIGH); + SPI.setBitOrder(MSBFIRST); + SPI.setDataMode(SPI_MODE0); + SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.begin(); #endif } @@ -619,6 +622,9 @@ void setPinInputOutput() pinMode(NSS_PIN, OUTPUT); digitalWrite(NSS_PIN, HIGH); + SPI.setBitOrder(MSBFIRST); + SPI.setDataMode(SPI_MODE0); + SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.begin(); #endif } From 4d052c8a4967b3f737425bc77d9cbfd3d42a97fd Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 17 Aug 2021 15:42:34 -0700 Subject: [PATCH 34/71] bump version (6.6.10) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index a3cfa29..efa3c1b 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.9\0"; + const char SOFTWARE_VERSION[] = "6.6.10\0"; const int LOGGING = 0; From ad82256f6b59af6cb4628aa3274595900fe19d3a Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Tue, 24 Aug 2021 22:02:30 +0200 Subject: [PATCH 35/71] Disable interrupt during writing of parameters --- src/Movement.cpp | 1 + src/MovementAxis.cpp | 2 +- src/TMC2130.cpp | 23 ++++++++++++++++++++++- src/TMC2130.h | 2 +- src/farmbot_arduino_controller.cpp | 13 +++++++++++++ src/farmbot_arduino_controller.h | 2 ++ 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Movement.cpp b/src/Movement.cpp index f7fb5a6..4aa2c15 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -2279,6 +2279,7 @@ void Movement::setPositionZ(long pos) // Handle movement by checking each axis void Movement::handleMovementInterrupt(void) { + // No need to check the encoders for Farmduino 1.4 #if defined(RAMPS_V14) || defined(FARMDUINO_V10) checkEncoders(); diff --git a/src/MovementAxis.cpp b/src/MovementAxis.cpp index 3cd334a..57ff2bb 100644 --- a/src/MovementAxis.cpp +++ b/src/MovementAxis.cpp @@ -112,7 +112,7 @@ void MovementAxis::initTMC2130() } void MovementAxis::loadSettingsTMC2130(int motorCurrent, int stallSensitivity, int microSteps, bool stealth) -{ +{ loadTMC2130ParametersMotor(TMC2130A, microSteps, motorCurrent, stallSensitivity, stealth); if (channelLabel == 'X') diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 40914f9..f2be3a1 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -12,6 +12,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth) { + //loadingParameters = true; uint32_t data = 0; uint32_t value = 0; @@ -95,6 +96,10 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 1); tb->set_GCONF(FB_TMC_GCONF_DIAG1_STEPS_SKIPPED, 1); 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); + + // Disable stealth + tb->set_GCONF(FB_TMC_GCONF_EN_PWM_MODE, uint32_t(1)); + } if (stealth) @@ -104,7 +109,7 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HSTRT, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HSTRT] << FB_TMC_CHOPCONF_HSTRT); tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_HEND, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_HEND] << FB_TMC_CHOPCONF_HEND); - /**/tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_INTPOL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_INTPOL] << FB_TMC_CHOPCONF_INTPOL); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << FB_TMC_CHOPCONF_INTPOL, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_INTPOL] << FB_TMC_CHOPCONF_INTPOL); tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0) << FB_TMC_CHOPCONF_CHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_CHM] << FB_TMC_CHOPCONF_CHM); @@ -113,6 +118,10 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); + // Disable dcStep settings for non-stealth mode + tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(0) << FB_TMC_DCCTRL_DC_TIME, FB_TMC_DCCTRL_DC_TIME_MASK << FB_TMC_DCCTRL_DC_TIME); + tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(0) << FB_TMC_DCCTRL_DC_SG, FB_TMC_DCCTRL_DC_SG_MASK << FB_TMC_DCCTRL_DC_SG); + // Enbable stealth tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_AUTOSCALE, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AUTOSCALE] << FB_TMC_PWMCONF_PWM_AUTOSCALE); tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(0) << FB_TMC_PWMCONF_PWM_FREQ, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_FREQ] << FB_TMC_PWMCONF_PWM_FREQ); @@ -121,6 +130,16 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->set_GCONF(FB_TMC_GCONF_EN_PWM_MODE, uint32_t(1)); + // Set up cool conf + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(1) << 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); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHCHM, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHCHM] << FB_TMC_CHOPCONF_VHIGHCHM); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(0b00) << FB_TMC_CHOPCONF_VHIGHFS, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_VHIGHFS] << FB_TMC_CHOPCONF_VHIGHFS); + tb->alter_REG(FB_TMC_REG_CHOPCONF, uint32_t(8) << FB_TMC_CHOPCONF_TOFF, FB_TMC_CHOPCONF_MASKS[FB_TMC_CHOPCONF_TOFF] << FB_TMC_CHOPCONF_TOFF); + + + // Disable diagnostics tb->set_GCONF(FB_TMC_GCONF_DIAG0_ERROR, 0); @@ -129,6 +148,8 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, } + //loadingParameters = false; + delay(100); } diff --git a/src/TMC2130.h b/src/TMC2130.h index 77e5538..27fa5ba 100644 --- a/src/TMC2130.h +++ b/src/TMC2130.h @@ -20,7 +20,7 @@ static TMC2130_Basics TMC2130X(X_CHIP_SELECT, 1); static TMC2130_Basics TMC2130Y(Y_CHIP_SELECT, 2); static TMC2130_Basics TMC2130Z(Z_CHIP_SELECT, 3); - static TMC2130_Basics TMC2130E(E_CHIP_SELECT, 4); + static TMC2130_Basics TMC2130E(E_CHIP_SELECT, 4); void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth); #endif diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 2a0519d..dbd359c 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -283,11 +283,13 @@ void checkParamsChanged() #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + stopInterrupt(); if (lastTmcParamChangeNr != ParameterList::getInstance()->tmcParamChangeNumber()) { lastTmcParamChangeNr = ParameterList::getInstance()->tmcParamChangeNumber(); Movement::getInstance()->loadSettingsTMC2130(); } + restartInterrupt(); #endif Movement::getInstance()->loadSettings(); @@ -626,6 +628,7 @@ void setPinInputOutput() SPI.setDataMode(SPI_MODE0); SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.begin(); + #endif } #endif @@ -659,6 +662,16 @@ void startInterrupt() Timer1.start(); } +void stopInterrupt() +{ + Timer1.stop(); +} + +void restartInterrupt() +{ + Timer1.start(); +} + void homeOnBoot() { Serial.print(COMM_REPORT_COMMENT); diff --git a/src/farmbot_arduino_controller.h b/src/farmbot_arduino_controller.h index 016c00f..f1b8ac5 100644 --- a/src/farmbot_arduino_controller.h +++ b/src/farmbot_arduino_controller.h @@ -61,6 +61,8 @@ void setup(); void startPinGuard(); void startServo(); void startInterrupt(); + void stopInterrupt(); + void restartInterrupt(); void homeOnBoot(); void setupTestForDebug(); void runTestForDebug(); From a58a949c70ee1d4461907c64a362927920ed9639 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 24 Aug 2021 13:33:15 -0700 Subject: [PATCH 36/71] refactor set pwmconf reg --- src/TMC2130.cpp | 8 ++++---- src/TMC2130_Basics.cpp | 8 ++++++++ src/TMC2130_Basics.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 7930583..4581d87 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -123,10 +123,10 @@ void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, tb->alter_REG(FB_TMC_REG_DCCTRL, uint32_t(0) << FB_TMC_DCCTRL_DC_SG, FB_TMC_DCCTRL_DC_SG_MASK << FB_TMC_DCCTRL_DC_SG); // Enable stealth - tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_AUTOSCALE, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AUTOSCALE] << FB_TMC_PWMCONF_PWM_AUTOSCALE); - tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(0) << FB_TMC_PWMCONF_PWM_FREQ, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_FREQ] << FB_TMC_PWMCONF_PWM_FREQ); - tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(1) << FB_TMC_PWMCONF_PWM_GRAD, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_GRAD] << FB_TMC_PWMCONF_PWM_GRAD); - tb->alter_REG(FB_TMC_REG_PWMCONF, uint32_t(128) << FB_TMC_PWMCONF_PWM_AMPL, FB_TMC_PWMCONF_MASKS[FB_TMC_PWMCONF_PWM_AMPL] << FB_TMC_PWMCONF_PWM_AMPL); + tb->set_PWMCONF(FB_TMC_PWMCONF_PWM_AUTOSCALE, 1); + tb->set_PWMCONF(FB_TMC_PWMCONF_PWM_FREQ, 0); + tb->set_PWMCONF(FB_TMC_PWMCONF_PWM_GRAD, 1); + tb->set_PWMCONF(FB_TMC_PWMCONF_PWM_AMPL, 128); tb->set_GCONF(FB_TMC_GCONF_EN_PWM_MODE, uint32_t(1)); diff --git a/src/TMC2130_Basics.cpp b/src/TMC2130_Basics.cpp index 2a925c8..aa18b8b 100644 --- a/src/TMC2130_Basics.cpp +++ b/src/TMC2130_Basics.cpp @@ -142,6 +142,14 @@ uint8_t TMC2130_Basics::set_CHOPCONF(uint8_t position, uint8_t value) return _status; } +// set single bits or values in the pwmconf register (constraining masks are applied if necessary) +uint8_t TMC2130_Basics::set_PWMCONF(uint8_t position, uint8_t value) +{ + alter_REG(FB_TMC_REG_PWMCONF, uint32_t(value) << position, FB_TMC_PWMCONF_MASKS[position] << position); + + return _status; +} + uint8_t TMC2130_Basics::getStatus() { return _status; diff --git a/src/TMC2130_Basics.h b/src/TMC2130_Basics.h index 7a09194..13fd6cb 100644 --- a/src/TMC2130_Basics.h +++ b/src/TMC2130_Basics.h @@ -24,6 +24,7 @@ class TMC2130_Basics { uint8_t set_GCONF(uint8_t bit, uint8_t value); uint8_t set_CHOPCONF(uint8_t position, uint8_t value); + uint8_t set_PWMCONF(uint8_t position, uint8_t value); uint8_t getStatus(); uint8_t getAxisNumber(); From 9c1c6892db6635b6c7ef6b3ad127ca2e81eefdc2 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 24 Aug 2021 13:34:52 -0700 Subject: [PATCH 37/71] bump version (6.6.11) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index efa3c1b..e195a93 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.10\0"; + const char SOFTWARE_VERSION[] = "6.6.11\0"; const int LOGGING = 0; From d306ea6b8ab941505b5107ce52047ea7be275e59 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 24 Aug 2021 19:38:11 -0700 Subject: [PATCH 38/71] revert SPI mode change --- src/MovementEncoder.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/MovementEncoder.cpp b/src/MovementEncoder.cpp index 36d00f7..4aac8b0 100644 --- a/src/MovementEncoder.cpp +++ b/src/MovementEncoder.cpp @@ -87,11 +87,7 @@ void MovementEncoder::setPosition(long newPosition) const byte reset_cmd = 0x00; - #if defined(FARMDUINO_V32) - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE3)); - #else - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); - #endif + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); digitalWrite(NSS_PIN, LOW); delayMicroseconds(2); SPI.transfer(reset_cmd | (mdlEncoder << mdl_spi_encoder_offset)); @@ -182,11 +178,7 @@ void MovementEncoder::processEncoder() int readSize = 4; long encoderVal = 0; - #if defined(FARMDUINO_V32) - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE3)); - #else - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); - #endif + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); digitalWrite(NSS_PIN, LOW); delayMicroseconds(2); SPI.transfer(read_cmd | (mdlEncoder << mdl_spi_encoder_offset)); From 73c8afda2123b0b5e9b81807100151cf6ff3a7d2 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 24 Aug 2021 19:38:33 -0700 Subject: [PATCH 39/71] bump version (6.6.12) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index e195a93..a81a306 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.11\0"; + const char SOFTWARE_VERSION[] = "6.6.12\0"; const int LOGGING = 0; From 4ecb6acb3a1bb8c00a99c817a5175fc59f3d505b Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Tue, 14 Sep 2021 20:17:20 +0200 Subject: [PATCH 40/71] Adding total max count for calibration --- src/Board.h | 4 ++-- src/Config.h | 7 ++++++- src/Movement.cpp | 41 ++++++++++++++++++++++++++++++++++++----- src/Movement.h | 1 + src/ParameterList.cpp | 13 +++++++++++++ src/ParameterList.h | 7 ++++++- src/src.vcxproj | 2 +- 7 files changed, 65 insertions(+), 10 deletions(-) diff --git a/src/Board.h b/src/Board.h index 6d7fd0f..596345c 100644 --- a/src/Board.h +++ b/src/Board.h @@ -1,7 +1,7 @@ #ifndef FARMBOT_BOARD_ID // Farmbot using RAMPS board - //#define RAMPS_V14 + #define RAMPS_V14 //#define FARMDUINO_V10 //#define FARMDUINO_V14 @@ -13,7 +13,7 @@ //#define FARMDUINO_V32 // Farmbot Express - #define FARMDUINO_EXP_V20 + //#define FARMDUINO_EXP_V20 #else diff --git a/src/Config.h b/src/Config.h index 73f69ea..a33b2a2 100644 --- a/src/Config.h +++ b/src/Config.h @@ -148,11 +148,16 @@ const long MOVEMENT_STOP_AT_MAX_Y_DEFAULT = 0; const long MOVEMENT_STOP_AT_MAX_Z_DEFAULT = 0; - // The retry when calibrating + // The retry when calibrating for one try const long MOVEMENT_CALIBRATION_RETRY_X_DEFAULT = 3; const long MOVEMENT_CALIBRATION_RETRY_Y_DEFAULT = 3; const long MOVEMENT_CALIBRATION_RETRY_Z_DEFAULT = 3; + // The retry when calibrating in total + const long MOVEMENT_CALIBRATION_RETRY_X_TOTAL_DEFAULT = 10; + const long MOVEMENT_CALIBRATION_RETRY_Y_TOTAL_DEFAULT = 10; + const long MOVEMENT_CALIBRATION_RETRY_Z_TOTAL_DEFAULT = 10; + // deadzone for the retry for the calibration const long MOVEMENT_CALIBRATION_DEADZONE_X_DEFAULT = 10; const long MOVEMENT_CALIBRATION_DEADZONE_Y_DEFAULT = 10; diff --git a/src/Movement.cpp b/src/Movement.cpp index 4aa2c15..4ab090e 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -1183,6 +1183,7 @@ int Movement::calibrateAxis(int axis) int *axisStatus; long *axisStepsPerMm; long *calibRetriesMax; + long *calibRetriesTotalMax; long *calibRetryDeadzone; long stepDelay = 0; @@ -1249,6 +1250,7 @@ int Movement::calibrateAxis(int axis) reportEndStops(); int calibRetries = 0; + int calibRetriesTotal = 0; // Select the right axis. Store the references to the right axis variables for later use. @@ -1272,6 +1274,7 @@ int Movement::calibrateAxis(int axis) axisStepsPerMm = &stepsPerMm[0]; calibRetriesMax = &motorCalibRetry[0]; calibRetryDeadzone = &motorCalibRetryDeadzone[0]; + calibRetriesTotalMax = &motorCalibRetryTotal[0]; break; case 1: calibAxis = &axisY; @@ -1288,6 +1291,7 @@ int Movement::calibrateAxis(int axis) axisStepsPerMm = &stepsPerMm[1]; calibRetriesMax = &motorCalibRetry[1]; calibRetryDeadzone = &motorCalibRetryDeadzone[1]; + calibRetriesTotalMax = &motorCalibRetryTotal[1]; break; case 2: calibAxis = &axisZ; @@ -1304,6 +1308,7 @@ int Movement::calibrateAxis(int axis) axisStepsPerMm = &stepsPerMm[2]; calibRetriesMax = &motorCalibRetry[2]; calibRetryDeadzone = &motorCalibRetryDeadzone[2]; + calibRetriesTotalMax = &motorCalibRetryTotal[2]; break; default: Serial.print("R99 Calibration error: invalid axis selected\r\n"); @@ -1344,6 +1349,7 @@ int Movement::calibrateAxis(int axis) *missedSteps = 0; movementDone = false; calibRetries = 0; + calibRetriesTotal = 0; motorConsMissedSteps[0] = 0; motorConsMissedSteps[1] = 0; @@ -1486,6 +1492,7 @@ int Movement::calibrateAxis(int axis) // After a few tries, assume this is the end of the axis stepsCountLastStop = stepsCount; + calibRetriesTotal++; if (calibRetries < *calibRetriesMax) { @@ -1497,6 +1504,10 @@ int Movement::calibrateAxis(int axis) Serial.print(calibRetries); Serial.print("/"); Serial.print(*calibRetriesMax); + Serial.print(" of total retry "); + Serial.print(calibRetriesTotal); + Serial.print("/"); + Serial.print(*calibRetriesTotalMax); Serial.print("\r\n"); delay(1000); @@ -1512,6 +1523,14 @@ int Movement::calibrateAxis(int axis) invertEndStops = true; } } + + if (calibRetriesTotal >= *calibRetriesTotalMax) + { + movementDone = true; + error = 1; + + Serial.print("R99 movement done after safety retry count reached\r\n"); + } } } else @@ -1668,11 +1687,7 @@ int Movement::calibrateAxis(int axis) ((!invertEndStops && !calibAxis->endStopMin()) || (invertEndStops && !calibAxis->endStopMax())) && !movementDone && !( - calibAxis->missedStepHistory[0] >= *missedStepsMax //&& - //calibAxis->missedStepHistory[1] >= *missedStepsMax && - //calibAxis->missedStepHistory[2] >= *missedStepsMax && - //calibAxis->missedStepHistory[3] >= *missedStepsMax && - //calibAxis->missedStepHistory[4] >= *missedStepsMax + calibAxis->missedStepHistory[0] >= *missedStepsMax ) ) #else @@ -1714,6 +1729,7 @@ int Movement::calibrateAxis(int axis) else { stepsCountLastStop = stepsCount; + calibRetriesTotal++; // Encoders detected a bump. Try again. // After a few tries, assume this is the end of the axis @@ -1727,6 +1743,10 @@ int Movement::calibrateAxis(int axis) Serial.print(calibRetries); Serial.print("/"); Serial.print(*calibRetriesMax); + Serial.print(" of total retry "); + Serial.print(calibRetriesTotal); + Serial.print("/"); + Serial.print(*calibRetriesTotalMax); Serial.print("\r\n"); delay(1000); @@ -1742,6 +1762,13 @@ int Movement::calibrateAxis(int axis) invertEndStops = true; } } + + if (calibRetriesTotal >= *calibRetriesTotalMax) + { + movementDone = true; + error = 1; + Serial.print("R99 movement done after safety retry count reached\r\n"); + } } } else @@ -2022,6 +2049,10 @@ void Movement::loadMotorSettings() motorCalibRetry[1] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_Y); motorCalibRetry[2] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_Z); + motorCalibRetryTotal[0] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_TOTAL_X); + motorCalibRetryTotal[1] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_TOTAL_Y); + motorCalibRetryTotal[2] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_TOTAL_Z); + motorCalibRetryDeadzone[0] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Z); motorCalibRetryDeadzone[1] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Z); motorCalibRetryDeadzone[2] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Z); diff --git a/src/Movement.h b/src/Movement.h index bd3be6f..f238854 100644 --- a/src/Movement.h +++ b/src/Movement.h @@ -127,6 +127,7 @@ class Movement long motorMaxSize[3] = { 0, 0, 0}; bool motorStopAtMax[3] = { false, false, false }; long motorCalibRetry[3] = { 3, 3, 3 }; + long motorCalibRetryTotal[3] = { 10, 10, 10 }; long motorCalibRetryDeadzone[3] = { 10, 10, 10 }; bool motorKeepActive[3] = { false, false, false }; bool motor2Inv[3] = { false, false, false }; diff --git a/src/ParameterList.cpp b/src/ParameterList.cpp index 753b1b5..0b16050 100644 --- a/src/ParameterList.cpp +++ b/src/ParameterList.cpp @@ -489,6 +489,16 @@ void ParameterList::loadDefaultValue(int id) paramValues[id] = MOVEMENT_CALIBRATION_RETRY_Z_DEFAULT; break; + case MOVEMENT_CALIBRATION_RETRY_TOTAL_X: + paramValues[id] = MOVEMENT_CALIBRATION_RETRY_X_TOTAL_DEFAULT; + break; + case MOVEMENT_CALIBRATION_RETRY_TOTAL_Y: + paramValues[id] = MOVEMENT_CALIBRATION_RETRY_Y_TOTAL_DEFAULT; + break; + case MOVEMENT_CALIBRATION_RETRY_TOTAL_Z: + paramValues[id] = MOVEMENT_CALIBRATION_RETRY_Z_TOTAL_DEFAULT; + break; + case MOVEMENT_CALIBRATION_DEADZONE_X: paramValues[id] = MOVEMENT_CALIBRATION_DEADZONE_X_DEFAULT; break; @@ -762,6 +772,9 @@ bool ParameterList::validParam(int id) case MOVEMENT_CALIBRATION_RETRY_X: case MOVEMENT_CALIBRATION_RETRY_Y: case MOVEMENT_CALIBRATION_RETRY_Z: + case MOVEMENT_CALIBRATION_RETRY_TOTAL_X: + case MOVEMENT_CALIBRATION_RETRY_TOTAL_Y: + case MOVEMENT_CALIBRATION_RETRY_TOTAL_Z: case MOVEMENT_AXIS_STEALTH_X: case MOVEMENT_AXIS_STEALTH_Y: case MOVEMENT_AXIS_STEALTH_Z: diff --git a/src/ParameterList.h b/src/ParameterList.h index 9cc5bb0..7b190bf 100644 --- a/src/ParameterList.h +++ b/src/ParameterList.h @@ -152,11 +152,16 @@ enum ParamListEnum MOVEMENT_AXIS_STEALTH_Y = 166, MOVEMENT_AXIS_STEALTH_Z = 167, - // deadzone for the retry for the calibration + // deadzone for the retry for the calibration for one try MOVEMENT_CALIBRATION_DEADZONE_X = 171, MOVEMENT_CALIBRATION_DEADZONE_Y = 172, MOVEMENT_CALIBRATION_DEADZONE_Z = 173, + // retry for the calibration in total + MOVEMENT_CALIBRATION_RETRY_TOTAL_X = 175, + MOVEMENT_CALIBRATION_RETRY_TOTAL_Y = 176, + MOVEMENT_CALIBRATION_RETRY_TOTAL_Z = 177, + // pin guard settings PIN_GUARD_1_PIN_NR = 201, PIN_GUARD_1_TIME_OUT = 202, diff --git a/src/src.vcxproj b/src/src.vcxproj index 15ec070..721c579 100644 --- a/src/src.vcxproj +++ b/src/src.vcxproj @@ -185,7 +185,7 @@ - + \ No newline at end of file From c669dd767f331fc0920e545421f062240e195921 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 14 Sep 2021 12:56:43 -0700 Subject: [PATCH 41/71] add new params to readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 872b1f2..8292b22 100644 --- a/README.md +++ b/README.md @@ -357,6 +357,9 @@ ID | Name | Unit | Notes 171 | MOVEMENT_CALIBRATION_DEADZONE_X | integer | 172 | MOVEMENT_CALIBRATION_DEADZONE_Y | integer | 173 | MOVEMENT_CALIBRATION_DEADZONE_Z | integer | +175 | MOVEMENT_CALIBRATION_RETRY_TOTAL_X| integer | +176 | MOVEMENT_CALIBRATION_RETRY_TOTAL_Y| integer | +177 | MOVEMENT_CALIBRATION_RETRY_TOTAL_Z| integer | 201 | PIN_GUARD_1_PIN_NR | integer | 202 | PIN_GUARD_1_TIME_OUT | seconds | 203 | PIN_GUARD_1_ACTIVE_STATE | 0 / 1 | From 4ca90b7bb5e6efe13ecd13c8ea56dc946b9f428a Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 14 Sep 2021 12:57:07 -0700 Subject: [PATCH 42/71] bump version (6.6.15) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 1a5cf0c..14819f7 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.12\0"; + const char SOFTWARE_VERSION[] = "6.6.15\0"; const int LOGGING = 0; From 0057f4b7912ab2d16591f832ef9b9b94f22fb026 Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Wed, 27 Oct 2021 22:10:30 +0200 Subject: [PATCH 43/71] Periodically report pin values --- src/Config.h | 6 ++++ src/Movement.cpp | 31 +++++++++++++++++-- src/Movement.h | 3 ++ src/ParameterList.cpp | 9 ++++++ src/ParameterList.h | 5 ++- src/farmbot_arduino_controller.cpp | 49 +++++++++++++++++++++++++++++- 6 files changed, 99 insertions(+), 4 deletions(-) diff --git a/src/Config.h b/src/Config.h index a33b2a2..03624bc 100644 --- a/src/Config.h +++ b/src/Config.h @@ -36,6 +36,8 @@ const char COMM_REPORT_COORD_CHANGED_Y[4] = { 'R', '1', '6', '\0' }; const char COMM_REPORT_COORD_CHANGED_Z[4] = { 'R', '1', '7', '\0' }; + const char COMM_REPORT_PIN_VALUE[4] = { 'R', '6', '1', '\0' }; + const char COMM_REPORT_TIMEOUT_X[4] = { 'R', '7', '1', '\0' }; const char COMM_REPORT_TIMEOUT_Y[4] = { 'R', '7', '2', '\0' }; const char COMM_REPORT_TIMEOUT_Z[4] = { 'R', '7', '3', '\0' }; @@ -247,6 +249,10 @@ const long PIN_GUARD_5_TIME_OUT_DEFAULT = 60; const long PIN_GUARD_5_ACTIVE_STATE_DEFAULT = 1; + const long PIN_REPORT_1_PIN_NR_DEFAULT = 0; + const long PIN_REPORT_2_PIN_NR_DEFAULT = 0; + + const long STATUS_GENERAL_DEFAULT = 0; #define NSS_PIN 22 diff --git a/src/Movement.cpp b/src/Movement.cpp index 4ab090e..da25830 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -1,4 +1,5 @@ #include "Movement.h" +#include "PinControl.h" #include "Debug.h" #include "Config.h" @@ -862,6 +863,32 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS break; case 2: + + pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_1_PIN_NR); + pinValue = PinControl::getInstance()->readValue(pinNr, 1); + + serialBuffer += COMM_REPORT_PIN_VALUE; + serialBuffer += " P "; + serialBuffer += pinNr; + serialBuffer += " V "; + serialBuffer += pinValue; + serialBuffer += "\r\n"; + break; + + case 3: + + pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_2_PIN_NR); + pinValue = PinControl::getInstance()->readValue(pinNr, 1); + + serialBuffer += COMM_REPORT_PIN_VALUE; + serialBuffer += " P "; + serialBuffer += pinNr; + serialBuffer += " V "; + serialBuffer += pinValue; + serialBuffer += "\r\n"; + break; + + case 4: //#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //serialBuffer += "R89"; //serialBuffer += " X"; @@ -923,7 +950,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialMessageNr++; #if !defined(FARMDUINO_EXP_V20) - if (serialMessageNr > 1) + if (serialMessageNr > 3) { serialMessageNr = 0; } @@ -931,7 +958,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS #if defined(FARMDUINO_EXP_V20) - if (serialMessageNr > 2) + if (serialMessageNr > 4) { serialMessageNr = 0; } diff --git a/src/Movement.h b/src/Movement.h index f238854..3f66d50 100644 --- a/src/Movement.h +++ b/src/Movement.h @@ -82,6 +82,9 @@ class Movement MovementEncoder encoderZ; //char serialBuffer[100]; + int pinNr = 0; + int pinValue = 0; + String serialBuffer; int serialBufferLength = 0; int serialBufferSending = 0; diff --git a/src/ParameterList.cpp b/src/ParameterList.cpp index 0b16050..f82f2db 100644 --- a/src/ParameterList.cpp +++ b/src/ParameterList.cpp @@ -669,6 +669,13 @@ void ParameterList::loadDefaultValue(int id) paramValues[id] = PIN_GUARD_5_ACTIVE_STATE_DEFAULT; break; + case PIN_REPORT_1_PIN_NR: + paramValues[id] = PIN_REPORT_1_PIN_NR_DEFAULT; + break; + case PIN_REPORT_2_PIN_NR: + paramValues[id] = PIN_REPORT_1_PIN_NR_DEFAULT; + break; + default: paramValues[id] = 0; break; @@ -796,6 +803,8 @@ bool ParameterList::validParam(int id) case PIN_GUARD_5_PIN_NR: case PIN_GUARD_5_TIME_OUT: case PIN_GUARD_5_ACTIVE_STATE: + case PIN_REPORT_1_PIN_NR: + case PIN_REPORT_2_PIN_NR: return true; default: return false; diff --git a/src/ParameterList.h b/src/ParameterList.h index 7b190bf..598a787 100644 --- a/src/ParameterList.h +++ b/src/ParameterList.h @@ -181,7 +181,10 @@ enum ParamListEnum PIN_GUARD_5_PIN_NR = 221, PIN_GUARD_5_TIME_OUT = 222, - PIN_GUARD_5_ACTIVE_STATE = 223 + PIN_GUARD_5_ACTIVE_STATE = 223, + + PIN_REPORT_1_PIN_NR = 225, + PIN_REPORT_2_PIN_NR = 226 }; diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index dbd359c..8c7bd9b 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -17,8 +17,12 @@ int incomingCommandPointer = 0; static GCodeProcessor *gCodeProcessor = new GCodeProcessor(); +int pinNr = 0; +int pinValue = 0; int reportingPeriod = 5000; +int reportingPeriodPins = 500; unsigned long lastAction; +unsigned long lastReportPin; unsigned long currentTime; unsigned long cycleCounter = 0; bool previousEmergencyStop = false; @@ -105,9 +109,52 @@ void checkPinGuard() void periodicChecksAndReport() { + currentTime = millis(); + + // If needed, check the pins and report the value + if (currentTime < lastReportPin) + { + + // If the device timer overruns, reset the idle counter + lastReportPin = millis(); + } + else + { + if ((currentTime - lastReportPin) > reportingPeriodPins) + { + lastReportPin = millis(); + + // Send the periodic report for pin values + pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_1_PIN_NR); + if (pinNr > 0) + { + pinValue = PinControl::getInstance()->readValue(pinNr, 1); + + Serial.print(COMM_REPORT_PIN_VALUE); + Serial.print(" P "); + Serial.print(pinNr); + Serial.print(" V "); + Serial.print(pinValue); + Serial.println(); + } + + pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_2_PIN_NR); + if (pinNr > 0) + { + pinValue = PinControl::getInstance()->readValue(pinNr, 1); + + Serial.print(COMM_REPORT_PIN_VALUE); + Serial.print(" P "); + Serial.print(pinNr); + Serial.print(" V "); + Serial.print(pinValue); + Serial.println(); + } + } + } + // Do periodic checks and feedback - currentTime = millis(); if (currentTime < lastAction) { From 4269b587f9896258743b3da4a695fdd2691a1ee9 Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Sat, 30 Oct 2021 20:54:37 +0200 Subject: [PATCH 44/71] Debugging pin monitoring and reporting --- src/Movement.cpp | 38 +++++++++++++++++------------- src/ParameterList.h | 12 +++++----- src/PinControl.cpp | 4 ++-- src/PinControl.h | 2 +- src/farmbot_arduino_controller.cpp | 15 ++++++------ src/src.vcxproj | 2 +- 6 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/Movement.cpp b/src/Movement.cpp index da25830..362bbef 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -865,27 +865,33 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS case 2: pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_1_PIN_NR); - pinValue = PinControl::getInstance()->readValue(pinNr, 1); - - serialBuffer += COMM_REPORT_PIN_VALUE; - serialBuffer += " P "; - serialBuffer += pinNr; - serialBuffer += " V "; - serialBuffer += pinValue; - serialBuffer += "\r\n"; + if (pinNr > 0) + { + pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + + serialBuffer += COMM_REPORT_PIN_VALUE; + serialBuffer += " P"; + serialBuffer += pinNr; + serialBuffer += " V"; + serialBuffer += pinValue; + serialBuffer += "\r\n"; + } break; case 3: pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_2_PIN_NR); - pinValue = PinControl::getInstance()->readValue(pinNr, 1); - - serialBuffer += COMM_REPORT_PIN_VALUE; - serialBuffer += " P "; - serialBuffer += pinNr; - serialBuffer += " V "; - serialBuffer += pinValue; - serialBuffer += "\r\n"; + if (pinNr > 0) + { + pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + + serialBuffer += COMM_REPORT_PIN_VALUE; + serialBuffer += " P"; + serialBuffer += pinNr; + serialBuffer += " V"; + serialBuffer += pinValue; + serialBuffer += "\r\n"; + } break; case 4: diff --git a/src/ParameterList.h b/src/ParameterList.h index 598a787..3f26ef3 100644 --- a/src/ParameterList.h +++ b/src/ParameterList.h @@ -7,7 +7,7 @@ #include "CurrentState.h" //#define NULL 0 -const int PARAM_NR_OF_PARAMS = 225; +const int PARAM_NR_OF_PARAMS = 230; enum ParamListEnum { @@ -162,6 +162,10 @@ enum ParamListEnum MOVEMENT_CALIBRATION_RETRY_TOTAL_Y = 176, MOVEMENT_CALIBRATION_RETRY_TOTAL_Z = 177, + // pin monitoring + PIN_REPORT_1_PIN_NR = 198, + PIN_REPORT_2_PIN_NR = 199, + // pin guard settings PIN_GUARD_1_PIN_NR = 201, PIN_GUARD_1_TIME_OUT = 202, @@ -181,11 +185,7 @@ enum ParamListEnum PIN_GUARD_5_PIN_NR = 221, PIN_GUARD_5_TIME_OUT = 222, - PIN_GUARD_5_ACTIVE_STATE = 223, - - PIN_REPORT_1_PIN_NR = 225, - PIN_REPORT_2_PIN_NR = 226 - + PIN_GUARD_5_ACTIVE_STATE = 223 }; /* diff --git a/src/PinControl.cpp b/src/PinControl.cpp index 5907402..53c5959 100644 --- a/src/PinControl.cpp +++ b/src/PinControl.cpp @@ -78,7 +78,7 @@ void PinControl::resetPinsUsed() } } -int PinControl::readValue(int pinNr, int mode) +int PinControl::readValue(int pinNr, int mode, bool print = true) { int value = 0; @@ -95,7 +95,7 @@ int PinControl::readValue(int pinNr, int mode) value = analogRead(pinNr); } - if (mode == 0 || mode == 1) + if ((mode == 0 || mode == 1) && print) { Serial.print("R41"); diff --git a/src/PinControl.h b/src/PinControl.h index 788e147..8db0380 100644 --- a/src/PinControl.h +++ b/src/PinControl.h @@ -23,7 +23,7 @@ class PinControl int setMode(int pinNr, int mode); int writeValue(int pinNr, int value, int mode); - int readValue(int pinNr, int mode); + int readValue(int pinNr, int mode, bool print = true); int writePulse(int pinNr, int valueOne, int valueTwo, long time, int mode); void resetPinsUsed(); diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 8c7bd9b..4ae3597 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -128,12 +128,12 @@ void periodicChecksAndReport() pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_1_PIN_NR); if (pinNr > 0) { - pinValue = PinControl::getInstance()->readValue(pinNr, 1); - + pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + Serial.print(COMM_REPORT_PIN_VALUE); - Serial.print(" P "); + Serial.print(" P"); Serial.print(pinNr); - Serial.print(" V "); + Serial.print(" V"); Serial.print(pinValue); Serial.println(); } @@ -141,19 +141,18 @@ void periodicChecksAndReport() pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_2_PIN_NR); if (pinNr > 0) { - pinValue = PinControl::getInstance()->readValue(pinNr, 1); + pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); Serial.print(COMM_REPORT_PIN_VALUE); - Serial.print(" P "); + Serial.print(" P"); Serial.print(pinNr); - Serial.print(" V "); + Serial.print(" V"); Serial.print(pinValue); Serial.println(); } } } - // Do periodic checks and feedback if (currentTime < lastAction) { diff --git a/src/src.vcxproj b/src/src.vcxproj index 721c579..15ec070 100644 --- a/src/src.vcxproj +++ b/src/src.vcxproj @@ -185,7 +185,7 @@ - + \ No newline at end of file From fda88fc67f409faecaa21536cb42777bbf146f53 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Sat, 30 Oct 2021 12:25:05 -0700 Subject: [PATCH 45/71] add pin reporting to readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8292b22..0c5b9a5 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,7 @@ R |21 |P V |Report parameter value R |23 |P V |Report updated parameter (during calibration) R |31 |P V |Report status value (not enabled) R |41 |P V |Report pin value +R |61 |P V |Report pin monitor analog value R |71 | |X axis timeout R |72 | |Y axis timeout R |73 | |Z axis timeout @@ -360,6 +361,8 @@ ID | Name | Unit | Notes 175 | MOVEMENT_CALIBRATION_RETRY_TOTAL_X| integer | 176 | MOVEMENT_CALIBRATION_RETRY_TOTAL_Y| integer | 177 | MOVEMENT_CALIBRATION_RETRY_TOTAL_Z| integer | +198 | PIN_REPORT_1_PIN_NR | integer | reports every 500ms, 0 = disabled +199 | PIN_REPORT_2_PIN_NR | integer | reports every 500ms, 0 = disabled 201 | PIN_GUARD_1_PIN_NR | integer | 202 | PIN_GUARD_1_TIME_OUT | seconds | 203 | PIN_GUARD_1_ACTIVE_STATE | 0 / 1 | From 572c37b23d5b9c4650902c77fbb68ce5b6657315 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Sat, 30 Oct 2021 12:25:44 -0700 Subject: [PATCH 46/71] bump version (6.6.16) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 988a170..3be3e1b 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.15\0"; + const char SOFTWARE_VERSION[] = "6.6.16\0"; const int LOGGING = 0; From ba77d2fc85165e87bd3a28ef114f2dea7b5aecba Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Thu, 11 Nov 2021 22:17:34 +0100 Subject: [PATCH 47/71] fixing analog read for pin monitoring --- src/Movement.cpp | 4 ++-- src/farmbot_arduino_controller.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Movement.cpp b/src/Movement.cpp index 362bbef..51a6de6 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -867,7 +867,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_1_PIN_NR); if (pinNr > 0) { - pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + pinValue = analogRead(pinNr); serialBuffer += COMM_REPORT_PIN_VALUE; serialBuffer += " P"; @@ -883,7 +883,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_2_PIN_NR); if (pinNr > 0) { - pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + pinValue = analogRead(pinNr); serialBuffer += COMM_REPORT_PIN_VALUE; serialBuffer += " P"; diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 4ae3597..dcd0af4 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -128,7 +128,7 @@ void periodicChecksAndReport() pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_1_PIN_NR); if (pinNr > 0) { - pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + pinValue = analogRead(pinNr); Serial.print(COMM_REPORT_PIN_VALUE); Serial.print(" P"); @@ -141,7 +141,7 @@ void periodicChecksAndReport() pinNr = ParameterList::getInstance()->getValue(PIN_REPORT_2_PIN_NR); if (pinNr > 0) { - pinValue = PinControl::getInstance()->readValue(pinNr, 1, false); + pinValue = analogRead(pinNr); Serial.print(COMM_REPORT_PIN_VALUE); Serial.print(" P"); From d6bc572e8cf054fbfc53a48dc83e41fd2fb455be Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 11 Nov 2021 13:27:06 -0800 Subject: [PATCH 48/71] bump version (6.6.17) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 3be3e1b..8f52458 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.16\0"; + const char SOFTWARE_VERSION[] = "6.6.17\0"; const int LOGGING = 0; From a9407a8a0ed4256f28f3d6eb584654b5fa71f84b Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 11 Nov 2021 15:20:12 -0800 Subject: [PATCH 49/71] upgrade arduino version (1.8.16) --- .circleci/config.yml | 2 +- Makefile | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 76e7313..6113d3c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ jobs: parameters: arduino_version: description: "Arduino version" - default: "1.8.14" + default: "1.8.16" type: string steps: - checkout diff --git a/Makefile b/Makefile index e21e097..89ec9ad 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ FBARDUINO_FIRMWARE_SRC_DIR ?= src FBARDUINO_FIRMWARE_BUILD_DIR ?= $(BUILD_DIR)/sketch FBARDUINO_FIRMWARE_LIB_BUILD_DIR ?= $(BUILD_DIR)/libraries -ARDUINO_INSTALL_DIR ?= $(HOME)/arduino-1.8.14 +ARDUINO_INSTALL_DIR ?= $(HOME)/arduino-1.8.16 # Get current commit SHA COMMIT_SHA := $(shell git -C $(FBARDUINO_FIRMWARE_SRC_DIR)/.. rev-parse --short=8 HEAD) diff --git a/README.md b/README.md index 0c5b9a5..3d803e1 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Options for compiling and uploading: * Select _Sketch_ > _Export compiled binary_. * The `.hex` file will save to the `src` directory. * Make (Linux) - * [Download the Arduino 1.8.14 IDE](https://www.arduino.cc/download_handler.php?f=/arduino-1.8.14-linux64.tar.xz) and unpack to the `/home` directory. + * [Download the Arduino 1.8.16 IDE](https://www.arduino.cc/download_handler.php?f=/arduino-1.8.16-linux64.tar.xz) and unpack to the `/home` directory. * `cd farmbot-arduino-firmware` * To compile: * `make` From e5c635c1012952721500ed17f999f4b62f34ebb3 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 12 Nov 2021 09:29:00 -0800 Subject: [PATCH 50/71] bump version (6.6.18) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 8f52458..977f21f 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.17\0"; + const char SOFTWARE_VERSION[] = "6.6.18\0"; const int LOGGING = 0; From 2295e0e99101df635bbfb70473441946192da0ed Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 29 Nov 2021 10:45:47 -0800 Subject: [PATCH 51/71] use SPI_MODE3 for v1.6 --- src/MovementEncoder.cpp | 12 ++++++++++-- src/farmbot_arduino_controller.cpp | 8 ++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/MovementEncoder.cpp b/src/MovementEncoder.cpp index 4aac8b0..36d00f7 100644 --- a/src/MovementEncoder.cpp +++ b/src/MovementEncoder.cpp @@ -87,7 +87,11 @@ void MovementEncoder::setPosition(long newPosition) const byte reset_cmd = 0x00; - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #if defined(FARMDUINO_V32) + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE3)); + #else + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #endif digitalWrite(NSS_PIN, LOW); delayMicroseconds(2); SPI.transfer(reset_cmd | (mdlEncoder << mdl_spi_encoder_offset)); @@ -178,7 +182,11 @@ void MovementEncoder::processEncoder() int readSize = 4; long encoderVal = 0; - SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #if defined(FARMDUINO_V32) + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE3)); + #else + SPI.beginTransaction(SPISettings(SPI_CLOCK_DIV4, MSBFIRST, SPI_MODE0)); + #endif digitalWrite(NSS_PIN, LOW); delayMicroseconds(2); SPI.transfer(read_cmd | (mdlEncoder << mdl_spi_encoder_offset)); diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index dcd0af4..b51698e 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -129,7 +129,7 @@ void periodicChecksAndReport() if (pinNr > 0) { pinValue = analogRead(pinNr); - + Serial.print(COMM_REPORT_PIN_VALUE); Serial.print(" P"); Serial.print(pinNr); @@ -671,7 +671,11 @@ void setPinInputOutput() digitalWrite(NSS_PIN, HIGH); SPI.setBitOrder(MSBFIRST); - SPI.setDataMode(SPI_MODE0); + #if defined(FARMDUINO_V32) + SPI.setDataMode(SPI_MODE3); + #else + SPI.setDataMode(SPI_MODE0); + #endif SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.begin(); From 3a4371197577d5bd8785b17e1cf29fae1ea1905d Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 29 Nov 2021 10:46:17 -0800 Subject: [PATCH 52/71] bump version (6.6.19) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 977f21f..59857a2 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.18\0"; + const char SOFTWARE_VERSION[] = "6.6.19\0"; const int LOGGING = 0; From 3fc034659a3e6ac81cfb8778826d8f5f176b736b Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Thu, 2 Dec 2021 21:44:50 +0100 Subject: [PATCH 53/71] Movement abort added --- src/Config.h | 2 +- src/CurrentState.cpp | 16 ++++++++++++++++ src/CurrentState.h | 5 +++++ src/F11Handler.cpp | 13 ++++++++----- src/F12Handler.cpp | 12 ++++++++---- src/F13Handler.cpp | 13 ++++++++----- src/Movement.cpp | 37 +++++++++++++++++++++++++++++++++---- 7 files changed, 79 insertions(+), 19 deletions(-) diff --git a/src/Config.h b/src/Config.h index 03624bc..fdfb320 100644 --- a/src/Config.h +++ b/src/Config.h @@ -44,7 +44,7 @@ const char COMM_REPORT_ENCODER_SCALED[4] = { 'R', '8', '4', '\0' }; const char COMM_REPORT_ENCODER_RAW[4] = { 'R', '8', '5', '\0' }; - + const char COMM_REPORT_MOVEMENT_ABORT[4] = { 'R', '8', '6', '\0' }; const char COMM_REPORT_EMERGENCY_STOP[4] = { 'R', '8', '7', '\0' }; const char COMM_REPORT_NO_CONFIG[4] = {'R', '8', '8', '\0'}; const char COMM_REPORT_COMMENT[4] = {'R', '9', '9', '\0'}; diff --git a/src/CurrentState.cpp b/src/CurrentState.cpp index a9ad594..9728fc1 100644 --- a/src/CurrentState.cpp +++ b/src/CurrentState.cpp @@ -280,3 +280,19 @@ bool CurrentState::isEmergencyStop() { return emergencyStop; } + +void CurrentState::setMovementAbort() +{ + movementAbort = true; +} + +void CurrentState::resetMovementAbort() +{ + movementAbort = false; +} + +bool CurrentState::isMovementAbort() +{ + return movementAbort; +} + diff --git a/src/CurrentState.h b/src/CurrentState.h index fe19f3b..46f0352 100644 --- a/src/CurrentState.h +++ b/src/CurrentState.h @@ -17,6 +17,7 @@ enum ErrorListEnum ERR_TIMEOUT = 2, ERR_STALL_DETECTED = 3, ERR_CALIBRATION_ERROR = 4, + ERR_MOVEMENT_ABORT = 5, ERR_INVALID_COMMAND = 14, ERR_PARAMS_NOT_OK = 15, @@ -69,6 +70,9 @@ class CurrentState void setEmergencyStop(); void resetEmergencyStop(); bool isEmergencyStop(); + void setMovementAbort(); + void resetMovementAbort(); + bool isMovementAbort(); void setStepsPerMm(long stepsX, long stepsY, long stepsZ); long getStepsPerMmX(); @@ -101,6 +105,7 @@ class CurrentState bool emergencyStop = false; + bool movementAbort = false; }; #endif /* CURRENTSTATE_H_ */ diff --git a/src/F11Handler.cpp b/src/F11Handler.cpp index 30b07cf..77cb770 100644 --- a/src/F11Handler.cpp +++ b/src/F11Handler.cpp @@ -47,8 +47,8 @@ int F11Handler::execute(Command *command) int A = 10; // move away coordinates int execution; - bool emergencyStop; - + bool emergencyStop = false; + bool movementAbort = false; bool homingComplete = false; if (homeIsUp == 1) @@ -76,7 +76,8 @@ int F11Handler::execute(Command *command) //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { homingComplete = true; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { homingComplete = true; } } // Move away from the home position @@ -84,14 +85,16 @@ int F11Handler::execute(Command *command) //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { break; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { break; } // Home again Movement::getInstance()->moveToCoords(0, Y, Z, 0, 0, 0, true, false, false); //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { break; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { break; } Serial.print("R99 homing displaced"); Serial.print(" X "); diff --git a/src/F12Handler.cpp b/src/F12Handler.cpp index ce31b33..c970037 100644 --- a/src/F12Handler.cpp +++ b/src/F12Handler.cpp @@ -47,7 +47,8 @@ int F12Handler::execute(Command *command) int A = 10; // move away coordinates int execution; - bool emergencyStop; + bool emergencyStop = false; + bool movementAbort = false; bool homingComplete = false; if (homeIsUp == 1) @@ -76,7 +77,8 @@ int F12Handler::execute(Command *command) //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { homingComplete = true; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { homingComplete = true; } } // Move away from the home position @@ -85,14 +87,16 @@ int F12Handler::execute(Command *command) //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { break; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { break; } // Home again Movement::getInstance()->moveToCoords(X, 0, Z, 0, 0, 0, false, true, false); //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { break; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { break; } Serial.print("R99 homing displaced"); Serial.print(" X "); diff --git a/src/F13Handler.cpp b/src/F13Handler.cpp index 0ff8fbb..8fff3ca 100644 --- a/src/F13Handler.cpp +++ b/src/F13Handler.cpp @@ -50,8 +50,8 @@ int F13Handler::execute(Command *command) int A = 10; // move away coordinates int execution; - bool emergencyStop; - + bool emergencyStop = false; + bool movementAbort = false; bool homingComplete = false; if (homeIsUp == 1) @@ -79,7 +79,8 @@ int F13Handler::execute(Command *command) //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { homingComplete = true; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { homingComplete = true; } } // Move away from the home position @@ -87,14 +88,16 @@ int F13Handler::execute(Command *command) //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { break; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { break; } // Home again Movement::getInstance()->moveToCoords(X, Y, 0, 0, 0, 0, false, false, true); //execution = CurrentState::getInstance()->getLastError(); execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); - if (emergencyStop || execution != 0) { break; } + movementAbort = CurrentState::getInstance()->isMovementAbort(); + if (movementAbort || emergencyStop || execution != 0) { break; } Serial.print("R99 homing displaced"); Serial.print(" X "); diff --git a/src/Movement.cpp b/src/Movement.cpp index 51a6de6..588ec9e 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -363,6 +363,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS int incomingByte = 0; int error = 0; bool emergencyStop = false; + bool movementAbort = false; unsigned int commandSpeed[3]; @@ -532,11 +533,12 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS axisZ.setTicks(); emergencyStop = CurrentState::getInstance()->isEmergencyStop(); + movementAbort = CurrentState::getInstance()->isMovementAbort(); unsigned long loopCounts = 0; // Let the interrupt handle all the movements - while ((axisActive[0] || axisActive[1] || axisActive[2]) && !emergencyStop) + while ((axisActive[0] || axisActive[1] || axisActive[2]) && !emergencyStop && !movementAbort) { #if defined(FARMDUINO_V14) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) checkEncoders(); @@ -826,6 +828,27 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS error = ERR_EMERGENCY_STOP; } + + if (incomingByte == 64) + { + serialBuffer += "R99 movement abort\r\n"; + + Serial.print(COMM_REPORT_MOVEMENT_ABORT); + CurrentState::getInstance()->printQAndNewLine(); + + movementAbort = true; + + axisX.deactivateAxis(); + axisY.deactivateAxis(); + axisZ.deactivateAxis(); + + axisActive[0] = false; + axisActive[1] = false; + axisActive[2] = false; + + error = ERR_MOVEMENT_ABORT; + } + } if (error != 0) @@ -992,19 +1015,19 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS // Send feedback for homing - if (xHome && !error && !emergencyStop) + if (xHome && !error && !emergencyStop && !movementAbort) { Serial.print(COMM_REPORT_HOMED_X); CurrentState::getInstance()->printQAndNewLine(); } - if (yHome && !error && !emergencyStop) + if (yHome && !error && !emergencyStop && !movementAbort) { Serial.print(COMM_REPORT_HOMED_Y); CurrentState::getInstance()->printQAndNewLine(); } - if (zHome && !error && !emergencyStop) + if (zHome && !error && !emergencyStop && !movementAbort) { Serial.print(COMM_REPORT_HOMED_Z); CurrentState::getInstance()->printQAndNewLine(); @@ -1131,6 +1154,12 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS error = ERR_EMERGENCY_STOP; } + if (movementAbort) + { + CurrentState::getInstance()->setMovementAbort(); + error = ERR_MOVEMENT_ABORT; + } + Serial.print("R99 error "); Serial.print(error); Serial.print("\r\n"); From d0a46bf4bda60ea48bee3258d023c1314b34340e Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 2 Dec 2021 22:11:26 +0000 Subject: [PATCH 54/71] add abort to readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3d803e1..67cbb84 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ F |82 | |Report current position F       |83   |         |Report software version F       |84    |X Y Z     |Set axis current position to zero (yes=1/no=0) E       |     |          |Emergency stop +@ | | |Movement abort __*__ Requires the use of encoders or end stops. @@ -183,6 +184,7 @@ R |82 |X Y Z |Report current position R |83 | |Report software version R |84 |X Y Z |Report encoder position scaled R |85 |X Y Z |Report encoder position raw +R |86 | |Report movement abort R |87 | |Emergency lock R |88 | |No config (see [configuration approval](#important)) R |89 |U X V Y W Z |Report # axis steps (U,V,W) and highest missed steps in last 500 (X,Y,Z) @@ -198,6 +200,7 @@ Value |Description 2 |Timeout 3 |Stall detected 4 |Calibration error +5 |Movement abort 14 |Invalid command 15 |No config 31 |Stall detected X axis From 0f0ee483248f9dab977ac5d8b96e0a24dc810bb5 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 2 Dec 2021 22:12:11 +0000 Subject: [PATCH 55/71] bump version (6.6.20) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 050df90..8af9623 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.19\0"; + const char SOFTWARE_VERSION[] = "6.6.20\0"; const int LOGGING = 0; From ce3d27a92c37d9c5ecf0b3ddae9666f431020780 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 31 Jan 2022 10:50:30 -0800 Subject: [PATCH 56/71] add express_k11 board --- .circleci/config.yml | 4 + Makefile | 27 +++++- README.md | 38 +++++--- lib/targets/express_k11.Makefile | 25 ++++++ src/Board.h | 13 ++- src/Config.h | 4 + src/F11Handler.cpp | 2 +- src/F12Handler.cpp | 4 +- src/F13Handler.cpp | 4 +- src/Movement.cpp | 48 +++++----- src/Movement.h | 4 +- src/MovementAxis.cpp | 12 +-- src/MovementAxis.h | 10 +-- src/MovementEncoder.cpp | 6 +- src/TMC2130.cpp | 2 +- src/TMC2130.h | 2 +- src/farmbot_arduino_controller.cpp | 42 +++++---- src/farmbot_arduino_controller.h | 4 +- src/pins.h | 138 ++++++++++++++++++++++++++++- src/src.ino | 2 +- 20 files changed, 304 insertions(+), 87 deletions(-) create mode 100644 lib/targets/express_k11.Makefile diff --git a/.circleci/config.yml b/.circleci/config.yml index 6113d3c..d5258ad 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,6 +52,10 @@ jobs: name: Compile Express v1.0 (FARMDUINO_EXP_V20) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_express_k10 remove_temp when: always + - run: + name: Compile Express v1.1 (FARMDUINO_EXP_V22) + command: make dep_core dep_Servo dep_SPI dep_EEPROM target_express_k11 remove_temp + when: always - run: name: Compile all command: | diff --git a/Makefile b/Makefile index 89ec9ad..5271de7 100644 --- a/Makefile +++ b/Makefile @@ -49,6 +49,7 @@ include lib/targets/farmduino_k14.Makefile include lib/targets/farmduino_k15.Makefile include lib/targets/farmduino_k16.Makefile include lib/targets/express_k10.Makefile +include lib/targets/express_k11.Makefile .PHONY: all clean strings_test force_clean remove_temp \ dep_core dep_core_clean \ @@ -60,15 +61,31 @@ include lib/targets/express_k10.Makefile target_farmduino_k14 target_farmduino_k14_clean \ target_farmduino_k15 target_farmduino_k15_clean \ target_farmduino_k16 target_farmduino_k16_clean \ - target_express_k10 target_express_k10_clean + target_express_k10 target_express_k10_clean \ + target_express_k11 target_express_k11_clean DEPS := $(DEP_CORE) $(DEP_SPI) $(DEP_Servo) $(DEP_EEPROM) DEPS_OBJ := $(DEP_SPI_OBJ) $(DEP_Servo_OBJ) $(DEP_EEPROM_OBJ) DEPS_CFLAGS := $(DEP_CORE_CFLAGS) $(DEP_SPI_CFLAGS) $(DEP_Servo_CFLAGS) $(DEP_EEPROM_CFLAGS) -all: $(BIN_DIR) $(DEPS) target_ramps_v14 target_farmduino_v10 target_farmduino_k14 target_farmduino_k15 target_farmduino_k16 target_express_k10 remove_temp - -clean: remove_temp target_ramps_v14_clean target_farmduino_v10_clean target_farmduino_k14_clean target_farmduino_k15_clean target_farmduino_k16_clean target_express_k10_clean +all: $(BIN_DIR) $(DEPS) \ + target_ramps_v14 \ + target_farmduino_v10 \ + target_farmduino_k14 \ + target_farmduino_k15 \ + target_farmduino_k16 \ + target_express_k10 \ + target_express_k11 \ + remove_temp + +clean: remove_temp \ + target_ramps_v14_clean \ + target_farmduino_v10_clean \ + target_farmduino_k14_clean \ + target_farmduino_k15_clean \ + target_farmduino_k16_clean \ + target_express_k10_clean \ + target_express_k11_clean strings_test: all $(OBJ_COPY) -I ihex $(TARGET_ramps_v14_HEX) -O binary $(TARGET_ramps_v14_HEX).bin @@ -77,12 +94,14 @@ strings_test: all $(OBJ_COPY) -I ihex $(TARGET_farmduino_k15_HEX) -O binary $(TARGET_farmduino_k15_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_farmduino_k16_HEX) -O binary $(TARGET_farmduino_k16_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k10_HEX) -O binary $(TARGET_express_k10_HEX).bin + $(OBJ_COPY) -I ihex $(TARGET_express_k11_HEX) -O binary $(TARGET_express_k11_HEX).bin @strings $(TARGET_ramps_v14_HEX).bin | grep -q ".R.genesisK12" @strings $(TARGET_farmduino_v10_HEX).bin | grep -q ".F.genesisK13" @strings $(TARGET_farmduino_k14_HEX).bin | grep -q ".G.genesisK14" @strings $(TARGET_farmduino_k15_HEX).bin | grep -q ".H.genesisK15" @strings $(TARGET_farmduino_k16_HEX).bin | grep -q ".I.genesisK16" @strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10" + @strings $(TARGET_express_k11_HEX).bin | grep -q ".E.expressK11" force_clean: remove_temp $(RM) -r $(BUILD_DIR) $(BIN_DIR) diff --git a/README.md b/README.md index 67cbb84..4e48272 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,10 @@ See [releases](https://github.com/FarmBot/farmbot-arduino-firmware/releases) to git clone https://github.com/FarmBot/farmbot-arduino-firmware ``` -**OPTION B:** For stable release v6.5.36: +**OPTION B:** For stable release v6.6.20: ``` -git clone -b 'v6.5.36' --single-branch https://github.com/FarmBot/farmbot-arduino-firmware +git clone -b 'v6.6.20' --single-branch https://github.com/FarmBot/farmbot-arduino-firmware ``` Options for compiling and uploading: @@ -86,14 +86,15 @@ All files are in `/src` Board Feature Overview ====================== -| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection | -|:----------------- |:------------ |:------------:|:------------:|:----------:|:-------------------:| -| RAMPS_V14 | Genesis v1.2 | x | | | | -| FARMDUINO_V10 | Genesis v1.3 | x | | | | -| FARMDUINO_V14 | Genesis v1.4 | | x | | | -| FARMDUINO_V30 | Genesis v1.5 | | x | x | | -| FARMDUINO_V32 | Genesis v1.6 | | x | x | | -| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | +| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection | peripheral current sensors | +|:----------------- |:------------ |:------------:|:------------:|:----------:|:-------------------:|:--------------------------:| +| RAMPS_V14 | Genesis v1.2 | x | | | | | +| FARMDUINO_V10 | Genesis v1.3 | x | | | | | +| FARMDUINO_V14 | Genesis v1.4 | | x | | | | +| FARMDUINO_V30 | Genesis v1.5 | | x | x | | x | +| FARMDUINO_V32 | Genesis v1.6 | | x | x | | x | +| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | | +| FARMDUINO_EXP_V22 | Express v1.1 | | | x | x | | Codes used for communication ============================ @@ -142,9 +143,9 @@ F |52 |E P |Read value from the tool mount with I2C (not impleme F |61 |P V |Set the servo on the pin P (only pins 4, 5, 6, and 11) to the requested angle V F |81 | |Report end stop F |82 | |Report current position -F       |83   |         |Report software version -F       |84    |X Y Z     |Set axis current position to zero (yes=1/no=0) -E       |     |          |Emergency stop +F |83 | |Report software version +F |84 |X Y Z |Set axis current position to zero (yes=1/no=0) +E | | |Emergency stop @ | | |Movement abort __*__ Requires the use of encoders or end stops. @@ -424,3 +425,14 @@ SERVO_0_PIN | 4 | Servo motor 0 signal pin SERVO_1_PIN | 5 | Servo motor 1 signal pin SERVO_2_PIN | 6 | Servo motor 2 signal pin SERVO_3_PIN | 11 | Servo motor 3 signal pin + +### Peripheral current sensor pins (Genesis v1.6) +| peripheral | peripheral pin | current sensor pin | +|:------------------- |:--------------:|:------------------:| +| Lighting | 7 | A0 (D54) | +| Water | 8 | A1 (D55) | +| Vacuum | 9 | A4 (D58) | +| Peripheral 4 | 10 | A3 (D57) | +| Peripheral 5 | 12 | A2 (D56) | +| Rotary Tool Forward | 2 | A6 (D60) | +| Rotary Tool Reverse | 3 | A6 (D60) | diff --git a/lib/targets/express_k11.Makefile b/lib/targets/express_k11.Makefile new file mode 100644 index 0000000..aa20b12 --- /dev/null +++ b/lib/targets/express_k11.Makefile @@ -0,0 +1,25 @@ +TARGET_express_k11_BUILD_DIR := $(BUILD_DIR)/express_k11 +TARGET_express_k11_HEX := $(BIN_DIR)/express_k11.hex + +TARGET_express_k11_OBJ := $(patsubst $(FBARDUINO_FIRMWARE_SRC_DIR)/%,$(TARGET_express_k11_BUILD_DIR)/%,$(CXX_OBJ)) + +$(TARGET_express_k11_HEX): $(TARGET_express_k11_BUILD_DIR) $(TARGET_express_k11_BUILD_DIR)/express_k11.eep $(TARGET_express_k11_BUILD_DIR)/express_k11.elf + $(OBJ_COPY) -O ihex -R .eeprom $(TARGET_express_k11_BUILD_DIR)/express_k11.elf $@ + +$(TARGET_express_k11_BUILD_DIR)/express_k11.eep: $(TARGET_express_k11_BUILD_DIR)/express_k11.elf + $(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $@ + +$(TARGET_express_k11_BUILD_DIR)/express_k11.elf: $(TARGET_express_k11_OBJ) + $(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_express_k11_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS) + +$(TARGET_express_k11_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS) + $(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=6 $(DEPS_CFLAGS) $< -o $@ + +$(TARGET_express_k11_BUILD_DIR): + $(MKDIR_P) $(TARGET_express_k11_BUILD_DIR) + +target_express_k11: $(TARGET_express_k11_HEX) + +target_express_k11_clean: + $(RM) -r $(TARGET_express_k11_BUILD_DIR) + $(RM) $(TARGET_express_k11_HEX) diff --git a/src/Board.h b/src/Board.h index 596345c..34e40b3 100644 --- a/src/Board.h +++ b/src/Board.h @@ -1,9 +1,12 @@ #ifndef FARMBOT_BOARD_ID - // Farmbot using RAMPS board + // Farmbot Genesis 1.2 (using RAMPS board) #define RAMPS_V14 + // Farmbot Genesis 1.3 //#define FARMDUINO_V10 + + // Farmbot Genesis 1.4 //#define FARMDUINO_V14 // Farmbot Genesis 1.5 @@ -12,9 +15,12 @@ // Farmbot Genesis 1.6 //#define FARMDUINO_V32 - // Farmbot Express + // Farmbot Express 1.0 //#define FARMDUINO_EXP_V20 + // Farmbot Express 1.1 + //#define FARMDUINO_EXP_V22 + #else #undef RAMPS_V14 @@ -23,6 +29,7 @@ #undef FARMDUINO_V30 #undef FARMDUINO_V32 #undef FARMDUINO_EXP_V20 + #undef FARMDUINO_EXP_V22 #if FARMBOT_BOARD_ID == 0 #define RAMPS_V14 @@ -36,6 +43,8 @@ #define FARMDUINO_V30 #elif FARMBOT_BOARD_ID == 5 #define FARMDUINO_V32 + #elif FARMBOT_BOARD_ID == 6 + #define FARMDUINO_EXP_V22 #endif #endif diff --git a/src/Config.h b/src/Config.h index 8af9623..85b232f 100644 --- a/src/Config.h +++ b/src/Config.h @@ -293,6 +293,10 @@ enum MdlSpiEncoders #define SOFTWARE_VERSION_SUFFIX ".E.expressK10\0" #endif +#if defined(FARMDUINO_EXP_V22) && !defined(SOFTWARE_VERSION_SUFFIX) +#define SOFTWARE_VERSION_SUFFIX ".E.expressK11\0" +#endif + #ifndef FARMBOT_BOARD_ID #define SOFTWARE_COMMIT "" #else diff --git a/src/F11Handler.cpp b/src/F11Handler.cpp index 77cb770..1cf62e1 100644 --- a/src/F11Handler.cpp +++ b/src/F11Handler.cpp @@ -35,7 +35,7 @@ int F11Handler::execute(Command *command) int stepsPerMM = ParameterList::getInstance()->getValue(MOVEMENT_STEP_PER_MM_X); int missedStepsMax = ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_MAX_X); - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) missedStepsMax += ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_DECAY_X); #endif diff --git a/src/F12Handler.cpp b/src/F12Handler.cpp index c970037..7db79ec 100644 --- a/src/F12Handler.cpp +++ b/src/F12Handler.cpp @@ -35,7 +35,7 @@ int F12Handler::execute(Command *command) int stepsPerMM = ParameterList::getInstance()->getValue(MOVEMENT_STEP_PER_MM_Y); int missedStepsMax = ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_MAX_Y); - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) missedStepsMax += ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_DECAY_Y); #endif @@ -119,7 +119,7 @@ int F12Handler::execute(Command *command) { homingComplete = true; CurrentState::getInstance()->setY(0); - } + } } else { diff --git a/src/F13Handler.cpp b/src/F13Handler.cpp index 8fff3ca..51e543d 100644 --- a/src/F13Handler.cpp +++ b/src/F13Handler.cpp @@ -37,7 +37,7 @@ int F13Handler::execute(Command *command) int stepsPerMM = ParameterList::getInstance()->getValue(MOVEMENT_STEP_PER_MM_Z); int missedStepsMax = ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_MAX_Z); - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) missedStepsMax += ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_DECAY_Z); #endif @@ -74,7 +74,7 @@ int F13Handler::execute(Command *command) { if (firstMove) { - // Move to home position. + // Move to home position. Movement::getInstance()->moveToCoords(X, Y, 0, 0, 0, 0, false, false, false); //execution = CurrentState::getInstance()->getLastError(); execution = 0; diff --git a/src/Movement.cpp b/src/Movement.cpp index a68ec55..90f6152 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -205,7 +205,7 @@ void Movement::loadSettings() } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void Movement::initTMC2130() { axisX.initTMC2130(); @@ -278,7 +278,7 @@ void Movement::loadSettings() void Movement::test() { - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //axisX.enableMotor(); //axisX.setMotorStep(); //delayMicroseconds(500); @@ -367,7 +367,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS unsigned int commandSpeed[3]; - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) axisX.missedStepHistory[0] = 0; axisX.missedStepHistory[1] = 0; axisX.missedStepHistory[2] = 0; @@ -613,7 +613,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS } - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if ( axisX.isAxisActive() @@ -631,7 +631,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialBuffer += "R99"; serialBuffer += " deactivate motor X due to "; - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if (axisX.isDriverError()) { serialBuffer += "driver error"; @@ -655,7 +655,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS } } - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if ( axisY.isAxisActive() @@ -674,7 +674,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialBuffer += "R99"; serialBuffer += " deactivate motor Y due to "; - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if (axisY.isDriverError()) { serialBuffer += "driver error"; @@ -707,7 +707,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS } } - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if ( axisZ.isAxisActive() @@ -726,7 +726,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialBuffer += "R99"; serialBuffer += " deactivate motor Z due to "; - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if (axisZ.isDriverError()) { serialBuffer += "driver error"; @@ -918,7 +918,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS break; case 4: - //#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + //#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //serialBuffer += "R89"; //serialBuffer += " X"; //serialBuffer += axisX.getLoad(); @@ -928,7 +928,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS //serialBuffer += axisZ.getLoad(); //serialBuffer += CurrentState::getInstance()->getQAndNewLine(); //#endif - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) highestX = 0; highestY = 0; @@ -978,14 +978,14 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS serialMessageNr++; - #if !defined(FARMDUINO_EXP_V20) + #if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) if (serialMessageNr > 3) { serialMessageNr = 0; } #endif - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if (serialMessageNr > 4) { @@ -1078,7 +1078,7 @@ int Movement::moveToCoords(double xDestScaled, double yDestScaled, double zDestS disableMotors(); - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if (axisX.isDriverError()) { Serial.print("R99 reset motor X\r\n"); @@ -1253,7 +1253,7 @@ int Movement::calibrateAxis(int axis) unsigned long nextTick = 0; unsigned long lastTick = 0; -#if defined(FARMDUINO_EXP_V20) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) axisX.missedStepHistory[0] = 0; axisX.missedStepHistory[1] = 0; axisX.missedStepHistory[2] = 0; @@ -1277,7 +1277,7 @@ int Movement::calibrateAxis(int axis) //tickDelay = (1000.0 * 1000.0 / MOVEMENT_INTERRUPT_SPEED / speedHome[axis] / 2); tickDelay = (1000.0 * 1000.0 / MOVEMENT_INTERRUPT_SPEED / speedHome[axis] / 4); - #if defined(FARMDUINO_EXP_V20) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) //stepDelay = 1000000 / speedHome[axis] / 4; stepDelay = 1000000 / speedHome[axis] / 2; #else @@ -1484,7 +1484,7 @@ int Movement::calibrateAxis(int axis) // Move until any end stop is reached or the motor is skipping. That end should be the far end stop. First, ram the end at high speed. -#if defined(FARMDUINO_EXP_V20) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if ( (!calibAxis->endStopMin() && !calibAxis->endStopMax()) && !movementDone @@ -1744,7 +1744,7 @@ int Movement::calibrateAxis(int axis) // Move until the end stop is at the home position by detecting the other end stop or missed steps are detected -#if defined(FARMDUINO_EXP_V20) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) if ( ((!invertEndStops && !calibAxis->endStopMin()) || (invertEndStops && !calibAxis->endStopMax())) && !movementDone && @@ -1908,7 +1908,7 @@ int Movement::calibrateAxis(int axis) int debugPrintCount = 0; // Check encoder to verify the motor is at the right position -#if !defined(FARMDUINO_EXP_V20) +#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, float *missedSteps, long *lastPosition, long *encoderLastPosition, int *encoderUseForPos, float *encoderStepDecay, bool *encoderEnabled) { if (*encoderEnabled) @@ -1979,7 +1979,7 @@ void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, } #endif -#if defined(FARMDUINO_EXP_V20) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) void Movement::checkAxisVsEncoder(MovementAxis *axis, MovementEncoder *encoder, float *missedSteps, long *lastPosition, long *encoderLastPosition, int *encoderUseForPos, float *encoderStepDecay, bool *encoderEnabled) { @@ -2145,7 +2145,7 @@ void Movement::loadMotorSettings() axisZ.loadMotorSettings(speedMax[2], speedMaxHome[2], speedMin[2], speedMinHome[2], speedHome[2], stepsAcc[2], stepsAccHome[2], timeOut[2], homeIsUp[2], motorInv[2], endStInv[2], endStInv2[2], MOVEMENT_INTERRUPT_SPEED, motor2Enbl[2], motor2Inv[2], endStEnbl[2], motorStopAtHome[2], motorMaxSize[2], motorStopAtMax[2]); /* -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) loadSettingsTMC2130(); #endif */ @@ -2174,7 +2174,7 @@ void Movement::loadEncoderSettings() motorConsMissedStepsDecay[1] = ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_DECAY_Y); motorConsMissedStepsDecay[2] = ParameterList::getInstance()->getValue(ENCODER_MISSED_STEPS_DECAY_Z); -#if !defined(FARMDUINO_EXP_V20) +#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) motorConsMissedStepsDecay[0] = motorConsMissedStepsDecay[0] / 100; motorConsMissedStepsDecay[1] = motorConsMissedStepsDecay[1] / 100; motorConsMissedStepsDecay[2] = motorConsMissedStepsDecay[2] / 100; @@ -2299,7 +2299,7 @@ bool Movement::endStopsReached() void Movement::storePosition() { -#if !defined(FARMDUINO_EXP_V20) +#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) if (motorConsEncoderEnabled[0]) { CurrentState::getInstance()->setX(encoderX.currentPosition()); @@ -2328,7 +2328,7 @@ void Movement::storePosition() } #endif -#if defined(FARMDUINO_EXP_V20) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) CurrentState::getInstance()->setX(axisX.currentPosition()); CurrentState::getInstance()->setY(axisY.currentPosition()); CurrentState::getInstance()->setZ(axisZ.currentPosition()); diff --git a/src/Movement.h b/src/Movement.h index 3f66d50..8efde4b 100644 --- a/src/Movement.h +++ b/src/Movement.h @@ -37,7 +37,7 @@ class Movement void handleMovementInterrupt(); void checkEncoders(); - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void initTMC2130(); void loadSettingsTMC2130(); void loadSettingsTMC2130_X(); @@ -130,7 +130,7 @@ class Movement long motorMaxSize[3] = { 0, 0, 0}; bool motorStopAtMax[3] = { false, false, false }; long motorCalibRetry[3] = { 3, 3, 3 }; - long motorCalibRetryTotal[3] = { 10, 10, 10 }; + long motorCalibRetryTotal[3] = { 10, 10, 10 }; long motorCalibRetryDeadzone[3] = { 10, 10, 10 }; bool motorKeepActive[3] = { false, false, false }; bool motor2Inv[3] = { false, false, false }; diff --git a/src/MovementAxis.cpp b/src/MovementAxis.cpp index 3cd334a..89f2757 100644 --- a/src/MovementAxis.cpp +++ b/src/MovementAxis.cpp @@ -71,7 +71,7 @@ void MovementAxis::test() } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) unsigned int MovementAxis::getLostSteps() { @@ -691,7 +691,7 @@ void MovementAxis::disableMotor() void MovementAxis::setDirectionUp() { -//#if !defined(FARMDUINO_EXP_V20) +//#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) if (motorMotorInv) { digitalWrite(pinDirection, LOW); @@ -712,7 +712,7 @@ void MovementAxis::setDirectionUp() //#endif /* -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) // The TMC2130 uses a command to change direction, not a pin if (motorMotorInv) @@ -739,7 +739,7 @@ void MovementAxis::setDirectionUp() void MovementAxis::setDirectionDown() { - //#if !defined(FARMDUINO_EXP_V20) + //#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) if (motorMotorInv) { @@ -761,7 +761,7 @@ void MovementAxis::setDirectionDown() //#endif /* - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) // The TMC2130 uses a command to change direction, not a pin if (motorMotorInv) @@ -1047,7 +1047,7 @@ void MovementAxis::resetMotorStepWrite46() PORTL &= B11110111; } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) //// TMC2130 Functions void MovementAxis::setMotorStepWriteTMC2130() diff --git a/src/MovementAxis.h b/src/MovementAxis.h index 7d5227c..7b87b00 100644 --- a/src/MovementAxis.h +++ b/src/MovementAxis.h @@ -18,7 +18,7 @@ #include #include "Board.h" -//#if defined(FARMDUINO_EXP_V20) +//#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) #include "TMC2130.h" //#endif @@ -29,7 +29,7 @@ class MovementAxis public: MovementAxis(); -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) TMC2130_Basics *TMC2130A; TMC2130_Basics *TMC2130B; #endif @@ -95,7 +95,7 @@ class MovementAxis char channelLabel; bool movementStarted; -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void initTMC2130(); void loadSettingsTMC2130(int motorCurrent, int stallSensitivity, int microSteps, bool stealth); uint16_t getLoad(); @@ -103,7 +103,7 @@ class MovementAxis #endif -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void setMotorStepWriteTMC2130(); void setMotorStepWriteTMC2130_2(); void resetMotorStepWriteTMC2130(); @@ -128,7 +128,7 @@ class MovementAxis int lastCalcLog = 0; bool debugPrint = false; -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) uint32_t driverStatus = 0; #endif diff --git a/src/MovementEncoder.cpp b/src/MovementEncoder.cpp index 36d00f7..0fce2e4 100644 --- a/src/MovementEncoder.cpp +++ b/src/MovementEncoder.cpp @@ -76,7 +76,7 @@ void MovementEncoder::loadMdlEncoderId(MdlSpiEncoders encoder) void MovementEncoder::setPosition(long newPosition) { - #if defined(RAMPS_V14) || defined(FARMDUINO_V10) || defined(FARMDUINO_EXP_V20) + #if defined(RAMPS_V14) || defined(FARMDUINO_V10) || defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) position = newPosition; #endif @@ -292,7 +292,7 @@ float MovementEncoder::getMissedSteps() void MovementEncoder::checkMissedSteps() { - #if !defined(FARMDUINO_EXP_V20) + #if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) if (encoderEnabled) { bool stepMissed = false; @@ -322,7 +322,7 @@ void MovementEncoder::checkMissedSteps() #endif /* - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) if (encoderEnabled) { if (axis->stallDetected()) { diff --git a/src/TMC2130.cpp b/src/TMC2130.cpp index 4581d87..b745b83 100644 --- a/src/TMC2130.cpp +++ b/src/TMC2130.cpp @@ -8,7 +8,7 @@ #include "TMC2130.h" -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void loadTMC2130ParametersMotor(TMC2130_Basics *tb, int microsteps, int current, int sensitivity, bool stealth) { diff --git a/src/TMC2130.h b/src/TMC2130.h index 77e5538..b699711 100644 --- a/src/TMC2130.h +++ b/src/TMC2130.h @@ -14,7 +14,7 @@ #include "pins.h" #include "Board.h" -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) #include "TMC2130_Basics.h" static TMC2130_Basics TMC2130X(X_CHIP_SELECT, 1); diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index b51698e..7e774e9 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -1,7 +1,7 @@ // Do not remove the include below #include "farmbot_arduino_controller.h" -//#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +//#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) #include "TimerOne.h" //#endif @@ -56,7 +56,7 @@ unsigned long interruptDurationMax = 0; bool interruptBusy = false; int interruptSecondTimer = 0; -//#if !defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +//#if !(defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22)) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void interrupt(void) { if (!debugInterrupt) @@ -75,7 +75,7 @@ void interrupt(void) } //#endif -#if defined(FARMDUINO_EXP_V20xxx) +#if defined(FARMDUINO_EXP_V20xxx) || defined(FARMDUINO_EXP_V22xxx) ISR(TIMER2_OVF_vect) { if (interruptBusy == false) @@ -328,7 +328,7 @@ void checkParamsChanged() } - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) stopInterrupt(); if (lastTmcParamChangeNr != ParameterList::getInstance()->tmcParamChangeNumber()) { @@ -553,7 +553,7 @@ void setPinInputOutput() } #endif -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void setPinInputOutput() { Serial.print(COMM_REPORT_COMMENT); @@ -602,20 +602,24 @@ void setPinInputOutput() digitalWrite(E_DIR_PIN, LOW); digitalWrite(E_STEP_PIN, LOW); - pinMode(AUX_STEP_PIN, OUTPUT); - pinMode(AUX_DIR_PIN, OUTPUT); - pinMode(AUX_ENABLE_PIN, OUTPUT); + #if defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + pinMode(AUX_STEP_PIN, OUTPUT); + pinMode(AUX_DIR_PIN, OUTPUT); + pinMode(AUX_ENABLE_PIN, OUTPUT); digitalWrite(AUX_STEP_PIN, LOW); digitalWrite(AUX_DIR_PIN, LOW); digitalWrite(AUX_ENABLE_PIN, LOW); + #endif pinMode(LED_PIN, OUTPUT); pinMode(VACUUM_PIN, OUTPUT); pinMode(WATER_PIN, OUTPUT); pinMode(LIGHTING_PIN, OUTPUT); - pinMode(PERIPHERAL_4_PIN, OUTPUT); - pinMode(PERIPHERAL_5_PIN, OUTPUT); + #if defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + pinMode(PERIPHERAL_4_PIN, OUTPUT); + pinMode(PERIPHERAL_5_PIN, OUTPUT); + #endif #if defined(FARMDUINO_V32) pinMode(ROTARY_TOOL_FORWARD, OUTPUT); pinMode(ROTARY_TOOL_REVERSE, OUTPUT); @@ -625,8 +629,10 @@ void setPinInputOutput() digitalWrite(VACUUM_PIN, LOW); digitalWrite(WATER_PIN, LOW); digitalWrite(LIGHTING_PIN, LOW); - digitalWrite(PERIPHERAL_4_PIN, LOW); - digitalWrite(PERIPHERAL_5_PIN, LOW); + #if defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + digitalWrite(PERIPHERAL_4_PIN, LOW); + digitalWrite(PERIPHERAL_5_PIN, LOW); + #endif #if defined(FARMDUINO_V32) pinMode(ROTARY_TOOL_FORWARD, LOW); pinMode(ROTARY_TOOL_REVERSE, LOW); @@ -635,14 +641,16 @@ void setPinInputOutput() pinMode(LIGHTING_CURRENT_PIN, INPUT_PULLUP); pinMode(WATER_CURRENT_PIN, INPUT_PULLUP); pinMode(VACUUM_CURRENT_PIN, INPUT_PULLUP); - pinMode(PERIPHERAL_4_CURRENT_PIN, INPUT_PULLUP); - pinMode(PERIPHERAL_5_CURRENT_PIN, INPUT_PULLUP); + #if defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + pinMode(PERIPHERAL_4_CURRENT_PIN, INPUT_PULLUP); + pinMode(PERIPHERAL_5_CURRENT_PIN, INPUT_PULLUP); + #endif #if defined(FARMDUINO_V32) pinMode(ROTARY_TOOL_CURRENT_PIN, INPUT_PULLUP); #endif - pinMode(UTM_C, INPUT_PULLUP); - pinMode(UTM_D, INPUT_PULLUP); + if (UTM_C > 0) { pinMode(UTM_C, INPUT_PULLUP); }; + if (UTM_D > 0) { pinMode(UTM_D, INPUT_PULLUP); }; if (UTM_E > 0) { pinMode(UTM_E, INPUT_PULLUP); }; if (UTM_F > 0) { pinMode(UTM_F, INPUT_PULLUP); }; if (UTM_G > 0) { pinMode(UTM_G, INPUT_PULLUP); }; @@ -822,7 +830,7 @@ void startServo() ServoControl::getInstance()->attach(); } -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void loadTMC2130drivers() { diff --git a/src/farmbot_arduino_controller.h b/src/farmbot_arduino_controller.h index f1b8ac5..671fa31 100644 --- a/src/farmbot_arduino_controller.h +++ b/src/farmbot_arduino_controller.h @@ -16,7 +16,7 @@ #include "MemoryFree.h" #include "Debug.h" -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) #include "TMC2130.h" #endif @@ -49,7 +49,7 @@ void setup(); void setPinInputOutput(); void startSerial(); - #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) + #if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) void loadTMC2130drivers(); void loadTMC2130parameters(); void startupTmc(); diff --git a/src/pins.h b/src/pins.h index ff78722..5a54b04 100644 --- a/src/pins.h +++ b/src/pins.h @@ -257,7 +257,7 @@ #endif -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) +#if defined(FARMDUINO_V30) // X1-AXIS #define X_STEP_PIN 26 // X1_STEP_PIN @@ -393,6 +393,142 @@ #endif +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) + + // X1-AXIS + #define X_STEP_PIN 26 // X1_STEP_PIN + #define X_DIR_PIN 27 // X1_DIR_PIN + #define X_ENABLE_PIN 25 // X1_ENABLE_PIN + #define X_CHIP_SELECT 24 // X1_CHIP_SELECT + #define X_MIN_PIN 69 + #define X_MAX_PIN 68 + #define X_ENCDR_A -1 // N/A + #define X_ENCDR_B -1 // N/A + #define X_ENCDR_A_Q -1 // N/A + #define X_ENCDR_B_Q -1 // N/A + + // X2-AXIS + #define E_STEP_PIN 15 // X2_STEP_PIN + #define E_DIR_PIN 30 // X2_DIR_PIN + #define E_ENABLE_PIN 14 // X2_ENABLE_PIN + #define E_CHIP_SELECT 29 // X2_CHIP_SELECT + #define X2_ENCDR_A -1 // N/A + #define X2_ENCDR_B -1 // N/A + + // Y-AXIS + #define Y_STEP_PIN 32 + #define Y_DIR_PIN 33 + #define Y_ENABLE_PIN 31 + #define Y_CHIP_SELECT 28 // Y_CHIP_SELECT + #define Y_MIN_PIN 67 + #define Y_MAX_PIN 66 + #define Y_ENCDR_A -1 // N/A + #define Y_ENCDR_B -1 // N/A + #define Y_ENCDR_A_Q -1 // N/A + #define Y_ENCDR_B_Q -1 // N/A + + // Z-AXIS + #define Z_STEP_PIN 35 + #define Z_DIR_PIN 36 + #define Z_ENABLE_PIN 34 + #define Z_CHIP_SELECT 23 // Z_CHIP_SELECT + #define Z_MIN_PIN 65 + #define Z_MAX_PIN 64 + #define Z_ENCDR_A -1 // N/A + #define Z_ENCDR_B -1 // N/A + #define Z_ENCDR_A_Q -1 // N/A + #define Z_ENCDR_B_Q -1 // N/A + + // UTM + #define UTM_C -1 + #define UTM_D -1 + #define UTM_E -1 + #define UTM_F -1 + #define UTM_G -1 + #define UTM_H -1 + #define UTM_I -1 + #define UTM_J -1 + #define UTM_K -1 + #define UTM_L -1 + // Available digital pins: 2,3,10,12,16,17,18,19,22,37,38,39,40,41,42,43,44,45,46,47,48 + // Available analog pins: 5,6,7,8,9 + + #define LED_PIN 13 + + // Peripherals + #define LIGHTING_PIN 7 + #define WATER_PIN 8 + #define VACUUM_PIN 9 + #define PERIPHERAL_4_PIN -1 + #define PERIPHERAL_5_PIN -1 + + // Peripheral current sensors + #define LIGHTING_CURRENT_PIN 54 // A0 + #define WATER_CURRENT_PIN 55 // A1 + #define VACUUM_CURRENT_PIN 58 // A4 + #define PERIPHERAL_4_CURRENT_PIN -1 + #define PERIPHERAL_5_CURRENT_PIN -1 + + // Auxiliary motors + #define AUX_STEP_PIN -1 + #define AUX_DIR_PIN -1 + #define AUX_ENABLE_PIN -1 + + #define SERVO_0_PIN 4 + #define SERVO_1_PIN 5 + #define SERVO_2_PIN 6 + #define SERVO_3_PIN 11 + + // Encoder X channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_X_A_PORT PINB + #define ENC_X_A_BYTE 0x80 + + // Encoder X channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_X_B_PORT PINB + #define ENC_X_B_BYTE 0x80 + + // Encoder X channel A Q (disabled, use LED pin): pin 13, port B7 + #define ENC_X_A_Q_PORT PINB + #define ENC_X_A_Q_BYTE 0x80 + + // Encoder X channel B Q (disabled, use LED pin): pin 13, port B7 + #define ENC_X_B_Q_PORT PINB + #define ENC_X_B_Q_BYTE 0x80 + + // Encoder Y channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_A_PORT PINB + #define ENC_Y_A_BYTE 0x80 + + // Encoder Y channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_B_PORT PINB + #define ENC_Y_B_BYTE 0x80 + + // Encoder Y channel A Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_A_Q_PORT PINB + #define ENC_Y_A_Q_BYTE 0x80 + + // Encoder Y channel B Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Y_B_Q_PORT PINB + #define ENC_Y_B_Q_BYTE 0x80 + + // Encoder Z channel A (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_A_PORT PINB + #define ENC_Z_A_BYTE 0x80 + + // Encoder Z channel B (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_B_PORT PINB + #define ENC_Z_B_BYTE 0x80 + + // Encoder Z channel A Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_A_Q_PORT PINB + #define ENC_Z_A_Q_BYTE 0x80 + + // Encoder Z channel B Q (disabled, use LED pin): pin 13, port B7 + #define ENC_Z_B_Q_PORT PINB + #define ENC_Z_B_Q_BYTE 0x80 + +#endif + #if defined(FARMDUINO_V32) // X1-AXIS diff --git a/src/src.ino b/src/src.ino index f915303..2a7bbff 100644 --- a/src/src.ino +++ b/src/src.ino @@ -19,7 +19,7 @@ void setup() readParameters(); -#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) +#if defined(FARMDUINO_EXP_V20) || defined(FARMDUINO_EXP_V22) || defined(FARMDUINO_V30) || defined(FARMDUINO_V32) loadTMC2130drivers(); startupTmc(); loadTMC2130parameters(); From 3a595960b17251ab784271434f7ab07ee818bff1 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Mon, 31 Jan 2022 14:00:40 -0800 Subject: [PATCH 57/71] bump version (6.6.21) --- Makefile | 2 +- src/Config.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 5271de7..0b4e654 100644 --- a/Makefile +++ b/Makefile @@ -101,7 +101,7 @@ strings_test: all @strings $(TARGET_farmduino_k15_HEX).bin | grep -q ".H.genesisK15" @strings $(TARGET_farmduino_k16_HEX).bin | grep -q ".I.genesisK16" @strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10" - @strings $(TARGET_express_k11_HEX).bin | grep -q ".E.expressK11" + @strings $(TARGET_express_k11_HEX).bin | grep -q ".D.expressK11" force_clean: remove_temp $(RM) -r $(BUILD_DIR) $(BIN_DIR) diff --git a/src/Config.h b/src/Config.h index 85b232f..802553c 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.20\0"; + const char SOFTWARE_VERSION[] = "6.6.21\0"; const int LOGGING = 0; @@ -294,7 +294,7 @@ enum MdlSpiEncoders #endif #if defined(FARMDUINO_EXP_V22) && !defined(SOFTWARE_VERSION_SUFFIX) -#define SOFTWARE_VERSION_SUFFIX ".E.expressK11\0" +#define SOFTWARE_VERSION_SUFFIX ".D.expressK11\0" #endif #ifndef FARMBOT_BOARD_ID From 70348c620fe41e27dff3e68b70b57f5cf2365b97 Mon Sep 17 00:00:00 2001 From: Tim Evers Date: Mon, 7 Nov 2022 21:12:08 +0100 Subject: [PATCH 58/71] Fixing abort command --- src/F11Handler.cpp | 4 ++-- src/GCodeProcessor.cpp | 6 +++++- src/Movement.cpp | 26 ++++++++++++++++++++++++-- src/farmbot_arduino_controller.cpp | 6 ++++++ 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/F11Handler.cpp b/src/F11Handler.cpp index 77cb770..a299ba2 100644 --- a/src/F11Handler.cpp +++ b/src/F11Handler.cpp @@ -86,7 +86,7 @@ int F11Handler::execute(Command *command) execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); movementAbort = CurrentState::getInstance()->isMovementAbort(); - if (movementAbort || emergencyStop || execution != 0) { break; } + if (movementAbort || emergencyStop || execution != 0) { homingComplete = true; break; } // Home again Movement::getInstance()->moveToCoords(0, Y, Z, 0, 0, 0, true, false, false); @@ -94,7 +94,7 @@ int F11Handler::execute(Command *command) execution = 0; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); movementAbort = CurrentState::getInstance()->isMovementAbort(); - if (movementAbort || emergencyStop || execution != 0) { break; } + if (movementAbort || emergencyStop || execution != 0) { homingComplete = true; break; } Serial.print("R99 homing displaced"); Serial.print(" X "); diff --git a/src/GCodeProcessor.cpp b/src/GCodeProcessor.cpp index eba59c1..876b727 100644 --- a/src/GCodeProcessor.cpp +++ b/src/GCodeProcessor.cpp @@ -32,6 +32,9 @@ int GCodeProcessor::execute(Command *command) bool emergencyStop = false; emergencyStop = CurrentState::getInstance()->isEmergencyStop(); + bool movementAbort = false; + movementAbort = CurrentState::getInstance()->isMovementAbort(); + int attempt = 0; int maximumAttempts = ParameterList::getInstance()->getValue(PARAM_MOV_NR_RETRY); @@ -139,7 +142,7 @@ int GCodeProcessor::execute(Command *command) // Execute command with retry CurrentState::getInstance()->setLastError(0); - while (attempt < 1 || (!emergencyStop && attempt < maximumAttempts && execution != 0 && execution != 2)) + while (attempt < 1 || (!emergencyStop && !movementAbort && attempt < maximumAttempts && execution != 0 && execution != 2)) // error 2 is timeout error: stop movement retries { @@ -162,6 +165,7 @@ int GCodeProcessor::execute(Command *command) handler->execute(command); execution = CurrentState::getInstance()->getLastError(); emergencyStop = CurrentState::getInstance()->isEmergencyStop(); + movementAbort = CurrentState::getInstance()->isMovementAbort(); if (LOGGING || debugMessages) { diff --git a/src/Movement.cpp b/src/Movement.cpp index a68ec55..e301a12 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -1467,7 +1467,7 @@ int Movement::calibrateAxis(int axis) } - // Check if there is an emergency stop command + // Check if there is an emergency stop or movement abort command if (Serial.available() > 0) { incomingByte = Serial.read(); @@ -1480,8 +1480,20 @@ int Movement::calibrateAxis(int axis) CurrentState::getInstance()->printQAndNewLine(); error = ERR_EMERGENCY_STOP; } + + if (incomingByte == 64) + { + Serial.print("R99 movement abort\r\n"); + movementDone = true; + CurrentState::getInstance()->setMovementAbort(); + Serial.print(COMM_REPORT_MOVEMENT_ABORT); + CurrentState::getInstance()->printQAndNewLine(); + error = ERR_MOVEMENT_ABORT; + } + } + // Move until any end stop is reached or the motor is skipping. That end should be the far end stop. First, ram the end at high speed. #if defined(FARMDUINO_EXP_V20) @@ -1721,7 +1733,7 @@ int Movement::calibrateAxis(int axis) } - // Check if there is an emergency stop command + // Check if there is an emergency stop or movement abort command if (Serial.available() > 0) { incomingByte = Serial.read(); @@ -1734,6 +1746,16 @@ int Movement::calibrateAxis(int axis) CurrentState::getInstance()->printQAndNewLine(); error = ERR_EMERGENCY_STOP; } + + if (incomingByte == 64) + { + Serial.print("R99 movement abort\r\n"); + movementDone = true; + CurrentState::getInstance()->setMovementAbort(); + Serial.print(COMM_REPORT_MOVEMENT_ABORT); + CurrentState::getInstance()->printQAndNewLine(); + error = ERR_MOVEMENT_ABORT; + } } // Ignore the missed steps at startup time diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index b51698e..39487ee 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -285,6 +285,12 @@ void checkSerialInputs() gCodeProcessor->execute(command); + if (CurrentState::getInstance()->getLastError() == ERR_MOVEMENT_ABORT) + { + CurrentState::getInstance()->setLastError(ERR_NO_ERROR); + CurrentState::getInstance()->resetMovementAbort(); + } + free(command); } From 76fab11d2265d7c6603e3a8619b776e611b37846 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 13 Sep 2022 20:41:17 -0700 Subject: [PATCH 59/71] fix build escapes --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0b4e654..3382236 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ ARDUINO_INSTALL_DIR ?= $(HOME)/arduino-1.8.16 # Get current commit SHA COMMIT_SHA := $(shell git -C $(FBARDUINO_FIRMWARE_SRC_DIR)/.. rev-parse --short=8 HEAD) MODIFIER := $(shell /bin/echo $$(if [ -z "$$(git -C $(FBARDUINO_FIRMWARE_SRC_DIR)/.. status -s -uall)" ];then /bin/echo "";else /bin/echo "+";fi)) -CREATE_COMMIT_SHA_H := $(shell /bin/echo -e "\#ifndef COMMIT_SHA_H_\n\#define COMMIT_SHA_H_\n\#define SOFTWARE_COMMIT \"-$(COMMIT_SHA)$(MODIFIER)\"\n\#endif" > $(FBARDUINO_FIRMWARE_SRC_DIR)/CommitSHA.h) +CREATE_COMMIT_SHA_H := $(shell /bin/echo -e "#ifndef COMMIT_SHA_H_\n#define COMMIT_SHA_H_\n#define SOFTWARE_COMMIT \"-$(COMMIT_SHA)$(MODIFIER)\"\n#endif" > $(FBARDUINO_FIRMWARE_SRC_DIR)/CommitSHA.h) # Files to be tracked for make to know to rebuild. COPY_INO := $(shell cp $(FBARDUINO_FIRMWARE_SRC_DIR)/src.ino $(FBARDUINO_FIRMWARE_SRC_DIR)/src.ino.cpp) From b34190c297a5a8753cd1a63a0e7489000ed395a6 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 8 Nov 2022 11:49:57 -0800 Subject: [PATCH 60/71] bump version (6.6.22) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 802553c..bde8785 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.21\0"; + const char SOFTWARE_VERSION[] = "6.6.22\0"; const int LOGGING = 0; From 877a92044d40734641656e5becf9c5dcd2ee7bca Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 21 Sep 2023 12:41:43 -0700 Subject: [PATCH 61/71] add all genesis v1.6 pin info to pins.h --- src/pins.h | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/pins.h b/src/pins.h index 5a54b04..1ad39a5 100644 --- a/src/pins.h +++ b/src/pins.h @@ -536,6 +536,7 @@ #define X_DIR_PIN 27 // X1_DIR_PIN #define X_ENABLE_PIN 25 // X1_ENABLE_PIN #define X_CHIP_SELECT 24 // X1_CHIP_SELECT + // #define X1_DIAGNOSTICS 47 #define X_MIN_PIN 69 #define X_MAX_PIN 68 #define X_ENCDR_A -1 // N/A @@ -548,6 +549,7 @@ #define E_DIR_PIN 30 // X2_DIR_PIN #define E_ENABLE_PIN 14 // X2_ENABLE_PIN #define E_CHIP_SELECT 29 // X2_CHIP_SELECT + // #define X2_DIAGNOSTICS 46 #define X2_ENCDR_A -1 // N/A #define X2_ENCDR_B -1 // N/A @@ -556,6 +558,7 @@ #define Y_DIR_PIN 33 #define Y_ENABLE_PIN 31 #define Y_CHIP_SELECT 28 // Y_CHIP_SELECT + // #define Y_DIAGNOSTICS 45 #define Y_MIN_PIN 67 #define Y_MAX_PIN 66 #define Y_ENCDR_A -1 // N/A @@ -568,6 +571,7 @@ #define Z_DIR_PIN 36 #define Z_ENABLE_PIN 34 #define Z_CHIP_SELECT 23 // Z_CHIP_SELECT + // #define Z_DIAGNOSTICS 39 #define Z_MIN_PIN 65 #define Z_MAX_PIN 64 #define Z_ENCDR_A -1 // N/A @@ -582,12 +586,12 @@ #define UTM_F -1 #define UTM_G -1 #define UTM_H -1 // rotary tool reverse - #define UTM_I -1 - #define UTM_J -1 + #define UTM_I -1 // I2C SCL + #define UTM_J -1 // I2C SDA #define UTM_K -1 #define UTM_L -1 // PE - // Available digital pins: 16,17,18,19,22,38,39,42,43,44,45,46,47,48 - // Available analog pins: 7,8 + // Available digital pins: 18, 19, 38, 42 (not exposed on board: 16, 17) + // Available analog pins: 7 (D 61), 8 (D 62) #define LED_PIN 13 @@ -607,11 +611,25 @@ #define PERIPHERAL_4_CURRENT_PIN 57 // A3 #define PERIPHERAL_5_CURRENT_PIN 56 // A2 #define ROTARY_TOOL_CURRENT_PIN 60 // A6 + // #define ROTARY_TOOL_FAULT_INDICATOR_PIN 48 // Auxiliary motors #define AUX_STEP_PIN 40 #define AUX_DIR_PIN 41 #define AUX_ENABLE_PIN 37 + // #define AUX_CHIP_SELECT 43 + // #define AUX_DIAGNOSTICS 44 + + // #define I2C_SCL 21 + // #define I2C_SDA 20 + + // #define SPI_MISO 50 + // #define SPI_MOSI 51 + // #define SPI_SCK 52 + // #define SPI_CS 53 + + // #define NSS_PIN 22 // STM32_CHIP_SELECT (defined in Config.h) + // #define READ_ENA_PIN 49 // STM32_RESET (defined in Config.h) #define SERVO_0_PIN 4 #define SERVO_1_PIN 5 From 99a58bde4ae789056fadc43cc1fb1c85b750b040 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 21 Sep 2023 12:41:56 -0700 Subject: [PATCH 62/71] fix rotary tool init typo --- src/farmbot_arduino_controller.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/farmbot_arduino_controller.cpp b/src/farmbot_arduino_controller.cpp index 60b33b8..23bf593 100644 --- a/src/farmbot_arduino_controller.cpp +++ b/src/farmbot_arduino_controller.cpp @@ -640,8 +640,8 @@ void setPinInputOutput() digitalWrite(PERIPHERAL_5_PIN, LOW); #endif #if defined(FARMDUINO_V32) - pinMode(ROTARY_TOOL_FORWARD, LOW); - pinMode(ROTARY_TOOL_REVERSE, LOW); + digitalWrite(ROTARY_TOOL_FORWARD, LOW); + digitalWrite(ROTARY_TOOL_REVERSE, LOW); #endif pinMode(LIGHTING_CURRENT_PIN, INPUT_PULLUP); From fe6ea83427d4f0aa61f1c80d41dfe45782b199df Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 21 Sep 2023 12:50:18 -0700 Subject: [PATCH 63/71] upgrade arduino version (1.8.19) --- .circleci/config.yml | 2 +- Makefile | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d5258ad..da5d3b4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ jobs: parameters: arduino_version: description: "Arduino version" - default: "1.8.16" + default: "1.8.19" type: string steps: - checkout diff --git a/Makefile b/Makefile index 3382236..945dc17 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ FBARDUINO_FIRMWARE_SRC_DIR ?= src FBARDUINO_FIRMWARE_BUILD_DIR ?= $(BUILD_DIR)/sketch FBARDUINO_FIRMWARE_LIB_BUILD_DIR ?= $(BUILD_DIR)/libraries -ARDUINO_INSTALL_DIR ?= $(HOME)/arduino-1.8.16 +ARDUINO_INSTALL_DIR ?= $(HOME)/arduino-1.8.19 # Get current commit SHA COMMIT_SHA := $(shell git -C $(FBARDUINO_FIRMWARE_SRC_DIR)/.. rev-parse --short=8 HEAD) diff --git a/README.md b/README.md index 4e48272..53f0169 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Options for compiling and uploading: * Select _Sketch_ > _Export compiled binary_. * The `.hex` file will save to the `src` directory. * Make (Linux) - * [Download the Arduino 1.8.16 IDE](https://www.arduino.cc/download_handler.php?f=/arduino-1.8.16-linux64.tar.xz) and unpack to the `/home` directory. + * [Download the Arduino 1.8.19 IDE](https://www.arduino.cc/download_handler.php?f=/arduino-1.8.19-linux64.tar.xz) and unpack to the `/home` directory. * `cd farmbot-arduino-firmware` * To compile: * `make` From 47732ea09c99e99c69959dc4530f8ab4b9ad2854 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 21 Sep 2023 13:00:55 -0700 Subject: [PATCH 64/71] bump version (6.6.23) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index bde8785..8c3ddc0 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.22\0"; + const char SOFTWARE_VERSION[] = "6.6.23\0"; const int LOGGING = 0; From 5b442baffa964dd44b48a6e8967afa8fefe79109 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 2 Nov 2023 14:45:34 -0700 Subject: [PATCH 65/71] add genesis v1.7 build --- .circleci/config.yml | 4 ++++ Makefile | 6 ++++++ README.md | 18 +++++++++--------- lib/targets/farmduino_k17.Makefile | 25 +++++++++++++++++++++++++ src/Board.h | 9 +++++++++ src/Config.h | 6 +++++- 6 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 lib/targets/farmduino_k17.Makefile diff --git a/.circleci/config.yml b/.circleci/config.yml index da5d3b4..91bb4fe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -48,6 +48,10 @@ jobs: name: Compile Genesis v1.6 (FARMDUINO_V32) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k16 remove_temp when: always + - run: + name: Compile Genesis v1.7 (FARMDUINO_V32 K17) + command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k17 remove_temp + when: always - run: name: Compile Express v1.0 (FARMDUINO_EXP_V20) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_express_k10 remove_temp diff --git a/Makefile b/Makefile index 945dc17..ed5a7f1 100644 --- a/Makefile +++ b/Makefile @@ -48,6 +48,7 @@ include lib/targets/farmduino_v10.Makefile include lib/targets/farmduino_k14.Makefile include lib/targets/farmduino_k15.Makefile include lib/targets/farmduino_k16.Makefile +include lib/targets/farmduino_k17.Makefile include lib/targets/express_k10.Makefile include lib/targets/express_k11.Makefile @@ -61,6 +62,7 @@ include lib/targets/express_k11.Makefile target_farmduino_k14 target_farmduino_k14_clean \ target_farmduino_k15 target_farmduino_k15_clean \ target_farmduino_k16 target_farmduino_k16_clean \ + target_farmduino_k17 target_farmduino_k17_clean \ target_express_k10 target_express_k10_clean \ target_express_k11 target_express_k11_clean @@ -74,6 +76,7 @@ all: $(BIN_DIR) $(DEPS) \ target_farmduino_k14 \ target_farmduino_k15 \ target_farmduino_k16 \ + target_farmduino_k17 \ target_express_k10 \ target_express_k11 \ remove_temp @@ -84,6 +87,7 @@ clean: remove_temp \ target_farmduino_k14_clean \ target_farmduino_k15_clean \ target_farmduino_k16_clean \ + target_farmduino_k17_clean \ target_express_k10_clean \ target_express_k11_clean @@ -93,6 +97,7 @@ strings_test: all $(OBJ_COPY) -I ihex $(TARGET_farmduino_k14_HEX) -O binary $(TARGET_farmduino_k14_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_farmduino_k15_HEX) -O binary $(TARGET_farmduino_k15_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_farmduino_k16_HEX) -O binary $(TARGET_farmduino_k16_HEX).bin + $(OBJ_COPY) -I ihex $(TARGET_farmduino_k17_HEX) -O binary $(TARGET_farmduino_k17_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k10_HEX) -O binary $(TARGET_express_k10_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k11_HEX) -O binary $(TARGET_express_k11_HEX).bin @strings $(TARGET_ramps_v14_HEX).bin | grep -q ".R.genesisK12" @@ -100,6 +105,7 @@ strings_test: all @strings $(TARGET_farmduino_k14_HEX).bin | grep -q ".G.genesisK14" @strings $(TARGET_farmduino_k15_HEX).bin | grep -q ".H.genesisK15" @strings $(TARGET_farmduino_k16_HEX).bin | grep -q ".I.genesisK16" + @strings $(TARGET_farmduino_k17_HEX).bin | grep -q ".J.genesisK17" @strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10" @strings $(TARGET_express_k11_HEX).bin | grep -q ".D.expressK11" diff --git a/README.md b/README.md index 53f0169..0a41239 100644 --- a/README.md +++ b/README.md @@ -86,15 +86,15 @@ All files are in `/src` Board Feature Overview ====================== -| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection | peripheral current sensors | -|:----------------- |:------------ |:------------:|:------------:|:----------:|:-------------------:|:--------------------------:| -| RAMPS_V14 | Genesis v1.2 | x | | | | | -| FARMDUINO_V10 | Genesis v1.3 | x | | | | | -| FARMDUINO_V14 | Genesis v1.4 | | x | | | | -| FARMDUINO_V30 | Genesis v1.5 | | x | x | | x | -| FARMDUINO_V32 | Genesis v1.6 | | x | x | | x | -| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | | -| FARMDUINO_EXP_V22 | Express v1.1 | | | x | x | | +| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection | peripheral current sensors | +|:----------------- |:------------------- |:------------:|:------------:|:----------:|:-------------------:|:--------------------------:| +| RAMPS_V14 | Genesis v1.2 | x | | | | | +| FARMDUINO_V10 | Genesis v1.3 | x | | | | | +| FARMDUINO_V14 | Genesis v1.4 | | x | | | | +| FARMDUINO_V30 | Genesis v1.5 | | x | x | | x | +| FARMDUINO_V32 | Genesis v1.6 & v1.7 | | x | x | | x | +| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | | +| FARMDUINO_EXP_V22 | Express v1.1 | | | x | x | | Codes used for communication ============================ diff --git a/lib/targets/farmduino_k17.Makefile b/lib/targets/farmduino_k17.Makefile new file mode 100644 index 0000000..cdbd1ba --- /dev/null +++ b/lib/targets/farmduino_k17.Makefile @@ -0,0 +1,25 @@ +TARGET_farmduino_k17_BUILD_DIR := $(BUILD_DIR)/farmduino_k17 +TARGET_farmduino_k17_HEX := $(BIN_DIR)/farmduino_k17.hex + +TARGET_farmduino_k17_OBJ := $(patsubst $(FBARDUINO_FIRMWARE_SRC_DIR)/%,$(TARGET_farmduino_k17_BUILD_DIR)/%,$(CXX_OBJ)) + +$(TARGET_farmduino_k17_HEX): $(TARGET_farmduino_k17_BUILD_DIR) $(TARGET_farmduino_k17_BUILD_DIR)/farmduino_k17.eep $(TARGET_farmduino_k17_BUILD_DIR)/farmduino_k17.elf + $(OBJ_COPY) -O ihex -R .eeprom $(TARGET_farmduino_k17_BUILD_DIR)/farmduino_k17.elf $@ + +$(TARGET_farmduino_k17_BUILD_DIR)/farmduino_k17.eep: $(TARGET_farmduino_k17_BUILD_DIR)/farmduino_k17.elf + $(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $@ + +$(TARGET_farmduino_k17_BUILD_DIR)/farmduino_k17.elf: $(TARGET_farmduino_k17_OBJ) + $(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_farmduino_k17_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS) + +$(TARGET_farmduino_k17_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS) + $(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=7 $(DEPS_CFLAGS) $< -o $@ + +$(TARGET_farmduino_k17_BUILD_DIR): + $(MKDIR_P) $(TARGET_farmduino_k17_BUILD_DIR) + +target_farmduino_k17: $(TARGET_farmduino_k17_HEX) + +target_farmduino_k17_clean: + $(RM) -r $(TARGET_farmduino_k17_BUILD_DIR) + $(RM) $(TARGET_farmduino_k17_HEX) diff --git a/src/Board.h b/src/Board.h index 34e40b3..dcf2466 100644 --- a/src/Board.h +++ b/src/Board.h @@ -15,6 +15,10 @@ // Farmbot Genesis 1.6 //#define FARMDUINO_V32 + // Farmbot Genesis 1.7 + //#define FARMDUINO_V32 + //#define K17 + // Farmbot Express 1.0 //#define FARMDUINO_EXP_V20 @@ -28,6 +32,7 @@ #undef FARMDUINO_V14 #undef FARMDUINO_V30 #undef FARMDUINO_V32 + #undef K17 #undef FARMDUINO_EXP_V20 #undef FARMDUINO_EXP_V22 @@ -43,8 +48,12 @@ #define FARMDUINO_V30 #elif FARMBOT_BOARD_ID == 5 #define FARMDUINO_V32 + #undef K17 #elif FARMBOT_BOARD_ID == 6 #define FARMDUINO_EXP_V22 + #elif FARMBOT_BOARD_ID == 7 + #define FARMDUINO_V32 + #define K17 #endif #endif diff --git a/src/Config.h b/src/Config.h index 8c3ddc0..154e8f9 100644 --- a/src/Config.h +++ b/src/Config.h @@ -285,10 +285,14 @@ enum MdlSpiEncoders #define SOFTWARE_VERSION_SUFFIX ".H.genesisK15\0" #endif -#if defined(FARMDUINO_V32) && !defined(SOFTWARE_VERSION_SUFFIX) +#if defined(FARMDUINO_V32) && !defined(K17) && !defined(SOFTWARE_VERSION_SUFFIX) #define SOFTWARE_VERSION_SUFFIX ".I.genesisK16\0" #endif +#if defined(FARMDUINO_V32) && defined(K17) && !defined(SOFTWARE_VERSION_SUFFIX) +#define SOFTWARE_VERSION_SUFFIX ".J.genesisK17\0" +#endif + #if defined(FARMDUINO_EXP_V20) && !defined(SOFTWARE_VERSION_SUFFIX) #define SOFTWARE_VERSION_SUFFIX ".E.expressK10\0" #endif From 1c20f55923e75a22d2eb6068917f15bd6fed5ffd Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 3 Nov 2023 11:02:44 -0700 Subject: [PATCH 66/71] bump version (6.6.24) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 154e8f9..6675702 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.23\0"; + const char SOFTWARE_VERSION[] = "6.6.24\0"; const int LOGGING = 0; From 1a97d8c8cef7ddce0997e0629f58a0e8da5f392e Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 3 Nov 2023 14:11:58 -0700 Subject: [PATCH 67/71] add express v1.2 build --- .circleci/config.yml | 4 ++++ Makefile | 8 +++++++- README.md | 2 +- lib/targets/express_k12.Makefile | 25 +++++++++++++++++++++++++ src/Board.h | 9 +++++++++ src/Config.h | 6 +++++- 6 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 lib/targets/express_k12.Makefile diff --git a/.circleci/config.yml b/.circleci/config.yml index 91bb4fe..a4b66da 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -60,6 +60,10 @@ jobs: name: Compile Express v1.1 (FARMDUINO_EXP_V22) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_express_k11 remove_temp when: always + - run: + name: Compile Express v1.2 (FARMDUINO_EXP_V22 K12) + command: make dep_core dep_Servo dep_SPI dep_EEPROM target_express_k12 remove_temp + when: always - run: name: Compile all command: | diff --git a/Makefile b/Makefile index ed5a7f1..341e0e4 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,7 @@ include lib/targets/farmduino_k16.Makefile include lib/targets/farmduino_k17.Makefile include lib/targets/express_k10.Makefile include lib/targets/express_k11.Makefile +include lib/targets/express_k12.Makefile .PHONY: all clean strings_test force_clean remove_temp \ dep_core dep_core_clean \ @@ -65,6 +66,7 @@ include lib/targets/express_k11.Makefile target_farmduino_k17 target_farmduino_k17_clean \ target_express_k10 target_express_k10_clean \ target_express_k11 target_express_k11_clean + target_express_k12 target_express_k12_clean DEPS := $(DEP_CORE) $(DEP_SPI) $(DEP_Servo) $(DEP_EEPROM) DEPS_OBJ := $(DEP_SPI_OBJ) $(DEP_Servo_OBJ) $(DEP_EEPROM_OBJ) @@ -79,6 +81,7 @@ all: $(BIN_DIR) $(DEPS) \ target_farmduino_k17 \ target_express_k10 \ target_express_k11 \ + target_express_k12 \ remove_temp clean: remove_temp \ @@ -89,7 +92,8 @@ clean: remove_temp \ target_farmduino_k16_clean \ target_farmduino_k17_clean \ target_express_k10_clean \ - target_express_k11_clean + target_express_k1_clean \ + target_express_k12_clean strings_test: all $(OBJ_COPY) -I ihex $(TARGET_ramps_v14_HEX) -O binary $(TARGET_ramps_v14_HEX).bin @@ -100,6 +104,7 @@ strings_test: all $(OBJ_COPY) -I ihex $(TARGET_farmduino_k17_HEX) -O binary $(TARGET_farmduino_k17_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k10_HEX) -O binary $(TARGET_express_k10_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k11_HEX) -O binary $(TARGET_express_k11_HEX).bin + $(OBJ_COPY) -I ihex $(TARGET_express_k12_HEX) -O binary $(TARGET_express_k12_HEX).bin @strings $(TARGET_ramps_v14_HEX).bin | grep -q ".R.genesisK12" @strings $(TARGET_farmduino_v10_HEX).bin | grep -q ".F.genesisK13" @strings $(TARGET_farmduino_k14_HEX).bin | grep -q ".G.genesisK14" @@ -108,6 +113,7 @@ strings_test: all @strings $(TARGET_farmduino_k17_HEX).bin | grep -q ".J.genesisK17" @strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10" @strings $(TARGET_express_k11_HEX).bin | grep -q ".D.expressK11" + @strings $(TARGET_express_k12_HEX).bin | grep -q ".C.expressK12" force_clean: remove_temp $(RM) -r $(BUILD_DIR) $(BIN_DIR) diff --git a/README.md b/README.md index 0a41239..30c83f5 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ Board Feature Overview | FARMDUINO_V30 | Genesis v1.5 | | x | x | | x | | FARMDUINO_V32 | Genesis v1.6 & v1.7 | | x | x | | x | | FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | | -| FARMDUINO_EXP_V22 | Express v1.1 | | | x | x | | +| FARMDUINO_EXP_V22 | Express v1.1 & v1.2 | | | x | x | | Codes used for communication ============================ diff --git a/lib/targets/express_k12.Makefile b/lib/targets/express_k12.Makefile new file mode 100644 index 0000000..9c23952 --- /dev/null +++ b/lib/targets/express_k12.Makefile @@ -0,0 +1,25 @@ +TARGET_express_k12_BUILD_DIR := $(BUILD_DIR)/express_k12 +TARGET_express_k12_HEX := $(BIN_DIR)/express_k12.hex + +TARGET_express_k12_OBJ := $(patsubst $(FBARDUINO_FIRMWARE_SRC_DIR)/%,$(TARGET_express_k12_BUILD_DIR)/%,$(CXX_OBJ)) + +$(TARGET_express_k12_HEX): $(TARGET_express_k12_BUILD_DIR) $(TARGET_express_k12_BUILD_DIR)/express_k12.eep $(TARGET_express_k12_BUILD_DIR)/express_k12.elf + $(OBJ_COPY) -O ihex -R .eeprom $(TARGET_express_k12_BUILD_DIR)/express_k12.elf $@ + +$(TARGET_express_k12_BUILD_DIR)/express_k12.eep: $(TARGET_express_k12_BUILD_DIR)/express_k12.elf + $(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $@ + +$(TARGET_express_k12_BUILD_DIR)/express_k12.elf: $(TARGET_express_k12_OBJ) + $(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_express_k12_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS) + +$(TARGET_express_k12_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS) + $(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=8 $(DEPS_CFLAGS) $< -o $@ + +$(TARGET_express_k12_BUILD_DIR): + $(MKDIR_P) $(TARGET_express_k12_BUILD_DIR) + +target_express_k12: $(TARGET_express_k12_HEX) + +target_express_k12_clean: + $(RM) -r $(TARGET_express_k12_BUILD_DIR) + $(RM) $(TARGET_express_k12_HEX) diff --git a/src/Board.h b/src/Board.h index dcf2466..cea5a53 100644 --- a/src/Board.h +++ b/src/Board.h @@ -25,6 +25,10 @@ // Farmbot Express 1.1 //#define FARMDUINO_EXP_V22 + // Farmbot Express 1.2 + //#define FARMDUINO_EXP_V22 + //#define K12 + #else #undef RAMPS_V14 @@ -35,6 +39,7 @@ #undef K17 #undef FARMDUINO_EXP_V20 #undef FARMDUINO_EXP_V22 + #undef K12 #if FARMBOT_BOARD_ID == 0 #define RAMPS_V14 @@ -51,9 +56,13 @@ #undef K17 #elif FARMBOT_BOARD_ID == 6 #define FARMDUINO_EXP_V22 + #undef K12 #elif FARMBOT_BOARD_ID == 7 #define FARMDUINO_V32 #define K17 + #elif FARMBOT_BOARD_ID == 8 + #define FARMDUINO_EXP_V22 + #define K12 #endif #endif diff --git a/src/Config.h b/src/Config.h index 6675702..eaf07d8 100644 --- a/src/Config.h +++ b/src/Config.h @@ -297,10 +297,14 @@ enum MdlSpiEncoders #define SOFTWARE_VERSION_SUFFIX ".E.expressK10\0" #endif -#if defined(FARMDUINO_EXP_V22) && !defined(SOFTWARE_VERSION_SUFFIX) +#if defined(FARMDUINO_EXP_V22) && !defined(K12) && !defined(SOFTWARE_VERSION_SUFFIX) #define SOFTWARE_VERSION_SUFFIX ".D.expressK11\0" #endif +#if defined(FARMDUINO_EXP_V22) && defined(K12) && !defined(SOFTWARE_VERSION_SUFFIX) +#define SOFTWARE_VERSION_SUFFIX ".C.expressK12\0" +#endif + #ifndef FARMBOT_BOARD_ID #define SOFTWARE_COMMIT "" #else From 43cbe3053020fda731d94b2fcf69fd54d94f2b87 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 19 Apr 2024 17:14:50 -0700 Subject: [PATCH 68/71] fix deadzone typo --- src/Movement.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Movement.cpp b/src/Movement.cpp index 4293f9a..0639948 100644 --- a/src/Movement.cpp +++ b/src/Movement.cpp @@ -2137,8 +2137,8 @@ void Movement::loadMotorSettings() motorCalibRetryTotal[1] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_TOTAL_Y); motorCalibRetryTotal[2] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_RETRY_TOTAL_Z); - motorCalibRetryDeadzone[0] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Z); - motorCalibRetryDeadzone[1] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Z); + motorCalibRetryDeadzone[0] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_X); + motorCalibRetryDeadzone[1] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Y); motorCalibRetryDeadzone[2] = ParameterList::getInstance()->getValue(MOVEMENT_CALIBRATION_DEADZONE_Z); stepsPerMm[0] = ParameterList::getInstance()->getValue(MOVEMENT_STEP_PER_MM_X); From b064fb1223e341d3020ef8f18eeaa29f5635aba2 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Fri, 19 Apr 2024 17:15:41 -0700 Subject: [PATCH 69/71] bump version (6.6.25) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index eaf07d8..49f14e6 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.24\0"; + const char SOFTWARE_VERSION[] = "6.6.25\0"; const int LOGGING = 0; From d414c13886bf741f2591900de53518819de3c7b4 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 30 Apr 2025 12:12:34 -0700 Subject: [PATCH 70/71] add genesis v1.8 build --- .circleci/config.yml | 6 +++++- Makefile | 6 ++++++ README.md | 18 +++++++++--------- lib/targets/farmduino_k18.Makefile | 25 +++++++++++++++++++++++++ src/Board.h | 12 +++++++++++- src/Config.h | 6 +++++- 6 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 lib/targets/farmduino_k18.Makefile diff --git a/.circleci/config.yml b/.circleci/config.yml index a4b66da..d1fcd34 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -45,13 +45,17 @@ jobs: command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k15 remove_temp when: always - run: - name: Compile Genesis v1.6 (FARMDUINO_V32) + name: Compile Genesis v1.6 (FARMDUINO_V32 K16) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k16 remove_temp when: always - run: name: Compile Genesis v1.7 (FARMDUINO_V32 K17) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k17 remove_temp when: always + - run: + name: Compile Genesis v1.8 (FARMDUINO_V32 K18) + command: make dep_core dep_Servo dep_SPI dep_EEPROM target_farmduino_k18 remove_temp + when: always - run: name: Compile Express v1.0 (FARMDUINO_EXP_V20) command: make dep_core dep_Servo dep_SPI dep_EEPROM target_express_k10 remove_temp diff --git a/Makefile b/Makefile index 341e0e4..b0a7761 100644 --- a/Makefile +++ b/Makefile @@ -49,6 +49,7 @@ include lib/targets/farmduino_k14.Makefile include lib/targets/farmduino_k15.Makefile include lib/targets/farmduino_k16.Makefile include lib/targets/farmduino_k17.Makefile +include lib/targets/farmduino_k18.Makefile include lib/targets/express_k10.Makefile include lib/targets/express_k11.Makefile include lib/targets/express_k12.Makefile @@ -64,6 +65,7 @@ include lib/targets/express_k12.Makefile target_farmduino_k15 target_farmduino_k15_clean \ target_farmduino_k16 target_farmduino_k16_clean \ target_farmduino_k17 target_farmduino_k17_clean \ + target_farmduino_k18 target_farmduino_k18_clean \ target_express_k10 target_express_k10_clean \ target_express_k11 target_express_k11_clean target_express_k12 target_express_k12_clean @@ -79,6 +81,7 @@ all: $(BIN_DIR) $(DEPS) \ target_farmduino_k15 \ target_farmduino_k16 \ target_farmduino_k17 \ + target_farmduino_k18 \ target_express_k10 \ target_express_k11 \ target_express_k12 \ @@ -91,6 +94,7 @@ clean: remove_temp \ target_farmduino_k15_clean \ target_farmduino_k16_clean \ target_farmduino_k17_clean \ + target_farmduino_k18_clean \ target_express_k10_clean \ target_express_k1_clean \ target_express_k12_clean @@ -102,6 +106,7 @@ strings_test: all $(OBJ_COPY) -I ihex $(TARGET_farmduino_k15_HEX) -O binary $(TARGET_farmduino_k15_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_farmduino_k16_HEX) -O binary $(TARGET_farmduino_k16_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_farmduino_k17_HEX) -O binary $(TARGET_farmduino_k17_HEX).bin + $(OBJ_COPY) -I ihex $(TARGET_farmduino_k18_HEX) -O binary $(TARGET_farmduino_k18_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k10_HEX) -O binary $(TARGET_express_k10_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k11_HEX) -O binary $(TARGET_express_k11_HEX).bin $(OBJ_COPY) -I ihex $(TARGET_express_k12_HEX) -O binary $(TARGET_express_k12_HEX).bin @@ -111,6 +116,7 @@ strings_test: all @strings $(TARGET_farmduino_k15_HEX).bin | grep -q ".H.genesisK15" @strings $(TARGET_farmduino_k16_HEX).bin | grep -q ".I.genesisK16" @strings $(TARGET_farmduino_k17_HEX).bin | grep -q ".J.genesisK17" + @strings $(TARGET_farmduino_k18_HEX).bin | grep -q ".K.genesisK18" @strings $(TARGET_express_k10_HEX).bin | grep -q ".E.expressK10" @strings $(TARGET_express_k11_HEX).bin | grep -q ".D.expressK11" @strings $(TARGET_express_k12_HEX).bin | grep -q ".C.expressK12" diff --git a/README.md b/README.md index 30c83f5..a6fb00a 100644 --- a/README.md +++ b/README.md @@ -86,15 +86,15 @@ All files are in `/src` Board Feature Overview ====================== -| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection | peripheral current sensors | -|:----------------- |:------------------- |:------------:|:------------:|:----------:|:-------------------:|:--------------------------:| -| RAMPS_V14 | Genesis v1.2 | x | | | | | -| FARMDUINO_V10 | Genesis v1.3 | x | | | | | -| FARMDUINO_V14 | Genesis v1.4 | | x | | | | -| FARMDUINO_V30 | Genesis v1.5 | | x | x | | x | -| FARMDUINO_V32 | Genesis v1.6 & v1.7 | | x | x | | x | -| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | | -| FARMDUINO_EXP_V22 | Express v1.1 & v1.2 | | | x | x | | +| board | kit | pin encoders | SPI encoders | SPI motors | SPI stall detection | peripheral current sensors | +|:----------------- |:------------------------ |:------------:|:------------:|:----------:|:-------------------:|:--------------------------:| +| RAMPS_V14 | Genesis v1.2 | x | | | | | +| FARMDUINO_V10 | Genesis v1.3 | x | | | | | +| FARMDUINO_V14 | Genesis v1.4 | | x | | | | +| FARMDUINO_V30 | Genesis v1.5 | | x | x | | x | +| FARMDUINO_V32 | Genesis v1.6, v1.7, v1.8 | | x | x | | x | +| FARMDUINO_EXP_V20 | Express v1.0 | | | x | x | | +| FARMDUINO_EXP_V22 | Express v1.1 & v1.2 | | | x | x | | Codes used for communication ============================ diff --git a/lib/targets/farmduino_k18.Makefile b/lib/targets/farmduino_k18.Makefile new file mode 100644 index 0000000..4746726 --- /dev/null +++ b/lib/targets/farmduino_k18.Makefile @@ -0,0 +1,25 @@ +TARGET_farmduino_k18_BUILD_DIR := $(BUILD_DIR)/farmduino_k18 +TARGET_farmduino_k18_HEX := $(BIN_DIR)/farmduino_k18.hex + +TARGET_farmduino_k18_OBJ := $(patsubst $(FBARDUINO_FIRMWARE_SRC_DIR)/%,$(TARGET_farmduino_k18_BUILD_DIR)/%,$(CXX_OBJ)) + +$(TARGET_farmduino_k18_HEX): $(TARGET_farmduino_k18_BUILD_DIR) $(TARGET_farmduino_k18_BUILD_DIR)/farmduino_k18.eep $(TARGET_farmduino_k18_BUILD_DIR)/farmduino_k18.elf + $(OBJ_COPY) -O ihex -R .eeprom $(TARGET_farmduino_k18_BUILD_DIR)/farmduino_k18.elf $@ + +$(TARGET_farmduino_k18_BUILD_DIR)/farmduino_k18.eep: $(TARGET_farmduino_k18_BUILD_DIR)/farmduino_k18.elf + $(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $< $@ + +$(TARGET_farmduino_k18_BUILD_DIR)/farmduino_k18.elf: $(TARGET_farmduino_k18_OBJ) + $(CC) -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections,--relax -mmcu=atmega2560 -o $@ $(TARGET_farmduino_k18_OBJ) $(DEPS_OBJ) $(DEP_CORE_LDFLAGS) + +$(TARGET_farmduino_k18_BUILD_DIR)/%.o: $(FBARDUINO_FIRMWARE_SRC_DIR)/%.cpp $(HEADERS) + $(CXX) $(CXX_FLAGS) -DFARMBOT_BOARD_ID=9 $(DEPS_CFLAGS) $< -o $@ + +$(TARGET_farmduino_k18_BUILD_DIR): + $(MKDIR_P) $(TARGET_farmduino_k18_BUILD_DIR) + +target_farmduino_k18: $(TARGET_farmduino_k18_HEX) + +target_farmduino_k18_clean: + $(RM) -r $(TARGET_farmduino_k18_BUILD_DIR) + $(RM) $(TARGET_farmduino_k18_HEX) diff --git a/src/Board.h b/src/Board.h index cea5a53..ee25a40 100644 --- a/src/Board.h +++ b/src/Board.h @@ -14,11 +14,16 @@ // Farmbot Genesis 1.6 //#define FARMDUINO_V32 + //#define K16 // Farmbot Genesis 1.7 //#define FARMDUINO_V32 //#define K17 + // Farmbot Genesis 1.8 + //#define FARMDUINO_V32 + //#define K18 + // Farmbot Express 1.0 //#define FARMDUINO_EXP_V20 @@ -36,7 +41,9 @@ #undef FARMDUINO_V14 #undef FARMDUINO_V30 #undef FARMDUINO_V32 + #undef K16 #undef K17 + #undef K18 #undef FARMDUINO_EXP_V20 #undef FARMDUINO_EXP_V22 #undef K12 @@ -53,7 +60,7 @@ #define FARMDUINO_V30 #elif FARMBOT_BOARD_ID == 5 #define FARMDUINO_V32 - #undef K17 + #define K16 #elif FARMBOT_BOARD_ID == 6 #define FARMDUINO_EXP_V22 #undef K12 @@ -63,6 +70,9 @@ #elif FARMBOT_BOARD_ID == 8 #define FARMDUINO_EXP_V22 #define K12 + #elif FARMBOT_BOARD_ID == 9 + #define FARMDUINO_V32 + #define K18 #endif #endif diff --git a/src/Config.h b/src/Config.h index 49f14e6..6a181b7 100644 --- a/src/Config.h +++ b/src/Config.h @@ -285,7 +285,7 @@ enum MdlSpiEncoders #define SOFTWARE_VERSION_SUFFIX ".H.genesisK15\0" #endif -#if defined(FARMDUINO_V32) && !defined(K17) && !defined(SOFTWARE_VERSION_SUFFIX) +#if defined(FARMDUINO_V32) && defined(K16) && !defined(SOFTWARE_VERSION_SUFFIX) #define SOFTWARE_VERSION_SUFFIX ".I.genesisK16\0" #endif @@ -293,6 +293,10 @@ enum MdlSpiEncoders #define SOFTWARE_VERSION_SUFFIX ".J.genesisK17\0" #endif +#if defined(FARMDUINO_V32) && defined(K18) && !defined(SOFTWARE_VERSION_SUFFIX) +#define SOFTWARE_VERSION_SUFFIX ".K.genesisK18\0" +#endif + #if defined(FARMDUINO_EXP_V20) && !defined(SOFTWARE_VERSION_SUFFIX) #define SOFTWARE_VERSION_SUFFIX ".E.expressK10\0" #endif From 52053ec86e6cef1a39340439dfdfaf9cb2337a60 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 30 Apr 2025 12:14:08 -0700 Subject: [PATCH 71/71] bump version (6.6.26) --- src/Config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.h b/src/Config.h index 6a181b7..2d78964 100644 --- a/src/Config.h +++ b/src/Config.h @@ -9,7 +9,7 @@ #ifndef CONFIG_H_ #define CONFIG_H_ - const char SOFTWARE_VERSION[] = "6.6.25\0"; + const char SOFTWARE_VERSION[] = "6.6.26\0"; const int LOGGING = 0;