Browse Source

Tower angles

Adding '7-point' tower angle correction calibration
LVD-AC 8 years ago
parent
commit
004928148c
2 changed files with 47 additions and 12 deletions
  1. 46
    11
      Marlin/Marlin_main.cpp
  2. 1
    1
      Marlin/configuration_store.cpp

+ 46
- 11
Marlin/Marlin_main.cpp View File

5021
 
5021
 
5022
       float e_old[XYZ],
5022
       float e_old[XYZ],
5023
             dr_old = delta_radius,
5023
             dr_old = delta_radius,
5024
-            zh_old = home_offset[Z_AXIS];
5024
+            zh_old = home_offset[Z_AXIS],
5025
+            alpha_old = delta_tower_angle_trim[A_AXIS],
5026
+            beta_old = delta_tower_angle_trim[B_AXIS];
5025
       COPY(e_old,endstop_adj);
5027
       COPY(e_old,endstop_adj);
5026
 
5028
 
5027
       // print settings
5029
       // print settings
5032
       SERIAL_EOL;
5034
       SERIAL_EOL;
5033
       LCD_MESSAGEPGM("Checking... AC");
5035
       LCD_MESSAGEPGM("Checking... AC");
5034
 
5036
 
5035
-      SERIAL_PROTOCOLPAIR("Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
5037
+      SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
5036
       if (abs(probe_points) > 1) {
5038
       if (abs(probe_points) > 1) {
5037
         SERIAL_PROTOCOLPGM("    Ex:");
5039
         SERIAL_PROTOCOLPGM("    Ex:");
5038
         if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
5040
         if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
5046
         SERIAL_PROTOCOLPAIR("    Radius:", delta_radius);
5048
         SERIAL_PROTOCOLPAIR("    Radius:", delta_radius);
5047
       }
5049
       }
5048
       SERIAL_EOL;
5050
       SERIAL_EOL;
5051
+      if (probe_points > 2) {
5052
+        SERIAL_PROTOCOLPGM(".Tower angle :    Tx:");
5053
+        if (delta_tower_angle_trim[A_AXIS] >= 0) SERIAL_CHAR('+');
5054
+        SERIAL_PROTOCOL_F(delta_tower_angle_trim[A_AXIS], 2);
5055
+        SERIAL_PROTOCOLPGM("  Ty:");
5056
+        if (delta_tower_angle_trim[B_AXIS] >= 0) SERIAL_CHAR('+');
5057
+        SERIAL_PROTOCOL_F(delta_tower_angle_trim[B_AXIS], 2);
5058
+        SERIAL_PROTOCOLPGM("  Tz:+0.00");
5059
+        SERIAL_EOL;
5060
+      }
5049
 
5061
 
5050
       #if ENABLED(Z_PROBE_SLED)
5062
       #if ENABLED(Z_PROBE_SLED)
5051
         DEPLOY_PROBE();
5063
         DEPLOY_PROBE();
5121
           COPY(e_old, endstop_adj);
5133
           COPY(e_old, endstop_adj);
5122
           dr_old = delta_radius;
5134
           dr_old = delta_radius;
5123
           zh_old = home_offset[Z_AXIS];
5135
           zh_old = home_offset[Z_AXIS];
5136
+          alpha_old = delta_tower_angle_trim[A_AXIS];
5137
+          beta_old = delta_tower_angle_trim[B_AXIS];
5124
 
5138
 
5125
-          float e_delta[XYZ] = { 0.0 }, r_delta = 0.0;
5139
+          float e_delta[XYZ] = { 0.0 }, r_delta = 0.0,
5140
+                t_alpha = 0.0, t_beta = 0.0;
5126
           const float r_diff = delta_radius - delta_calibration_radius,
5141
           const float r_diff = delta_radius - delta_calibration_radius,
5127
                       h_factor = 1.00 + r_diff * 0.001,
5142
                       h_factor = 1.00 + r_diff * 0.001,
5128
-                      r_factor = -(1.75 + 0.005 * r_diff + 0.001 * sq(r_diff)); //2.25 for r_diff = 20mm
5143
+                      r_factor = -(1.75 + 0.005 * r_diff + 0.001 * sq(r_diff)), //2.25 for r_diff = 20mm
5144
+                      a_factor = 100.0 / delta_calibration_radius;
5129
 
5145
 
5130
           #define ZP(N,I) ((N) * z_at_pt[I])
5146
           #define ZP(N,I) ((N) * z_at_pt[I])
5131
           #define Z1000(I) ZP(1.00, I)
5147
           #define Z1000(I) ZP(1.00, I)
5136
           #define Z2250(I) ZP(r_factor, I)
5152
           #define Z2250(I) ZP(r_factor, I)
5137
           #define Z0750(I) ZP(r_factor / 3.00, I)
5153
           #define Z0750(I) ZP(r_factor / 3.00, I)
5138
           #define Z0375(I) ZP(r_factor / 6.00, I)
5154
           #define Z0375(I) ZP(r_factor / 6.00, I)
5155
+          #define Z0444(I) ZP(a_factor * 4.0 / 9.0, I)
5156
+          #define Z0888(I) ZP(a_factor * 8.0 / 9.0, I)
5139
 
5157
 
5140
           switch (probe_points) {
5158
           switch (probe_points) {
5141
             case 1:
5159
             case 1:
5151
               break;
5169
               break;
5152
 
5170
 
5153
             case -2:
5171
             case -2:
5154
-              e_delta[X_AXIS] = Z1050(0) - Z0700(7) + Z0350(11) + Z0350(3);
5155
-              e_delta[Y_AXIS] = Z1050(0) + Z0350(7) - Z0700(11) + Z0350(3);
5156
-              e_delta[Z_AXIS] = Z1050(0) + Z0350(7) + Z0350(11) - Z0700(3);
5157
-              r_delta         = Z2250(0) - Z0750(7) - Z0750(11) - Z0750(3);
5172
+              e_delta[X_AXIS] = Z1050(0)                                  - Z0700(7) + Z0350(11) + Z0350(3);
5173
+              e_delta[Y_AXIS] = Z1050(0)                                  + Z0350(7) - Z0700(11) + Z0350(3);
5174
+              e_delta[Z_AXIS] = Z1050(0)                                  + Z0350(7) + Z0350(11) - Z0700(3);
5175
+              r_delta         = Z2250(0)                                  - Z0750(7) - Z0750(11) - Z0750(3);
5158
               break;
5176
               break;
5159
 
5177
 
5160
             default:
5178
             default:
5162
               e_delta[Y_AXIS] = Z1050(0) - Z0175(1) + Z0350(5) - Z0175(9) + Z0175(7) - Z0350(11) + Z0175(3);
5180
               e_delta[Y_AXIS] = Z1050(0) - Z0175(1) + Z0350(5) - Z0175(9) + Z0175(7) - Z0350(11) + Z0175(3);
5163
               e_delta[Z_AXIS] = Z1050(0) - Z0175(1) - Z0175(5) + Z0350(9) + Z0175(7) + Z0175(11) - Z0350(3);
5181
               e_delta[Z_AXIS] = Z1050(0) - Z0175(1) - Z0175(5) + Z0350(9) + Z0175(7) + Z0175(11) - Z0350(3);
5164
               r_delta         = Z2250(0) - Z0375(1) - Z0375(5) - Z0375(9) - Z0375(7) - Z0375(11) - Z0375(3);
5182
               r_delta         = Z2250(0) - Z0375(1) - Z0375(5) - Z0375(9) - Z0375(7) - Z0375(11) - Z0375(3);
5183
+              t_alpha         =          + Z0444(1) - Z0888(5) + Z0444(9) + Z0444(7) - Z0888(11) + Z0444(3);
5184
+              t_beta          =          - Z0888(1) + Z0444(5) + Z0444(9) - Z0888(7) + Z0444(11) + Z0444(3);
5165
               break;
5185
               break;
5166
           }
5186
           }
5167
 
5187
 
5173
           home_offset[Z_AXIS] -= z_temp;
5193
           home_offset[Z_AXIS] -= z_temp;
5174
           LOOP_XYZ(i) endstop_adj[i] -= z_temp;
5194
           LOOP_XYZ(i) endstop_adj[i] -= z_temp;
5175
 
5195
 
5196
+          delta_tower_angle_trim[A_AXIS] += t_alpha;
5197
+          delta_tower_angle_trim[B_AXIS] -= t_beta;
5198
+
5176
           recalc_delta_settings(delta_radius, delta_diagonal_rod);
5199
           recalc_delta_settings(delta_radius, delta_diagonal_rod);
5177
         }
5200
         }
5178
         else { // !iterate
5201
         else { // !iterate
5180
           COPY(endstop_adj, e_old);
5203
           COPY(endstop_adj, e_old);
5181
           delta_radius = dr_old;
5204
           delta_radius = dr_old;
5182
           home_offset[Z_AXIS] = zh_old;
5205
           home_offset[Z_AXIS] = zh_old;
5206
+          delta_tower_angle_trim[A_AXIS] = alpha_old;
5207
+          delta_tower_angle_trim[B_AXIS] = beta_old;
5183
 
5208
 
5184
           recalc_delta_settings(delta_radius, delta_diagonal_rod);
5209
           recalc_delta_settings(delta_radius, delta_diagonal_rod);
5185
         }
5210
         }
5219
         if (test_precision != 0.0) {            // !forced end
5244
         if (test_precision != 0.0) {            // !forced end
5220
           if (zero_std_dev >= test_precision) { // end iterations
5245
           if (zero_std_dev >= test_precision) { // end iterations
5221
             SERIAL_PROTOCOLPGM("Calibration OK");
5246
             SERIAL_PROTOCOLPGM("Calibration OK");
5222
-            SERIAL_PROTOCOLLNPGM("                                   rolling back 1");
5247
+            SERIAL_PROTOCOLLNPGM("                                    rolling back.");
5223
             LCD_MESSAGEPGM("Calibration OK");
5248
             LCD_MESSAGEPGM("Calibration OK");
5224
             SERIAL_EOL;
5249
             SERIAL_EOL;
5225
           }
5250
           }
5228
             if (iterations < 31)
5253
             if (iterations < 31)
5229
               sprintf_P(mess, PSTR("Iteration : %02i"), (int)iterations);
5254
               sprintf_P(mess, PSTR("Iteration : %02i"), (int)iterations);
5230
             SERIAL_PROTOCOL(mess);
5255
             SERIAL_PROTOCOL(mess);
5231
-            SERIAL_PROTOCOLPGM("                                   std dev:");
5256
+            SERIAL_PROTOCOLPGM("                                    std dev:");
5232
             SERIAL_PROTOCOL_F(zero_std_dev, 3);
5257
             SERIAL_PROTOCOL_F(zero_std_dev, 3);
5233
             SERIAL_EOL;
5258
             SERIAL_EOL;
5234
             lcd_setstatus(mess);
5259
             lcd_setstatus(mess);
5235
           }
5260
           }
5236
-          SERIAL_PROTOCOLPAIR("Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
5261
+          SERIAL_PROTOCOLPAIR(".Height:", DELTA_HEIGHT + home_offset[Z_AXIS]);
5237
           if (abs(probe_points) > 1) {
5262
           if (abs(probe_points) > 1) {
5238
             SERIAL_PROTOCOLPGM("    Ex:");
5263
             SERIAL_PROTOCOLPGM("    Ex:");
5239
             if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
5264
             if (endstop_adj[A_AXIS] >= 0) SERIAL_CHAR('+');
5247
             SERIAL_PROTOCOLPAIR("    Radius:", delta_radius);
5272
             SERIAL_PROTOCOLPAIR("    Radius:", delta_radius);
5248
           }
5273
           }
5249
           SERIAL_EOL;
5274
           SERIAL_EOL;
5275
+          if (probe_points > 2) {
5276
+            SERIAL_PROTOCOLPGM(".Tower angle :    Tx:");
5277
+            if (delta_tower_angle_trim[A_AXIS] >= 0) SERIAL_CHAR('+');
5278
+            SERIAL_PROTOCOL_F(delta_tower_angle_trim[A_AXIS], 2);
5279
+            SERIAL_PROTOCOLPGM("  Ty:");
5280
+            if (delta_tower_angle_trim[B_AXIS] >= 0) SERIAL_CHAR('+');
5281
+            SERIAL_PROTOCOL_F(delta_tower_angle_trim[B_AXIS], 2);
5282
+            SERIAL_PROTOCOLPGM("  Tz:+0.00");
5283
+            SERIAL_EOL;
5284
+          }
5250
           if (zero_std_dev >= test_precision)
5285
           if (zero_std_dev >= test_precision)
5251
             SERIAL_PROTOCOLLNPGM("save with M500 and/or copy to configuration.h");
5286
             SERIAL_PROTOCOLLNPGM("save with M500 and/or copy to configuration.h");
5252
         }
5287
         }

+ 1
- 1
Marlin/configuration_store.cpp View File

1477
       SERIAL_ECHOPAIR(" R", LINEAR_UNIT(delta_radius));
1477
       SERIAL_ECHOPAIR(" R", LINEAR_UNIT(delta_radius));
1478
       SERIAL_ECHOPAIR(" H", LINEAR_UNIT(DELTA_HEIGHT + home_offset[Z_AXIS]));
1478
       SERIAL_ECHOPAIR(" H", LINEAR_UNIT(DELTA_HEIGHT + home_offset[Z_AXIS]));
1479
       SERIAL_ECHOPAIR(" S", delta_segments_per_second);
1479
       SERIAL_ECHOPAIR(" S", delta_segments_per_second);
1480
-      SERIAL_ECHOPAIR(" B", LINEAR_UNIT(delta_calibration_radius);
1480
+      SERIAL_ECHOPAIR(" B", LINEAR_UNIT(delta_calibration_radius));
1481
       SERIAL_ECHOPAIR(" X", LINEAR_UNIT(delta_tower_angle_trim[A_AXIS]));
1481
       SERIAL_ECHOPAIR(" X", LINEAR_UNIT(delta_tower_angle_trim[A_AXIS]));
1482
       SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(delta_tower_angle_trim[B_AXIS]));
1482
       SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(delta_tower_angle_trim[B_AXIS]));
1483
       SERIAL_ECHOPAIR(" Z", 0.00);
1483
       SERIAL_ECHOPAIR(" Z", 0.00);

Loading…
Cancel
Save