Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MarlinKimbra
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
MarlinKimbra
Commits
5f774564
Commit
5f774564
authored
Apr 03, 2016
by
MagoKimbra
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix Hotend offset & add variant Core
parent
1d25bf4b
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
297 additions
and
254 deletions
+297
-254
Configuration_Basic.h
MK/Configuration_Basic.h
+12
-0
Configuration_Cartesian.h
MK/Configuration_Cartesian.h
+21
-11
Configuration_Core.h
MK/Configuration_Core.h
+23
-12
Configuration_Delta.h
MK/Configuration_Delta.h
+18
-5
Configuration_Feature.h
MK/Configuration_Feature.h
+3
-3
Configuration_Store.cpp
MK/Configuration_Store.cpp
+47
-61
base.h
MK/base.h
+4
-0
MK_Main.cpp
MK/module/MK_Main.cpp
+96
-104
MK_Main.h
MK/module/MK_Main.h
+6
-13
502.h
MK/module/boards/502.h
+3
-3
language.h
MK/module/language/language.h
+7
-2
mechanics.h
MK/module/mechanics.h
+3
-1
planner.cpp
MK/module/motion/planner.cpp
+25
-20
stepper.cpp
MK/module/motion/stepper.cpp
+13
-13
stepper.h
MK/module/motion/stepper.h
+3
-2
sanitycheck.h
MK/module/sanitycheck.h
+13
-4
No files found.
MK/Configuration_Basic.h
View file @
5f774564
...
...
@@ -72,10 +72,22 @@
/***********************************************************************
*************************** Mechanism type ****************************
***********************************************************************
* *
* CARTESIAN - Prusa, Mendel, etc *
* COREXY - H-Bot/Core XY (x_motor = x+y, y_motor = x-y) *
* COREYX - H-Bot/Core XY (x_motor = y+x, y_motor = y-x) *
* COREXZ - H-Bot/Core XZ (x_motor = x+z, z_motor = x-z) *
* COREZX - H-Bot/Core XZ (x_motor = z+x, z_motor = z-x) *
* DELTA - Rostock, Kossel, RostockMax, Cerberus, etc *
* SCARA - SCARA *
* *
***********************************************************************/
#define MECHANISM MECH_CARTESIAN
//#define MECHANISM MECH_COREXY
//#define MECHANISM MECH_COREYX
//#define MECHANISM MECH_COREXZ
//#define MECHANISM MECH_COREZX
//#define MECHANISM MECH_DELTA
//#define MECHANISM MECH_SCARA
/***********************************************************************/
...
...
MK/Configuration_Cartesian.h
View file @
5f774564
...
...
@@ -278,16 +278,26 @@
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
// X and Y offsets MUST be INTEGERS
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // Probe on: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Probe on: -front +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1 // -below (always!)
#define Z_RAISE_BEFORE_HOMING 10 // (in mm) Raise Z before homing (G28) for Probe Clearance.
//
// +-- BACK ---+
// | |
// L | (+) P | R <-- probe (10,10)
// E | | I
// F | (-) N (+) | G <-- nozzle (0,0)
// T | | H
// | P (-) | T <-- probe (-10,-10)
// | |
// O-- FRONT --+
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left [of the nozzle] +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front [of the nozzle] +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1 // Z offset: -below [of the nozzle] (always negative!)
#define Z_RAISE_BEFORE_HOMING 10 // (in mm) Raise Z before homing (G28) for Probe Clearance.
// Be sure you have this distance over your Z_MAX_POS in case
#define Z_RAISE_BEFORE_PROBING
10
//How much the extruder will be raised before travelling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS
5
//How much the extruder will be raised when travelling from between next probing points
#define Z_RAISE_AFTER_PROBING
5
//How much the extruder will be raised after the last probing point.
#define Z_RAISE_BEFORE_PROBING
10
//How much the extruder will be raised before travelling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS
5
//How much the extruder will be raised when travelling from between next probing points
#define Z_RAISE_AFTER_PROBING
5
//How much the extruder will be raised after the last probing point.
//#define Z_PROBE_END_SCRIPT "G1 Z10 F8000\nG1 X10 Y10\nG1 Z0.5" // These commands will be executed in the end of G29 routine.
// Useful to retract a deployable Z probe.
...
...
@@ -419,9 +429,9 @@
* For the other hotends it is their distance from the hotend 0. *
* *
*****************************************************************************************/
//#define HOTEND_OFFSET_X {0.0, 5
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the X axis
//#define HOTEND_OFFSET_Y {0.0, 5
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Y axis
//
#define HOTEND_OFFSET_Z {0.0, 0.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Z axis
#define HOTEND_OFFSET_X {0.0, 0
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the X axis
#define HOTEND_OFFSET_Y {0.0, 0
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Y axis
#define HOTEND_OFFSET_Z {0.0, 0.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Z axis
/*****************************************************************************************/
...
...
MK/Configuration_Core.h
View file @
5f774564
...
...
@@ -46,7 +46,8 @@
/*****************************************************************************************
************************************* Core settings *************************************
*****************************************************************************************
* This define the moltiplicator axis from X to Y or Z in COREXY or COREXZ. *
* This define the moltiplicator axis from X to Y or Z in *
* COREXY - COREYX or COREXZ - COREZX *
* Example: *
* COREXY set COREX_YZ_FACTOR 1 *
* The result is: *
...
...
@@ -299,16 +300,26 @@
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
// X and Y offsets MUST be INTEGERS
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // Probe on: -left +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Probe on: -front +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1 // -below (always!)
#define Z_RAISE_BEFORE_HOMING 10 // (in mm) Raise Z before homing (G28) for Probe Clearance.
//
// +-- BACK ---+
// | |
// L | (+) P | R <-- probe (10,10)
// E | | I
// F | (-) N (+) | G <-- nozzle (0,0)
// T | | H
// | P (-) | T <-- probe (-10,-10)
// | |
// O-- FRONT --+
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left [of the nozzle] +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front [of the nozzle] +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1 // Z offset: -below [of the nozzle] (always negative!)
#define Z_RAISE_BEFORE_HOMING 10 // (in mm) Raise Z before homing (G28) for Probe Clearance.
// Be sure you have this distance over your Z_MAX_POS in case
#define Z_RAISE_BEFORE_PROBING
10
//How much the extruder will be raised before travelling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS
5
//How much the extruder will be raised when travelling from between next probing points
#define Z_RAISE_AFTER_PROBING
5
//How much the extruder will be raised after the last probing point.
#define Z_RAISE_BEFORE_PROBING
10
//How much the extruder will be raised before travelling to the first probing point.
#define Z_RAISE_BETWEEN_PROBINGS
5
//How much the extruder will be raised when travelling from between next probing points
#define Z_RAISE_AFTER_PROBING
5
//How much the extruder will be raised after the last probing point.
//#define Z_PROBE_END_SCRIPT "G1 Z10 F8000\nG1 X10 Y10\nG1 Z0.5" // These commands will be executed in the end of G29 routine.
// Useful to retract a deployable Z probe.
...
...
@@ -440,9 +451,9 @@
* For the other hotends it is their distance from the hotend 0. *
* *
*****************************************************************************************/
//#define HOTEND_OFFSET_X {0.0, 5
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the X axis
//#define HOTEND_OFFSET_Y {0.0, 5
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Y axis
//
#define HOTEND_OFFSET_Z {0.0, 0.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Z axis
#define HOTEND_OFFSET_X {0.0, 0
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the X axis
#define HOTEND_OFFSET_Y {0.0, 0
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Y axis
#define HOTEND_OFFSET_Z {0.0, 0.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Z axis
/*****************************************************************************************/
#endif
\ No newline at end of file
MK/Configuration_Delta.h
View file @
5f774564
...
...
@@ -118,8 +118,21 @@
#define PROBE_COUNT 3
// Z-Probe variables
// X, Y, Z, E distance between hotend nozzle and deployed bed leveling probe.
#define Z_PROBE_OFFSET {0, 0, -1}
// Offsets to the probe relative to the extruder tip (Hotend - Probe)
// X and Y offsets MUST be INTEGERS
//
// +-- BACK ---+
// | |
// L | (+) P | R <-- probe (10,10)
// E | | I
// F | (-) N (+) | G <-- nozzle (0,0)
// T | | H
// | P (-) | T <-- probe (-10,-10)
// | |
// O-- FRONT --+
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left [of the nozzle] +right
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front [of the nozzle] +behind
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1 // Z offset: -below [of the nozzle] (always negative!)
// Start and end location values are used to deploy/retract the probe (will move from start to end and back again)
#define Z_PROBE_DEPLOY_START_LOCATION {0, 0, 20} // X, Y, Z, E start location for z-probe deployment sequence
...
...
@@ -377,9 +390,9 @@
* For the other hotends it is their distance from the hotend 0. *
* *
*****************************************************************************************/
//#define HOTEND_OFFSET_X {0.0, 5
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the X axis
//#define HOTEND_OFFSET_Y {0.0, 5
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Y axis
//
#define HOTEND_OFFSET_Z {0.0, 0.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Z axis
#define HOTEND_OFFSET_X {0.0, 0
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the X axis
#define HOTEND_OFFSET_Y {0.0, 0
.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Y axis
#define HOTEND_OFFSET_Z {0.0, 0.0, 0.0, 0.0} // (in mm) for each hotend, offset of the hotend on the Z axis
/*****************************************************************************************/
#endif
\ No newline at end of file
MK/Configuration_Feature.h
View file @
5f774564
...
...
@@ -182,9 +182,9 @@
#define LPQ_MAX_LEN 50
// HotEnd{HE0,HE1,HE2,HE3}
#define DEFAULT_Kp {40, 40, 40, 40} // Kp for
E0, E1, E2, E
3
#define DEFAULT_Ki {07, 07, 07, 07} // Ki for
E0, E1, E2, E
3
#define DEFAULT_Kd {60, 60, 60, 60} // Kd for
E0, E1, E2, E
3
#define DEFAULT_Kp {40, 40, 40, 40} // Kp for
H0, H1, H2, H
3
#define DEFAULT_Ki {07, 07, 07, 07} // Ki for
H0, H1, H2, H
3
#define DEFAULT_Kd {60, 60, 60, 60} // Kd for
H0, H1, H2, H
3
#define DEFAULT_Kc {100, 100, 100, 100} // heating power = Kc * (e_speed)
/***********************************************************************/
...
...
MK/Configuration_Store.cpp
View file @
5f774564
...
...
@@ -16,10 +16,10 @@
*
*/
#define EEPROM_VERSION "
V25
"
#define EEPROM_VERSION "
MKV428
"
/**
*
V25
EEPROM Layout:
*
MKV428
EEPROM Layout:
*
* ver
* M92 XYZ E0 ... axis_steps_per_unit X,Y,Z,E0 ... (per extruder)
...
...
@@ -33,15 +33,13 @@
* M205 B minsegmenttime
* M205 X max_xy_jerk
* M205 Z max_z_jerk
* M205 E
E0 ...
max_e_jerk (per extruder)
* M205 E
E0 ...
max_e_jerk (per extruder)
* M206 XYZ home_offset (x3)
* M218 T XY hotend_offset (x4) (T0..3)
* M666 P zprobe_zoffset
*
* HOTENDS OFFSET:
* M218 T XY hotend_offset (x4) (T0..3)
*
* HOTENDS AD595:
* M595
T O G
Hotend AD595 Offset & Gain
* M595
H OS
Hotend AD595 Offset & Gain
*
* DELTA:
* M666 XYZ endstop_adj (x3)
...
...
@@ -137,7 +135,7 @@ void _EEPROM_readData(int& pos, uint8_t* value, uint8_t size) {
void
Config_StoreSettings
()
{
float
dummy
=
0.0
f
;
char
ver
[
4
]
=
"
000"
;
char
ver
[
7
]
=
"000
000"
;
int
i
=
EEPROM_OFFSET
;
EEPROM_WRITE_VAR
(
i
,
ver
);
// invalidate data first
EEPROM_WRITE_VAR
(
i
,
axis_steps_per_unit
);
...
...
@@ -153,15 +151,12 @@ void Config_StoreSettings() {
EEPROM_WRITE_VAR
(
i
,
max_z_jerk
);
EEPROM_WRITE_VAR
(
i
,
max_e_jerk
);
EEPROM_WRITE_VAR
(
i
,
home_offset
);
EEPROM_WRITE_VAR
(
i
,
hotend_offset
);
#if !MECH(DELTA)
EEPROM_WRITE_VAR
(
i
,
zprobe_zoffset
);
#endif
#if HOTENDS > 1
EEPROM_WRITE_VAR
(
i
,
hotend_offset
);
#endif
#if HEATER_USES_AD595
EEPROM_WRITE_VAR
(
i
,
ad595_offset
);
EEPROM_WRITE_VAR
(
i
,
ad595_gain
);
...
...
@@ -248,11 +243,9 @@ void Config_StoreSettings() {
EEPROM_WRITE_VAR
(
i
,
volumetric_enabled
);
// Save filament sizes
for
(
int
q
=
0
;
q
<
4
;
q
++
)
{
if
(
q
<
EXTRUDERS
)
dummy
=
filament_size
[
q
];
EEPROM_WRITE_VAR
(
i
,
dummy
);
}
for
(
int
e
=
0
;
e
<
EXTRUDERS
;
e
++
)
EEPROM_WRITE_VAR
(
i
,
filament_size
[
e
]);
#if ENABLED(IDLE_OOZING_PREVENT)
EEPROM_WRITE_VAR
(
i
,
IDLE_OOZING_enabled
);
#endif
...
...
@@ -261,7 +254,7 @@ void Config_StoreSettings() {
EEPROM_WRITE_VAR
(
i
,
motor_current
);
#endif
char
ver2
[
4
]
=
EEPROM_VERSION
;
char
ver2
[
7
]
=
EEPROM_VERSION
;
int
j
=
EEPROM_OFFSET
;
EEPROM_WRITE_VAR
(
j
,
ver2
);
// validate data
...
...
@@ -276,12 +269,12 @@ void Config_StoreSettings() {
void
Config_RetrieveSettings
()
{
int
i
=
EEPROM_OFFSET
;
char
stored_ver
[
4
];
char
ver
[
4
]
=
EEPROM_VERSION
;
EEPROM_READ_VAR
(
i
,
stored_ver
);
//read stored version
//
ECHO_EM("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
char
stored_ver
[
7
];
char
ver
[
7
]
=
EEPROM_VERSION
;
EEPROM_READ_VAR
(
i
,
stored_ver
);
//
read stored version
//ECHO_EM("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
if
(
strncmp
(
ver
,
stored_ver
,
3
)
!=
0
)
{
if
(
strncmp
(
ver
,
stored_ver
,
6
)
!=
0
)
{
Config_ResetDefault
();
}
else
{
...
...
@@ -305,15 +298,12 @@ void Config_RetrieveSettings() {
EEPROM_READ_VAR
(
i
,
max_z_jerk
);
EEPROM_READ_VAR
(
i
,
max_e_jerk
);
EEPROM_READ_VAR
(
i
,
home_offset
);
EEPROM_READ_VAR
(
i
,
hotend_offset
);
#if !MECH(DELTA)
EEPROM_READ_VAR
(
i
,
zprobe_zoffset
);
#endif
#if HOTENDS > 1
EEPROM_READ_VAR
(
i
,
hotend_offset
);
#endif
#if HEATER_USES_AD595
EEPROM_READ_VAR
(
i
,
ad595_offset
);
EEPROM_READ_VAR
(
i
,
ad595_gain
);
...
...
@@ -400,10 +390,8 @@ void Config_RetrieveSettings() {
EEPROM_READ_VAR
(
i
,
volumetric_enabled
);
for
(
int8_t
q
=
0
;
q
<
4
;
q
++
)
{
EEPROM_READ_VAR
(
i
,
dummy
);
if
(
q
<
EXTRUDERS
)
filament_size
[
q
]
=
dummy
;
}
for
(
int8_t
e
=
0
;
e
<
EXTRUDERS
;
e
++
)
EEPROM_READ_VAR
(
i
,
filament_size
[
e
]);
calculate_volumetric_multipliers
();
...
...
@@ -489,23 +477,21 @@ void Config_ResetDefault() {
max_e_jerk
[
i
]
=
tmp5
[
i
];
else
max_e_jerk
[
i
]
=
tmp5
[
max_i
-
1
];
#if HOTENDS > 1
max_i
=
sizeof
(
tmp10
)
/
sizeof
(
*
tmp10
);
if
(
i
<
max_i
)
hotend_offset
[
X_AXIS
][
i
]
=
tmp10
[
i
];
else
hotend_offset
[
X_AXIS
][
i
]
=
0
;
max_i
=
sizeof
(
tmp11
)
/
sizeof
(
*
tmp11
);
if
(
i
<
max_i
)
hotend_offset
[
Y_AXIS
][
i
]
=
tmp11
[
i
];
else
hotend_offset
[
Y_AXIS
][
i
]
=
0
;
max_i
=
sizeof
(
tmp12
)
/
sizeof
(
*
tmp12
);
if
(
i
<
max_i
)
hotend_offset
[
Z_AXIS
][
i
]
=
tmp12
[
i
];
else
hotend_offset
[
Z_AXIS
][
i
]
=
0
;
#endif // HOTENDS > 1
max_i
=
sizeof
(
tmp10
)
/
sizeof
(
*
tmp10
);
if
(
i
<
max_i
)
hotend_offset
[
X_AXIS
][
i
]
=
tmp10
[
i
];
else
hotend_offset
[
X_AXIS
][
i
]
=
0
;
max_i
=
sizeof
(
tmp11
)
/
sizeof
(
*
tmp11
);
if
(
i
<
max_i
)
hotend_offset
[
Y_AXIS
][
i
]
=
tmp11
[
i
];
else
hotend_offset
[
Y_AXIS
][
i
]
=
0
;
max_i
=
sizeof
(
tmp12
)
/
sizeof
(
*
tmp12
);
if
(
i
<
max_i
)
hotend_offset
[
Z_AXIS
][
i
]
=
tmp12
[
i
];
else
hotend_offset
[
Z_AXIS
][
i
]
=
0
;
}
#if MB(ALLIGATOR)
max_i
=
sizeof
(
tmp13
)
/
sizeof
(
*
tmp13
);
...
...
@@ -557,7 +543,9 @@ void Config_ResetDefault() {
diagrod_adj
[
1
]
=
TOWER_B_DIAGROD_ADJ
;
diagrod_adj
[
2
]
=
TOWER_C_DIAGROD_ADJ
;
max_pos
[
2
]
=
MANUAL_Z_HOME_POS
;
set_default_z_probe_offset
();
z_probe_offset
[
0
]
=
X_PROBE_OFFSET_FROM_EXTRUDER
;
z_probe_offset
[
1
]
=
Y_PROBE_OFFSET_FROM_EXTRUDER
;
z_probe_offset
[
2
]
=
Z_PROBE_OFFSET_FROM_EXTRUDER
;
set_delta_constants
();
#endif
...
...
@@ -717,17 +705,15 @@ void Config_ResetDefault() {
ECHO_MV
(
" Y"
,
home_offset
[
Y_AXIS
]
);
ECHO_EMV
(
" Z"
,
home_offset
[
Z_AXIS
]
);
#if HOTENDS > 1
if
(
!
forReplay
)
{
ECHO_LM
(
CFG
,
"Hotend offset (mm):"
);
}
for
(
int8_t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
ECHO_SMV
(
CFG
,
" M218 T"
,
h
);
ECHO_MV
(
" X"
,
hotend_offset
[
X_AXIS
][
h
]);
ECHO_MV
(
" Y"
,
hotend_offset
[
Y_AXIS
][
h
]);
ECHO_EMV
(
" Z"
,
hotend_offset
[
Z_AXIS
][
h
]);
}
#endif // HOTENDS > 1
if
(
!
forReplay
)
{
ECHO_LM
(
CFG
,
"Hotend offset (mm):"
);
}
for
(
int8_t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
ECHO_SMV
(
CFG
,
" M218 T"
,
h
);
ECHO_MV
(
" X"
,
hotend_offset
[
X_AXIS
][
h
]);
ECHO_MV
(
" Y"
,
hotend_offset
[
Y_AXIS
][
h
]);
ECHO_EMV
(
" Z"
,
hotend_offset
[
Z_AXIS
][
h
]);
}
#if HEATER_USES_AD595
if
(
!
forReplay
)
{
...
...
@@ -736,7 +722,7 @@ void Config_ResetDefault() {
for
(
int8_t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
ECHO_SMV
(
CFG
,
" M595 T"
,
h
);
ECHO_MV
(
" O"
,
ad595_offset
[
h
]);
ECHO_EMV
(
",
G
"
,
ad595_gain
[
h
]);
ECHO_EMV
(
",
S
"
,
ad595_gain
[
h
]);
}
#endif // HEATER_USES_AD595
...
...
MK/base.h
View file @
5f774564
...
...
@@ -23,8 +23,12 @@
#include "Configuration_Cartesian.h"
#elif MECH(COREXY)
#include "Configuration_Core.h"
#elif MECH(COREYX)
#include "Configuration_Core.h"
#elif MECH(COREXZ)
#include "Configuration_Core.h"
#elif MECH(COREZX)
#include "Configuration_Core.h"
#elif MECH(DELTA)
#include "Configuration_Delta.h"
#elif MECH(SCARA)
...
...
MK/module/MK_Main.cpp
View file @
5f774564
...
...
@@ -74,6 +74,7 @@ bool volumetric_enabled = false;
float
filament_size
[
EXTRUDERS
]
=
ARRAY_BY_EXTRUDERS
(
DEFAULT_NOMINAL_FILAMENT_DIA
);
float
volumetric_multiplier
[
EXTRUDERS
]
=
ARRAY_BY_EXTRUDERS
(
1.0
);
float
home_offset
[
3
]
=
{
0
};
float
hotend_offset
[
3
][
HOTENDS
];
float
min_pos
[
3
]
=
{
X_MIN_POS
,
Y_MIN_POS
,
Z_MIN_POS
};
float
max_pos
[
3
]
=
{
X_MAX_POS
,
Y_MAX_POS
,
Z_MAX_POS
};
...
...
@@ -115,11 +116,6 @@ double printer_usage_filament;
float
z_endstop_adj
=
0
;
#endif
// Hotend offset
#if HOTENDS > 1
float
hotend_offset
[
3
][
HOTENDS
];
#endif
#if HEATER_USES_AD595
float
ad595_offset
[
HOTENDS
]
=
ARRAY_BY_HOTENDS1
(
TEMP_SENSOR_AD595_OFFSET
);
float
ad595_gain
[
HOTENDS
]
=
ARRAY_BY_HOTENDS1
(
TEMP_SENSOR_AD595_GAIN
);
...
...
@@ -136,6 +132,10 @@ double printer_usage_filament;
bool
Spool_must_write
[
EXTRUDERS
]
=
ARRAY_BY_EXTRUDERS
(
false
);
#endif
#if HAS(SERVOS)
Servo
servo
[
NUM_SERVOS
];
#endif
#if HAS(SERVO_ENDSTOPS)
const
int
servo_endstop_id
[]
=
SERVO_ENDSTOP_IDS
;
const
int
servo_endstop_angle
[][
2
]
=
{
X_ENDSTOP_SERVO_ANGLES
,
Y_ENDSTOP_SERVO_ANGLES
,
Z_ENDSTOP_SERVO_ANGLES
};
...
...
@@ -173,6 +173,11 @@ double printer_usage_filament;
#endif
#if MECH(DELTA)
#define TOWER_1 X_AXIS
#define TOWER_2 Y_AXIS
#define TOWER_3 Z_AXIS
float
delta
[
3
]
=
{
0.0
};
float
delta_tmp
[
3
]
=
{
0.0
};
float
endstop_adj
[
3
]
=
{
0
};
...
...
@@ -191,7 +196,7 @@ double printer_usage_filament;
float
base_max_pos
[
3
]
=
{
X_MAX_POS
,
Y_MAX_POS
,
Z_MAX_POS
};
float
base_home_pos
[
3
]
=
{
X_HOME_POS
,
Y_HOME_POS
,
Z_HOME_POS
};
float
max_length
[
3
]
=
{
X_MAX_LENGTH
,
Y_MAX_LENGTH
,
Z_MAX_LENGTH
};
float
z_probe_offset
[
3
]
=
Z_PROBE_OFFSET
;
float
z_probe_offset
[
3
];
float
bed_level
[
AUTO_BED_LEVELING_GRID_POINTS
][
AUTO_BED_LEVELING_GRID_POINTS
];
int
delta_grid_spacing
[
2
]
=
{
0
,
0
};
const
float
bed_radius
=
DELTA_PROBABLE_RADIUS
;
...
...
@@ -293,10 +298,6 @@ double printer_usage_filament;
bool
allow_lengthy_extrude_once
;
// for load/unload
#endif
#if HAS(SERVOS)
Servo
servo
[
NUM_SERVOS
];
#endif
#if HAS(CHDK)
unsigned
long
chdkHigh
=
0
;
boolean
chdkActive
=
false
;
...
...
@@ -320,8 +321,6 @@ void process_next_command();
void
plan_arc
(
float
target
[
NUM_AXIS
],
float
*
offset
,
uint8_t
clockwise
);
bool
setTargetedExtruder
(
int
code
);
#if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
float
extrude_min_temp
=
EXTRUDE_MINTEMP
;
#endif
...
...
@@ -973,7 +972,7 @@ DEFINE_PGM_READ_ANY(signed char, byte);
static inline type array(int axis) \
{ return pgm_read_any(&array##_P[axis]); }
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
XZ
) || MECH(SCARA)
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
YX) || MECH(COREXZ) || MECH(COREZX
) || MECH(SCARA)
XYZ_CONSTS_FROM_CONFIG
(
float
,
base_max_pos
,
MAX_POS
);
XYZ_CONSTS_FROM_CONFIG
(
float
,
base_home_pos
,
HOME_POS
);
XYZ_CONSTS_FROM_CONFIG
(
float
,
max_length
,
MAX_LENGTH
);
...
...
@@ -1126,7 +1125,7 @@ inline void sync_plan_position() {
#if MECH(DELTA) || MECH(SCARA)
inline
void
sync_plan_position_delta
()
{
calculate_delta
(
current_position
);
plan_set_position
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
current_position
[
E_AXIS
]);
plan_set_position
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
current_position
[
E_AXIS
]);
}
#endif
inline
void
set_current_to_destination
()
{
memcpy
(
current_position
,
destination
,
sizeof
(
current_position
));
}
...
...
@@ -1150,7 +1149,7 @@ static void clean_up_after_endstop_move() {
endstops_hit_on_purpose
();
// clear endstop hit flags
}
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
XZ
) || MECH(SCARA)
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
YX) || MECH(COREXZ) || MECH(COREZX
) || MECH(SCARA)
/**
* Plan a move to (X, Y, Z) and set the current_position
...
...
@@ -1534,7 +1533,7 @@ static void clean_up_after_endstop_move() {
}
}
#define HOMEAXIS(LETTER) homeaxis(LETTER##_AXIS)
#endif // CARTESIAN || COREXY || CORE
XZ
|| SCARA
#endif // CARTESIAN || COREXY || CORE
YX || COREXZ || COREZX
|| SCARA
#if MECH(DELTA)
static
void
homeaxis
(
AxisEnum
axis
)
{
...
...
@@ -1611,11 +1610,6 @@ static void clean_up_after_endstop_move() {
}
#define HOMEAXIS(LETTER) homeaxis(LETTER##_AXIS)
void
set_default_z_probe_offset
()
{
float
default_z_probe_offset
[]
=
Z_PROBE_OFFSET
;
memcpy
(
z_probe_offset
,
default_z_probe_offset
,
sizeof
(
z_probe_offset
));
}
void
set_delta_constants
()
{
max_length
[
Z_AXIS
]
=
max_pos
[
Z_AXIS
]
-
Z_MIN_POS
;
base_max_pos
[
Z_AXIS
]
=
max_pos
[
Z_AXIS
];
...
...
@@ -1758,7 +1752,7 @@ static void clean_up_after_endstop_move() {
endstop_adj
[
Z_AXIS
]
+=
z_endstop
;
calculate_delta
(
current_position
);
plan_set_position
(
delta
[
X_AXIS
]
-
(
endstop_adj
[
X_AXIS
]
-
saved_endstop_adj
[
X_AXIS
])
,
delta
[
Y_AXIS
]
-
(
endstop_adj
[
Y_AXIS
]
-
saved_endstop_adj
[
Y_AXIS
]),
delta
[
Z_AXIS
]
-
(
endstop_adj
[
Z_AXIS
]
-
saved_endstop_adj
[
Z_AXIS
]),
current_position
[
E_AXIS
]);
plan_set_position
(
delta
[
TOWER_1
]
-
(
endstop_adj
[
X_AXIS
]
-
saved_endstop_adj
[
X_AXIS
])
,
delta
[
TOWER_2
]
-
(
endstop_adj
[
Y_AXIS
]
-
saved_endstop_adj
[
Y_AXIS
]),
delta
[
TOWER_3
]
-
(
endstop_adj
[
Z_AXIS
]
-
saved_endstop_adj
[
Z_AXIS
]),
current_position
[
E_AXIS
]);
st_synchronize
();
}
...
...
@@ -2477,20 +2471,20 @@ static void clean_up_after_endstop_move() {
}
refresh_cmd_timeout
();
calculate_delta
(
destination
);
plan_buffer_line
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
destination
[
E_AXIS
],
feedrate
*
feedrate_multiplier
/
60
/
100.0
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
destination
[
E_AXIS
],
feedrate
*
feedrate_multiplier
/
60
/
100.0
,
active_extruder
,
active_driver
);
set_current_to_destination
();
}
void
calculate_delta
(
float
cartesian
[
3
])
{
delta
[
X_AXIS
]
=
sqrt
(
delta_diagonal_rod_1
delta
[
TOWER_1
]
=
sqrt
(
delta_diagonal_rod_1
-
sq
(
delta_tower1_x
-
cartesian
[
X_AXIS
])
-
sq
(
delta_tower1_y
-
cartesian
[
Y_AXIS
])
)
+
cartesian
[
Z_AXIS
];
delta
[
Y_AXIS
]
=
sqrt
(
delta_diagonal_rod_2
delta
[
TOWER_2
]
=
sqrt
(
delta_diagonal_rod_2
-
sq
(
delta_tower2_x
-
cartesian
[
X_AXIS
])
-
sq
(
delta_tower2_y
-
cartesian
[
Y_AXIS
])
)
+
cartesian
[
Z_AXIS
];
delta
[
Z_AXIS
]
=
sqrt
(
delta_diagonal_rod_3
delta
[
TOWER_3
]
=
sqrt
(
delta_diagonal_rod_3
-
sq
(
delta_tower3_x
-
cartesian
[
X_AXIS
])
-
sq
(
delta_tower3_y
-
cartesian
[
Y_AXIS
])
)
+
cartesian
[
Z_AXIS
];
...
...
@@ -2514,9 +2508,9 @@ static void clean_up_after_endstop_move() {
right
=
(
1
-
ratio_y
)
*
z3
+
ratio_y
*
z4
,
offset
=
(
1
-
ratio_x
)
*
left
+
ratio_x
*
right
;
delta
[
X_AXIS
]
+=
offset
;
delta
[
Y_AXIS
]
+=
offset
;
delta
[
Z_AXIS
]
+=
offset
;
delta
[
TOWER_1
]
+=
offset
;
delta
[
TOWER_2
]
+=
offset
;
delta
[
TOWER_3
]
+=
offset
;
if
(
debugLevel
&
DEBUG_DEBUG
)
{
ECHO_SMV
(
DEB
,
"grid_x="
,
grid_x
);
...
...
@@ -2730,10 +2724,10 @@ static void clean_up_after_endstop_move() {
ECHO_MV
(
" ADC B:"
,
degBed
(),
1
);
ECHO_MV
(
"C->"
,
rawBedTemp
()
/
OVERSAMPLENR
,
0
);
#endif
for
(
uint8_t
cur_hotend
=
0
;
cur_hotend
<
HOTENDS
;
++
cur_hotend
)
{
ECHO_MV
(
" T"
,
cur_hotend
);
ECHO_MV
(
":"
,
degHotend
(
cur_hotend
),
1
);
ECHO_MV
(
"C->"
,
rawHotendTemp
(
cur_hotend
)
/
OVERSAMPLENR
,
0
);
for
(
uint8_t
h
=
0
;
h
<
HOTENDS
;
++
h
)
{
ECHO_MV
(
" T"
,
h
);
ECHO_MV
(
":"
,
degHotend
(
h
),
1
);
ECHO_MV
(
"C->"
,
rawHotendTemp
(
h
)
/
OVERSAMPLENR
,
0
);
}
#endif
}
...
...
@@ -2827,7 +2821,7 @@ void gcode_get_destination() {
for
(
int
i
=
0
;
i
<
NUM_AXIS
;
i
++
)
{
if
(
code_seen
(
axis_codes
[
i
]))
{
destination
[
i
]
=
code_value
()
+
(
axis_relative_modes
[
i
]
||
relative_mode
?
current_position
[
i
]
:
0
);
destination
[
i
]
=
code_value
()
+
(
axis_relative_modes
[
i
]
||
relative_mode
?
current_position
[
i
]
:
-
hotend_offset
[
i
][
active_extruder
]
);
}
else
{
destination
[
i
]
=
current_position
[
i
];
...
...
@@ -5167,7 +5161,7 @@ inline void gcode_M114() {
zpos
=
count_position
[
Z_AXIS
];
CRITICAL_SECTION_END
;
#if MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(COREXY) || MECH(CORE
YX) || MECH(COREXZ) || MECH(COREZX
)
ECHO_M
(
MSG_COUNT_A
);
#elif MECH(DELTA)
ECHO_M
(
MSG_COUNT_ALPHA
);
...
...
@@ -5176,7 +5170,7 @@ inline void gcode_M114() {
#endif
ECHO_V
(
xpos
);
#if
ENABLED(COREXY
)
#if
MECH(COREXY) || MECH(COREYX
)
ECHO_M
(
" B:"
);
#elif MECH(DELTA)
ECHO_M
(
" Beta:"
);
...
...
@@ -5185,7 +5179,7 @@ inline void gcode_M114() {
#endif
ECHO_V
(
ypos
);
#if
ENABLED(COREXZ
)
#if
MECH(COREXZ) || MECH(COREZX
)
ECHO_M
(
" C:"
);
#elif MECH(DELTA)
ECHO_M
(
" Teta:"
);
...
...
@@ -5685,27 +5679,24 @@ inline void gcode_M206() {
}
#endif // FWRETRACT
#if HOTENDS > 1
/**
* M218 - set hotend offset (in mm), T<extruder_number> X<offset_on_X> Y<offset_on_Y>
*/
inline
void
gcode_M218
()
{
if
(
setTargetedExtruder
(
218
))
return
;
/**
* M218 - set hotend offset (in mm), H<hotend_number> X<offset_on_X> Y<offset_on_Y> Z<offset_on_Z>
*/
inline
void
gcode_M218
()
{
if
(
setTargetedHotend
(
218
))
return
;
if
(
code_seen
(
'X'
))
hotend_offset
[
X_AXIS
][
target_extruder
]
=
code_value
();
if
(
code_seen
(
'Y'
))
hotend_offset
[
Y_AXIS
][
target_extruder
]
=
code_value
();
if
(
code_seen
(
'Z'
))
hotend_offset
[
Z_AXIS
][
target_extruder
]
=
code_value
();
if
(
code_seen
(
'X'
))
hotend_offset
[
X_AXIS
][
target_extruder
]
=
code_value
();
if
(
code_seen
(
'Y'
))
hotend_offset
[
Y_AXIS
][
target_extruder
]
=
code_value
();
if
(
code_seen
(
'Z'
))
hotend_offset
[
Z_AXIS
][
target_extruder
]
=
code_value
();
ECHO_SM
(
DB
,
SERIAL_HOTEND_OFFSET
);
for
(
int
e
=
0
;
e
<
HOTENDS
;
e
++
)
{
ECHO_MV
(
" "
,
hotend_offset
[
X_AXIS
][
e
]);
ECHO_MV
(
","
,
hotend_offset
[
Y_AXIS
][
e
]);
ECHO_MV
(
","
,
hotend_offset
[
Z_AXIS
][
e
]);
}
ECHO_E
;
ECHO_SM
(
DB
,
SERIAL_HOTEND_OFFSET
);
for
(
uint8_t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
ECHO_MV
(
" "
,
hotend_offset
[
X_AXIS
][
h
]);
ECHO_MV
(
","
,
hotend_offset
[
Y_AXIS
][
h
]);
ECHO_MV
(
","
,
hotend_offset
[
Z_AXIS
][
h
]);
}
#endif // HOTENDS > 1
ECHO_E
;
}
/**
* M220: Set speed percentage factor, aka "Feed Rate" (M220 S95)
...
...
@@ -5898,25 +5889,25 @@ inline void gcode_M226() {
// multi-hotend PID patch: M301 updates or prints a single hotend's PID values
// default behaviour (omitting E parameter) is to update for hotend 0 only
int
e
=
code_seen
(
'H'
)
?
code_value
()
:
0
;
// hotend being updated
int
h
=
code_seen
(
'H'
)
?
code_value
()
:
0
;
// hotend being updated
if
(
e
<
HOTENDS
)
{
// catch bad input value
if
(
code_seen
(
'P'
))
PID_PARAM
(
Kp
,
e
)
=
code_value
();
if
(
code_seen
(
'I'
))
PID_PARAM
(
Ki
,
e
)
=
scalePID_i
(
code_value
());
if
(
code_seen
(
'D'
))
PID_PARAM
(
Kd
,
e
)
=
scalePID_d
(
code_value
());
if
(
h
<
HOTENDS
)
{
// catch bad input value
if
(
code_seen
(
'P'
))
PID_PARAM
(
Kp
,
h
)
=
code_value
();
if
(
code_seen
(
'I'
))
PID_PARAM
(
Ki
,
h
)
=
scalePID_i
(
code_value
());
if
(
code_seen
(
'D'
))
PID_PARAM
(
Kd
,
h
)
=
scalePID_d
(
code_value
());
#if ENABLED(PID_ADD_EXTRUSION_RATE)
if
(
code_seen
(
'C'
))
PID_PARAM
(
Kc
,
e
)
=
code_value
();
if
(
code_seen
(
'C'
))
PID_PARAM
(
Kc
,
h
)
=
code_value
();
if
(
code_seen
(
'L'
))
lpq_len
=
code_value
();
NOMORE
(
lpq_len
,
LPQ_MAX_LEN
);
#endif
updatePID
();
ECHO_SMV
(
OK
,
"
e:"
,
e
);
ECHO_MV
(
" p:"
,
PID_PARAM
(
Kp
,
e
));
ECHO_MV
(
" i:"
,
unscalePID_i
(
PID_PARAM
(
Ki
,
e
)));
ECHO_MV
(
" d:"
,
unscalePID_d
(
PID_PARAM
(
Kd
,
e
)));
ECHO_SMV
(
OK
,
"
H:"
,
h
);
ECHO_MV
(
" p:"
,
PID_PARAM
(
Kp
,
h
));
ECHO_MV
(
" i:"
,
unscalePID_i
(
PID_PARAM
(
Ki
,
h
)));
ECHO_MV
(
" d:"
,
unscalePID_d
(
PID_PARAM
(
Kd
,
h
)));
#if ENABLED(PID_ADD_EXTRUSION_RATE)
ECHO_MV
(
" c:"
,
PID_PARAM
(
Kc
,
e
));
ECHO_MV
(
" c:"
,
PID_PARAM
(
Kc
,
h
));
#endif
ECHO_E
;
}
...
...
@@ -6295,9 +6286,13 @@ inline void gcode_M400() { st_synchronize(); }
#if MECH(CARTESIAN)
ECHO_M
(
"cartesian"
);
#elif MECH(COREXY)
ECHO_M
(
"coreXY"
);
ECHO_M
(
"corexy"
);
#elif MECH(COREYX)
ECHO_M
(
"coreyx"
);
#elif MECH(COREXZ)
ECHO_M
(
"coreXZ"
);
ECHO_M
(
"corexz"
);
#elif MECH(COREZX)
ECHO_M
(
"corezx"
);
#elif MECH(DELTA)
ECHO_M
(
"delta"
);
#endif
...
...
@@ -6574,21 +6569,21 @@ inline void gcode_M503() {
#if HEATER_USES_AD595
/**
* M595 - set Hotend AD595 offset & Gain
T
<hotend_number> O<offset> S<gain>
* M595 - set Hotend AD595 offset & Gain
H
<hotend_number> O<offset> S<gain>
*/
inline
void
gcode_M595
()
{
if
(
setTargeted
Extruder
(
595
))
return
;
if
(
setTargeted
Hotend
(
595
))
return
;
if
(
code_seen
(
'O'
))
ad595_offset
[
target_extruder
]
=
code_value
();
if
(
code_seen
(
'S'
))
ad595_gain
[
target_extruder
]
=
code_value
();
for
(
in
t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
for
(
uint8_
t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
// if gain == 0 you get MINTEMP!
if
(
ad595_gain
[
h
]
==
0
)
ad595_gain
[
h
]
=
1
;
}
ECHO_LM
(
DB
,
MSG_AD595
);
for
(
in
t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
for
(
uint8_
t
h
=
0
;
h
<
HOTENDS
;
h
++
)
{
ECHO_SMV
(
DB
,
"T"
,
h
);
ECHO_MV
(
" Offset: "
,
ad595_offset
[
h
]);
ECHO_EMV
(
", Gain: "
,
ad595_gain
[
h
]);
...
...
@@ -6625,7 +6620,7 @@ inline void gcode_M503() {
#if MECH(DELTA)
float
fr60
=
feedrate
/
60
;
#define RUNPLAN calculate_delta(destination); \
plan_buffer_line(delta[
X_AXIS], delta[Y_AXIS], delta[Z_AXIS
], destination[E_AXIS], fr60, active_extruder, active_driver);
plan_buffer_line(delta[
TOWER_1], delta[TOWER_2], delta[TOWER_3
], destination[E_AXIS], fr60, active_extruder, active_driver);
#else
#define RUNPLAN line_to_destination();
#endif
...
...
@@ -6739,8 +6734,8 @@ inline void gcode_M503() {
#if MECH(DELTA)
// Move XYZ to starting position, then E
calculate_delta
(
lastpos
);
plan_buffer_line
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
destination
[
E_AXIS
],
fr60
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
lastpos
[
E_AXIS
],
fr60
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
destination
[
E_AXIS
],
fr60
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
lastpos
[
E_AXIS
],
fr60
,
active_extruder
,
active_driver
);
#else
// Move XY to starting position, then Z, then E
destination
[
X_AXIS
]
=
lastpos
[
X_AXIS
];
...
...
@@ -7046,14 +7041,6 @@ inline void gcode_T(uint8_t tmp_extruder) {
st_synchronize
();
}
// apply Y & Z extruder offset (x offset is already used in determining home pos)
current_position
[
Y_AXIS
]
=
current_position
[
Y_AXIS
]
-
hotend_offset
[
Y_AXIS
][
active_extruder
]
+
hotend_offset
[
Y_AXIS
][
target_extruder
];
current_position
[
Z_AXIS
]
=
current_position
[
Z_AXIS
]
-
hotend_offset
[
Z_AXIS
][
active_extruder
]
+
hotend_offset
[
Z_AXIS
][
target_extruder
];
active_extruder
=
target_extruder
;
// This function resets the max/min values - the current position may be overwritten below.
...
...
@@ -7080,11 +7067,6 @@ inline void gcode_T(uint8_t tmp_extruder) {
delayed_move_time
=
0
;
}
#else // !DUAL_X_CARRIAGE
// Offset hotend (XYZ)
#if HOTENDS > 1
for
(
int
i
=
X_AXIS
;
i
<=
Z_AXIS
;
i
++
)
current_position
[
i
]
+=
hotend_offset
[
i
][
target_extruder
]
-
hotend_offset
[
i
][
active_extruder
];
#endif // HOTENDS > 1
#if ENABLED(MKR4)
#if (EXTRUDERS == 4) && HAS(E0E2) && HAS(E1E3) && (DRIVER_EXTRUDERS == 2)
...
...
@@ -7613,11 +7595,8 @@ void process_next_command() {
gcode_M209
();
break
;
#endif // FWRETRACT
#if HOTENDS > 1
case
218
:
// M218 - set hotend offset (in mm), T<extruder_number> X<offset_on_X> Y<offset_on_Y>
gcode_M218
();
break
;
#endif
case
218
:
// M218 - set hotend offset (in mm), T<extruder_number> X<offset_on_X> Y<offset_on_Y>
gcode_M218
();
break
;
case
220
:
// M220 S<factor in percent> - set speed factor override percentage
gcode_M220
();
break
;
case
221
:
// M221 T<extruder> S<factor in percent> - set extrude factor override percentage
...
...
@@ -7922,12 +7901,12 @@ void clamp_to_software_endstops(float target[3]) {
ECHO_LMV
(
DEB
,
"target[X_AXIS]="
,
target
[
X_AXIS
]);
ECHO_LMV
(
DEB
,
"target[Y_AXIS]="
,
target
[
Y_AXIS
]);
ECHO_LMV
(
DEB
,
"target[Z_AXIS]="
,
target
[
Z_AXIS
]);
ECHO_LMV
(
DEB
,
"delta[
X_AXIS]="
,
delta
[
X_AXIS
]);
ECHO_LMV
(
DEB
,
"delta[
Y_AXIS]="
,
delta
[
Y_AXIS
]);
ECHO_LMV
(
DEB
,
"delta[
Z_AXIS]="
,
delta
[
Z_AXIS
]);
ECHO_LMV
(
DEB
,
"delta[
TOWER_1]="
,
delta
[
TOWER_1
]);
ECHO_LMV
(
DEB
,
"delta[
TOWER_2]="
,
delta
[
TOWER_2
]);
ECHO_LMV
(
DEB
,
"delta[
TOWER_3]="
,
delta
[
TOWER_3
]);
}
plan_buffer_line
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
target
[
E_AXIS
],
frfm
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
target
[
E_AXIS
],
frfm
,
active_extruder
,
active_driver
);
}
return
true
;
}
...
...
@@ -7976,7 +7955,7 @@ void clamp_to_software_endstops(float target[3]) {
#endif // DUAL_X_CARRIAGE
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
YX) || MECH(COREXZ) || MECH(COREZX
)
inline
bool
prepare_move_cartesian
()
{
// Do not use feedrate_multiplier for E or Z only moves
...
...
@@ -7989,7 +7968,7 @@ void clamp_to_software_endstops(float target[3]) {
return
true
;
}
#endif // CARTESIAN || COREXY || CORE
XZ
#endif // CARTESIAN || COREXY || CORE
YX || COREXZ || COREZX
/**
* Prepare a single move and get ready for the next one
...
...
@@ -8015,7 +7994,7 @@ void prepare_move() {
if
(
!
prepare_move_dual_x_carriage
())
return
;
#endif
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(CARTESIAN) || MECH(COREXY) || MECH(CORE
YX) || MECH(COREXZ) || MECH(COREZX
)
if
(
!
prepare_move_cartesian
())
return
;
#endif
...
...
@@ -8138,7 +8117,7 @@ void plan_arc(
#if MECH(DELTA) || MECH(SCARA)
calculate_delta
(
arc_target
);
adjust_delta
(
arc_target
);
plan_buffer_line
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
arc_target
[
E_AXIS
],
feed_rate
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
arc_target
[
E_AXIS
],
feed_rate
,
active_extruder
,
active_driver
);
#else
plan_buffer_line
(
arc_target
[
X_AXIS
],
arc_target
[
Y_AXIS
],
arc_target
[
Z_AXIS
],
arc_target
[
E_AXIS
],
feed_rate
,
active_extruder
,
active_driver
);
#endif
...
...
@@ -8148,7 +8127,7 @@ void plan_arc(
#if MECH(DELTA) || MECH(SCARA)
calculate_delta
(
target
);
adjust_delta
(
target
);
plan_buffer_line
(
delta
[
X_AXIS
],
delta
[
Y_AXIS
],
delta
[
Z_AXIS
],
target
[
E_AXIS
],
feed_rate
,
active_extruder
,
active_driver
);
plan_buffer_line
(
delta
[
TOWER_1
],
delta
[
TOWER_2
],
delta
[
TOWER_3
],
target
[
E_AXIS
],
feed_rate
,
active_extruder
,
active_driver
);
#else
plan_buffer_line
(
target
[
X_AXIS
],
target
[
Y_AXIS
],
target
[
Z_AXIS
],
target
[
E_AXIS
],
feed_rate
,
active_extruder
,
active_driver
);
#endif
...
...
@@ -8290,8 +8269,8 @@ void plan_arc(
float
max_temp
=
0.0
;
if
(
millis
()
>
next_status_led_update_ms
)
{
next_status_led_update_ms
+=
500
;
// Update every 0.5s
for
(
uint8_t
cur_hotend
=
0
;
cur_hotend
<
HOTENDS
;
++
cur_hotend
)
max_temp
=
max
(
max
(
max_temp
,
degHotend
(
cur_hotend
)),
degTargetHotend
(
cur_hotend
));
for
(
uint8_t
h
=
0
;
h
<
HOTENDS
;
++
h
)
max_temp
=
max
(
max
(
max_temp
,
degHotend
(
h
)),
degTargetHotend
(
h
));
#if HAS(TEMP_BED)
max_temp
=
max
(
max
(
max_temp
,
degTargetBed
()),
degBed
());
#endif
...
...
@@ -8677,6 +8656,19 @@ bool setTargetedExtruder(int code) {
return
false
;
}
bool
setTargetedHotend
(
int
code
)
{
target_extruder
=
active_extruder
;
if
(
code_seen
(
'H'
))
{
target_extruder
=
code_value_short
();
if
(
target_extruder
>=
HOTENDS
)
{
ECHO_SMV
(
ER
,
"M"
,
code
);
ECHO_EMV
(
" "
SERIAL_INVALID_HOTEND
,
target_extruder
);
return
true
;
}
}
return
false
;
}
float
calculate_volumetric_multiplier
(
float
diameter
)
{
if
(
!
volumetric_enabled
||
diameter
==
0
)
return
1.0
;
float
d2
=
diameter
*
0.5
;
...
...
MK/module/MK_Main.h
View file @
5f774564
...
...
@@ -16,6 +16,9 @@ void manage_inactivity(bool ignore_stepper_queue = false);
void
FlushSerialRequestResend
();
void
ok_to_send
();
bool
setTargetedExtruder
(
int
code
);
bool
setTargetedHotend
(
int
code
);
#if MECH(DELTA)
float
probe_bed
(
float
x
,
float
y
);
void
set_delta_constants
();
...
...
@@ -24,7 +27,6 @@ void ok_to_send();
void
home_delta_axis
();
void
calibration_report
();
void
bed_probe_all
();
void
set_default_z_probe_offset
();
void
set_delta_constants
();
void
save_carriage_positions
(
int
position_num
);
void
calculate_delta
(
float
cartesian
[
3
]);
...
...
@@ -44,6 +46,7 @@ void ok_to_send();
extern
float
delta_radius
;
extern
float
delta_diagonal_rod
;
#endif
#if MECH(SCARA)
void
calculate_delta
(
float
cartesian
[
3
]);
void
calculate_SCARA_forward_Transform
(
float
f_scara
[
3
]);
...
...
@@ -103,17 +106,13 @@ extern float volumetric_multiplier[EXTRUDERS]; // reciprocal of cross-sectional
extern
float
current_position
[
NUM_AXIS
];
extern
float
destination
[
NUM_AXIS
];
extern
float
home_offset
[
3
];
extern
float
hotend_offset
[
3
][
HOTENDS
];
extern
float
min_pos
[
3
];
extern
float
max_pos
[
3
];
extern
float
zprobe_zoffset
;
extern
uint8_t
axis_known_position
;
extern
uint8_t
axis_was_homed
;
// Hotend offset
#if HOTENDS > 1
extern
float
hotend_offset
[
3
][
HOTENDS
];
#endif // HOTENDS > 1
#if HEATER_USES_AD595
extern
float
ad595_offset
[
HOTENDS
];
extern
float
ad595_gain
[
HOTENDS
];
...
...
@@ -123,13 +122,7 @@ extern uint8_t axis_was_homed;
extern
uint8_t
old_color
;
// old color for system NPR2
#endif
#if MECH(DELTA)
extern
float
z_probe_offset
[
3
];
extern
float
endstop_adj
[
3
];
extern
float
tower_adj
[
6
];
extern
float
delta_radius
;
extern
float
delta_diagonal_rod
;
#elif ENABLED(Z_DUAL_ENDSTOPS)
#if ENABLED(Z_DUAL_ENDSTOPS)
extern
float
z_endstop_adj
;
#endif
...
...
MK/module/boards/502.h
View file @
5f774564
...
...
@@ -85,9 +85,9 @@
#define ORIG_TEMP_2_PIN 3 // PA22, analog pin on piggy
#define ORIG_TEMP_3_PIN 4 // PA6, analog on piggy
#define LED_PWM1_PIN
40 // PC8
#define LED_PWM2_PIN 4
1 // PC9
#define LED_PWM3_PIN
36 // PC4
#define LED_PWM1_PIN
36 // PC4
#define LED_PWM2_PIN 4
0 // PC8
#define LED_PWM3_PIN
41 // PC9
#define EXP_VOLTAGE_LEVEL_PIN 65
...
...
MK/module/language/language.h
View file @
5f774564
...
...
@@ -63,9 +63,13 @@
#if MECH(CARTESIAN)
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:Cartesian EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#elif MECH(COREXY)
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:Core_XY EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:CoreXY EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#elif MECH(COREYX)
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:CoreYX EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#elif MECH(COREXZ)
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:Core_XZ EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:CoreXZ EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#elif MECH(COREZX)
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:CoreZX EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#elif MECH(DELTA)
#define SERIAL_M115_REPORT "FIRMWARE_NAME:" BUILD_VERSION " FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:Delta EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID "\n"
#elif MECH(SCARA)
...
...
@@ -91,6 +95,7 @@
#define SERIAL_BEGIN_FILE_LIST "Begin file list"
#define SERIAL_END_FILE_LIST "End file list"
#define SERIAL_INVALID_EXTRUDER "Invalid extruder"
#define SERIAL_INVALID_HOTEND "Invalid hotend"
#define SERIAL_INVALID_SOLENOID "Invalid solenoid"
#define SERIAL_ERR_NO_THERMISTORS "No thermistors - no temperature"
#define SERIAL_COUNT_X " Count X: "
...
...
MK/module/mechanics.h
View file @
5f774564
...
...
@@ -5,7 +5,9 @@
#define MECH_UNKNOWN -1
#define MECH_CARTESIAN 0
#define MECH_COREXY 1
#define MECH_COREXZ 2
#define MECH_COREYX 2
#define MECH_COREXZ 8
#define MECH_COREZX 9
#define MECH_DELTA 3
#define MECH_SCARA 4
...
...
MK/module/motion/planner.cpp
View file @
5f774564
...
...
@@ -511,7 +511,7 @@ float junction_deviation = 0.1;
// The target position of the tool in absolute steps
// Calculate target position in absolute steps
//this should be done after the wait, because otherwise a M92 code within the gcode disrupts this calculation somehow
long
target
[
NUM_AXIS
];
int32_t
target
[
NUM_AXIS
];
target
[
X_AXIS
]
=
lround
(
x
*
axis_steps_per_unit
[
X_AXIS
]);
target
[
Y_AXIS
]
=
lround
(
y
*
axis_steps_per_unit
[
Y_AXIS
]);
target
[
Z_AXIS
]
=
lround
(
z
*
axis_steps_per_unit
[
Z_AXIS
]);
...
...
@@ -528,16 +528,22 @@ float junction_deviation = 0.1;
}
#endif
long
dx
=
target
[
X_AXIS
]
-
position
[
X_AXIS
],
dy
=
target
[
Y_AXIS
]
-
position
[
Y_AXIS
],
dz
=
target
[
Z_AXIS
]
-
position
[
Z_AXIS
],
de
=
target
[
E_AXIS
]
-
position
[
E_AXIS
];
int32_t
dx
=
target
[
X_AXIS
]
-
position
[
X_AXIS
],
dy
=
target
[
Y_AXIS
]
-
position
[
Y_AXIS
],
dz
=
target
[
Z_AXIS
]
-
position
[
Z_AXIS
],
de
=
target
[
E_AXIS
]
-
position
[
E_AXIS
];
#if MECH(COREXY)
long
da
=
dx
+
COREX_YZ_FACTOR
*
dy
;
long
db
=
dx
-
COREX_YZ_FACTOR
*
dy
;
int32_t
da
=
dx
+
COREX_YZ_FACTOR
*
dy
;
int32_t
db
=
dx
-
COREX_YZ_FACTOR
*
dy
;
#elif MECH(COREYX)
int32_t
da
=
dy
+
COREX_YZ_FACTOR
*
dx
;
int32_t
db
=
dy
-
COREX_YZ_FACTOR
*
dx
;
#elif MECH(COREXZ)
long
da
=
dx
+
COREX_YZ_FACTOR
*
dz
;
long
dc
=
dx
-
COREX_YZ_FACTOR
*
dz
;
int32_t
da
=
dx
+
COREX_YZ_FACTOR
*
dz
;
int32_t
dc
=
dx
-
COREX_YZ_FACTOR
*
dz
;
#elif MECH(COREZX)
int32_t
da
=
dz
+
COREX_YZ_FACTOR
*
dx
;
int32_t
dc
=
dz
-
COREX_YZ_FACTOR
*
dx
;
#endif
#if ENABLED(PREVENT_DANGEROUS_EXTRUDE)
...
...
@@ -577,13 +583,12 @@ float junction_deviation = 0.1;
block
->
busy
=
false
;
// Number of steps for each axis
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
// corexy planning
// these equations follow the form of the dA and dB equations on http://www.corexy.com/theory.html
block
->
steps
[
A_AXIS
]
=
labs
(
da
);
block
->
steps
[
B_AXIS
]
=
labs
(
db
);
block
->
steps
[
Z_AXIS
]
=
labs
(
dz
);
#elif MECH(COREXZ)
#elif MECH(COREXZ)
|| MECH(COREZX)
// corexz planning
block
->
steps
[
A_AXIS
]
=
labs
(
da
);
block
->
steps
[
Y_AXIS
]
=
labs
(
dy
);
...
...
@@ -624,13 +629,13 @@ float junction_deviation = 0.1;
// Compute direction bits for this block
uint8_t
dirb
=
0
;
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
if
(
dx
<
0
)
SBI
(
dirb
,
X_HEAD
);
// Save the real Extruder (head) direction in X Axis
if
(
dy
<
0
)
SBI
(
dirb
,
Y_HEAD
);
// ...and Y
if
(
dz
<
0
)
SBI
(
dirb
,
Z_AXIS
);
if
(
da
<
0
)
SBI
(
dirb
,
A_AXIS
);
// Motor A direction
if
(
db
<
0
)
SBI
(
dirb
,
B_AXIS
);
// Motor B direction
#elif MECH(COREXZ)
#elif MECH(COREXZ)
|| MECH(COREZX)
if
(
dx
<
0
)
SBI
(
dirb
,
X_HEAD
);
// Save the real Extruder (head) direction in X Axis
if
(
dy
<
0
)
SBI
(
dirb
,
Y_AXIS
);
if
(
dz
<
0
)
SBI
(
dirb
,
Z_HEAD
);
// ...and Z
...
...
@@ -647,7 +652,7 @@ float junction_deviation = 0.1;
block
->
active_driver
=
driver
;
// Enable active axes
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
if
(
block
->
steps
[
A_AXIS
]
||
block
->
steps
[
B_AXIS
])
{
enable_x
();
enable_y
();
...
...
@@ -655,7 +660,7 @@ float junction_deviation = 0.1;
#if DISABLED(Z_LATE_ENABLE)
if
(
block
->
steps
[
Z_AXIS
])
enable_z
();
#endif
#elif MECH(COREXZ)
#elif MECH(COREXZ)
|| MECH(COREZX)
if
(
block
->
steps
[
A_AXIS
]
||
block
->
steps
[
C_AXIS
])
{
enable_x
();
enable_z
();
...
...
@@ -815,14 +820,14 @@ float junction_deviation = 0.1;
* So we need to create other 2 "AXIS", named X_HEAD and Y_HEAD, meaning the real displacement of the Head.
* Having the real displacement of the head, we can calculate the total movement length and apply the desired speed.
*/
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
float
delta_mm
[
6
];
delta_mm
[
X_HEAD
]
=
dx
/
axis_steps_per_unit
[
A_AXIS
];
delta_mm
[
Y_HEAD
]
=
dy
/
axis_steps_per_unit
[
B_AXIS
];
delta_mm
[
Z_AXIS
]
=
dz
/
axis_steps_per_unit
[
Z_AXIS
];
delta_mm
[
A_AXIS
]
=
da
/
axis_steps_per_unit
[
A_AXIS
];
delta_mm
[
B_AXIS
]
=
db
/
axis_steps_per_unit
[
B_AXIS
];
#elif MECH(COREXZ)
#elif MECH(COREXZ)
|| MECH(COREZX)
float
delta_mm
[
6
];
delta_mm
[
X_HEAD
]
=
dx
/
axis_steps_per_unit
[
A_AXIS
];
delta_mm
[
Y_AXIS
]
=
dy
/
axis_steps_per_unit
[
Y_AXIS
];
...
...
@@ -842,9 +847,9 @@ float junction_deviation = 0.1;
}
else
{
block
->
millimeters
=
sqrt
(
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
square
(
delta_mm
[
X_HEAD
])
+
square
(
delta_mm
[
Y_HEAD
])
+
square
(
delta_mm
[
Z_AXIS
])
#elif MECH(COREXZ)
#elif MECH(COREXZ)
|| MECH(COREZX)
square
(
delta_mm
[
X_HEAD
])
+
square
(
delta_mm
[
Y_AXIS
])
+
square
(
delta_mm
[
Z_HEAD
])
#else
square
(
delta_mm
[
X_AXIS
])
+
square
(
delta_mm
[
Y_AXIS
])
+
square
(
delta_mm
[
Z_AXIS
])
...
...
MK/module/motion/stepper.cpp
View file @
5f774564
...
...
@@ -311,9 +311,9 @@ void checkHitEndstops() {
}
}
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
#define CORE_AXIS_2 B_AXIS
#elif MECH(COREXZ)
#elif MECH(COREXZ)
|| MECH(COREZX)
#define CORE_AXIS_2 C_AXIS
#endif
...
...
@@ -342,7 +342,7 @@ inline void update_endstops() {
// TEST_ENDSTOP: test the old and the current status of an endstop
#define TEST_ENDSTOP(ENDSTOP) (TEST(current_endstop_bits, ENDSTOP) && TEST(old_endstop_bits, ENDSTOP))
#if MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(COREXY) || MECH(CORE
YX)|| MECH(COREXZ) || MECH(COREZX
)
#define _SET_TRIGSTEPS(AXIS) do { \
float axis_pos = count_position[_AXIS(AXIS)]; \
...
...
@@ -357,7 +357,7 @@ inline void update_endstops() {
#define _SET_TRIGSTEPS(AXIS) endstops_trigsteps[_AXIS(AXIS)] = count_position[_AXIS(AXIS)]
#endif // COREXY || CORE
XZ
#endif // COREXY || CORE
YX || COREXZ || COREZX
#define UPDATE_ENDSTOP(AXIS,MINMAX) do { \
SET_ENDSTOP_BIT(AXIS, MINMAX); \
...
...
@@ -368,7 +368,7 @@ inline void update_endstops() {
} \
} while(0)
#if MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(COREXY) || MECH(CORE
YX)|| MECH(COREXZ) || MECH(COREZX
)
// Head direction in -X axis for CoreXY and CoreXZ bots.
// If Delta1 == -Delta2, the movement is only in Y or Z axis
if
((
current_block
->
steps
[
A_AXIS
]
!=
current_block
->
steps
[
CORE_AXIS_2
])
||
(
TEST
(
out_bits
,
A_AXIS
)
==
TEST
(
out_bits
,
CORE_AXIS_2
)))
{
...
...
@@ -398,11 +398,11 @@ inline void update_endstops() {
#endif
}
}
#if MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(COREXY) || MECH(CORE
YX)|| MECH(COREXZ) || MECH(COREZX
)
}
#endif
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
// Head direction in -Y axis for CoreXY bots.
// If DeltaX == DeltaY, the movement is only in X axis
if
((
current_block
->
steps
[
A_AXIS
]
!=
current_block
->
steps
[
B_AXIS
])
||
(
TEST
(
out_bits
,
A_AXIS
)
!=
TEST
(
out_bits
,
B_AXIS
)))
{
...
...
@@ -420,11 +420,11 @@ inline void update_endstops() {
UPDATE_ENDSTOP
(
Y
,
MAX
);
#endif
}
#if MECH(COREXY)
#if MECH(COREXY)
|| MECH(COREYX)
}
#endif
#if MECH(COREXZ)
#if MECH(COREXZ)
|| MECH(COREZX)
// Head direction in -Z axis for CoreXZ bots.
// If DeltaX == DeltaZ, the movement is only in X axis
if
((
current_block
->
steps
[
A_AXIS
]
!=
current_block
->
steps
[
C_AXIS
])
||
(
TEST
(
out_bits
,
A_AXIS
)
!=
TEST
(
out_bits
,
C_AXIS
)))
{
...
...
@@ -495,7 +495,7 @@ inline void update_endstops() {
#endif // !Z_DUAL_ENDSTOPS
#endif // Z_MAX_PIN
}
#if MECH(COREXZ)
#if MECH(COREXZ)
|| MECH(COREZX)
}
#endif
#if ENABLED(NPR2)
...
...
@@ -569,8 +569,8 @@ FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) {
/**
* Set the stepper direction of each axis
*
* X_AXIS=A_AXIS and Y_AXIS=B_AXIS for COREXY
* X_AXIS=A_AXIS and Z_AXIS=C_AXIS for COREXZ
* X_AXIS=A_AXIS and Y_AXIS=B_AXIS for COREXY
or COREYX
* X_AXIS=A_AXIS and Z_AXIS=C_AXIS for COREXZ
or COREZX
*/
void
set_stepper_direction
(
bool
onlye
)
{
...
...
@@ -1207,7 +1207,7 @@ long st_get_position(uint8_t axis) {
float
st_get_axis_position_mm
(
AxisEnum
axis
)
{
float
axis_pos
;
#if
ENABLED(COREXY) | ENABLED(COREXZ
)
#if
MECH(COREXY) || MECH(COREYX) || MECH(COREXZ) || MECH(COREZX
)
if
(
axis
==
X_AXIS
||
axis
==
CORE_AXIS_2
)
{
CRITICAL_SECTION_START
;
long
pos1
=
count_position
[
A_AXIS
],
...
...
MK/module/motion/stepper.h
View file @
5f774564
...
...
@@ -25,8 +25,9 @@
/**
* Axis indices as enumerated constants
*
* A_AXIS and B_AXIS are used by COREXY printers
* X_HEAD and Y_HEAD is used for systems that don't have a 1:1 relationship between X_AXIS and X Head movement, like CoreXY bots.
* A_AXIS and B_AXIS are used by COREXY or COREYX printers
* A_AXIS and C_AXIS are used by COREXZ or COREZX printers
* X_HEAD and Y_HEAD and Z_HEAD is used for systems that don't have a 1:1 relationship between X_AXIS and X Head movement, like CoreXY bots.
*/
enum
AxisEnum
{
X_AXIS
=
0
,
A_AXIS
=
0
,
Y_AXIS
=
1
,
B_AXIS
=
1
,
Z_AXIS
=
2
,
C_AXIS
=
2
,
E_AXIS
=
3
,
X_HEAD
=
4
,
Y_HEAD
=
5
,
Z_HEAD
=
5
};
enum
EndstopEnum
{
X_MIN
=
0
,
Y_MIN
=
1
,
Z_MIN
=
2
,
Z_PROBE
=
3
,
X_MAX
=
4
,
Y_MAX
=
5
,
Z_MAX
=
6
,
Z2_MIN
=
7
,
Z2_MAX
=
8
,
E_MIN
=
9
};
...
...
MK/module/sanitycheck.h
View file @
5f774564
...
...
@@ -1190,7 +1190,7 @@
#error DEPENDENCY ERROR: Missing setting MANUAL_Z_HOME_POS
#endif
#endif
#if MECH(COREXY) || MECH(CORE
XZ
)
#if MECH(COREXY) || MECH(CORE
YX) || MECH(COREXZ) || MECH(COREZX
)
#if DISABLED(COREX_YZ_FACTOR)
#error DEPENDENCY ERROR: Missing setting COREX_YZ_FACTOR
#endif
...
...
@@ -1280,8 +1280,14 @@
#if DISABLED(TOWER_C_DIAGROD_ADJ)
#error DEPENDENCY ERROR: Missing setting TOWER_C_DIAGROD_ADJ
#endif
#if DISABLED(Z_PROBE_OFFSET)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_OFFSET
#if DISABLED(X_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting X_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if DISABLED(Y_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting Y_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if DISABLED(Z_PROBE_OFFSET_FROM_EXTRUDER)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_OFFSET_FROM_EXTRUDER
#endif
#if DISABLED(Z_PROBE_DEPLOY_START_LOCATION)
#error DEPENDENCY ERROR: Missing setting Z_PROBE_DEPLOY_START_LOCATION
...
...
@@ -1346,9 +1352,12 @@
* Babystepping
*/
#if ENABLED(BABYSTEPPING)
#if
MECH(COREXY
) && ENABLED(BABYSTEP_XY)
#if
(MECH(COREXY) || MECH(COREYX)
) && ENABLED(BABYSTEP_XY)
#error CONFLICT ERROR: BABYSTEPPING only implemented for Z axis on CoreXY.
#endif
#if (MECH(COREXZ) || MECH(COREZX))
#error CONFLICT ERROR: BABYSTEPPING not implemented for CoreXZ or CoreZX.
#endif
#if MECH(SCARA)
#error CONFLICT ERROR: BABYSTEPPING is not implemented for SCARA yet.
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment