Browse Source

Adjustable delta_diagonal_rod_trim (#18423)

Fabio Santos 5 years ago
parent
commit
29753baeee
No account linked to committer's email address

+ 7
- 1
Marlin/src/gcode/calibrate/M665.cpp View File

38
    *    R = delta radius
38
    *    R = delta radius
39
    *    S = segments per second
39
    *    S = segments per second
40
    *    X = Alpha (Tower 1) angle trim
40
    *    X = Alpha (Tower 1) angle trim
41
-   *    Y = Beta (Tower 2) angle trim
41
+   *    Y = Beta  (Tower 2) angle trim
42
    *    Z = Gamma (Tower 3) angle trim
42
    *    Z = Gamma (Tower 3) angle trim
43
+   *    A = Alpha (Tower 1) digonal rod trim
44
+   *    B = Beta  (Tower 2) digonal rod trim
45
+   *    C = Gamma (Tower 3) digonal rod trim
43
    */
46
    */
44
   void GcodeSuite::M665() {
47
   void GcodeSuite::M665() {
45
     if (parser.seen('H')) delta_height              = parser.value_linear_units();
48
     if (parser.seen('H')) delta_height              = parser.value_linear_units();
49
     if (parser.seen('X')) delta_tower_angle_trim.a  = parser.value_float();
52
     if (parser.seen('X')) delta_tower_angle_trim.a  = parser.value_float();
50
     if (parser.seen('Y')) delta_tower_angle_trim.b  = parser.value_float();
53
     if (parser.seen('Y')) delta_tower_angle_trim.b  = parser.value_float();
51
     if (parser.seen('Z')) delta_tower_angle_trim.c  = parser.value_float();
54
     if (parser.seen('Z')) delta_tower_angle_trim.c  = parser.value_float();
55
+    if (parser.seen('A')) delta_diagonal_rod_trim.a = parser.value_float();
56
+    if (parser.seen('B')) delta_diagonal_rod_trim.b = parser.value_float();
57
+    if (parser.seen('C')) delta_diagonal_rod_trim.c = parser.value_float();
52
     recalc_delta_settings();
58
     recalc_delta_settings();
53
   }
59
   }
54
 
60
 

+ 11
- 4
Marlin/src/module/configuration_store.cpp View File

257
   //
257
   //
258
   #if ENABLED(DELTA)
258
   #if ENABLED(DELTA)
259
     float delta_height;                                 // M666 H
259
     float delta_height;                                 // M666 H
260
-    abc_float_t delta_endstop_adj;                      // M666 XYZ
260
+    abc_float_t delta_endstop_adj;                      // M666 X Y Z
261
     float delta_radius,                                 // M665 R
261
     float delta_radius,                                 // M665 R
262
           delta_diagonal_rod,                           // M665 L
262
           delta_diagonal_rod,                           // M665 L
263
           delta_segments_per_second;                    // M665 S
263
           delta_segments_per_second;                    // M665 S
264
-    abc_float_t delta_tower_angle_trim;                 // M665 XYZ
264
+    abc_float_t delta_tower_angle_trim,                 // M665 X Y Z
265
+                delta_diagonal_rod_trim;                // M665 A B C
265
   #elif HAS_EXTRA_ENDSTOPS
266
   #elif HAS_EXTRA_ENDSTOPS
266
     float x2_endstop_adj,                               // M666 X
267
     float x2_endstop_adj,                               // M666 X
267
           y2_endstop_adj,                               // M666 Y
268
           y2_endstop_adj,                               // M666 Y
775
         EEPROM_WRITE(delta_diagonal_rod);        // 1 float
776
         EEPROM_WRITE(delta_diagonal_rod);        // 1 float
776
         EEPROM_WRITE(delta_segments_per_second); // 1 float
777
         EEPROM_WRITE(delta_segments_per_second); // 1 float
777
         EEPROM_WRITE(delta_tower_angle_trim);    // 3 floats
778
         EEPROM_WRITE(delta_tower_angle_trim);    // 3 floats
779
+        EEPROM_WRITE(delta_diagonal_rod_trim);   // 3 floats
778
 
780
 
779
       #elif HAS_EXTRA_ENDSTOPS
781
       #elif HAS_EXTRA_ENDSTOPS
780
 
782
 
1638
           EEPROM_READ(delta_diagonal_rod);        // 1 float
1640
           EEPROM_READ(delta_diagonal_rod);        // 1 float
1639
           EEPROM_READ(delta_segments_per_second); // 1 float
1641
           EEPROM_READ(delta_segments_per_second); // 1 float
1640
           EEPROM_READ(delta_tower_angle_trim);    // 3 floats
1642
           EEPROM_READ(delta_tower_angle_trim);    // 3 floats
1643
+          EEPROM_READ(delta_diagonal_rod_trim);   // 3 floats
1641
 
1644
 
1642
         #elif HAS_EXTRA_ENDSTOPS
1645
         #elif HAS_EXTRA_ENDSTOPS
1643
 
1646
 
2510
   //
2513
   //
2511
 
2514
 
2512
   #if ENABLED(DELTA)
2515
   #if ENABLED(DELTA)
2513
-    const abc_float_t adj = DELTA_ENDSTOP_ADJ, dta = DELTA_TOWER_ANGLE_TRIM;
2516
+    const abc_float_t adj = DELTA_ENDSTOP_ADJ, dta = DELTA_TOWER_ANGLE_TRIM, ddr = DELTA_DIAGONAL_ROD_TRIM_TOWER;
2514
     delta_height = DELTA_HEIGHT;
2517
     delta_height = DELTA_HEIGHT;
2515
     delta_endstop_adj = adj;
2518
     delta_endstop_adj = adj;
2516
     delta_radius = DELTA_RADIUS;
2519
     delta_radius = DELTA_RADIUS;
2517
     delta_diagonal_rod = DELTA_DIAGONAL_ROD;
2520
     delta_diagonal_rod = DELTA_DIAGONAL_ROD;
2518
     delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
2521
     delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
2519
     delta_tower_angle_trim = dta;
2522
     delta_tower_angle_trim = dta;
2523
+    delta_diagonal_rod_trim = ddr;
2520
   #endif
2524
   #endif
2521
 
2525
 
2522
   #if ENABLED(X_DUAL_ENDSTOPS)
2526
   #if ENABLED(X_DUAL_ENDSTOPS)
3065
         , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c)
3069
         , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c)
3066
       );
3070
       );
3067
 
3071
 
3068
-      CONFIG_ECHO_HEADING("Delta settings: L<diagonal_rod> R<radius> H<height> S<segments_per_s> XYZ<tower angle corrections>");
3072
+      CONFIG_ECHO_HEADING("Delta settings: L<diagonal rod> R<radius> H<height> S<segments per sec> XYZ<tower angle trim> ABC<rod trim>");
3069
       CONFIG_ECHO_START();
3073
       CONFIG_ECHO_START();
3070
       SERIAL_ECHOLNPAIR_P(
3074
       SERIAL_ECHOLNPAIR_P(
3071
           PSTR("  M665 L"), LINEAR_UNIT(delta_diagonal_rod)
3075
           PSTR("  M665 L"), LINEAR_UNIT(delta_diagonal_rod)
3075
         , SP_X_STR, LINEAR_UNIT(delta_tower_angle_trim.a)
3079
         , SP_X_STR, LINEAR_UNIT(delta_tower_angle_trim.a)
3076
         , SP_Y_STR, LINEAR_UNIT(delta_tower_angle_trim.b)
3080
         , SP_Y_STR, LINEAR_UNIT(delta_tower_angle_trim.b)
3077
         , SP_Z_STR, LINEAR_UNIT(delta_tower_angle_trim.c)
3081
         , SP_Z_STR, LINEAR_UNIT(delta_tower_angle_trim.c)
3082
+        , PSTR(" A"), LINEAR_UNIT(delta_diagonal_rod_trim.a)
3083
+        , PSTR(" B"), LINEAR_UNIT(delta_diagonal_rod_trim.b)
3084
+        , PSTR(" C"), LINEAR_UNIT(delta_diagonal_rod_trim.c)
3078
       );
3085
       );
3079
 
3086
 
3080
     #elif HAS_EXTRA_ENDSTOPS
3087
     #elif HAS_EXTRA_ENDSTOPS

+ 5
- 5
Marlin/src/module/delta.cpp View File

59
 xy_float_t delta_tower[ABC];
59
 xy_float_t delta_tower[ABC];
60
 abc_float_t delta_diagonal_rod_2_tower;
60
 abc_float_t delta_diagonal_rod_2_tower;
61
 float delta_clip_start_height = Z_MAX_POS;
61
 float delta_clip_start_height = Z_MAX_POS;
62
+abc_float_t delta_diagonal_rod_trim;
62
 
63
 
63
 float delta_safe_distance_from_top();
64
 float delta_safe_distance_from_top();
64
 
65
 
67
  * settings have been changed (e.g., by M665).
68
  * settings have been changed (e.g., by M665).
68
  */
69
  */
69
 void recalc_delta_settings() {
70
 void recalc_delta_settings() {
70
-  constexpr abc_float_t trt = DELTA_RADIUS_TRIM_TOWER,
71
-                        drt = DELTA_DIAGONAL_ROD_TRIM_TOWER;
71
+  constexpr abc_float_t trt = DELTA_RADIUS_TRIM_TOWER;
72
   delta_tower[A_AXIS].set(cos(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a), // front left tower
72
   delta_tower[A_AXIS].set(cos(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a), // front left tower
73
                           sin(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a));
73
                           sin(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a));
74
   delta_tower[B_AXIS].set(cos(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b), // front right tower
74
   delta_tower[B_AXIS].set(cos(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b), // front right tower
75
                           sin(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b));
75
                           sin(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b));
76
   delta_tower[C_AXIS].set(cos(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c), // back middle tower
76
   delta_tower[C_AXIS].set(cos(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c), // back middle tower
77
                           sin(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c));
77
                           sin(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c));
78
-  delta_diagonal_rod_2_tower.set(sq(delta_diagonal_rod + drt.a),
79
-                                 sq(delta_diagonal_rod + drt.b),
80
-                                 sq(delta_diagonal_rod + drt.c));
78
+  delta_diagonal_rod_2_tower.set(sq(delta_diagonal_rod + delta_diagonal_rod_trim.a),
79
+                                 sq(delta_diagonal_rod + delta_diagonal_rod_trim.b),
80
+                                 sq(delta_diagonal_rod + delta_diagonal_rod_trim.c));
81
   update_software_endstops(Z_AXIS);
81
   update_software_endstops(Z_AXIS);
82
   set_all_unhomed();
82
   set_all_unhomed();
83
 }
83
 }

+ 1
- 0
Marlin/src/module/delta.h View File

37
 extern xy_float_t delta_tower[ABC];
37
 extern xy_float_t delta_tower[ABC];
38
 extern abc_float_t delta_diagonal_rod_2_tower;
38
 extern abc_float_t delta_diagonal_rod_2_tower;
39
 extern float delta_clip_start_height;
39
 extern float delta_clip_start_height;
40
+extern abc_float_t delta_diagonal_rod_trim;
40
 
41
 
41
 /**
42
 /**
42
  * Recalculate factors used for delta kinematics whenever
43
  * Recalculate factors used for delta kinematics whenever

Loading…
Cancel
Save