Browse Source

Try harder finding the calibration center

with alternative PINDAs it looks like their properties vary a lot
and searching for the calibration center requires trying different
Z levels.
D.R.racer 3 years ago
parent
commit
5184910ef9
1 changed files with 18 additions and 4 deletions
  1. 18 4
      Firmware/xyzcal.cpp

+ 18 - 4
Firmware/xyzcal.cpp

@@ -478,7 +478,7 @@ int16_t xyzcal_find_pattern_12x12_in_32x32(uint8_t* pixels, uint16_t* pattern, u
 
 #define MAX_DIAMETR 600
 #define XYZCAL_FIND_CENTER_DIAGONAL
-
+int8_t xyzcal_find_point_center2A(int16_t x0, int16_t y0, int16_t z0, uint16_t delay_us);
 int8_t xyzcal_find_point_center2(uint16_t delay_us)
 {
 	printf_P(PSTR("xyzcal_find_point_center2\n"));
@@ -494,11 +494,25 @@ int8_t xyzcal_find_point_center2(uint16_t delay_us)
 	xyzcal_lineXYZ_to(_X, _Y, z0 + 400, 500, -1);
 	xyzcal_lineXYZ_to(_X, _Y, z0 - 400, 500, 1);
 
-	if (has_temperature_compensation())
+    if (has_temperature_compensation()){
 	    z0 = _Z - 20; // normal PINDA
-	else
-	    z0 = _Z + 10; // alternate PINDA
+        return xyzcal_find_point_center2A(x0, y0, z0, delay_us);
+    } else {
+        // try searching harder, each PINDA is different
+        for(z0 = _Z - 20; z0 < _Z + 60; z0 += 20 ){ // alternate PINDA
+            int8_t rv = xyzcal_find_point_center2A(x0, y0, z0, delay_us);
+            printf_P(PSTR(" z0=%d"), z0);
+            if( rv != 0 ){
+                printf_P(PSTR("ok\n"));
+                return rv;
+            } else {
+                printf_P(PSTR("fail\n"));
+            }
+        }
+    }
+}
 
+int8_t xyzcal_find_point_center2A(int16_t x0, int16_t y0, int16_t z0, uint16_t delay_us){
 	xyzcal_lineXYZ_to(_X, _Y, z0, 500, 0);
 
 //	xyzcal_lineXYZ_to(x0, y0, z0 - 100, 500, 1);