planner.h

Fri, 17 Nov 2017 10:13:31 +0100

author
mdd
date
Fri, 17 Nov 2017 10:13:31 +0100
changeset 3
770b218a4931
parent 1
b584642d4f58
permissions
-rw-r--r--

proper configuration, homing and planner optimization

0
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
1 /*
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
2 planner.h - buffers movement commands and manages the acceleration profile plan
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
3 Part of Grbl
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
4
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
5 Copyright (c) 2009-2011 Simen Svale Skogsrud
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
6
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
7 Grbl is free software: you can redistribute it and/or modify
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
10 (at your option) any later version.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
11
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
12 Grbl is distributed in the hope that it will be useful,
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
15 GNU General Public License for more details.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
16
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
18 along with Grbl. If not, see <http://www.gnu.org/licenses/>.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
19 */
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
20
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
21 // This module is to be considered a sub-module of stepper.c. Please don't include
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
22 // this file from any other module.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
23
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
24 #ifndef planner_h
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
25 #define planner_h
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
26
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
27 #include "Marlin.h"
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
28
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
29 // This struct is used when buffering the setup for each linear movement "nominal" values are as specified in
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
30 // the source g-code and may never actually be reached if acceleration management is active.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
31 typedef struct {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
32 // Fields used by the bresenham algorithm for tracing the line
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
33 long steps_x, steps_y, steps_z, steps_e; // Step count along each axis
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
34 unsigned long step_event_count; // The number of step events required to complete this block
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
35 long accelerate_until; // The index of the step event on which to stop acceleration
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
36 long decelerate_after; // The index of the step event on which to start decelerating
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
37 long acceleration_rate; // The acceleration rate used for acceleration calculation
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
38 unsigned char direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h)
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
39 unsigned char active_extruder; // Selects the active extruder
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
40 #ifdef ADVANCE
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
41 long advance_rate;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
42 volatile long initial_advance;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
43 volatile long final_advance;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
44 float advance;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
45 #endif
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
46
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
47 // Fields used by the motion planner to manage acceleration
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
48 // float speed_x, speed_y, speed_z, speed_e; // Nominal mm/sec for each axis
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
49 float nominal_speed; // The nominal speed for this block in mm/sec
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
50 float entry_speed; // Entry speed at previous-current junction in mm/sec
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
51 float max_entry_speed; // Maximum allowable junction entry speed in mm/sec
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
52 float millimeters; // The total travel of this block in mm
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
53 float acceleration; // acceleration mm/sec^2
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
54 unsigned char recalculate_flag; // Planner flag to recalculate trapezoids on entry junction
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
55 unsigned char nominal_length_flag; // Planner flag for nominal speed always reached
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
56
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
57 // Settings for the trapezoid generator
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
58 unsigned long nominal_rate; // The nominal step rate for this block in step_events/sec
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
59 unsigned long initial_rate; // The jerk-adjusted step rate at start of block
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
60 unsigned long final_rate; // The minimal rate at exit
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
61 unsigned long acceleration_st; // acceleration steps/sec^2
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
62 unsigned long fan_speed;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
63 volatile char busy;
1
b584642d4f58 several modifications to support laser enable - still needs cleanup
mbayer
parents: 0
diff changeset
64
b584642d4f58 several modifications to support laser enable - still needs cleanup
mbayer
parents: 0
diff changeset
65 bool laser_on;
0
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
66 } block_t;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
67
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
68 // Initialize the motion plan subsystem
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
69 void plan_init();
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
70
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
71 // Add a new linear movement to the buffer. x, y and z is the signed, absolute target position in
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
72 // millimaters. Feed rate specifies the speed of the motion.
1
b584642d4f58 several modifications to support laser enable - still needs cleanup
mbayer
parents: 0
diff changeset
73 void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder, bool laser_on);
0
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
74
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
75 // Set position. Used for G92 instructions.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
76 void plan_set_position(const float &x, const float &y, const float &z, const float &e);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
77 void plan_set_e_position(const float &e);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
78
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
79
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
80
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
81 void check_axes_activity();
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
82 uint8_t movesplanned(); //return the nr of buffered moves
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
83
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
84 extern unsigned long minsegmenttime;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
85 extern float max_feedrate[4]; // set the max speeds
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
86 extern float axis_steps_per_unit[4];
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
87 extern unsigned long max_acceleration_units_per_sq_second[4]; // Use M201 to override by software
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
88 extern float minimumfeedrate;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
89 extern float acceleration; // Normal acceleration mm/s^2 THIS IS THE DEFAULT ACCELERATION for all moves. M204 SXXXX
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
90 extern float retract_acceleration; // mm/s^2 filament pull-pack and push-forward while standing still in the other axis M204 TXXXX
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
91 extern float max_xy_jerk; //speed than can be stopped at once, if i understand correctly.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
92 extern float max_z_jerk;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
93 extern float max_e_jerk;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
94 extern float mintravelfeedrate;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
95 extern unsigned long axis_steps_per_sqr_second[NUM_AXIS];
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
96
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
97 #ifdef AUTOTEMP
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
98 extern bool autotemp_enabled;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
99 extern float autotemp_max;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
100 extern float autotemp_min;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
101 extern float autotemp_factor;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
102 #endif
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
103
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
104
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
105
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
106
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
107 extern block_t block_buffer[BLOCK_BUFFER_SIZE]; // A ring buffer for motion instfructions
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
108 extern volatile unsigned char block_buffer_head; // Index of the next block to be pushed
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
109 extern volatile unsigned char block_buffer_tail;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
110 // Called when the current block is no longer needed. Discards the block and makes the memory
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
111 // availible for new blocks.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
112 FORCE_INLINE void plan_discard_current_block()
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
113 {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
114 if (block_buffer_head != block_buffer_tail) {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
115 block_buffer_tail = (block_buffer_tail + 1) & (BLOCK_BUFFER_SIZE - 1);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
116 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
117 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
118
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
119 // Gets the current block. Returns NULL if buffer empty
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
120 FORCE_INLINE block_t *plan_get_current_block()
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
121 {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
122 if (block_buffer_head == block_buffer_tail) {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
123 return(NULL);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
124 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
125 block_t *block = &block_buffer[block_buffer_tail];
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
126 block->busy = true;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
127 return(block);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
128 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
129
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
130 // Gets the current block. Returns NULL if buffer empty
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
131 FORCE_INLINE bool blocks_queued()
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
132 {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
133 if (block_buffer_head == block_buffer_tail) {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
134 return false;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
135 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
136 else
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
137 return true;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
138 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
139
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
140 void allow_cold_extrudes(bool allow);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
141 #endif

mercurial