Added support for Gen3+ (Pins file only)
Added late z enable. (blddk request) Only calculate look ahead if >2 moves in buffer. Removed some FORCE_INLINE to save memory. Signed-off-by: Erik van der Zalm <erik@vdzalm.eu>
This commit is contained in:
parent
7c6141ebc4
commit
e45e5c68bb
6 changed files with 146 additions and 16 deletions
|
@ -28,7 +28,8 @@
|
|||
// Gen6 = 5,
|
||||
// Sanguinololu 1.2 and above = 62
|
||||
// Ultimaker = 7,
|
||||
// Teensylu = 8
|
||||
// Teensylu = 8,
|
||||
// Gen3+ =9
|
||||
#define MOTHERBOARD 7
|
||||
|
||||
//===========================================================================
|
||||
|
@ -201,6 +202,7 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
|
|||
#define DISABLE_Y false
|
||||
#define DISABLE_Z false
|
||||
#define DISABLE_E false // For all extruders
|
||||
//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
|
||||
|
||||
// Inverting axis direction
|
||||
//#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true
|
||||
|
|
|
@ -327,7 +327,7 @@ void loop()
|
|||
}
|
||||
|
||||
|
||||
FORCE_INLINE void get_command()
|
||||
void get_command()
|
||||
{
|
||||
while( MSerial.available() > 0 && buflen < BUFSIZE) {
|
||||
serial_char = MSerial.read();
|
||||
|
@ -474,20 +474,20 @@ FORCE_INLINE void get_command()
|
|||
}
|
||||
|
||||
|
||||
FORCE_INLINE float code_value()
|
||||
float code_value()
|
||||
{
|
||||
return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL));
|
||||
}
|
||||
FORCE_INLINE long code_value_long()
|
||||
long code_value_long()
|
||||
{
|
||||
return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10));
|
||||
}
|
||||
FORCE_INLINE bool code_seen(char code_string[]) //Return True if the string was found
|
||||
bool code_seen(char code_string[]) //Return True if the string was found
|
||||
{
|
||||
return (strstr(cmdbuffer[bufindr], code_string) != NULL);
|
||||
}
|
||||
|
||||
FORCE_INLINE bool code_seen(char code)
|
||||
bool code_seen(char code)
|
||||
{
|
||||
strchr_pointer = strchr(cmdbuffer[bufindr], code);
|
||||
return (strchr_pointer != NULL); //Return True if a character was found
|
||||
|
@ -519,7 +519,7 @@ FORCE_INLINE bool code_seen(char code)
|
|||
endstops_hit_on_purpose();\
|
||||
}
|
||||
|
||||
FORCE_INLINE void process_commands()
|
||||
void process_commands()
|
||||
{
|
||||
unsigned long codenum; //throw away variable
|
||||
char *starpos = NULL;
|
||||
|
@ -1235,7 +1235,7 @@ void ClearToSend()
|
|||
SERIAL_PROTOCOLLNPGM("ok");
|
||||
}
|
||||
|
||||
FORCE_INLINE void get_coordinates()
|
||||
void get_coordinates()
|
||||
{
|
||||
for(int8_t i=0; i < NUM_AXIS; i++) {
|
||||
if(code_seen(axis_codes[i])) destination[i] = (float)code_value() + (axis_relative_modes[i] || relative_mode)*current_position[i];
|
||||
|
@ -1247,7 +1247,7 @@ FORCE_INLINE void get_coordinates()
|
|||
}
|
||||
}
|
||||
|
||||
FORCE_INLINE void get_arc_coordinates()
|
||||
void get_arc_coordinates()
|
||||
{
|
||||
get_coordinates();
|
||||
if(code_seen('I')) offset[0] = code_value();
|
||||
|
|
125
Marlin/pins.h
125
Marlin/pins.h
|
@ -470,7 +470,7 @@
|
|||
#define X_STEP_PIN 15
|
||||
#define X_DIR_PIN 21
|
||||
#define X_MIN_PIN 18
|
||||
#define X_MAX_PIN -2
|
||||
#define X_MAX_PIN -1
|
||||
|
||||
#define Y_STEP_PIN 22
|
||||
#define Y_DIR_PIN 23
|
||||
|
@ -653,6 +653,73 @@
|
|||
|
||||
#endif
|
||||
|
||||
#if MOTHERBOARD == 71
|
||||
#define KNOWN_BOARD
|
||||
/*****************************************************************
|
||||
* Ultimaker pin assignment (Old electronics)
|
||||
******************************************************************/
|
||||
|
||||
#ifndef __AVR_ATmega1280__
|
||||
#ifndef __AVR_ATmega2560__
|
||||
#error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define X_STEP_PIN 25
|
||||
#define X_DIR_PIN 23
|
||||
#define X_MIN_PIN 15
|
||||
#define X_MAX_PIN 14
|
||||
#define X_ENABLE_PIN 27
|
||||
|
||||
#define Y_STEP_PIN 31
|
||||
#define Y_DIR_PIN 33
|
||||
#define Y_MIN_PIN 17
|
||||
#define Y_MAX_PIN 16
|
||||
#define Y_ENABLE_PIN 29
|
||||
|
||||
#define Z_STEP_PIN 37
|
||||
#define Z_DIR_PIN 39
|
||||
#define Z_MIN_PIN 19
|
||||
#define Z_MAX_PIN 18
|
||||
#define Z_ENABLE_PIN 35
|
||||
|
||||
#define HEATER_BED_PIN -1
|
||||
#define TEMP_BED_PIN -1
|
||||
|
||||
#define HEATER_0_PIN 2
|
||||
#define TEMP_0_PIN 8
|
||||
|
||||
#define HEATER_1_PIN 1
|
||||
#define TEMP_1_PIN 1
|
||||
|
||||
#define HEATER_2_PIN -1
|
||||
#define TEMP_2_PIN -1
|
||||
|
||||
#define E0_STEP_PIN 43
|
||||
#define E0_DIR_PIN 45
|
||||
#define E0_ENABLE_PIN 41
|
||||
|
||||
#define E1_STEP_PIN -1
|
||||
#define E1_DIR_PIN -1
|
||||
#define E1_ENABLE_PIN -1
|
||||
|
||||
#define SDPOWER -1
|
||||
#define SDSS -1
|
||||
#define LED_PIN -1
|
||||
#define FAN_PIN -1
|
||||
#define PS_ON_PIN -1
|
||||
#define KILL_PIN -1
|
||||
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
|
||||
|
||||
#define LCD_PINS_RS 24
|
||||
#define LCD_PINS_ENABLE 22
|
||||
#define LCD_PINS_D4 36
|
||||
#define LCD_PINS_D5 34
|
||||
#define LCD_PINS_D6 32
|
||||
#define LCD_PINS_D7 30
|
||||
|
||||
#endif
|
||||
|
||||
/****************************************************************************************
|
||||
* Teensylu 0.7 pin assingments (ATMEGA90USB)
|
||||
* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!
|
||||
|
@ -712,6 +779,62 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/****************************************************************************************
|
||||
* Gen3+ pin assignment
|
||||
*
|
||||
****************************************************************************************/
|
||||
#if MOTHERBOARD == 9
|
||||
#define MOTHERBOARD 6
|
||||
#define KNOWN_BOARD 1
|
||||
#ifndef __AVR_ATmega644P__
|
||||
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
|
||||
#endif
|
||||
|
||||
#define X_STEP_PIN 15
|
||||
#define X_DIR_PIN 18
|
||||
#define X_MIN_PIN 20
|
||||
#define X_MAX_PIN -1
|
||||
|
||||
#define Y_STEP_PIN 23
|
||||
#define Y_DIR_PIN 22
|
||||
#define Y_MIN_PIN 25
|
||||
#define Y_MAX_PIN -1
|
||||
|
||||
#define Z_STEP_PIN 27
|
||||
#define Z_DIR_PIN 28
|
||||
#define Z_MIN_PIN 30
|
||||
#define Z_MAX_PIN -1
|
||||
|
||||
#define E_STEP_PIN 17
|
||||
#define E_DIR_PIN 21
|
||||
|
||||
#define LED_PIN -1
|
||||
|
||||
#define FAN_PIN -1
|
||||
|
||||
#define PS_ON_PIN 14
|
||||
#define KILL_PIN -1
|
||||
|
||||
#define HEATER_0_PIN 12 // (extruder)
|
||||
|
||||
#define HEATER_1_PIN 16 // (bed)
|
||||
#define X_ENABLE_PIN 19
|
||||
#define Y_ENABLE_PIN 24
|
||||
#define Z_ENABLE_PIN 29
|
||||
#define E_ENABLE_PIN 13
|
||||
|
||||
#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)
|
||||
#define TEMP_1_PIN 5 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
|
||||
#define TEMP_2_PIN -1
|
||||
#define SDPOWER -1
|
||||
#define SDSS 4
|
||||
#define HEATER_2_PIN -1
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef KNOWN_BOARD
|
||||
#error Unknown MOTHERBOARD value in configuration.h
|
||||
#endif
|
||||
|
|
|
@ -430,7 +430,9 @@ void check_axes_activity() {
|
|||
}
|
||||
if((DISABLE_X) && (x_active == 0)) disable_x();
|
||||
if((DISABLE_Y) && (y_active == 0)) disable_y();
|
||||
#ifndef Z_LATE_ENABLE
|
||||
if((DISABLE_Z) && (z_active == 0)) disable_z();
|
||||
#endif
|
||||
if((DISABLE_E) && (e_active == 0)) { disable_e0();disable_e1();disable_e2(); }
|
||||
}
|
||||
|
||||
|
@ -505,7 +507,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
|||
//enable active axes
|
||||
if(block->steps_x != 0) enable_x();
|
||||
if(block->steps_y != 0) enable_y();
|
||||
if(block->steps_z != 0) enable_z();
|
||||
// if(block->steps_z != 0) enable_z();
|
||||
|
||||
// Enable all
|
||||
if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); }
|
||||
|
@ -535,10 +537,10 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
|||
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
|
||||
|
||||
|
@ -686,7 +688,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
|||
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;
|
||||
|
|
|
@ -274,6 +274,9 @@ FORCE_INLINE void trapezoid_generator_reset() {
|
|||
acceleration_time = calc_timer(acc_step_rate);
|
||||
OCR1A = acceleration_time;
|
||||
OCR1A_nominal = calc_timer(current_block->nominal_rate);
|
||||
#ifdef Z_LATE_ENABLE
|
||||
if(current_block->steps_z > 0) enable_z();
|
||||
#endif
|
||||
|
||||
// SERIAL_ECHO_START;
|
||||
// SERIAL_ECHOPGM("advance :");
|
||||
|
|
|
@ -59,7 +59,7 @@ void lcdProgMemprint(const char *str)
|
|||
//=============================functions ============================
|
||||
//===========================================================================
|
||||
|
||||
FORCE_INLINE int intround(const float &x){return int(0.5+x);}
|
||||
int intround(const float &x){return int(0.5+x);}
|
||||
|
||||
void lcd_status(const char* message)
|
||||
{
|
||||
|
|
Reference in a new issue