planner.h

Sat, 07 Nov 2015 13:23:07 +0100

author
mbayer
date
Sat, 07 Nov 2015 13:23:07 +0100
changeset 0
2c8ba1964db7
child 1
b584642d4f58
permissions
-rw-r--r--

Initial code from reprappro Marlin repository

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;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
64 } block_t;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
65
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
66 // Initialize the motion plan subsystem
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
67 void plan_init();
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
68
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
69 // 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
70 // millimaters. Feed rate specifies the speed of the motion.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
71 void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
72
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
73 // Set position. Used for G92 instructions.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
74 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
75 void plan_set_e_position(const float &e);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
76
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
77
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
78
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
79 void check_axes_activity();
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
80 uint8_t movesplanned(); //return the nr of buffered moves
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
81
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
82 extern unsigned long minsegmenttime;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
83 extern float max_feedrate[4]; // set the max speeds
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
84 extern float axis_steps_per_unit[4];
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
85 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
86 extern float minimumfeedrate;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
87 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
88 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
89 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
90 extern float max_z_jerk;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
91 extern float max_e_jerk;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
92 extern float mintravelfeedrate;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
93 extern unsigned long axis_steps_per_sqr_second[NUM_AXIS];
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
94
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
95 #ifdef AUTOTEMP
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
96 extern bool autotemp_enabled;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
97 extern float autotemp_max;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
98 extern float autotemp_min;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
99 extern float autotemp_factor;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
100 #endif
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
101
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
102
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 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
106 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
107 extern volatile unsigned char block_buffer_tail;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
108 // 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
109 // availible for new blocks.
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
110 FORCE_INLINE void plan_discard_current_block()
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
111 {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
112 if (block_buffer_head != block_buffer_tail) {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
113 block_buffer_tail = (block_buffer_tail + 1) & (BLOCK_BUFFER_SIZE - 1);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
114 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
115 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
116
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
117 // Gets the current block. Returns NULL if buffer empty
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
118 FORCE_INLINE block_t *plan_get_current_block()
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
119 {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
120 if (block_buffer_head == block_buffer_tail) {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
121 return(NULL);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
122 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
123 block_t *block = &block_buffer[block_buffer_tail];
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
124 block->busy = true;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
125 return(block);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
126 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
127
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
128 // Gets the current block. Returns NULL if buffer empty
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
129 FORCE_INLINE bool blocks_queued()
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
130 {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
131 if (block_buffer_head == block_buffer_tail) {
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
132 return false;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
133 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
134 else
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
135 return true;
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
136 }
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
137
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
138 void allow_cold_extrudes(bool allow);
2c8ba1964db7 Initial code from reprappro Marlin repository
mbayer
parents:
diff changeset
139 #endif

mercurial