浏览代码

Merge pull request #11001 from thinkyhead/bf2_junction_deviation_fix

[2.0.x] Updates for junction_deviation_mm
Scott Lahteine 7 年前
父节点
当前提交
12689f2470
没有帐户链接到提交者的电子邮件

+ 1
- 1
Marlin/src/Marlin.cpp 查看文件

161
  *   Flags that the position is known in each linear axis. Set when homed.
161
  *   Flags that the position is known in each linear axis. Set when homed.
162
  *   Cleared whenever a stepper powers off, potentially losing its position.
162
  *   Cleared whenever a stepper powers off, potentially losing its position.
163
  */
163
  */
164
-bool axis_homed[XYZ] = { false }, axis_known_position[XYZ] = { false };
164
+uint8_t axis_homed, axis_known_position; // = 0
165
 
165
 
166
 #if ENABLED(TEMPERATURE_UNITS_SUPPORT)
166
 #if ENABLED(TEMPERATURE_UNITS_SUPPORT)
167
   TempUnit input_temp_units = TEMPUNIT_C;
167
   TempUnit input_temp_units = TEMPUNIT_C;

+ 12
- 8
Marlin/src/Marlin.h 查看文件

44
 
44
 
45
 #if HAS_X2_ENABLE
45
 #if HAS_X2_ENABLE
46
   #define  enable_X() do{ X_ENABLE_WRITE( X_ENABLE_ON); X2_ENABLE_WRITE( X_ENABLE_ON); }while(0)
46
   #define  enable_X() do{ X_ENABLE_WRITE( X_ENABLE_ON); X2_ENABLE_WRITE( X_ENABLE_ON); }while(0)
47
-  #define disable_X() do{ X_ENABLE_WRITE(!X_ENABLE_ON); X2_ENABLE_WRITE(!X_ENABLE_ON); axis_known_position[X_AXIS] = false; }while(0)
47
+  #define disable_X() do{ X_ENABLE_WRITE(!X_ENABLE_ON); X2_ENABLE_WRITE(!X_ENABLE_ON); CBI(axis_known_position, X_AXIS); }while(0)
48
 #elif HAS_X_ENABLE
48
 #elif HAS_X_ENABLE
49
   #define  enable_X() X_ENABLE_WRITE( X_ENABLE_ON)
49
   #define  enable_X() X_ENABLE_WRITE( X_ENABLE_ON)
50
-  #define disable_X() do{ X_ENABLE_WRITE(!X_ENABLE_ON); axis_known_position[X_AXIS] = false; }while(0)
50
+  #define disable_X() do{ X_ENABLE_WRITE(!X_ENABLE_ON); CBI(axis_known_position, X_AXIS); }while(0)
51
 #else
51
 #else
52
   #define  enable_X() NOOP
52
   #define  enable_X() NOOP
53
   #define disable_X() NOOP
53
   #define disable_X() NOOP
55
 
55
 
56
 #if HAS_Y2_ENABLE
56
 #if HAS_Y2_ENABLE
57
   #define  enable_Y() do{ Y_ENABLE_WRITE( Y_ENABLE_ON); Y2_ENABLE_WRITE(Y_ENABLE_ON); }while(0)
57
   #define  enable_Y() do{ Y_ENABLE_WRITE( Y_ENABLE_ON); Y2_ENABLE_WRITE(Y_ENABLE_ON); }while(0)
58
-  #define disable_Y() do{ Y_ENABLE_WRITE(!Y_ENABLE_ON); Y2_ENABLE_WRITE(!Y_ENABLE_ON); axis_known_position[Y_AXIS] = false; }while(0)
58
+  #define disable_Y() do{ Y_ENABLE_WRITE(!Y_ENABLE_ON); Y2_ENABLE_WRITE(!Y_ENABLE_ON); CBI(axis_known_position, Y_AXIS); }while(0)
59
 #elif HAS_Y_ENABLE
59
 #elif HAS_Y_ENABLE
60
   #define  enable_Y() Y_ENABLE_WRITE( Y_ENABLE_ON)
60
   #define  enable_Y() Y_ENABLE_WRITE( Y_ENABLE_ON)
61
-  #define disable_Y() do{ Y_ENABLE_WRITE(!Y_ENABLE_ON); axis_known_position[Y_AXIS] = false; }while(0)
61
+  #define disable_Y() do{ Y_ENABLE_WRITE(!Y_ENABLE_ON); CBI(axis_known_position, Y_AXIS); }while(0)
62
 #else
62
 #else
63
   #define  enable_Y() NOOP
63
   #define  enable_Y() NOOP
64
   #define disable_Y() NOOP
64
   #define disable_Y() NOOP
66
 
66
 
67
 #if HAS_Z2_ENABLE
67
 #if HAS_Z2_ENABLE
68
   #define  enable_Z() do{ Z_ENABLE_WRITE( Z_ENABLE_ON); Z2_ENABLE_WRITE(Z_ENABLE_ON); }while(0)
68
   #define  enable_Z() do{ Z_ENABLE_WRITE( Z_ENABLE_ON); Z2_ENABLE_WRITE(Z_ENABLE_ON); }while(0)
69
-  #define disable_Z() do{ Z_ENABLE_WRITE(!Z_ENABLE_ON); Z2_ENABLE_WRITE(!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }while(0)
69
+  #define disable_Z() do{ Z_ENABLE_WRITE(!Z_ENABLE_ON); Z2_ENABLE_WRITE(!Z_ENABLE_ON); CBI(axis_known_position, Z_AXIS); }while(0)
70
 #elif HAS_Z_ENABLE
70
 #elif HAS_Z_ENABLE
71
   #define  enable_Z() Z_ENABLE_WRITE( Z_ENABLE_ON)
71
   #define  enable_Z() Z_ENABLE_WRITE( Z_ENABLE_ON)
72
-  #define disable_Z() do{ Z_ENABLE_WRITE(!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }while(0)
72
+  #define disable_Z() do{ Z_ENABLE_WRITE(!Z_ENABLE_ON); CBI(axis_known_position, Z_AXIS); }while(0)
73
 #else
73
 #else
74
   #define  enable_Z() NOOP
74
   #define  enable_Z() NOOP
75
   #define disable_Z() NOOP
75
   #define disable_Z() NOOP
169
 inline bool IsRunning() { return  Running; }
169
 inline bool IsRunning() { return  Running; }
170
 inline bool IsStopped() { return !Running; }
170
 inline bool IsStopped() { return !Running; }
171
 
171
 
172
-extern bool axis_known_position[XYZ];
173
-extern bool axis_homed[XYZ];
172
+extern uint8_t axis_homed, axis_known_position;
173
+
174
+constexpr uint8_t xyz_bits = _BV(X_AXIS) | _BV(Y_AXIS) | _BV(Z_AXIS);
175
+FORCE_INLINE bool all_axes_homed() { return (axis_homed & xyz_bits) == xyz_bits; }
176
+FORCE_INLINE bool all_axes_known() { return (axis_known_position & xyz_bits) == xyz_bits; }
177
+
174
 extern volatile bool wait_for_heatup;
178
 extern volatile bool wait_for_heatup;
175
 
179
 
176
 #if HAS_RESUME_CONTINUE
180
 #if HAS_RESUME_CONTINUE

+ 3
- 3
Marlin/src/gcode/calibrate/G28.cpp 查看文件

88
   inline void home_z_safely() {
88
   inline void home_z_safely() {
89
 
89
 
90
     // Disallow Z homing if X or Y are unknown
90
     // Disallow Z homing if X or Y are unknown
91
-    if (!axis_known_position[X_AXIS] || !axis_known_position[Y_AXIS]) {
91
+    if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
92
       LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
92
       LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
93
       SERIAL_ECHO_START();
93
       SERIAL_ECHO_START();
94
       SERIAL_ECHOLNPGM(MSG_ERR_Z_HOMING);
94
       SERIAL_ECHOLNPGM(MSG_ERR_Z_HOMING);
172
     }
172
     }
173
   #endif
173
   #endif
174
 
174
 
175
-  if ((axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS]) && parser.boolval('O')) { // home only if needed
175
+  if (all_axes_known() && parser.boolval('O')) { // home only if needed
176
     #if ENABLED(DEBUG_LEVELING_FEATURE)
176
     #if ENABLED(DEBUG_LEVELING_FEATURE)
177
       if (DEBUGGING(LEVELING)) {
177
       if (DEBUGGING(LEVELING)) {
178
         SERIAL_ECHOLNPGM("> homing not needed, skip");
178
         SERIAL_ECHOLNPGM("> homing not needed, skip");
246
 
246
 
247
     const float z_homing_height = (
247
     const float z_homing_height = (
248
       #if ENABLED(UNKNOWN_Z_NO_RAISE)
248
       #if ENABLED(UNKNOWN_Z_NO_RAISE)
249
-        !axis_known_position[Z_AXIS] ? 0 :
249
+        !TEST(axis_known_position, Z_AXIS) ? 0 :
250
       #endif
250
       #endif
251
           (parser.seenval('R') ? parser.value_linear_units() : Z_HOMING_HEIGHT)
251
           (parser.seenval('R') ? parser.value_linear_units() : Z_HOMING_HEIGHT)
252
     );
252
     );

+ 3
- 3
Marlin/src/gcode/config/M200-M205.cpp 查看文件

134
   #if ENABLED(JUNCTION_DEVIATION)
134
   #if ENABLED(JUNCTION_DEVIATION)
135
     if (parser.seen('J')) {
135
     if (parser.seen('J')) {
136
       const float junc_dev = parser.value_linear_units();
136
       const float junc_dev = parser.value_linear_units();
137
-      if (WITHIN(junc_dev, 0.01, 0.3))
137
+      if (WITHIN(junc_dev, 0.01, 0.3)) {
138
         planner.junction_deviation_mm = junc_dev;
138
         planner.junction_deviation_mm = junc_dev;
139
+        planner.recalculate_max_e_jerk_factor();
140
+      }
139
       else {
141
       else {
140
         SERIAL_ERROR_START();
142
         SERIAL_ERROR_START();
141
         SERIAL_ERRORLNPGM("?J out of range (0.01 to 0.3)");
143
         SERIAL_ERRORLNPGM("?J out of range (0.01 to 0.3)");
151
           SERIAL_ECHOLNPGM("WARNING! Low Z Jerk may lead to unwanted pauses.");
153
           SERIAL_ECHOLNPGM("WARNING! Low Z Jerk may lead to unwanted pauses.");
152
       #endif
154
       #endif
153
     }
155
     }
154
-  #endif
155
-  #if DISABLED(JUNCTION_DEVIATION) || ENABLED(LIN_ADVANCE)
156
     if (parser.seen('E')) planner.max_jerk[E_AXIS] = parser.value_linear_units();
156
     if (parser.seen('E')) planner.max_jerk[E_AXIS] = parser.value_linear_units();
157
   #endif
157
   #endif
158
 }
158
 }

+ 3
- 1
Marlin/src/gcode/config/M92.cpp 查看文件

39
         const float value = parser.value_per_axis_unit((AxisEnum)(E_AXIS + TARGET_EXTRUDER));
39
         const float value = parser.value_per_axis_unit((AxisEnum)(E_AXIS + TARGET_EXTRUDER));
40
         if (value < 20.0) {
40
         if (value < 20.0) {
41
           float factor = planner.axis_steps_per_mm[E_AXIS + TARGET_EXTRUDER] / value; // increase e constants if M92 E14 is given for netfab.
41
           float factor = planner.axis_steps_per_mm[E_AXIS + TARGET_EXTRUDER] / value; // increase e constants if M92 E14 is given for netfab.
42
-          planner.max_jerk[E_AXIS] *= factor;
42
+          #if DISABLED(JUNCTION_DEVIATION)
43
+            planner.max_jerk[E_AXIS] *= factor;
44
+          #endif
43
           planner.max_feedrate_mm_s[E_AXIS + TARGET_EXTRUDER] *= factor;
45
           planner.max_feedrate_mm_s[E_AXIS + TARGET_EXTRUDER] *= factor;
44
           planner.max_acceleration_steps_per_s2[E_AXIS + TARGET_EXTRUDER] *= factor;
46
           planner.max_acceleration_steps_per_s2[E_AXIS + TARGET_EXTRUDER] *= factor;
45
         }
47
         }

+ 1
- 1
Marlin/src/gcode/feature/trinamic/M911-M915.cpp 查看文件

332
     const uint16_t _rms = parser.seenval('S') ? parser.value_int() : CALIBRATION_CURRENT,
332
     const uint16_t _rms = parser.seenval('S') ? parser.value_int() : CALIBRATION_CURRENT,
333
                    _z = parser.seenval('Z') ? parser.value_linear_units() : CALIBRATION_EXTRA_HEIGHT;
333
                    _z = parser.seenval('Z') ? parser.value_linear_units() : CALIBRATION_EXTRA_HEIGHT;
334
 
334
 
335
-    if (!axis_known_position[Z_AXIS]) {
335
+    if (!TEST(axis_known_position, Z_AXIS)) {
336
       SERIAL_ECHOLNPGM("\nPlease home Z axis first");
336
       SERIAL_ECHOLNPGM("\nPlease home Z axis first");
337
       return;
337
       return;
338
     }
338
     }

+ 2
- 2
Marlin/src/lcd/dogm/status_screen_DOGM.h 查看文件

108
   if (blink)
108
   if (blink)
109
     lcd_put_u8str(value);
109
     lcd_put_u8str(value);
110
   else {
110
   else {
111
-    if (!axis_homed[axis])
111
+    if (!TEST(axis_homed, axis))
112
       while (const char c = *value++) lcd_put_wchar(c <= '.' ? c : '?');
112
       while (const char c = *value++) lcd_put_wchar(c <= '.' ? c : '?');
113
     else {
113
     else {
114
       #if DISABLED(HOME_AFTER_DEACTIVATE) && DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
114
       #if DISABLED(HOME_AFTER_DEACTIVATE) && DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
115
-        if (!axis_known_position[axis])
115
+        if (!TEST(axis_known_position, axis))
116
           lcd_put_u8str_P(axis == Z_AXIS ? PSTR("      ") : PSTR("    "));
116
           lcd_put_u8str_P(axis == Z_AXIS ? PSTR("      ") : PSTR("    "));
117
         else
117
         else
118
       #endif
118
       #endif

+ 1
- 3
Marlin/src/lcd/dogm/status_screen_lite_ST7920.h 查看文件

868
         #if ENABLED(DISABLE_REDUCED_ACCURACY_WARNING)
868
         #if ENABLED(DISABLE_REDUCED_ACCURACY_WARNING)
869
           true
869
           true
870
         #else
870
         #else
871
-          axis_known_position[X_AXIS] &&
872
-          axis_known_position[Y_AXIS] &&
873
-          axis_known_position[Z_AXIS]
871
+          all_axes_known()
874
         #endif
872
         #endif
875
       );
873
       );
876
     }
874
     }

+ 16
- 18
Marlin/src/lcd/ultralcd.cpp 查看文件

2026
     void _lcd_level_bed_homing() {
2026
     void _lcd_level_bed_homing() {
2027
       if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
2027
       if (lcdDrawUpdate) lcd_implementation_drawedit(PSTR(MSG_LEVEL_BED_HOMING), NULL);
2028
       lcdDrawUpdate = LCDVIEW_CALL_NO_REDRAW;
2028
       lcdDrawUpdate = LCDVIEW_CALL_NO_REDRAW;
2029
-      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2030
-        lcd_goto_screen(_lcd_level_bed_homing_done);
2029
+      if (all_axes_homed()) lcd_goto_screen(_lcd_level_bed_homing_done);
2031
     }
2030
     }
2032
 
2031
 
2033
     #if ENABLED(PROBE_MANUALLY)
2032
     #if ENABLED(PROBE_MANUALLY)
2039
      */
2038
      */
2040
     void _lcd_level_bed_continue() {
2039
     void _lcd_level_bed_continue() {
2041
       defer_return_to_status = true;
2040
       defer_return_to_status = true;
2042
-      axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
2041
+      axis_homed = 0;
2043
       lcd_goto_screen(_lcd_level_bed_homing);
2042
       lcd_goto_screen(_lcd_level_bed_homing);
2044
       enqueue_and_echo_commands_P(PSTR("G28"));
2043
       enqueue_and_echo_commands_P(PSTR("G28"));
2045
     }
2044
     }
2369
       defer_return_to_status = true;
2368
       defer_return_to_status = true;
2370
       if (lcdDrawUpdate) lcd_implementation_drawmenu_static(LCD_HEIGHT < 3 ? 0 : (LCD_HEIGHT > 4 ? 2 : 1), PSTR(MSG_LEVEL_BED_HOMING));
2369
       if (lcdDrawUpdate) lcd_implementation_drawmenu_static(LCD_HEIGHT < 3 ? 0 : (LCD_HEIGHT > 4 ? 2 : 1), PSTR(MSG_LEVEL_BED_HOMING));
2371
       lcdDrawUpdate = LCDVIEW_CALL_NO_REDRAW;
2370
       lcdDrawUpdate = LCDVIEW_CALL_NO_REDRAW;
2372
-      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) {
2371
+      if (all_axes_homed()) {
2373
         ubl.lcd_map_control = true; // Return to the map screen
2372
         ubl.lcd_map_control = true; // Return to the map screen
2374
         lcd_goto_screen(_lcd_ubl_output_map_lcd);
2373
         lcd_goto_screen(_lcd_ubl_output_map_lcd);
2375
       }
2374
       }
2414
     void _lcd_ubl_output_map_lcd() {
2413
     void _lcd_ubl_output_map_lcd() {
2415
       static int16_t step_scaler = 0;
2414
       static int16_t step_scaler = 0;
2416
 
2415
 
2417
-      if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS]))
2416
+      if (!all_axes_known())
2418
         return lcd_goto_screen(_lcd_ubl_map_homing);
2417
         return lcd_goto_screen(_lcd_ubl_map_homing);
2419
 
2418
 
2420
       if (use_click()) return _lcd_ubl_map_lcd_edit_cmd();
2419
       if (use_click()) return _lcd_ubl_map_lcd_edit_cmd();
2463
      * UBL Homing before LCD map
2462
      * UBL Homing before LCD map
2464
      */
2463
      */
2465
     void _lcd_ubl_output_map_lcd_cmd() {
2464
     void _lcd_ubl_output_map_lcd_cmd() {
2466
-      if (!(axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS])) {
2467
-        axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
2465
+      if (!all_axes_known()) {
2466
+        axis_homed = 0;
2468
         enqueue_and_echo_commands_P(PSTR("G28"));
2467
         enqueue_and_echo_commands_P(PSTR("G28"));
2469
       }
2468
       }
2470
       lcd_goto_screen(_lcd_ubl_map_homing);
2469
       lcd_goto_screen(_lcd_ubl_map_homing);
2592
       START_MENU();
2591
       START_MENU();
2593
       MENU_BACK(MSG_PREPARE);
2592
       MENU_BACK(MSG_PREPARE);
2594
 
2593
 
2595
-      const bool is_homed = axis_known_position[X_AXIS] && axis_known_position[Y_AXIS] && axis_known_position[Z_AXIS];
2594
+      const bool is_homed = all_axes_known();
2596
 
2595
 
2597
       // Auto Home if not using manual probing
2596
       // Auto Home if not using manual probing
2598
       #if DISABLED(PROBE_MANUALLY) && DISABLED(MESH_BED_LEVELING)
2597
       #if DISABLED(PROBE_MANUALLY) && DISABLED(MESH_BED_LEVELING)
2634
 
2633
 
2635
       #if ENABLED(LEVEL_BED_CORNERS)
2634
       #if ENABLED(LEVEL_BED_CORNERS)
2636
         // Move to the next corner for leveling
2635
         // Move to the next corner for leveling
2637
-        if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2638
-          MENU_ITEM(submenu, MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
2636
+        if (all_axes_homed()) MENU_ITEM(submenu, MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
2639
       #endif
2637
       #endif
2640
 
2638
 
2641
       #if ENABLED(EEPROM_SETTINGS)
2639
       #if ENABLED(EEPROM_SETTINGS)
2665
     // Move Axis
2663
     // Move Axis
2666
     //
2664
     //
2667
     #if ENABLED(DELTA)
2665
     #if ENABLED(DELTA)
2668
-      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2666
+      if (all_axes_homed())
2669
     #endif
2667
     #endif
2670
         MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu);
2668
         MENU_ITEM(submenu, MSG_MOVE_AXIS, lcd_move_menu);
2671
 
2669
 
2709
     #endif
2707
     #endif
2710
 
2708
 
2711
     #if ENABLED(LEVEL_BED_CORNERS) && DISABLED(LCD_BED_LEVELING)
2709
     #if ENABLED(LEVEL_BED_CORNERS) && DISABLED(LCD_BED_LEVELING)
2712
-      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2710
+      if (all_axes_homed())
2713
         MENU_ITEM(function, MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
2711
         MENU_ITEM(function, MSG_LEVEL_CORNERS, _lcd_level_bed_corners);
2714
     #endif
2712
     #endif
2715
 
2713
 
2839
     void _lcd_calibrate_homing() {
2837
     void _lcd_calibrate_homing() {
2840
       if (lcdDrawUpdate) lcd_implementation_drawmenu_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_LEVEL_BED_HOMING));
2838
       if (lcdDrawUpdate) lcd_implementation_drawmenu_static(LCD_HEIGHT >= 4 ? 1 : 0, PSTR(MSG_LEVEL_BED_HOMING));
2841
       lcdDrawUpdate = LCDVIEW_CALL_REDRAW_NEXT;
2839
       lcdDrawUpdate = LCDVIEW_CALL_REDRAW_NEXT;
2842
-      if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2840
+      if (all_axes_homed())
2843
         lcd_goto_previous_menu();
2841
         lcd_goto_previous_menu();
2844
     }
2842
     }
2845
 
2843
 
2894
       MENU_ITEM(submenu, MSG_DELTA_SETTINGS, lcd_delta_settings);
2892
       MENU_ITEM(submenu, MSG_DELTA_SETTINGS, lcd_delta_settings);
2895
       #if ENABLED(DELTA_CALIBRATION_MENU)
2893
       #if ENABLED(DELTA_CALIBRATION_MENU)
2896
         MENU_ITEM(submenu, MSG_AUTO_HOME, _lcd_delta_calibrate_home);
2894
         MENU_ITEM(submenu, MSG_AUTO_HOME, _lcd_delta_calibrate_home);
2897
-        if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) {
2895
+        if (all_axes_homed()) {
2898
           MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_X, _goto_tower_x);
2896
           MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_X, _goto_tower_x);
2899
           MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Y, _goto_tower_y);
2897
           MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Y, _goto_tower_y);
2900
           MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Z, _goto_tower_z);
2898
           MENU_ITEM(submenu, MSG_DELTA_CALIBRATE_Z, _goto_tower_z);
3190
    */
3188
    */
3191
 
3189
 
3192
   #if IS_KINEMATIC || ENABLED(NO_MOTION_BEFORE_HOMING)
3190
   #if IS_KINEMATIC || ENABLED(NO_MOTION_BEFORE_HOMING)
3193
-    #define _MOVE_XYZ_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
3191
+    #define _MOVE_XYZ_ALLOWED (all_axes_homed())
3194
   #else
3192
   #else
3195
     #define _MOVE_XYZ_ALLOWED true
3193
     #define _MOVE_XYZ_ALLOWED true
3196
   #endif
3194
   #endif
3754
       MENU_BACK(MSG_MOTION);
3752
       MENU_BACK(MSG_MOTION);
3755
 
3753
 
3756
       #if ENABLED(JUNCTION_DEVIATION)
3754
       #if ENABLED(JUNCTION_DEVIATION)
3757
-        MENU_ITEM_EDIT(float3, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.01, 0.3);
3755
+        MENU_ITEM_EDIT_CALLBACK(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.01, 0.3, planner.recalculate_max_e_jerk_factor);
3758
       #else
3756
       #else
3759
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VA_JERK, &planner.max_jerk[A_AXIS], 1, 990);
3757
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VA_JERK, &planner.max_jerk[A_AXIS], 1, 990);
3760
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VB_JERK, &planner.max_jerk[B_AXIS], 1, 990);
3758
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VB_JERK, &planner.max_jerk[B_AXIS], 1, 990);
3763
         #else
3761
         #else
3764
           MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk[C_AXIS], 0.1, 990);
3762
           MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk[C_AXIS], 0.1, 990);
3765
         #endif
3763
         #endif
3764
+        MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VE_JERK, &planner.max_jerk[E_AXIS], 1, 990);
3766
       #endif
3765
       #endif
3767
-      MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VE_JERK, &planner.max_jerk[E_AXIS], 1, 990);
3768
 
3766
 
3769
       END_MENU();
3767
       END_MENU();
3770
     }
3768
     }
4930
           if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
4928
           if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
4931
         #endif
4929
         #endif
4932
 
4930
 
4933
-        if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) {
4931
+        if (all_axes_homed()) {
4934
           #if ENABLED(DELTA) || Z_HOME_DIR != -1
4932
           #if ENABLED(DELTA) || Z_HOME_DIR != -1
4935
             if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)   reprapworld_keypad_move_z_up();
4933
             if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)   reprapworld_keypad_move_z_up();
4936
           #endif
4934
           #endif

+ 2
- 2
Marlin/src/lcd/ultralcd_impl_HD44780.h 查看文件

493
   if (blink)
493
   if (blink)
494
     lcd_put_u8str(value);
494
     lcd_put_u8str(value);
495
   else {
495
   else {
496
-    if (!axis_homed[axis])
496
+    if (!TEST(axis_homed, axis))
497
       while (const char c = *value++) lcd_put_wchar(c <= '.' ? c : '?');
497
       while (const char c = *value++) lcd_put_wchar(c <= '.' ? c : '?');
498
     else {
498
     else {
499
       #if DISABLED(HOME_AFTER_DEACTIVATE) && DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
499
       #if DISABLED(HOME_AFTER_DEACTIVATE) && DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
500
-        if (!axis_known_position[axis])
500
+        if (!TEST(axis_known_position, axis))
501
           lcd_put_u8str_P(axis == Z_AXIS ? PSTR("      ") : PSTR("    "));
501
           lcd_put_u8str_P(axis == Z_AXIS ? PSTR("      ") : PSTR("    "));
502
         else
502
         else
503
       #endif
503
       #endif

+ 14
- 8
Marlin/src/module/configuration_store.cpp 查看文件

330
     fwretract.refresh_autoretract();
330
     fwretract.refresh_autoretract();
331
   #endif
331
   #endif
332
 
332
 
333
+  #if ENABLED(JUNCTION_DEVIATION) && ENABLED(LIN_ADVANCE)
334
+    planner.recalculate_max_e_jerk_factor();
335
+  #endif
336
+
333
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
337
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
334
   // and init stepper.count[], planner.position[] with current_position
338
   // and init stepper.count[], planner.position[] with current_position
335
   planner.refresh_positioning();
339
   planner.refresh_positioning();
411
     EEPROM_WRITE(planner.travel_acceleration);
415
     EEPROM_WRITE(planner.travel_acceleration);
412
     EEPROM_WRITE(planner.min_feedrate_mm_s);
416
     EEPROM_WRITE(planner.min_feedrate_mm_s);
413
     EEPROM_WRITE(planner.min_travel_feedrate_mm_s);
417
     EEPROM_WRITE(planner.min_travel_feedrate_mm_s);
414
-    EEPROM_WRITE(planner.max_jerk);
415
 
418
 
416
     #if ENABLED(JUNCTION_DEVIATION)
419
     #if ENABLED(JUNCTION_DEVIATION)
420
+      const float planner_max_jerk[] = { DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK, DEFAULT_EJERK };
421
+      EEPROM_WRITE(planner_max_jerk);
417
       EEPROM_WRITE(planner.junction_deviation_mm);
422
       EEPROM_WRITE(planner.junction_deviation_mm);
418
     #else
423
     #else
424
+      EEPROM_WRITE(planner.max_jerk);
419
       dummy = 0.02;
425
       dummy = 0.02;
420
       EEPROM_WRITE(dummy);
426
       EEPROM_WRITE(dummy);
421
     #endif
427
     #endif
1008
       EEPROM_READ(planner.travel_acceleration);
1014
       EEPROM_READ(planner.travel_acceleration);
1009
       EEPROM_READ(planner.min_feedrate_mm_s);
1015
       EEPROM_READ(planner.min_feedrate_mm_s);
1010
       EEPROM_READ(planner.min_travel_feedrate_mm_s);
1016
       EEPROM_READ(planner.min_travel_feedrate_mm_s);
1011
-      EEPROM_READ(planner.max_jerk);
1012
 
1017
 
1013
       #if ENABLED(JUNCTION_DEVIATION)
1018
       #if ENABLED(JUNCTION_DEVIATION)
1019
+        for (uint8_t q = 4; q--;) EEPROM_READ(dummy);
1014
         EEPROM_READ(planner.junction_deviation_mm);
1020
         EEPROM_READ(planner.junction_deviation_mm);
1015
       #else
1021
       #else
1022
+        EEPROM_READ(planner.max_jerk);
1016
         EEPROM_READ(dummy);
1023
         EEPROM_READ(dummy);
1017
       #endif
1024
       #endif
1018
 
1025
 
1724
   planner.travel_acceleration = DEFAULT_TRAVEL_ACCELERATION;
1731
   planner.travel_acceleration = DEFAULT_TRAVEL_ACCELERATION;
1725
   planner.min_feedrate_mm_s = DEFAULT_MINIMUMFEEDRATE;
1732
   planner.min_feedrate_mm_s = DEFAULT_MINIMUMFEEDRATE;
1726
   planner.min_travel_feedrate_mm_s = DEFAULT_MINTRAVELFEEDRATE;
1733
   planner.min_travel_feedrate_mm_s = DEFAULT_MINTRAVELFEEDRATE;
1727
-  planner.max_jerk[X_AXIS] = DEFAULT_XJERK;
1728
-  planner.max_jerk[Y_AXIS] = DEFAULT_YJERK;
1729
-  planner.max_jerk[Z_AXIS] = DEFAULT_ZJERK;
1730
-  planner.max_jerk[E_AXIS] = DEFAULT_EJERK;
1731
 
1734
 
1732
   #if ENABLED(JUNCTION_DEVIATION)
1735
   #if ENABLED(JUNCTION_DEVIATION)
1733
     planner.junction_deviation_mm = JUNCTION_DEVIATION_MM;
1736
     planner.junction_deviation_mm = JUNCTION_DEVIATION_MM;
1737
+  #else
1738
+    planner.max_jerk[X_AXIS] = DEFAULT_XJERK;
1739
+    planner.max_jerk[Y_AXIS] = DEFAULT_YJERK;
1740
+    planner.max_jerk[Z_AXIS] = DEFAULT_ZJERK;
1741
+    planner.max_jerk[E_AXIS] = DEFAULT_EJERK;
1734
   #endif
1742
   #endif
1735
 
1743
 
1736
   #if HAS_HOME_OFFSET
1744
   #if HAS_HOME_OFFSET
2135
       SERIAL_ECHOPAIR_P(port, " X", LINEAR_UNIT(planner.max_jerk[X_AXIS]));
2143
       SERIAL_ECHOPAIR_P(port, " X", LINEAR_UNIT(planner.max_jerk[X_AXIS]));
2136
       SERIAL_ECHOPAIR_P(port, " Y", LINEAR_UNIT(planner.max_jerk[Y_AXIS]));
2144
       SERIAL_ECHOPAIR_P(port, " Y", LINEAR_UNIT(planner.max_jerk[Y_AXIS]));
2137
       SERIAL_ECHOPAIR_P(port, " Z", LINEAR_UNIT(planner.max_jerk[Z_AXIS]));
2145
       SERIAL_ECHOPAIR_P(port, " Z", LINEAR_UNIT(planner.max_jerk[Z_AXIS]));
2138
-    #endif
2139
-    #if DISABLED(JUNCTION_DEVIATION) || ENABLED(LIN_ADVANCE)
2140
       SERIAL_ECHOPAIR_P(port, " E", LINEAR_UNIT(planner.max_jerk[E_AXIS]));
2146
       SERIAL_ECHOPAIR_P(port, " E", LINEAR_UNIT(planner.max_jerk[E_AXIS]));
2141
     #endif
2147
     #endif
2142
 
2148
 

+ 1
- 1
Marlin/src/module/delta.cpp 查看文件

73
   delta_diagonal_rod_2_tower[B_AXIS] = sq(delta_diagonal_rod + drt[B_AXIS]);
73
   delta_diagonal_rod_2_tower[B_AXIS] = sq(delta_diagonal_rod + drt[B_AXIS]);
74
   delta_diagonal_rod_2_tower[C_AXIS] = sq(delta_diagonal_rod + drt[C_AXIS]);
74
   delta_diagonal_rod_2_tower[C_AXIS] = sq(delta_diagonal_rod + drt[C_AXIS]);
75
   update_software_endstops(Z_AXIS);
75
   update_software_endstops(Z_AXIS);
76
-  axis_homed[X_AXIS] = axis_homed[Y_AXIS] = axis_homed[Z_AXIS] = false;
76
+  axis_homed = 0;
77
 }
77
 }
78
 
78
 
79
 /**
79
 /**

+ 8
- 7
Marlin/src/module/motion.cpp 查看文件

957
 
957
 
958
   bool axis_unhomed_error(const bool x/*=true*/, const bool y/*=true*/, const bool z/*=true*/) {
958
   bool axis_unhomed_error(const bool x/*=true*/, const bool y/*=true*/, const bool z/*=true*/) {
959
     #if ENABLED(HOME_AFTER_DEACTIVATE)
959
     #if ENABLED(HOME_AFTER_DEACTIVATE)
960
-      const bool xx = x && !axis_known_position[X_AXIS],
961
-                 yy = y && !axis_known_position[Y_AXIS],
962
-                 zz = z && !axis_known_position[Z_AXIS];
960
+      const bool xx = x && !TEST(axis_known_position, X_AXIS),
961
+                 yy = y && !TEST(axis_known_position, Y_AXIS),
962
+                 zz = z && !TEST(axis_known_position, Z_AXIS);
963
     #else
963
     #else
964
-      const bool xx = x && !axis_homed[X_AXIS],
965
-                 yy = y && !axis_homed[Y_AXIS],
966
-                 zz = z && !axis_homed[Z_AXIS];
964
+      const bool xx = x && !TEST(axis_homed, X_AXIS),
965
+                 yy = y && !TEST(axis_homed, Y_AXIS),
966
+                 zz = z && !TEST(axis_homed, Z_AXIS);
967
     #endif
967
     #endif
968
     if (xx || yy || zz) {
968
     if (xx || yy || zz) {
969
       SERIAL_ECHO_START();
969
       SERIAL_ECHO_START();
1173
     }
1173
     }
1174
   #endif
1174
   #endif
1175
 
1175
 
1176
-  axis_known_position[axis] = axis_homed[axis] = true;
1176
+  SBI(axis_known_position, axis);
1177
+  SBI(axis_homed, axis);
1177
 
1178
 
1178
   #if HAS_POSITION_SHIFT
1179
   #if HAS_POSITION_SHIFT
1179
     position_shift[axis] = 0;
1180
     position_shift[axis] = 0;

+ 17
- 7
Marlin/src/module/planner.cpp 查看文件

121
       Planner::acceleration,                  // (mm/s^2) M204 S - Normal acceleration. DEFAULT ACCELERATION for all printing moves.
121
       Planner::acceleration,                  // (mm/s^2) M204 S - Normal acceleration. DEFAULT ACCELERATION for all printing moves.
122
       Planner::retract_acceleration,          // (mm/s^2) M204 R - Retract acceleration. Filament pull-back and push-forward while standing still in the other axes
122
       Planner::retract_acceleration,          // (mm/s^2) M204 R - Retract acceleration. Filament pull-back and push-forward while standing still in the other axes
123
       Planner::travel_acceleration,           // (mm/s^2) M204 T - Travel acceleration. DEFAULT ACCELERATION for all NON printing moves.
123
       Planner::travel_acceleration,           // (mm/s^2) M204 T - Travel acceleration. DEFAULT ACCELERATION for all NON printing moves.
124
-      Planner::max_jerk[XYZE],                // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
125
       Planner::min_travel_feedrate_mm_s;      // (mm/s) M205 T - Minimum travel feedrate
124
       Planner::min_travel_feedrate_mm_s;      // (mm/s) M205 T - Minimum travel feedrate
126
 
125
 
127
 #if ENABLED(JUNCTION_DEVIATION)
126
 #if ENABLED(JUNCTION_DEVIATION)
128
   float Planner::junction_deviation_mm;       // (mm) M205 J
127
   float Planner::junction_deviation_mm;       // (mm) M205 J
128
+  #if ENABLED(LIN_ADVANCE)
129
+    float Planner::max_e_jerk_factor;         // Calculated from junction_deviation_mm
130
+  #endif
131
+#else
132
+  float Planner::max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
129
 #endif
133
 #endif
130
 
134
 
131
 #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
135
 #if ENABLED(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
134
 
138
 
135
 #if ENABLED(DISTINCT_E_FACTORS)
139
 #if ENABLED(DISTINCT_E_FACTORS)
136
   uint8_t Planner::last_extruder = 0;     // Respond to extruder change
140
   uint8_t Planner::last_extruder = 0;     // Respond to extruder change
141
+  #define _EINDEX (E_AXIS + active_extruder)
142
+#else
143
+  #define _EINDEX E_AXIS
137
 #endif
144
 #endif
138
 
145
 
139
 int16_t Planner::flow_percentage[EXTRUDERS] = ARRAY_BY_EXTRUDERS1(100); // Extrusion factor for each extruder
146
 int16_t Planner::flow_percentage[EXTRUDERS] = ARRAY_BY_EXTRUDERS1(100); // Extrusion factor for each extruder
2021
     accel = CEIL((esteps ? acceleration : travel_acceleration) * steps_per_mm);
2028
     accel = CEIL((esteps ? acceleration : travel_acceleration) * steps_per_mm);
2022
 
2029
 
2023
     #if ENABLED(LIN_ADVANCE)
2030
     #if ENABLED(LIN_ADVANCE)
2031
+
2032
+      #if ENABLED(JUNCTION_DEVIATION)
2033
+        #define MAX_E_JERK (max_e_jerk_factor * max_acceleration_mm_per_s2[_EINDEX])
2034
+      #else
2035
+        #define MAX_E_JERK max_jerk[E_AXIS]
2036
+      #endif
2037
+
2024
       /**
2038
       /**
2025
        *
2039
        *
2026
        * Use LIN_ADVANCE for blocks if all these are true:
2040
        * Use LIN_ADVANCE for blocks if all these are true:
2051
         if (block->e_D_ratio > 3.0)
2065
         if (block->e_D_ratio > 3.0)
2052
           block->use_advance_lead = false;
2066
           block->use_advance_lead = false;
2053
         else {
2067
         else {
2054
-          const uint32_t max_accel_steps_per_s2 = max_jerk[E_AXIS] / (extruder_advance_K * block->e_D_ratio) * steps_per_mm;
2068
+          const uint32_t max_accel_steps_per_s2 = MAX_E_JERK / (extruder_advance_K * block->e_D_ratio) * steps_per_mm;
2055
           #if ENABLED(LA_DEBUG)
2069
           #if ENABLED(LA_DEBUG)
2056
-            if (accel > max_accel_steps_per_s2)
2057
-              SERIAL_ECHOLNPGM("Acceleration limited.");
2070
+            if (accel > max_accel_steps_per_s2) SERIAL_ECHOLNPGM("Acceleration limited.");
2058
           #endif
2071
           #endif
2059
           NOMORE(accel, max_accel_steps_per_s2);
2072
           NOMORE(accel, max_accel_steps_per_s2);
2060
         }
2073
         }
2459
 
2472
 
2460
 void Planner::_set_position_mm(const float &a, const float &b, const float &c, const float &e) {
2473
 void Planner::_set_position_mm(const float &a, const float &b, const float &c, const float &e) {
2461
   #if ENABLED(DISTINCT_E_FACTORS)
2474
   #if ENABLED(DISTINCT_E_FACTORS)
2462
-    #define _EINDEX (E_AXIS + active_extruder)
2463
     last_extruder = active_extruder;
2475
     last_extruder = active_extruder;
2464
-  #else
2465
-    #define _EINDEX E_AXIS
2466
   #endif
2476
   #endif
2467
   position[A_AXIS] = LROUND(a * axis_steps_per_mm[A_AXIS]),
2477
   position[A_AXIS] = LROUND(a * axis_steps_per_mm[A_AXIS]),
2468
   position[B_AXIS] = LROUND(b * axis_steps_per_mm[B_AXIS]),
2478
   position[B_AXIS] = LROUND(b * axis_steps_per_mm[B_AXIS]),

+ 25
- 13
Marlin/src/module/planner.h 查看文件

195
                                                       // May be auto-adjusted by a filament width sensor
195
                                                       // May be auto-adjusted by a filament width sensor
196
     #endif
196
     #endif
197
 
197
 
198
-    static uint32_t max_acceleration_steps_per_s2[XYZE_N],
199
-                    max_acceleration_mm_per_s2[XYZE_N], // Use M201 to override
200
-                    min_segment_time_us; // Use 'M205 B<µs>' to override
201
-    static float max_feedrate_mm_s[XYZE_N],         // Max speeds in mm per second
202
-                 axis_steps_per_mm[XYZE_N],
203
-                 steps_to_mm[XYZE_N],
204
-                 min_feedrate_mm_s,
205
-                 acceleration,         // Normal acceleration mm/s^2  DEFAULT ACCELERATION for all printing moves. M204 SXXXX
206
-                 retract_acceleration, // Retract acceleration mm/s^2 filament pull-back and push-forward while standing still in the other axes M204 TXXXX
207
-                 travel_acceleration,  // Travel acceleration mm/s^2  DEFAULT ACCELERATION for all NON printing moves. M204 MXXXX
208
-                 max_jerk[XYZE],       // The largest speed change requiring no acceleration
209
-                 min_travel_feedrate_mm_s;
198
+    static uint32_t max_acceleration_mm_per_s2[XYZE_N],    // (mm/s^2) M201 XYZE
199
+                    max_acceleration_steps_per_s2[XYZE_N], // (steps/s^2) Derived from mm_per_s2
200
+                    min_segment_time_us;                   // (µs) M205 B
201
+    static float max_feedrate_mm_s[XYZE_N],     // (mm/s) M203 XYZE - Max speeds
202
+                 axis_steps_per_mm[XYZE_N],     // (steps) M92 XYZE - Steps per millimeter
203
+                 steps_to_mm[XYZE_N],           // (mm) Millimeters per step
204
+                 min_feedrate_mm_s,             // (mm/s) M205 S - Minimum linear feedrate
205
+                 acceleration,                  // (mm/s^2) M204 S - Normal acceleration. DEFAULT ACCELERATION for all printing moves.
206
+                 retract_acceleration,          // (mm/s^2) M204 R - Retract acceleration. Filament pull-back and push-forward while standing still in the other axes
207
+                 travel_acceleration,           // (mm/s^2) M204 T - Travel acceleration. DEFAULT ACCELERATION for all NON printing moves.
208
+                 min_travel_feedrate_mm_s;      // (mm/s) M205 T - Minimum travel feedrate
210
 
209
 
211
     #if ENABLED(JUNCTION_DEVIATION)
210
     #if ENABLED(JUNCTION_DEVIATION)
212
-      static float junction_deviation_mm; // Initialized by EEPROM
211
+      static float junction_deviation_mm;       // (mm) M205 J
212
+      #if ENABLED(LIN_ADVANCE)
213
+        static float max_e_jerk_factor;         // Calculated from junction_deviation_mm
214
+      #endif
215
+    #else
216
+      static float max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
213
     #endif
217
     #endif
214
 
218
 
215
     #if HAS_LEVELING
219
     #if HAS_LEVELING
745
       static void autotemp_M104_M109();
749
       static void autotemp_M104_M109();
746
     #endif
750
     #endif
747
 
751
 
752
+    #if ENABLED(JUNCTION_DEVIATION)
753
+      FORCE_INLINE static void recalculate_max_e_jerk_factor() {
754
+        #if ENABLED(LIN_ADVANCE)
755
+          max_e_jerk_factor = SQRT(SQRT(0.5) * junction_deviation_mm) * RECIPROCAL(1.0 - SQRT(0.5));
756
+        #endif
757
+      }
758
+    #endif
759
+
748
   private:
760
   private:
749
 
761
 
750
     /**
762
     /**

+ 2
- 2
Marlin/src/module/probe.cpp 查看文件

386
 
386
 
387
   // For beds that fall when Z is powered off only raise for trusted Z
387
   // For beds that fall when Z is powered off only raise for trusted Z
388
   #if ENABLED(UNKNOWN_Z_NO_RAISE)
388
   #if ENABLED(UNKNOWN_Z_NO_RAISE)
389
-    const bool unknown_condition = axis_known_position[Z_AXIS];
389
+    const bool unknown_condition = TEST(axis_known_position, Z_AXIS);
390
   #else
390
   #else
391
     constexpr float unknown_condition = true;
391
     constexpr float unknown_condition = true;
392
   #endif
392
   #endif
562
 
562
 
563
   // Stop the probe before it goes too low to prevent damage.
563
   // Stop the probe before it goes too low to prevent damage.
564
   // If Z isn't known then probe to -10mm.
564
   // If Z isn't known then probe to -10mm.
565
-  const float z_probe_low_point = axis_known_position[Z_AXIS] ? -zprobe_zoffset + Z_PROBE_LOW_POINT : -10.0;
565
+  const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -zprobe_zoffset + Z_PROBE_LOW_POINT : -10.0;
566
 
566
 
567
   // Double-probing does a fast probe followed by a slow probe
567
   // Double-probing does a fast probe followed by a slow probe
568
   #if MULTIPLE_PROBING == 2
568
   #if MULTIPLE_PROBING == 2

+ 2
- 2
Marlin/src/module/temperature.h 查看文件

31
 #include "../inc/MarlinConfig.h"
31
 #include "../inc/MarlinConfig.h"
32
 
32
 
33
 #if ENABLED(BABYSTEPPING)
33
 #if ENABLED(BABYSTEPPING)
34
-  extern bool axis_known_position[XYZ];
34
+  extern uint8_t axis_known_position;
35
 #endif
35
 #endif
36
 
36
 
37
 #if ENABLED(AUTO_POWER_CONTROL)
37
 #if ENABLED(AUTO_POWER_CONTROL)
504
     #if ENABLED(BABYSTEPPING)
504
     #if ENABLED(BABYSTEPPING)
505
 
505
 
506
       static void babystep_axis(const AxisEnum axis, const int16_t distance) {
506
       static void babystep_axis(const AxisEnum axis, const int16_t distance) {
507
-        if (axis_known_position[axis]) {
507
+        if (TEST(axis_known_position, axis)) {
508
           #if IS_CORE
508
           #if IS_CORE
509
             #if ENABLED(BABYSTEP_XY)
509
             #if ENABLED(BABYSTEP_XY)
510
               switch (axis) {
510
               switch (axis) {

+ 1
- 1
Marlin/src/module/tool_change.cpp 查看文件

80
     }
80
     }
81
   }
81
   }
82
 
82
 
83
-#endif // SWITCHING_EXTRUDER
83
+#endif // DO_SWITCH_EXTRUDER
84
 
84
 
85
 #if ENABLED(SWITCHING_NOZZLE)
85
 #if ENABLED(SWITCHING_NOZZLE)
86
 
86
 

正在加载...
取消
保存