- changed homing function to not conflict with min_software_endstops/max_software_endstops (thanks rGlory)
- Corrected distance calculation. (thanks jv4779)
This commit is contained in:
parent
bb38d646d3
commit
ee764635a3
1 changed files with 46 additions and 28 deletions
|
|
@ -39,7 +39,7 @@
|
|||
- move string to flash to free RAM vor forward planner
|
||||
- M203 Temperature monitor for Repetier
|
||||
|
||||
|
||||
Version 1.3.04T
|
||||
- Implement Plannercode from Marlin V1 big thanks to Erik
|
||||
- Stepper interrupt with Step loops
|
||||
- Stepperfrequenz 30 Khz
|
||||
|
|
@ -53,6 +53,13 @@
|
|||
- Option to deaktivate ARC (G2/G3) function (save flash)
|
||||
- Removed modulo (%) operator, which uses an expensive divide
|
||||
|
||||
Version 1.3.05T
|
||||
- changed homing function to not conflict with min_software_endstops/max_software_endstops (thanks rGlory)
|
||||
- Changed check in arc_func
|
||||
- Corrected distance calculation. (thanks jv4779)
|
||||
- MAX Feed Rate for Z-Axis reduced to 2 mm/s some Printers had problems with 4 mm/s
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
|
|
@ -142,13 +149,13 @@ void __cxa_pure_virtual(){};
|
|||
// M603 - Show Free Ram
|
||||
|
||||
|
||||
#define _VERSION_TEXT "1.3.04T / 04.02.2012"
|
||||
#define _VERSION_TEXT "1.3.05T / 15.02.2012"
|
||||
|
||||
//Stepper Movement Variables
|
||||
char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
|
||||
float axis_steps_per_unit[] = _AXIS_STEP_PER_UNIT;
|
||||
float axis_steps_per_unit[4] = _AXIS_STEP_PER_UNIT;
|
||||
|
||||
float max_feedrate[] = _MAX_FEEDRATE;
|
||||
float max_feedrate[4] = _MAX_FEEDRATE;
|
||||
float homing_feedrate[] = _HOMING_FEEDRATE;
|
||||
bool axis_relative_modes[] = _AXIS_RELATIVE_MODES;
|
||||
|
||||
|
|
@ -157,7 +164,7 @@ float retract_acceleration = _RETRACT_ACCELERATION; // Normal acceleration mm/s^
|
|||
float max_xy_jerk = _MAX_XY_JERK;
|
||||
float max_z_jerk = _MAX_Z_JERK;
|
||||
|
||||
long max_acceleration_units_per_sq_second[] = _MAX_ACCELERATION_UNITS_PER_SQ_SECOND; // X, Y, Z and E max acceleration in mm/s^2 for printing moves or retracts
|
||||
long max_acceleration_units_per_sq_second[4] = _MAX_ACCELERATION_UNITS_PER_SQ_SECOND; // X, Y, Z and E max acceleration in mm/s^2 for printing moves or retracts
|
||||
|
||||
//float max_start_speed_units_per_second[] = _MAX_START_SPEED_UNITS_PER_SECOND;
|
||||
//long max_travel_acceleration_units_per_sq_second[] = _MAX_TRAVEL_ACCELERATION_UNITS_PER_SQ_SECOND; // X, Y, Z max acceleration in mm/s^2 for travel moves
|
||||
|
|
@ -517,7 +524,7 @@ void setup()
|
|||
{
|
||||
|
||||
Serial.begin(BAUDRATE);
|
||||
showString(PSTR("SprinterV2\r\n"));
|
||||
showString(PSTR("Sprinter\r\n"));
|
||||
showString(PSTR(_VERSION_TEXT));
|
||||
showString(PSTR("\r\n"));
|
||||
showString(PSTR("start\r\n"));
|
||||
|
|
@ -997,20 +1004,22 @@ FORCE_INLINE void process_commands()
|
|||
if ((X_MIN_PIN > -1 && X_HOME_DIR==-1) || (X_MAX_PIN > -1 && X_HOME_DIR==1))
|
||||
{
|
||||
st_synchronize();
|
||||
current_position[X_AXIS] = 0;
|
||||
current_position[X_AXIS] = -1.5 * X_MAX_LENGTH * X_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[X_AXIS] = 1.5 * X_MAX_LENGTH * X_HOME_DIR;
|
||||
destination[X_AXIS] = 0;
|
||||
feedrate = homing_feedrate[X_AXIS];
|
||||
prepare_move();
|
||||
|
||||
st_synchronize();
|
||||
current_position[X_AXIS] = 0;
|
||||
current_position[X_AXIS] = 5 * X_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[X_AXIS] = -5 * X_HOME_DIR;
|
||||
destination[X_AXIS] = 0;
|
||||
prepare_move();
|
||||
|
||||
st_synchronize();
|
||||
destination[X_AXIS] = 10 * X_HOME_DIR;
|
||||
st_synchronize();
|
||||
current_position[X_AXIS] = -10 * X_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[X_AXIS] = 0;
|
||||
feedrate = homing_feedrate[X_AXIS]/2 ;
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
|
@ -1027,20 +1036,22 @@ FORCE_INLINE void process_commands()
|
|||
{
|
||||
if ((Y_MIN_PIN > -1 && Y_HOME_DIR==-1) || (Y_MAX_PIN > -1 && Y_HOME_DIR==1))
|
||||
{
|
||||
current_position[Y_AXIS] = 0;
|
||||
current_position[Y_AXIS] = -1.5 * Y_MAX_LENGTH * Y_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Y_AXIS] = 1.5 * Y_MAX_LENGTH * Y_HOME_DIR;
|
||||
destination[Y_AXIS] = 0;
|
||||
feedrate = homing_feedrate[Y_AXIS];
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
||||
current_position[Y_AXIS] = 0;
|
||||
current_position[Y_AXIS] = 5 * Y_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Y_AXIS] = -5 * Y_HOME_DIR;
|
||||
destination[Y_AXIS] = 0;
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
||||
destination[Y_AXIS] = 10 * Y_HOME_DIR;
|
||||
current_position[Y_AXIS] = -10 * Y_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Y_AXIS] = 0;
|
||||
feedrate = homing_feedrate[Y_AXIS]/2;
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
|
@ -1057,20 +1068,22 @@ FORCE_INLINE void process_commands()
|
|||
{
|
||||
if ((Z_MIN_PIN > -1 && Z_HOME_DIR==-1) || (Z_MAX_PIN > -1 && Z_HOME_DIR==1))
|
||||
{
|
||||
current_position[Z_AXIS] = 0;
|
||||
current_position[Z_AXIS] = -1.5 * Z_MAX_LENGTH * Z_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Z_AXIS] = 1.5 * Z_MAX_LENGTH * Z_HOME_DIR;
|
||||
destination[Z_AXIS] = 0;
|
||||
feedrate = homing_feedrate[Z_AXIS];
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
||||
current_position[Z_AXIS] = 0;
|
||||
current_position[Z_AXIS] = 2 * Z_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Z_AXIS] = -2 * Z_HOME_DIR;
|
||||
destination[Z_AXIS] = 0;
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
||||
destination[Z_AXIS] = 3 * Z_HOME_DIR;
|
||||
current_position[Z_AXIS] = -3 * Z_HOME_DIR;
|
||||
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
|
||||
destination[Z_AXIS] = 0;
|
||||
feedrate = homing_feedrate[Z_AXIS]/2;
|
||||
prepare_move();
|
||||
st_synchronize();
|
||||
|
|
@ -1470,7 +1483,7 @@ FORCE_INLINE void process_commands()
|
|||
// }
|
||||
break;
|
||||
case 115: // M115
|
||||
showString(PSTR("FIRMWARE_NAME: SprinterV2 PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\r\n"));
|
||||
showString(PSTR("FIRMWARE_NAME: Sprinter Experimental PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1\r\n"));
|
||||
//Serial.println(uuid);
|
||||
showString(PSTR(_DEF_CHAR_UUID));
|
||||
showString(PSTR("\r\n"));
|
||||
|
|
@ -2185,8 +2198,13 @@ void plan_buffer_line(float x, float y, float z, float e, float feed_rate)
|
|||
delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS];
|
||||
delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS];
|
||||
delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS];
|
||||
block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) +
|
||||
square(delta_mm[Z_AXIS]) + square(delta_mm[E_AXIS]));
|
||||
|
||||
if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) {
|
||||
block->millimeters = fabs(delta_mm[E_AXIS]);
|
||||
} else {
|
||||
block->millimeters = sqrt(square(delta_mm[X_AXIS]) + square(delta_mm[Y_AXIS]) + square(delta_mm[Z_AXIS]));
|
||||
}
|
||||
|
||||
float inverse_millimeters = 1.0/block->millimeters; // Inverse millimeters to remove multiple divides
|
||||
|
||||
// Calculate speed in mm/second for each axis. No divide by zero due to previous checks.
|
||||
|
|
@ -2205,10 +2223,10 @@ void plan_buffer_line(float x, float y, float z, float e, float feed_rate)
|
|||
if(feed_rate<minimumfeedrate) feed_rate=minimumfeedrate;
|
||||
}
|
||||
|
||||
#ifdef SLOWDOWN
|
||||
|
||||
// slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill
|
||||
int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1);
|
||||
|
||||
#ifdef SLOWDOWN
|
||||
if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5);
|
||||
#endif
|
||||
|
||||
|
|
@ -2326,7 +2344,7 @@ void plan_buffer_line(float x, float y, float z, float e, float feed_rate)
|
|||
vmax_junction = max_z_jerk/2;
|
||||
vmax_junction = min(vmax_junction, block->nominal_speed);
|
||||
|
||||
if ((block_buffer_head != block_buffer_tail) && (previous_nominal_speed > 0.0)) {
|
||||
if ((moves_queued > 1) && (previous_nominal_speed > 0.0)) {
|
||||
float jerk = sqrt(pow((current_speed[X_AXIS]-previous_speed[X_AXIS]), 2)+pow((current_speed[Y_AXIS]-previous_speed[Y_AXIS]), 2));
|
||||
if((previous_speed[X_AXIS] != 0.0) || (previous_speed[Y_AXIS] != 0.0)) {
|
||||
vmax_junction = block->nominal_speed;
|
||||
|
|
|
|||
Loading…
Reference in a new issue