Skip to content

Commit 671046f

Browse files
UFUF
authored andcommitted
Use B point For calibration (Command: "M2401 B")
1 parent 00d56dc commit 671046f

7 files changed

Lines changed: 87 additions & 17 deletions

File tree

lib/Marlin/Configuration.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
//#define SWIFT_TEST_MODE
132132

133133
#define HW_VER "3.3"
134-
#define SW_VER_BASE "3.1.15"
134+
#define SW_VER_BASE "3.1.16"
135135

136136
#ifdef SWIFT_TEST_MODE
137137
#define SW_VER SW_VER_BASE"_t"
@@ -633,12 +633,12 @@
633633
// @section machine
634634

635635
// Travel limits after homing (units are in mm)
636-
#define X_MIN_POS -300
637-
#define Y_MIN_POS -300
638-
#define Z_MIN_POS -300
639-
#define X_MAX_POS 300
640-
#define Y_MAX_POS 300
641-
#define Z_MAX_POS 300
636+
#define X_MIN_POS -350
637+
#define Y_MIN_POS -350
638+
#define Z_MIN_POS -350
639+
#define X_MAX_POS 350
640+
#define Y_MAX_POS 350
641+
#define Z_MAX_POS 350
642642

643643
//===========================================================================
644644
//========================= Filament Runout Sensor ==========================

lib/Marlin/Marlin_main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7397,7 +7397,7 @@ void process_next_command() {
73977397
uint32_t serialNum = 0;
73987398

73997399
uint8_t needReply = 0;
7400-
char replyBuf[RESULT_BUFFER_SIZE];
7400+
char replyBuf[RESULT_BUFFER_SIZE] = {0};
74017401
uint8_t result = 0;
74027402
char *pch;
74037403

lib/Marlin/uArmCalibration.cpp

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,37 @@
1313

1414
uint16_t reference_angle_value[NUM_AXIS] = {95, 1429, 1998, 0};
1515

16-
float reference_angle[NUM_AXIS] = {90.0, 32.4, 90.6, 0.0};
16+
float reference_angle[NUM_AXIS] = {90.0, 33.154915, 90.231049, 0.0};//{90.0, 32.4, 90.6, 0.0};
17+
18+
float reference_angle_B[NUM_AXIS] = {90.0, 33.138634, 88.795792, 0.0};
19+
20+
#define USE_REFERENCE_ANGLE_B_FLAG 0xBB
21+
22+
float (*reference_angle_p)[NUM_AXIS] = &reference_angle;
1723

1824

1925
void init_reference_angle_value()
2026
{
21-
//read value from eeprom
22-
reference_angle_value[X_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_ADDR, DATA_TYPE_INTEGER);
23-
reference_angle_value[Y_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_ADDR+2, DATA_TYPE_INTEGER);
24-
reference_angle_value[Z_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_ADDR+4, DATA_TYPE_INTEGER);
27+
uint8_t reference_angle_flag = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_FLAG_ADDR, DATA_TYPE_BYTE);
2528

29+
if (reference_angle_flag == USE_REFERENCE_ANGLE_B_FLAG)
30+
{
31+
debugPrint("reference_angle_b flag set\r\n");
32+
//read value from eeprom
33+
reference_angle_value[X_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_ADDR, DATA_TYPE_INTEGER);
34+
reference_angle_value[Y_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_ADDR+2, DATA_TYPE_INTEGER);
35+
reference_angle_value[Z_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_ADDR+4, DATA_TYPE_INTEGER);
36+
reference_angle_p = &reference_angle_B;
37+
}
38+
else
39+
{
40+
//read value from eeprom
41+
reference_angle_value[X_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_ADDR, DATA_TYPE_INTEGER);
42+
reference_angle_value[Y_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_ADDR+2, DATA_TYPE_INTEGER);
43+
reference_angle_value[Z_AXIS] = getE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_ADDR+4, DATA_TYPE_INTEGER);
44+
reference_angle_p = &reference_angle;
45+
}
46+
2647
debugPrint("read ref value: %d, %d, %d\r\n", reference_angle_value[0], reference_angle_value[1], reference_angle_value[2]);
2748
}
2849

@@ -41,6 +62,25 @@ void update_reference_angle_value(uint16_t value[NUM_AXIS])
4162
debugPrint("set ref value: %d, %d, %d\r\n", reference_angle_value[0], reference_angle_value[1], reference_angle_value[2]);
4263
}
4364

65+
void update_reference_angle_value_B(uint16_t value[NUM_AXIS])
66+
{
67+
68+
reference_angle_value[X_AXIS] = value[X_AXIS];
69+
reference_angle_value[Y_AXIS] = value[Y_AXIS];
70+
reference_angle_value[Z_AXIS] = value[Z_AXIS];
71+
72+
73+
setE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_ADDR, DATA_TYPE_INTEGER, reference_angle_value[X_AXIS]);
74+
setE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_ADDR+2, DATA_TYPE_INTEGER, reference_angle_value[Y_AXIS]);
75+
setE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_ADDR+4, DATA_TYPE_INTEGER, reference_angle_value[Z_AXIS]);
76+
setE2PROMData(EEPROM_ON_CHIP, EEPROM_REFERENCE_VALUE_B_FLAG_ADDR, DATA_TYPE_BYTE, USE_REFERENCE_ANGLE_B_FLAG);
77+
78+
reference_angle_p = &reference_angle_B;
79+
80+
debugPrint("set ref value: %d, %d, %d\r\n", reference_angle_value[0], reference_angle_value[1], reference_angle_value[2]);
81+
}
82+
83+
4484
uint16_t get_current_angle_adc(uint8_t index)
4585
{
4686
uint16_t value = 0;
@@ -132,16 +172,16 @@ float get_current_angle(uint8_t index)
132172
if (cur_value > reference_angle_value[index])
133173
{
134174
diff = cur_value - reference_angle_value[index];
135-
angle = reference_angle[index] + diff * 360.0 / 4096;
175+
angle = (*reference_angle_p)[index] + diff * 360.0 / 4096;
136176
}
137177
else if (cur_value < reference_angle_value[index])
138178
{
139179
diff = reference_angle_value[index] - cur_value;
140-
angle = reference_angle[index] - diff * 360.0 / 4096;
180+
angle = (*reference_angle_p)[index] - diff * 360.0 / 4096;
141181
}
142182
else
143183
{
144-
angle = reference_angle[index];
184+
angle = (*reference_angle_p)[index];
145185
}
146186

147187
//debugPrint("cur_value = %d\r\n", cur_value);

lib/Marlin/uArmCalibration.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
float get_current_angle(uint8_t index);
2323
void init_reference_angle_value();
2424
void update_reference_angle_value(uint16_t value[NUM_AXIS]);
25+
void update_reference_angle_value_B(uint16_t value[NUM_AXIS]);
26+
2527

2628
uint16_t get_current_angle_adc(uint8_t index);
2729
void set_current_pos_as_reference();

lib/Marlin/uArmParams.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@
4040

4141
#define EEPROM_REFERENCE_VALUE_ADDR 800
4242

43+
#define EEPROM_REFERENCE_VALUE_B_FLAG_ADDR 818
44+
#define EEPROM_REFERENCE_VALUE_B_ADDR 820
45+
46+
4347
#define EEPROM_MODE_ADDR 900
4448
#define EEPROM_HEIGHT_ADDR 910
4549
#define EEPROM_FRONT_ADDR 920
@@ -105,7 +109,7 @@
105109

106110
#define LOWER_ARM_MAX_ANGLE 135.6
107111
#define LOWER_ARM_MIN_ANGLE 0
108-
#define UPPER_ARM_MAX_ANGLE 100.7
112+
#define UPPER_ARM_MAX_ANGLE 119.9
109113
#define UPPER_ARM_MIN_ANGLE 0
110114
#define LOWER_UPPER_MAX_ANGLE 151
111115
#define LOWER_UPPER_MIN_ANGLE 10

lib/Marlin/uArmSwift.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,6 +1165,27 @@ uint8_t uarm_gcode_M2401(char reply[])
11651165
return E_FAIL;
11661166
}
11671167
}
1168+
else if (code_seen('B'))
1169+
{
1170+
for (int i = 0; i < 3; i++)
1171+
{
1172+
value[i] = get_current_angle_adc(i);
1173+
1174+
if (value[i] > 4096)
1175+
{
1176+
return E_FAIL;
1177+
}
1178+
}
1179+
1180+
1181+
update_reference_angle_value_B(value);
1182+
1183+
update_current_pos();
1184+
1185+
strcpy(reply, "");
1186+
1187+
return E_OK;
1188+
}
11681189
else
11691190
{
11701191
return E_FAIL;

update.log

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
v3.1.16 20170724
2+
Use B point for calibration.(command: "M2401 B")
3+
14
v3.1.15 20170720
25
update grove color sersor lib
36
update RGBLCD lib

0 commit comments

Comments
 (0)