@@ -71,9 +71,9 @@ float lcd_probe_pt(const xy_pos_t &xy);
71
71
72
72
void ac_home () {
73
73
endstops.enable (true );
74
- TERN_ (HAS_DELTA_SENSORLESS_PROBING, probe .set_homing_current (true ));
74
+ TERN_ (SENSORLESS_HOMING, endstops .set_homing_current (true ));
75
75
home_delta ();
76
- TERN_ (HAS_DELTA_SENSORLESS_PROBING, probe .set_homing_current (false ));
76
+ TERN_ (SENSORLESS_HOMING, endstops .set_homing_current (false ));
77
77
endstops.not_homing ();
78
78
}
79
79
@@ -390,6 +390,8 @@ static float auto_tune_a(const float dcr) {
390
390
* X Don't activate stallguard on X.
391
391
* Y Don't activate stallguard on Y.
392
392
* Z Don't activate stallguard on Z.
393
+ *
394
+ * S Save offset_sensorless_adj
393
395
*/
394
396
void GcodeSuite::G33 () {
395
397
@@ -411,7 +413,8 @@ void GcodeSuite::G33() {
411
413
dcr -= probe_at_offset ? _MAX (total_offset, PROBING_MARGIN) : total_offset;
412
414
#endif
413
415
NOMORE (dcr, DELTA_PRINTABLE_RADIUS);
414
- if (parser.seenval (' R' )) dcr -= _MAX (parser.value_float (),0 );
416
+ if (parser.seenval (' R' )) dcr -= _MAX (parser.value_float (), 0 .0f );
417
+ TERN_ (HAS_DELTA_SENSORLESS_PROBING, dcr *= sensorless_radius_factor);
415
418
416
419
const float calibration_precision = parser.floatval (' C' , 0 .0f );
417
420
if (calibration_precision < 0 ) {
@@ -434,9 +437,8 @@ void GcodeSuite::G33() {
434
437
const bool stow_after_each = parser.seen_test (' E' );
435
438
436
439
#if HAS_DELTA_SENSORLESS_PROBING
437
- probe.test_sensitivity .x = !parser.seen_test (' X' );
438
- TERN_ (HAS_Y_AXIS, probe.test_sensitivity .y = !parser.seen_test (' Y' ));
439
- TERN_ (HAS_Z_AXIS, probe.test_sensitivity .z = !parser.seen_test (' Z' ));
440
+ probe.test_sensitivity .set (!parser.seen_test (' X' ), !parser.seen_test (' Y' ), !parser.seen_test (' Z' ));
441
+ const bool do_save_offset_adj = parser.seen_test (' S' );
440
442
#endif
441
443
442
444
const bool _0p_calibration = probe_points == 0 ,
@@ -475,6 +477,25 @@ void GcodeSuite::G33() {
475
477
476
478
if (!_0p_calibration) ac_home ();
477
479
480
+ #if HAS_DELTA_SENSORLESS_PROBING
481
+ if (verbose_level > 0 && do_save_offset_adj) {
482
+ offset_sensorless_adj.reset ();
483
+
484
+ auto caltower = [&](Probe::sense_bool_t s){
485
+ float z_at_pt[NPP + 1 ];
486
+ LOOP_CAL_ALL (rad) z_at_pt[rad] = 0 .0f ;
487
+ probe.test_sensitivity = s;
488
+ if (probe_calibration_points (z_at_pt, 1 , dcr, false , false , probe_at_offset))
489
+ probe.set_offset_sensorless_adj (z_at_pt[CEN]);
490
+ };
491
+ caltower ({ true , false , false }); // A
492
+ caltower ({ false , true , false }); // B
493
+ caltower ({ false , false , true }); // C
494
+
495
+ probe.test_sensitivity = { true , true , true }; // reset to all
496
+ }
497
+ #endif
498
+
478
499
do { // start iterations
479
500
480
501
float z_at_pt[NPP + 1 ] = { 0 .0f };
@@ -598,8 +619,17 @@ void GcodeSuite::G33() {
598
619
599
620
// print report
600
621
601
- if (verbose_level == 3 || verbose_level == 0 )
622
+ if (verbose_level == 3 || verbose_level == 0 ) {
602
623
print_calibration_results (z_at_pt, _tower_results, _opposite_results);
624
+ #if HAS_DELTA_SENSORLESS_PROBING
625
+ if (verbose_level == 0 && probe_points == 1 ) {
626
+ if (do_save_offset_adj)
627
+ probe.set_offset_sensorless_adj (z_at_pt[CEN]);
628
+ else
629
+ probe.refresh_largest_sensorless_adj ();
630
+ }
631
+ #endif
632
+ }
603
633
604
634
if (verbose_level != 0 ) { // !dry run
605
635
if ((zero_std_dev >= test_precision && iterations > force_iterations) || zero_std_dev <= calibration_precision) { // end iterations
@@ -660,6 +690,9 @@ void GcodeSuite::G33() {
660
690
ac_cleanup (TERN_ (HAS_MULTI_HOTEND, old_tool_index));
661
691
662
692
TERN_ (FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate (M_IDLE));
693
+ #if HAS_DELTA_SENSORLESS_PROBING
694
+ probe.test_sensitivity = { true , true , true };
695
+ #endif
663
696
}
664
697
665
698
#endif // DELTA_AUTO_CALIBRATION
0 commit comments