diff --git a/Repetier/Configuration.h b/Repetier/Configuration.h index c6378e7ae..f5340e0c4 100644 --- a/Repetier/Configuration.h +++ b/Repetier/Configuration.h @@ -871,4 +871,7 @@ You can activate this to 1 and connect some Button. If you connect ground to pul /** \brief Automatic Startline */ #define FEATURE_STARTLINE 1 +/** \brief Automatic Startline */ +#define FEATURE_Kurt67_WOBBLE_FIX 0 + #endif // CONFIGURATION_H diff --git a/Repetier/Constants.h b/Repetier/Constants.h index b18b5b6ec..86f833909 100644 --- a/Repetier/Constants.h +++ b/Repetier/Constants.h @@ -20,7 +20,7 @@ #define CONSTANTS_H -#define REPETIER_VERSION "RF.01.41.22" +#define REPETIER_VERSION "RF.01.41.23" #define UI_PRINTER_COMPANY "Conrad Community" #define UI_VERSION_STRING "V " REPETIER_VERSION diff --git a/Repetier/Eeprom.cpp b/Repetier/Eeprom.cpp index 3be258218..6804a4a8b 100644 --- a/Repetier/Eeprom.cpp +++ b/Repetier/Eeprom.cpp @@ -256,7 +256,16 @@ ich glaube gesehen zu haben, dass acceleration und feedrates nicht neu eingelese #if FEATURE_SENSIBLE_PRESSURE g_nSensiblePressureOffsetMax = (short)SENSIBLE_PRESSURE_MAX_OFFSET; + Printer::g_senseoffset_autostart = false; #endif //FEATURE_SENSIBLE_PRESSURE + +#if FEATURE_Kurt67_WOBBLE_FIX + Printer::wobblePhaseXY = 0; + Printer::wobbleAmplitudes[0] = 0; + Printer::wobbleAmplitudes[1] = 0; + Printer::wobbleAmplitudes[2] = 0; +#endif //FEATURE_Kurt67_WOBBLE_FIX + #if FEATURE_EMERGENCY_PAUSE g_nEmergencyPauseDigitsMax = EMERGENCY_PAUSE_DIGITS_MAX; g_nEmergencyPauseDigitsMin = EMERGENCY_PAUSE_DIGITS_MIN; @@ -558,6 +567,13 @@ void EEPROM::storeDataIntoEEPROM(uint8_t corrupted) HAL::eprSetByte( EPR_RF_MOD_SENSEOFFSET_AUTOSTART, Printer::g_senseoffset_autostart ); #endif //FEATURE_SENSIBLE_PRESSURE +#if FEATURE_Kurt67_WOBBLE_FIX + HAL::eprSetByte( EPR_RF_MOD_WOBBLE_FIX_PHASEXY , Printer::wobblePhaseXY ); + HAL::eprSetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPX , Printer::wobbleAmplitudes[0] ); + HAL::eprSetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPY1 , Printer::wobbleAmplitudes[1] ); + HAL::eprSetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPY2 , Printer::wobbleAmplitudes[2] ); +#endif //FEATURE_Kurt67_WOBBLE_FIX + #if FEATURE_EMERGENCY_PAUSE HAL::eprSetInt32( EPR_RF_EMERGENCYPAUSEDIGITSMIN, g_nEmergencyPauseDigitsMin ); HAL::eprSetInt32( EPR_RF_EMERGENCYPAUSEDIGITSMAX, g_nEmergencyPauseDigitsMax ); @@ -896,6 +912,13 @@ void EEPROM::readDataFromEEPROM() Printer::g_senseoffset_autostart = HAL::eprGetByte(EPR_RF_MOD_SENSEOFFSET_AUTOSTART); #endif //FEATURE_SENSIBLE_PRESSURE +#if FEATURE_Kurt67_WOBBLE_FIX + Printer::wobblePhaseXY = HAL::eprGetByte( EPR_RF_MOD_WOBBLE_FIX_PHASEXY ); + Printer::wobbleAmplitudes[0] = HAL::eprGetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPX ); + Printer::wobbleAmplitudes[1] = HAL::eprGetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPY1 ); + Printer::wobbleAmplitudes[2] = HAL::eprGetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPY2 ); +#endif //FEATURE_Kurt67_WOBBLE_FIX + #if FEATURE_EMERGENCY_PAUSE g_nEmergencyPauseDigitsMin = (long)constrain( HAL::eprGetInt32( EPR_RF_EMERGENCYPAUSEDIGITSMIN ) , EMERGENCY_PAUSE_DIGITS_MIN , EMERGENCY_PAUSE_DIGITS_MAX ); //limit to value in config. g_nEmergencyPauseDigitsMax = (long)constrain( HAL::eprGetInt32( EPR_RF_EMERGENCYPAUSEDIGITSMAX ) , EMERGENCY_PAUSE_DIGITS_MIN , EMERGENCY_PAUSE_DIGITS_MAX ); //limit to value in config. diff --git a/Repetier/Eeprom.h b/Repetier/Eeprom.h index 26845d4c8..14633c131 100644 --- a/Repetier/Eeprom.h +++ b/Repetier/Eeprom.h @@ -156,6 +156,13 @@ have problems with other modules using the eeprom */ #define EPR_RF_MOD_SENSEOFFSET_AUTOSTART 1953 //[1byte] +#define EPR_RF_MOD_WOBBLE_FIX_PHASEXY 1954 //[1byte] +#define EPR_RF_MOD_WOBBLE_FIX_AMPX 1955 //[+1956 2byte short] +#define EPR_RF_MOD_WOBBLE_FIX_AMPY1 1957 //[+1958 2byte short] +#define EPR_RF_MOD_WOBBLE_FIX_AMPY2 1959 //[+1960 2byte short] + + + //Nibbels: Computechecksum geht bis 2047 #define EEPROM_EXTRUDER_OFFSET 200 diff --git a/Repetier/Printer.cpp b/Repetier/Printer.cpp index 009f1d6ba..5c7b990e9 100644 --- a/Repetier/Printer.cpp +++ b/Repetier/Printer.cpp @@ -231,6 +231,16 @@ short Printer::g_pressure_offset = 0; uint8_t Printer::motorMicroStepsModeValue[DRV8711_NUM_CHANNELS] = {0}; //init later because of recalculation of value #endif // FEATURE_ADJUSTABLE_MICROSTEPS +#if FEATURE_Kurt67_WOBBLE_FIX + +int8_t Printer::wobblePhaseXY = 0; //+100 = +PI | -100 = -PI +//int8_t Printer::wobblePhaseZ = 0; //+100 = +PI | -100 = -PI +int16_t Printer::wobbleAmplitudes[3/*4*/] = {0}; //X, Y(X_0), Y(X_max), /*Z*/ +float Printer::wobblefixOffset[2/*3*/] = {0}; ///< last calculated target wobbleFixOffsets for display output. + +#endif // FEATURE_Kurt67_WOBBLE_FIX + + void Printer::constrainQueueDestinationCoords() { if(isNoDestinationCheck()) return; @@ -550,6 +560,51 @@ uint8_t Printer::setDestinationStepsFromGCode(GCode *com) y = queuePositionCommandMM[Y_AXIS] + Printer::extruderOffset[Y_AXIS]; z = queuePositionCommandMM[Z_AXIS] + Printer::extruderOffset[Z_AXIS]; +#if FEATURE_Kurt67_WOBBLE_FIX + + /* + Zielkoordinate in Z ist: "z" + Wir fügen beim Umrechnen in Steps vorher noch ein Offset in XYZ ein. + offsetZ = amplitude des hubs * drehposition spindel + offsetY = amplitude in Richtung Y linke Spindel * drehposition spindel + offsetY = amplitude in Richtung Y rechte Spindel * drehposition spindel + offsetX = amplitude in Richtung X * drehposition spindel + + "sinOffset = amplitude * sin( 2*Pi*(Z/5mm + zStartOffset) );" + */ + + //vorausgerechnete konstanten. + float zweiPi = 6.2832f; //2*Pi + float hundertstelPi = 0.031428f; //Pi/100 + float spindelSteigung = 5.0f; //[mm] + + //wobble durch Bauchtanz der Druckplatte + //wobbleX oder wobbleY(x0) oder wobbleX(x245) + if(Printer::wobbleAmplitudes[0] || Printer::wobbleAmplitudes[1] || Printer::wobbleAmplitudes[2]){ + float anglePositionWobble = sin(zweiPi*(z/spindelSteigung + (float)Printer::wobblePhaseXY * hundertstelPi )); + //für das wobble in Richtung X-Achse gilt immer dieselbe Amplitude, weil im extremfall beide gegeneinander arbeiten und sich aufheben könnten, oder die Spindeln arbeiten zusammen. + Printer::wobblefixOffset[X_AXIS] = Printer::wobbleAmplitudes[0] * anglePositionWobble; + x += Printer::wobblefixOffset[X_AXIS]/1000; //offset in [um] -> kosys in [mm] + + //gilt eher die Y-Achsen-Richtung-Amplitude links (x=0) oder rechts (x=achsenlänge)? (abhängig von der ziel-x-position wird anteilig verrechnet.) + float xPosPercent = x/Printer::lengthMM[X_AXIS]; + Printer::wobblefixOffset[Y_AXIS] = ((1-xPosPercent) * Printer::wobbleAmplitudes[1] + (xPosPercent) * Printer::wobbleAmplitudes[2]) * anglePositionWobble; + y += Printer::wobblefixOffset[Y_AXIS]/1000; //offset in [um] -> kosys in [mm] + } +/* + //wobble durch Kippeln mit Hebel -> Z-Hub + //wobbleZ + if(Printer::wobbleAmplitudes[3]){ + float anglePositionLift = sin(zweiPi*(z/spindelSteigung + (float)Printer::wobblePhaseZ * hundertstelPi )); //phase von +-100% -> +-Pi + Printer::wobblefixOffset[Z_AXIS] = Printer::wobbleAmplitudes[3] * anglePositionLift; + //z kippel-wobble nur mit etwas Abstand überhalb senseoffset ausgleichen. Drunter könnte das stören. + if(z > fabs(Printer::wobblefixOffset[Z_AXIS])+AUTOADJUST_STARTMADEN_AUSSCHLUSS){ + z += Printer::wobblefixOffset[Z_AXIS]/1000; //offset in [um] -> kosys in [mm] + } + } +*/ +#endif // FEATURE_Kurt67_WOBBLE_FIX + long xSteps = static_cast(floor(x * axisStepsPerMM[X_AXIS] + 0.5f)); long ySteps = static_cast(floor(y * axisStepsPerMM[Y_AXIS] + 0.5f)); long zSteps = static_cast(floor(z * axisStepsPerMM[Z_AXIS] + 0.5f)); diff --git a/Repetier/Printer.h b/Repetier/Printer.h index 15d311359..5d3e5d831 100644 --- a/Repetier/Printer.h +++ b/Repetier/Printer.h @@ -242,6 +242,13 @@ class Printer static uint8_t motorMicroStepsModeValue[DRV8711_NUM_CHANNELS]; //1=2MS, 2=4MS, 3=8MS, 4=16MS, 5=32MS, 6=64MS, 7=128MS, 8=256MS #endif // FEATURE_ADJUSTABLE_MICROSTEPS +#if FEATURE_Kurt67_WOBBLE_FIX + static int8_t wobblePhaseXY; + //static int8_t wobblePhaseZ; + static int16_t wobbleAmplitudes[3/*4*/]; //X, Y(X_0), Y(X_max), /*Z*/ + static float wobblefixOffset[2/*3*/]; //< last calculated target wobbleFixOffsets for display output. +#endif // FEATURE_Kurt67_WOBBLE_FIX + static INLINE void setMenuMode(uint8_t mode,bool on) { if(on) @@ -929,7 +936,7 @@ class Printer { markAllSteppersDisabled(); #if FEATURE_UNLOCK_MOVEMENT - //Printer::g_unlock_movement = 0; //again lock movement until homing or keypress or another print happens. --> toooooo much? + Printer::g_unlock_movement = 0; //again lock movement until homing or keypress or another print happens. --> toooooo much? Ich aktiviers: http://www.rf1000.de/viewtopic.php?f=70&t=2282 #endif //FEATURE_UNLOCK_MOVEMENT disableXStepper(); disableYStepper(); diff --git a/Repetier/ui.cpp b/Repetier/ui.cpp index 7ba0ce3b6..69255080a 100644 --- a/Repetier/ui.cpp +++ b/Repetier/ui.cpp @@ -2111,6 +2111,59 @@ void UIDisplay::parse(char *txt,bool ram) } break; } +#if FEATURE_Kurt67_WOBBLE_FIX + case 'w': //wobblefix + { + if(c2=='x') // %wx : current wobblefix offset in x [um] (Bauchtanz) + { + addInt(Printer::wobblefixOffset[X_AXIS],4); + break; + } + else if(c2=='y') // %wy : current wobblefix offset in y [um] (Bauchtanz) + { + addInt(Printer::wobblefixOffset[Y_AXIS],4); + break; + } + /* + else if(c2=='z') // %wz : current wobblefix offset in z [um] (Hub) + { + addInt(Printer::wobblefixOffset[Z_AXIS],4); + break; + }*/ + else if(c2=='a') // %wa : current wobblefix amplitude for X + { + addInt(Printer::wobbleAmplitudes[0],4); + break; + } + else if(c2=='b') // %wb : current wobblefix amplitude for Y(x_0) + { + addInt(Printer::wobbleAmplitudes[1],4); + break; + } + else if(c2=='c') // %wc : current wobblefix amplitude for Y(x_245) + { + addInt(Printer::wobbleAmplitudes[2],4); + break; + }/* + else if(c2=='d') // %wd : current wobblefix amplitude for Z-lift + { + addInt(Printer::wobbleAmplitudes[3],4); + break; + } + else if(c2=='p') // %wp : current wobblefix phase for Z-lift (Hub) + { + addInt(Printer::wobblePhaseZ,4); + break; + }*/ + else if(c2=='P') // %wP : current wobblefix phase for YX-wobble (Bauchtanz) + { + addInt(Printer::wobblePhaseXY,4); + break; + } + + break; + } +#endif //FEATURE_Kurt67_WOBBLE_FIX case 'Z': // %Z1-Z4: Page5 service intervall, %Z5-Z8: Page4 printing/milling time { if(c2=='1') // Shows text printing/milling time since last service @@ -3939,6 +3992,57 @@ void UIDisplay::nextPreviousAction(int8_t next) } #endif //FEATURE_SENSIBLE_PRESSURE +#if FEATURE_Kurt67_WOBBLE_FIX + //Antibauchtanz: + case UI_ACTION_WOBBLE_FIX_PHASEXY: + { + INCREMENT_MIN_MAX(Printer::wobblePhaseXY,1,-100,100); +#if FEATURE_AUTOMATIC_EEPROM_UPDATE + HAL::eprSetByte( EPR_RF_MOD_WOBBLE_FIX_PHASEXY, Printer::wobblePhaseXY ); + EEPROM::updateChecksum(); +#endif // FEATURE_AUTOMATIC_EEPROM_UPDATE + break; + } + case UI_ACTION_WOBBLE_FIX_AMPX: + { + INCREMENT_MIN_MAX(Printer::wobbleAmplitudes[0],5,-995,995); +#if FEATURE_AUTOMATIC_EEPROM_UPDATE + HAL::eprSetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPX, Printer::wobbleAmplitudes[0] ); + EEPROM::updateChecksum(); +#endif // FEATURE_AUTOMATIC_EEPROM_UPDATE + break; + } + case UI_ACTION_WOBBLE_FIX_AMPY1: + { + INCREMENT_MIN_MAX(Printer::wobbleAmplitudes[1],5,-995,995); +#if FEATURE_AUTOMATIC_EEPROM_UPDATE + HAL::eprSetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPY1, Printer::wobbleAmplitudes[1] ); + EEPROM::updateChecksum(); +#endif // FEATURE_AUTOMATIC_EEPROM_UPDATE + break; + } + case UI_ACTION_WOBBLE_FIX_AMPY2: + { + INCREMENT_MIN_MAX(Printer::wobbleAmplitudes[2],5,-995,995); +#if FEATURE_AUTOMATIC_EEPROM_UPDATE + HAL::eprSetInt16( EPR_RF_MOD_WOBBLE_FIX_AMPY2, Printer::wobbleAmplitudes[2] ); + EEPROM::updateChecksum(); +#endif // FEATURE_AUTOMATIC_EEPROM_UPDATE + break; + } + //Antikippeln: + /* + case UI_ACTION_WOBBLE_FIX_PHASEZ: + { + INCREMENT_MIN_MAX(Printer::wobblePhaseZ,1,-100,100); + break; + } + case UI_ACTION_WOBBLE_FIX_AMPZ: + { + INCREMENT_MIN_MAX(Printer::wobbleAmplitudes[3],5,-995,995); + break; + }*/ +#endif //FEATURE_Kurt67_WOBBLE_FIX case UI_ACTION_CHOOSE_DMIN: { diff --git a/Repetier/ui.h b/Repetier/ui.h index a7c0e1764..178d888ed 100644 --- a/Repetier/ui.h +++ b/Repetier/ui.h @@ -205,6 +205,14 @@ #define UI_ACTION_SENSEOFFSET_MAX 1711 #define UI_ACTION_SENSEOFFSET_AUTOSTART 1712 +#define UI_ACTION_WOBBLE_FIX_PHASEXY 1713 +#define UI_ACTION_WOBBLE_FIX_PHASEZ 1714 +#define UI_ACTION_WOBBLE_FIX_AMPX 1715 +#define UI_ACTION_WOBBLE_FIX_AMPY1 1716 +#define UI_ACTION_WOBBLE_FIX_AMPY2 1717 +#define UI_ACTION_WOBBLE_FIX_AMPZ 1718 + + #define UI_ACTION_FET1_OUTPUT 2001 #define UI_ACTION_FET2_OUTPUT 2002 diff --git a/Repetier/uilang.h b/Repetier/uilang.h index f383cd581..75a8b6c20 100644 --- a/Repetier/uilang.h +++ b/Repetier/uilang.h @@ -222,6 +222,7 @@ #define UI_TEXT_MILLER_TYPE "Miller: %mt" #define UI_TEXT_GENERAL "General" #define UI_TEXT_DMS "DMS Features" +#define UI_TEXT_WOBBLE "Kurts Wobblefix" #define UI_TEXT_EXTR_STEPS "Steps/mm:%Se" #define UI_TEXT_EXTR_STEPS0 "E0-Steps/mm:%S0" #define UI_TEXT_EXTR_STEPS1 "E1-Steps/mm:%S1" @@ -410,6 +411,12 @@ #define UI_ACTION_TEXT_TYREUS_LYBEN_TIPP "(choose for highpower bed)" #if MOTHERBOARD == DEVICE_TYPE_RF2000 || MOTHERBOARD == DEVICE_TYPE_RF2000_V2 + #define UI_TEXT_WOBBLE_FIX_PHASEXY "Phase XY: %wP%%%Pi" + #define UI_TEXT_WOBBLE_FIX_AMPX "Amplit.X: %wa[um]" + #define UI_TEXT_WOBBLE_FIX_AMPY1 "Amp. Y-l: %wb[um]" + #define UI_TEXT_WOBBLE_FIX_AMPY2 "Amp. Y-r: %wc[um]" + #define UI_TEXT_WOBBLE_FIX_PHASEZ "Phase Z: %wp%%%Pi" + #define UI_TEXT_WOBBLE_FIX_AMPZ "Amplit.Z: %wd[um]" #define UI_TEXT_EMERGENCY_PAUSE_MIN "Min:%pl digits" #define UI_TEXT_EMERGENCY_PAUSE_MAX "Max:%ph digits" #define UI_TEXT_EMERGENCY_ZSTOP_MIN "Min:%pL digits" @@ -465,6 +472,12 @@ #define UI_TEXT_OPERATION_DENIED "Operation denied" #define UI_TEXT_TEMPERATURE_WRONG "Temperature wrong" #else + #define UI_TEXT_WOBBLE_FIX_PHASEXY "PhaseXY:%wP%%%Pi" + #define UI_TEXT_WOBBLE_FIX_AMPX "Ampli.X:%waum" + #define UI_TEXT_WOBBLE_FIX_AMPY1 "Amp.Y-l:%wbum" + #define UI_TEXT_WOBBLE_FIX_AMPY2 "Amp.Y-r:%wcum" + #define UI_TEXT_WOBBLE_FIX_PHASEZ "Phase Z:%wp%%%" + #define UI_TEXT_WOBBLE_FIX_AMPZ "Ampli.Z:%wdum" #define UI_TEXT_EMERGENCY_PAUSE_MIN "Min:%pl digi" #define UI_TEXT_EMERGENCY_PAUSE_MAX "Max:%ph digi" #define UI_TEXT_EMERGENCY_ZSTOP_MIN "Min:%pL digi" @@ -622,6 +635,7 @@ #define UI_TEXT_MILLER_TYPE "Fr" STR_auml "ser: %mt" #define UI_TEXT_GENERAL "Allgemein" #define UI_TEXT_DMS "DMS Features" +#define UI_TEXT_WOBBLE "Kurts Wobblefix" #define UI_TEXT_EXTR_MAX_FEED "Max FR:%XF" #define UI_TEXT_EXTR_ADVANCE_L "Advance lin:%Xl" #define UI_TEXT_EXTR_ADVANCE_K "Advance quad:%Xa" @@ -802,6 +816,12 @@ #define UI_ACTION_TEXT_TYREUS_LYBEN_TIPP "(empf. f" STR_uuml "r highpower Bett)" #if MOTHERBOARD == DEVICE_TYPE_RF2000 || MOTHERBOARD == DEVICE_TYPE_RF2000_V2 + #define UI_TEXT_WOBBLE_FIX_PHASEXY "Phase XY: %wP%%%Pi" + #define UI_TEXT_WOBBLE_FIX_AMPX "Amplit.X: %wa[um]" + #define UI_TEXT_WOBBLE_FIX_AMPY1 "Amp. Y-li:%wb[um]" + #define UI_TEXT_WOBBLE_FIX_AMPY2 "Amp. Y-re:%wc[um]" + #define UI_TEXT_WOBBLE_FIX_PHASEZ "Phase Z: %wp%%%" + #define UI_TEXT_WOBBLE_FIX_AMPZ "Amplit. Z:%wd[um]" #define UI_TEXT_EMERGENCY_PAUSE_MIN "Min:%pl digits" #define UI_TEXT_EMERGENCY_PAUSE_MAX "Max:%ph digits" #define UI_TEXT_EMERGENCY_ZSTOP_MIN "Min:%pL digits" @@ -891,6 +911,12 @@ #define UI_TEXT_INVALID_MATRIX "Ung" STR_uuml" ltige Matrix" #define UI_TEXT_TEMPERATURE_WRONG "Temperatur falsch" #else + #define UI_TEXT_WOBBLE_FIX_PHASEXY "PhaseXY:%wP%%%Pi" + #define UI_TEXT_WOBBLE_FIX_AMPX "Ampli.X:%waum" + #define UI_TEXT_WOBBLE_FIX_AMPY1 "Amp.Y-l:%wbum" + #define UI_TEXT_WOBBLE_FIX_AMPY2 "Amp.Y-r:%wcum" + #define UI_TEXT_WOBBLE_FIX_PHASEZ "Phase Z:%wp%%%" + #define UI_TEXT_WOBBLE_FIX_AMPZ "Ampli.Z:%wdum" #define UI_TEXT_EMERGENCY_PAUSE_MIN "Min:%pl digi" #define UI_TEXT_EMERGENCY_PAUSE_MAX "Max:%ph digi" #define UI_TEXT_EMERGENCY_ZSTOP_MIN "Min:%pL digi" diff --git a/Repetier/uimenu.h b/Repetier/uimenu.h index f4cf5f67b..174236b7a 100644 --- a/Repetier/uimenu.h +++ b/Repetier/uimenu.h @@ -175,6 +175,16 @@ List of placeholder: %Z1-Z4: Page5 service intervall %Z5-Z8: Page4 printing/milling time +%wx : current wobblefix offset in x [um] (Bauchtanz) +%wy : current wobblefix offset in y [um] (Bauchtanz) +%wz : current wobblefix offset in z [um] (Hub) +%wa : current wobblefix amplitude for X +%wb : current wobblefix amplitude for Y(x_0) +%wc : current wobblefix amplitude for Y(x_245) +%wd : current wobblefix amplitude for Z-lift +%wp : current wobblefix phase for Z-lift (Hub) +%wP : current wobblefix phase for YX-wobble (Bauchtanz) + %MX : Motorcurrent X %MY : Motorcurrent Y %MZ : Motorcurrent Z @@ -293,15 +303,37 @@ for 2 row displays. You can add additional pages or change the default pages lik "eCMP: %LP%%%@Z:%LC" /*6+LP%5+"@Z:"3+6:*/ ) #endif + #define UI_MOD2_PAGES , &ui_page_mod2 #define UI_MOD2_COUNT 1 + #if FEATURE_Kurt67_WOBBLE_FIX + #if UI_COLS<=16 + UI_PAGE4(ui_page_mod_wobble, "Off:X%wxY%wy", /*%wz*/ + "X:A%waum ", + "Y:A%wb..%wcum", + "Phase:%wP%%%Pi"/* "Z:A%wdumP%wp%%%"*/ + ) + #else + UI_PAGE4(ui_page_mod_wobble, "OffsetX:%wxY:%wyum", /* %wz*/ + "X:A%waum", + "Y:A%wb..%wcum", + "PhaseXY:%wP%%%Pi"/* "Z:A%wdum Pz:%wp%%%" */ + ) + #endif + #define UI_MODWobble_PAGE , &ui_page_mod_wobble + #define UI_MODWobble_COUNT 1 + #else + #define UI_MODWobble_PAGE + #define UI_MODWobble_COUNT 0 + #endif + /* Merge pages together. Use the following pattern: #define UI_PAGES {&name1,&name2,&name3} */ - #define UI_PAGES {&ui_page1 UI_MOD_PAGES, &ui_page2, &ui_page3 UI_PRINTTIME_PAGES UI_SERVICE_PAGES UI_MOD2_PAGES} + #define UI_PAGES {&ui_page1 UI_MOD_PAGES, &ui_page2, &ui_page3 UI_PRINTTIME_PAGES UI_SERVICE_PAGES UI_MOD2_PAGES UI_MODWobble_PAGE} // How many pages do you want to have. Minimum is 1. - #define UI_NUM_PAGES 3+UI_PRINTTIME_COUNT+UI_SERVICE_COUNT+UI_MOD_COUNT+UI_MOD2_COUNT + #define UI_NUM_PAGES 3+UI_PRINTTIME_COUNT+UI_SERVICE_COUNT+UI_MOD_COUNT+UI_MOD2_COUNT+UI_MODWobble_COUNT #endif // UI_ROWS>=4 /* ============ MENU definition ================ @@ -831,6 +863,28 @@ UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_extruder_offset_y,UI_TEXT_EXTRUDER_OFFSET_ #define EXTRUDER_OFFSET_TYPE_COUNT_XY 0 #endif // NUM_EXTRUDER>1 +/** \brief Configuration->WobbleFix-> */ +#if FEATURE_Kurt67_WOBBLE_FIX + + UI_MENU_CHANGEACTION( ui_menu_wobble_fix_pxy , UI_TEXT_WOBBLE_FIX_PHASEXY, UI_ACTION_WOBBLE_FIX_PHASEXY ) + UI_MENU_CHANGEACTION( ui_menu_wobble_fix_ax , UI_TEXT_WOBBLE_FIX_AMPX, UI_ACTION_WOBBLE_FIX_AMPX ) + UI_MENU_CHANGEACTION( ui_menu_wobble_fix_ay1 , UI_TEXT_WOBBLE_FIX_AMPY1, UI_ACTION_WOBBLE_FIX_AMPY1 ) + UI_MENU_CHANGEACTION( ui_menu_wobble_fix_ay2 , UI_TEXT_WOBBLE_FIX_AMPY2, UI_ACTION_WOBBLE_FIX_AMPY2 ) + /* + UI_MENU_CHANGEACTION( ui_menu_wobble_fix_pz , UI_TEXT_WOBBLE_FIX_PHASEZ, UI_ACTION_WOBBLE_FIX_PHASEZ ) + UI_MENU_CHANGEACTION( ui_menu_wobble_fix_az , UI_TEXT_WOBBLE_FIX_AMPZ, UI_ACTION_WOBBLE_FIX_AMPZ ) +*/ + #define UI_MENU_WOBBLE {UI_MENU_ADDCONDBACK &ui_menu_wobble_fix_pxy, &ui_menu_wobble_fix_ax, &ui_menu_wobble_fix_ay1, &ui_menu_wobble_fix_ay2 /*, &ui_menu_wobble_fix_pz, &ui_menu_wobble_fix_az*/ } + UI_MENU(ui_menu_wobble_fix,UI_MENU_WOBBLE,UI_MENU_BACKCNT+4 /*+2*/) + + /** \brief Configuration->WobbleFix menu */ + UI_MENU_SUBMENU(ui_menu_conf_wobble, UI_TEXT_WOBBLE, ui_menu_wobble_fix) + #define UI_MENU_CONFIGURATION_WOBBLE_COND &ui_menu_conf_wobble, + #define UI_MENU_CONFIGURATION_WOBBLE_COUNT 1 +#else //not FEATURE_Kurt67_WOBBLE_FIX + #define UI_MENU_CONFIGURATION_WOBBLE_COND + #define UI_MENU_CONFIGURATION_WOBBLE_COUNT 0 +#endif //FEATURE_Kurt67_WOBBLE_FIX /** \brief Configuration->DMS-Features->SenseOffset */ #if FEATURE_SENSIBLE_PRESSURE @@ -867,7 +921,6 @@ UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_extruder_offset_y,UI_TEXT_EXTRUDER_OFFSET_ #define UI_MENU_CONFIGURATION_EMERGENCY_PAUSE_COUNT 0 #endif //FEATURE_EMERGENCY_PAUSE - /** \brief Configuration->DMS-Features->Emergency Z-Stop */ #if FEATURE_EMERGENCY_STOP_ALL UI_MENU_CHANGEACTION( ui_menu_emergency_zstop_min, UI_TEXT_EMERGENCY_ZSTOP_MIN, UI_ACTION_EMERGENCY_ZSTOP_MIN ) @@ -1053,8 +1106,8 @@ UI_MENU_SUBMENU(ui_menu_z_calibration, UI_TEXT_ZCALIB, ui_menu_z) UI_MENU_ACTION4C(ui_menu_restore_defaults_ack,UI_ACTION_RESTORE_DEFAULTS,UI_TEXT_RESTORE_DEFAULTS4) UI_MENU_ACTIONSELECTOR_FILTER(ui_menu_restore_defaults,UI_TEXT_RESTORE_DEFAULTS,ui_menu_restore_defaults_ack, 0, MENU_MODE_PRINTING | MENU_MODE_SD_PRINTING | MENU_MODE_PAUSED) -#define UI_MENU_CONFIGURATION {UI_MENU_ADDCONDBACK &ui_menu_conf_general, &ui_menu_z_calibration, UI_MENU_CONFIGURATION_DMS_COND UI_MENU_CONFIGURATION_FAN_COND &ui_menu_conf_pid, &ui_menu_conf_motor, &ui_menu_conf_accel, UI_MENU_ACCEL_MILL_COND &ui_menu_conf_feed, &ui_menu_restore_defaults } -UI_MENU(ui_menu_configuration,UI_MENU_CONFIGURATION,UI_MENU_BACKCNT+1+1+UI_MENU_CONFIGURATION_DMS_COUNT+UI_MENU_CONFIGURATION_FAN_COUNT+5+UI_MENU_ACCEL_MILL_COUNT) +#define UI_MENU_CONFIGURATION {UI_MENU_ADDCONDBACK &ui_menu_conf_general, &ui_menu_z_calibration, UI_MENU_CONFIGURATION_DMS_COND UI_MENU_CONFIGURATION_WOBBLE_COND UI_MENU_CONFIGURATION_FAN_COND &ui_menu_conf_pid, &ui_menu_conf_motor, &ui_menu_conf_accel, UI_MENU_ACCEL_MILL_COND &ui_menu_conf_feed, &ui_menu_restore_defaults } +UI_MENU(ui_menu_configuration,UI_MENU_CONFIGURATION,UI_MENU_BACKCNT+1+1+UI_MENU_CONFIGURATION_DMS_COUNT+UI_MENU_CONFIGURATION_FAN_COUNT+5+UI_MENU_ACCEL_MILL_COUNT+UI_MENU_CONFIGURATION_WOBBLE_COUNT) /** \brief Main menu */ UI_MENU_SUBMENU(ui_menu_main1, UI_TEXT_QUICK_SETTINGS, ui_menu_quick) diff --git a/changelog.txt b/changelog.txt index 9d96052bd..bc78364c7 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,10 @@ TODO: Testing, testing .. +V RF.01.41.23.Mod (2018-05-12) +- First version of kurt67 wobblefix. This feature allows you to simulate wobble and therefore experts in measurement might be able to compensate z-wobble on RFx000 printers. + Z-wobble is here defined as a shaking in the x-y-plane. this shaking is caused by the faulty rotation of the z-spindles. +- disabling steppers now reactivates the movement-lock (if FEATURE_UNLOCK_MOVEMENT == 1). See http://www.rf1000.de/viewtopic.php?f=70&t=2282#p23501 . + V RF.01.41.22.Mod (2018-05-12) - SenseOffset EEPROM-Values can now be adjusted in Menu -> Configuration -> DMS-Features. - SenseOffset now has an "Auto-Start" within Menu->Configuration->DMS-Features->SenseOffset. This means that if you home and activate M3001 Z-Compensation then SenseOffset will automatically start. It then uses the last chosen values within EEPROM. (As Example: 3300 digits and 150um max. drivedown). Using that "Auto-Start" in your startcode M3909 is not necessary anymore.