decoupled axes sucessfully at least on pure x or y jog
This commit is contained in:
		| @@ -35,6 +35,10 @@ | |||||||
| #define MOTHERBOARD 7 | #define MOTHERBOARD 7 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | /// Comment out the following line to enable normal kinematics | ||||||
|  |  | ||||||
|  | #define COREXY | ||||||
|  |  | ||||||
| //=========================================================================== | //=========================================================================== | ||||||
| //=============================Thermal Settings  ============================ | //=============================Thermal Settings  ============================ | ||||||
| //=========================================================================== | //=========================================================================== | ||||||
| @@ -168,7 +172,7 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th | |||||||
| #define DISABLE_E false // For all extruders | #define DISABLE_E false // For all extruders | ||||||
|  |  | ||||||
| #define INVERT_X_DIR true    // for Mendel set to false, for Orca set to true | #define INVERT_X_DIR true    // for Mendel set to false, for Orca set to true | ||||||
| #define INVERT_Y_DIR false    // for Mendel set to true, for Orca set to false | #define INVERT_Y_DIR true    // for Mendel set to true, for Orca set to false | ||||||
| #define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true | #define INVERT_Z_DIR true     // for Mendel set to false, for Orca set to true | ||||||
| #define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false | #define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false | ||||||
| #define INVERT_E1_DIR false    // for direct drive extruder v9 set to true, for geared extruder set to false | #define INVERT_E1_DIR false    // for direct drive extruder v9 set to true, for geared extruder set to false | ||||||
| @@ -180,8 +184,8 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th | |||||||
| #define Y_HOME_DIR -1 | #define Y_HOME_DIR -1 | ||||||
| #define Z_HOME_DIR -1 | #define Z_HOME_DIR -1 | ||||||
|  |  | ||||||
| #define min_software_endstops true //If true, axis won't move to coordinates less than HOME_POS. | #define min_software_endstops false //If true, axis won't move to coordinates less than HOME_POS. | ||||||
| #define max_software_endstops true  //If true, axis won't move to coordinates greater than the defined lengths below. | #define max_software_endstops false  //If true, axis won't move to coordinates greater than the defined lengths below. | ||||||
| #define X_MAX_LENGTH 205 | #define X_MAX_LENGTH 205 | ||||||
| #define Y_MAX_LENGTH 205 | #define Y_MAX_LENGTH 205 | ||||||
| #define Z_MAX_LENGTH 200 | #define Z_MAX_LENGTH 200 | ||||||
|   | |||||||
| @@ -214,6 +214,12 @@ void st_wake_up() { | |||||||
|   ENABLE_STEPPER_DRIVER_INTERRUPT();   |   ENABLE_STEPPER_DRIVER_INTERRUPT();   | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void step_wait(){ | ||||||
|  |     for(int8_t i=0; i < 6; i++){ | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |    | ||||||
|  |  | ||||||
| FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) { | FORCE_INLINE unsigned short calc_timer(unsigned short step_rate) { | ||||||
|   unsigned short timer; |   unsigned short timer; | ||||||
|   if(step_rate > MAX_STEP_FREQUENCY) step_rate = MAX_STEP_FREQUENCY; |   if(step_rate > MAX_STEP_FREQUENCY) step_rate = MAX_STEP_FREQUENCY; | ||||||
| @@ -317,8 +323,10 @@ ISR(TIMER1_COMPA_vect) | |||||||
|     out_bits = current_block->direction_bits; |     out_bits = current_block->direction_bits; | ||||||
|  |  | ||||||
|     // Set direction en check limit switches |     // Set direction en check limit switches | ||||||
|     if ((out_bits & (1<<X_AXIS)) != 0) {   // -direction |     if ((out_bits & (1<<X_AXIS)) != 0) {   // stepping along -X axis | ||||||
|  |       #if !defined COREXY  //NOT COREXY | ||||||
|         WRITE(X_DIR_PIN, INVERT_X_DIR); |         WRITE(X_DIR_PIN, INVERT_X_DIR); | ||||||
|  |       #endif | ||||||
|       count_direction[X_AXIS]=-1; |       count_direction[X_AXIS]=-1; | ||||||
|       CHECK_ENDSTOPS |       CHECK_ENDSTOPS | ||||||
|       { |       { | ||||||
| @@ -334,7 +342,10 @@ ISR(TIMER1_COMPA_vect) | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     else { // +direction |     else { // +direction | ||||||
|  |       #if !defined COREXY  //NOT COREXY | ||||||
|         WRITE(X_DIR_PIN,!INVERT_X_DIR); |         WRITE(X_DIR_PIN,!INVERT_X_DIR); | ||||||
|  |       #endif | ||||||
|  |        | ||||||
|       count_direction[X_AXIS]=1; |       count_direction[X_AXIS]=1; | ||||||
|       CHECK_ENDSTOPS  |       CHECK_ENDSTOPS  | ||||||
|       { |       { | ||||||
| @@ -351,7 +362,9 @@ ISR(TIMER1_COMPA_vect) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if ((out_bits & (1<<Y_AXIS)) != 0) {   // -direction |     if ((out_bits & (1<<Y_AXIS)) != 0) {   // -direction | ||||||
|  |       #if !defined COREXY  //NOT COREXY | ||||||
|         WRITE(Y_DIR_PIN,INVERT_Y_DIR); |         WRITE(Y_DIR_PIN,INVERT_Y_DIR); | ||||||
|  |       #endif | ||||||
|       count_direction[Y_AXIS]=-1; |       count_direction[Y_AXIS]=-1; | ||||||
|       CHECK_ENDSTOPS |       CHECK_ENDSTOPS | ||||||
|       { |       { | ||||||
| @@ -367,7 +380,9 @@ ISR(TIMER1_COMPA_vect) | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     else { // +direction |     else { // +direction | ||||||
|  |       #if !defined COREXY  //NOT COREXY | ||||||
|         WRITE(Y_DIR_PIN,!INVERT_Y_DIR); |         WRITE(Y_DIR_PIN,!INVERT_Y_DIR); | ||||||
|  |       #endif | ||||||
|       count_direction[Y_AXIS]=1; |       count_direction[Y_AXIS]=1; | ||||||
|       CHECK_ENDSTOPS |       CHECK_ENDSTOPS | ||||||
|       { |       { | ||||||
| @@ -383,6 +398,27 @@ ISR(TIMER1_COMPA_vect) | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |      | ||||||
|  |     #ifdef COREXY  //coreXY kinematics defined | ||||||
|  |       if((current_block->steps_x >= current_block->steps_y)&&((out_bits & (1<<X_AXIS)) == 0)){  //+X is major axis | ||||||
|  |         WRITE(X_DIR_PIN, !INVERT_X_DIR); | ||||||
|  |         WRITE(Y_DIR_PIN, !INVERT_Y_DIR); | ||||||
|  |       } | ||||||
|  |       if((current_block->steps_x >= current_block->steps_y)&&((out_bits & (1<<X_AXIS)) != 0)){  //-X is major axis | ||||||
|  |         WRITE(X_DIR_PIN, INVERT_X_DIR); | ||||||
|  |         WRITE(Y_DIR_PIN, INVERT_Y_DIR); | ||||||
|  |       }       | ||||||
|  |       if((current_block->steps_y > current_block->steps_x)&&((out_bits & (1<<Y_AXIS)) == 0)){  //+Y is major axis | ||||||
|  |         WRITE(X_DIR_PIN, !INVERT_X_DIR); | ||||||
|  |         WRITE(Y_DIR_PIN, INVERT_Y_DIR); | ||||||
|  |       }         | ||||||
|  |       if((current_block->steps_y > current_block->steps_x)&&((out_bits & (1<<Y_AXIS)) != 0)){  //-Y is major axis | ||||||
|  |         WRITE(X_DIR_PIN, INVERT_X_DIR); | ||||||
|  |         WRITE(Y_DIR_PIN, !INVERT_Y_DIR); | ||||||
|  |       }   | ||||||
|  |     #endif //coreXY | ||||||
|  |      | ||||||
|  |      | ||||||
|     if ((out_bits & (1<<Z_AXIS)) != 0) {   // -direction |     if ((out_bits & (1<<Z_AXIS)) != 0) {   // -direction | ||||||
|       WRITE(Z_DIR_PIN,INVERT_Z_DIR); |       WRITE(Z_DIR_PIN,INVERT_Z_DIR); | ||||||
|       count_direction[Z_AXIS]=-1; |       count_direction[Z_AXIS]=-1; | ||||||
| @@ -447,6 +483,7 @@ ISR(TIMER1_COMPA_vect) | |||||||
|       }     |       }     | ||||||
|       #endif //ADVANCE |       #endif //ADVANCE | ||||||
|  |  | ||||||
|  |       #if !defined COREXY       | ||||||
|         counter_x += current_block->steps_x; |         counter_x += current_block->steps_x; | ||||||
|         if (counter_x > 0) { |         if (counter_x > 0) { | ||||||
|           WRITE(X_STEP_PIN, HIGH); |           WRITE(X_STEP_PIN, HIGH); | ||||||
| @@ -458,11 +495,60 @@ ISR(TIMER1_COMPA_vect) | |||||||
|         counter_y += current_block->steps_y; |         counter_y += current_block->steps_y; | ||||||
|         if (counter_y > 0) { |         if (counter_y > 0) { | ||||||
|           WRITE(Y_STEP_PIN, HIGH); |           WRITE(Y_STEP_PIN, HIGH); | ||||||
|  |  | ||||||
|  |           WRITE(Y_STEP_PIN, LOW); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |       #endif | ||||||
|  |    | ||||||
|  |       #ifdef COREXY | ||||||
|  |         counter_x += current_block->steps_x;         | ||||||
|  |         counter_y += current_block->steps_y; | ||||||
|  |          | ||||||
|  |         if ((counter_x > 0)&&!(counter_y>0)){  //X step only | ||||||
|  |           WRITE(X_STEP_PIN, HIGH); | ||||||
|  |           WRITE(Y_STEP_PIN, HIGH); | ||||||
|  |           counter_x -= current_block->step_event_count;           | ||||||
|  |           WRITE(X_STEP_PIN, LOW); | ||||||
|  |           WRITE(Y_STEP_PIN, LOW); | ||||||
|  |           count_position[X_AXIS]+=count_direction[X_AXIS]; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         if (!(counter_x > 0)&&(counter_y>0)){  //Y step only | ||||||
|  |           WRITE(X_STEP_PIN, HIGH); | ||||||
|  |           WRITE(Y_STEP_PIN, HIGH); | ||||||
|           counter_y -= current_block->step_event_count;           |           counter_y -= current_block->step_event_count;           | ||||||
|  |           WRITE(X_STEP_PIN, LOW); | ||||||
|           WRITE(Y_STEP_PIN, LOW); |           WRITE(Y_STEP_PIN, LOW); | ||||||
|           count_position[Y_AXIS]+=count_direction[Y_AXIS]; |           count_position[Y_AXIS]+=count_direction[Y_AXIS]; | ||||||
|         }         |         }         | ||||||
|          |          | ||||||
|  |         if ((counter_x > 0)&&(counter_y>0)){  //step in both axes | ||||||
|  |           if (((out_bits & (1<<X_AXIS)) == 0)^((out_bits & (1<<Y_AXIS)) == 0)){  //X and Y in different directions | ||||||
|  |             WRITE(Y_STEP_PIN, HIGH); | ||||||
|  |             counter_x -= current_block->step_event_count;              | ||||||
|  |             WRITE(Y_STEP_PIN, LOW); | ||||||
|  |             step_wait(); | ||||||
|  |             count_position[X_AXIS]+=count_direction[X_AXIS]; | ||||||
|  |             count_position[Y_AXIS]+=count_direction[Y_AXIS]; | ||||||
|  |             WRITE(Y_STEP_PIN, HIGH); | ||||||
|  |             counter_y -= current_block->step_event_count; | ||||||
|  |             WRITE(Y_STEP_PIN, LOW); | ||||||
|  |           } | ||||||
|  |           else{  //X and Y in same direction | ||||||
|  |             WRITE(X_STEP_PIN, HIGH); | ||||||
|  |             counter_x -= current_block->step_event_count;              | ||||||
|  |             WRITE(X_STEP_PIN, LOW) ; | ||||||
|  |             step_wait(); | ||||||
|  |             count_position[X_AXIS]+=count_direction[X_AXIS]; | ||||||
|  |             count_position[Y_AXIS]+=count_direction[Y_AXIS]; | ||||||
|  |             WRITE(X_STEP_PIN, HIGH);  | ||||||
|  |             counter_y -= current_block->step_event_count;     | ||||||
|  |             WRITE(X_STEP_PIN, LOW);         | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       #endif //corexy | ||||||
|  |        | ||||||
|       counter_z += current_block->steps_z; |       counter_z += current_block->steps_z; | ||||||
|       if (counter_z > 0) { |       if (counter_z > 0) { | ||||||
|         WRITE(Z_STEP_PIN, HIGH); |         WRITE(Z_STEP_PIN, HIGH); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user