Переглянути джерело

Added support for delta tower angle corrections.

Jimmy Envall 7 роки тому
джерело
коміт
00b6b3da79
4 змінених файлів з 48 додано та 15 видалено
  1. 10
    1
      Marlin/Conditionals_post.h
  2. 3
    0
      Marlin/Marlin.h
  3. 18
    12
      Marlin/Marlin_main.cpp
  4. 17
    2
      Marlin/configuration_store.cpp

+ 10
- 1
Marlin/Conditionals_post.h Переглянути файл

630
   #endif
630
   #endif
631
 
631
 
632
   /**
632
   /**
633
-   * Delta radius/rod trimmers
633
+   * Delta radius/rod trimmers/angle trimmers
634
    */
634
    */
635
   #if ENABLED(DELTA)
635
   #if ENABLED(DELTA)
636
     #ifndef DELTA_RADIUS_TRIM_TOWER_1
636
     #ifndef DELTA_RADIUS_TRIM_TOWER_1
651
     #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_3
651
     #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_3
652
       #define DELTA_DIAGONAL_ROD_TRIM_TOWER_3 0.0
652
       #define DELTA_DIAGONAL_ROD_TRIM_TOWER_3 0.0
653
     #endif
653
     #endif
654
+    #ifndef DELTA_TOWER_ANGLE_TRIM_1
655
+      #define DELTA_TOWER_ANGLE_TRIM_1 0.0
656
+    #endif
657
+    #ifndef DELTA_TOWER_ANGLE_TRIM_2
658
+      #define DELTA_TOWER_ANGLE_TRIM_2 0.0
659
+    #endif
660
+    #ifndef DELTA_TOWER_ANGLE_TRIM_3
661
+      #define DELTA_TOWER_ANGLE_TRIM_3 0.0
662
+    #endif
654
   #endif
663
   #endif
655
 
664
 
656
   /**
665
   /**

+ 3
- 0
Marlin/Marlin.h Переглянути файл

335
                delta_diagonal_rod_trim_tower_1,
335
                delta_diagonal_rod_trim_tower_1,
336
                delta_diagonal_rod_trim_tower_2,
336
                delta_diagonal_rod_trim_tower_2,
337
                delta_diagonal_rod_trim_tower_3,
337
                delta_diagonal_rod_trim_tower_3,
338
+               delta_tower_angle_trim_1,
339
+               delta_tower_angle_trim_2,
340
+               delta_tower_angle_trim_3,
338
                delta_clip_start_height;
341
                delta_clip_start_height;
339
   void recalc_delta_settings(float radius, float diagonal_rod);
342
   void recalc_delta_settings(float radius, float diagonal_rod);
340
 #elif IS_SCARA
343
 #elif IS_SCARA

+ 18
- 12
Marlin/Marlin_main.cpp Переглянути файл

564
 
564
 
565
   // these are the default values, can be overriden with M665
565
   // these are the default values, can be overriden with M665
566
   float delta_radius = DELTA_RADIUS,
566
   float delta_radius = DELTA_RADIUS,
567
-        delta_tower1_x = -SIN_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
568
-        delta_tower1_y = -COS_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
569
-        delta_tower2_x =  SIN_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
570
-        delta_tower2_y = -COS_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
571
-        delta_tower3_x = 0,                                                    // back middle tower
572
-        delta_tower3_y = (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),
567
+        delta_tower_angle_trim_1 = DELTA_TOWER_ANGLE_TRIM_1,
568
+        delta_tower_angle_trim_2 = DELTA_TOWER_ANGLE_TRIM_2,
569
+        delta_tower_angle_trim_3 = DELTA_TOWER_ANGLE_TRIM_3,
570
+        delta_tower1_x = -sin( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
571
+        delta_tower1_y = -cos( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
572
+        delta_tower2_x =  sin( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
573
+        delta_tower2_y = -cos( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
574
+        delta_tower3_x = -sin( (     delta_tower_angle_trim_3) * PI/180),                                                    // back middle tower
575
+        delta_tower3_y =  cos( (     delta_tower_angle_trim_3) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),
573
         delta_diagonal_rod = DELTA_DIAGONAL_ROD,
576
         delta_diagonal_rod = DELTA_DIAGONAL_ROD,
574
         delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1,
577
         delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1,
575
         delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2,
578
         delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2,
6337
     if (code_seen('A')) delta_diagonal_rod_trim_tower_1 = code_value_linear_units();
6340
     if (code_seen('A')) delta_diagonal_rod_trim_tower_1 = code_value_linear_units();
6338
     if (code_seen('B')) delta_diagonal_rod_trim_tower_2 = code_value_linear_units();
6341
     if (code_seen('B')) delta_diagonal_rod_trim_tower_2 = code_value_linear_units();
6339
     if (code_seen('C')) delta_diagonal_rod_trim_tower_3 = code_value_linear_units();
6342
     if (code_seen('C')) delta_diagonal_rod_trim_tower_3 = code_value_linear_units();
6343
+    if (code_seen('I')) delta_tower_angle_trim_1 = code_value_linear_units();
6344
+    if (code_seen('J')) delta_tower_angle_trim_2 = code_value_linear_units();
6345
+    if (code_seen('K')) delta_tower_angle_trim_3 = code_value_linear_units();
6340
     recalc_delta_settings(delta_radius, delta_diagonal_rod);
6346
     recalc_delta_settings(delta_radius, delta_diagonal_rod);
6341
   }
6347
   }
6342
   /**
6348
   /**
9140
    * settings have been changed (e.g., by M665).
9146
    * settings have been changed (e.g., by M665).
9141
    */
9147
    */
9142
   void recalc_delta_settings(float radius, float diagonal_rod) {
9148
   void recalc_delta_settings(float radius, float diagonal_rod) {
9143
-    delta_tower1_x = -SIN_60 * (radius + DELTA_RADIUS_TRIM_TOWER_1);  // front left tower
9144
-    delta_tower1_y = -COS_60 * (radius + DELTA_RADIUS_TRIM_TOWER_1);
9145
-    delta_tower2_x =  SIN_60 * (radius + DELTA_RADIUS_TRIM_TOWER_2);  // front right tower
9146
-    delta_tower2_y = -COS_60 * (radius + DELTA_RADIUS_TRIM_TOWER_2);
9147
-    delta_tower3_x = 0.0;                                             // back middle tower
9148
-    delta_tower3_y = (radius + DELTA_RADIUS_TRIM_TOWER_3);
9149
+    delta_tower1_x = -sin( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
9150
+    delta_tower1_y = -cos( (60 - delta_tower_angle_trim_1) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
9151
+    delta_tower2_x =  sin( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
9152
+    delta_tower2_y = -cos( (60 + delta_tower_angle_trim_2) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
9153
+    delta_tower3_x = -sin( (     delta_tower_angle_trim_3) * PI/180),                                              // back middle tower
9154
+    delta_tower3_y =  cos( (     delta_tower_angle_trim_3) * PI/180) * (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),
9149
     delta_diagonal_rod_2_tower_1 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_1);
9155
     delta_diagonal_rod_2_tower_1 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_1);
9150
     delta_diagonal_rod_2_tower_2 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_2);
9156
     delta_diagonal_rod_2_tower_2 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_2);
9151
     delta_diagonal_rod_2_tower_3 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_3);
9157
     delta_diagonal_rod_2_tower_3 = sq(diagonal_rod + delta_diagonal_rod_trim_tower_3);

+ 17
- 2
Marlin/configuration_store.cpp Переглянути файл

84
  *  308  G29 L F   bilinear_start                  (int x2)
84
  *  308  G29 L F   bilinear_start                  (int x2)
85
  *  312            bed_level_grid[][]              (float x9, up to float x256) +988
85
  *  312            bed_level_grid[][]              (float x9, up to float x256) +988
86
  *
86
  *
87
- * DELTA (if deltabot):                            36 bytes
87
+ * DELTA (if deltabot):                            48 bytes
88
  *  348  M666 XYZ  endstop_adj                     (float x3)
88
  *  348  M666 XYZ  endstop_adj                     (float x3)
89
  *  360  M665 R    delta_radius                    (float)
89
  *  360  M665 R    delta_radius                    (float)
90
  *  364  M665 L    delta_diagonal_rod              (float)
90
  *  364  M665 L    delta_diagonal_rod              (float)
92
  *  372  M665 A    delta_diagonal_rod_trim_tower_1 (float)
92
  *  372  M665 A    delta_diagonal_rod_trim_tower_1 (float)
93
  *  376  M665 B    delta_diagonal_rod_trim_tower_2 (float)
93
  *  376  M665 B    delta_diagonal_rod_trim_tower_2 (float)
94
  *  380  M665 C    delta_diagonal_rod_trim_tower_3 (float)
94
  *  380  M665 C    delta_diagonal_rod_trim_tower_3 (float)
95
+ *  384  M665 I    delta_tower_angle_trim_1        (float)
96
+ *  388  M665 J    delta_tower_angle_trim_2        (float)
97
+ *  392  M665 K    delta_tower_angle_trim_3        (float)
95
  *
98
  *
96
  * Z_DUAL_ENDSTOPS:                                4 bytes
99
  * Z_DUAL_ENDSTOPS:                                4 bytes
97
  *  384  M666 Z    z_endstop_adj                   (float)
100
  *  384  M666 Z    z_endstop_adj                   (float)
356
       EEPROM_WRITE(delta_diagonal_rod_trim_tower_1);  // 1 float
359
       EEPROM_WRITE(delta_diagonal_rod_trim_tower_1);  // 1 float
357
       EEPROM_WRITE(delta_diagonal_rod_trim_tower_2);  // 1 float
360
       EEPROM_WRITE(delta_diagonal_rod_trim_tower_2);  // 1 float
358
       EEPROM_WRITE(delta_diagonal_rod_trim_tower_3);  // 1 float
361
       EEPROM_WRITE(delta_diagonal_rod_trim_tower_3);  // 1 float
362
+      EEPROM_WRITE(delta_tower_angle_trim_1); // 1 float
363
+      EEPROM_WRITE(delta_tower_angle_trim_2); // 1 float
364
+      EEPROM_WRITE(delta_tower_angle_trim_3); // 1 float
359
     #elif ENABLED(Z_DUAL_ENDSTOPS)
365
     #elif ENABLED(Z_DUAL_ENDSTOPS)
360
       EEPROM_WRITE(z_endstop_adj);            // 1 float
366
       EEPROM_WRITE(z_endstop_adj);            // 1 float
361
       dummy = 0.0f;
367
       dummy = 0.0f;
681
         EEPROM_READ(delta_diagonal_rod_trim_tower_1);  // 1 float
687
         EEPROM_READ(delta_diagonal_rod_trim_tower_1);  // 1 float
682
         EEPROM_READ(delta_diagonal_rod_trim_tower_2);  // 1 float
688
         EEPROM_READ(delta_diagonal_rod_trim_tower_2);  // 1 float
683
         EEPROM_READ(delta_diagonal_rod_trim_tower_3);  // 1 float
689
         EEPROM_READ(delta_diagonal_rod_trim_tower_3);  // 1 float
690
+        EEPROM_READ(delta_tower_angle_trim_1); // 1 float
691
+        EEPROM_READ(delta_tower_angle_trim_2); // 1 float
692
+        EEPROM_READ(delta_tower_angle_trim_3); // 1 float
684
       #elif ENABLED(Z_DUAL_ENDSTOPS)
693
       #elif ENABLED(Z_DUAL_ENDSTOPS)
685
         EEPROM_READ(z_endstop_adj);
694
         EEPROM_READ(z_endstop_adj);
686
         dummy = 0.0f;
695
         dummy = 0.0f;
909
     delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1;
918
     delta_diagonal_rod_trim_tower_1 = DELTA_DIAGONAL_ROD_TRIM_TOWER_1;
910
     delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2;
919
     delta_diagonal_rod_trim_tower_2 = DELTA_DIAGONAL_ROD_TRIM_TOWER_2;
911
     delta_diagonal_rod_trim_tower_3 = DELTA_DIAGONAL_ROD_TRIM_TOWER_3;
920
     delta_diagonal_rod_trim_tower_3 = DELTA_DIAGONAL_ROD_TRIM_TOWER_3;
921
+    delta_tower_angle_trim_1 = DELTA_TOWER_ANGLE_TRIM_1;
922
+    delta_tower_angle_trim_2 = DELTA_TOWER_ANGLE_TRIM_2;
923
+    delta_tower_angle_trim_3 = DELTA_TOWER_ANGLE_TRIM_3;
912
   #elif ENABLED(Z_DUAL_ENDSTOPS)
924
   #elif ENABLED(Z_DUAL_ENDSTOPS)
913
     z_endstop_adj = 0;
925
     z_endstop_adj = 0;
914
   #endif
926
   #endif
1179
       SERIAL_EOL;
1191
       SERIAL_EOL;
1180
       CONFIG_ECHO_START;
1192
       CONFIG_ECHO_START;
1181
       if (!forReplay) {
1193
       if (!forReplay) {
1182
-        SERIAL_ECHOLNPGM("Delta settings: L=diagonal_rod, R=radius, S=segments_per_second, ABC=diagonal_rod_trim_tower_[123]");
1194
+        SERIAL_ECHOLNPGM("Delta settings: L=diagonal_rod, R=radius, S=segments_per_second, ABC=diagonal_rod_trim_tower_[123], IJK=tower_angle_trim[123]");
1183
         CONFIG_ECHO_START;
1195
         CONFIG_ECHO_START;
1184
       }
1196
       }
1185
       SERIAL_ECHOPAIR("  M665 L", delta_diagonal_rod);
1197
       SERIAL_ECHOPAIR("  M665 L", delta_diagonal_rod);
1188
       SERIAL_ECHOPAIR(" A", delta_diagonal_rod_trim_tower_1);
1200
       SERIAL_ECHOPAIR(" A", delta_diagonal_rod_trim_tower_1);
1189
       SERIAL_ECHOPAIR(" B", delta_diagonal_rod_trim_tower_2);
1201
       SERIAL_ECHOPAIR(" B", delta_diagonal_rod_trim_tower_2);
1190
       SERIAL_ECHOPAIR(" C", delta_diagonal_rod_trim_tower_3);
1202
       SERIAL_ECHOPAIR(" C", delta_diagonal_rod_trim_tower_3);
1203
+      SERIAL_ECHOPAIR(" I", delta_tower_angle_trim_1);
1204
+      SERIAL_ECHOPAIR(" J", delta_tower_angle_trim_2);
1205
+      SERIAL_ECHOPAIR(" K", delta_tower_angle_trim_3);
1191
       SERIAL_EOL;
1206
       SERIAL_EOL;
1192
     #elif ENABLED(Z_DUAL_ENDSTOPS)
1207
     #elif ENABLED(Z_DUAL_ENDSTOPS)
1193
       CONFIG_ECHO_START;
1208
       CONFIG_ECHO_START;

Завантаження…
Відмінити
Зберегти