4 #include "../hal/tmc2130.h"
5 #include "../hal/circular_buffer.h"
17 using speed_table::st_timer_t;
74 inline bool Full()
const {
return block_index.
full(); }
76 inline uint8_t PlannedMoves()
const {
return block_index.
count(); }
83 if (!block_index.
empty())
84 current_block = &block_buffer[block_index.
front()];
92 deceleration_time = 0;
93 acc_step_rate = uint16_t(current_block->initial_rate);
94 acceleration_time =
calc_timer(acc_step_rate, step_loops);
100 step_loops_nominal = 0;
104 for (uint8_t i = 0; i < step_loops; ++i) {
106 if (++steps_completed >= current_block->steps)
114 if (steps_completed <= current_block->accelerate_until) {
116 acc_step_rate =
mulU24X24toH16(acceleration_time, current_block->acceleration_rate);
117 acc_step_rate += uint16_t(current_block->initial_rate);
119 if (acc_step_rate > uint16_t(current_block->nominal_rate))
120 acc_step_rate = current_block->nominal_rate;
122 timer =
calc_timer(acc_step_rate, step_loops);
123 acceleration_time += timer;
124 }
else if (steps_completed > current_block->decelerate_after) {
125 st_timer_t step_rate =
mulU24X24toH16(deceleration_time, current_block->acceleration_rate);
127 if (step_rate > acc_step_rate) {
128 step_rate = uint16_t(current_block->final_rate);
130 step_rate = acc_step_rate - step_rate;
133 if (step_rate < current_block->final_rate)
134 step_rate = uint16_t(current_block->final_rate);
139 deceleration_time += timer;
141 if (!step_loops_nominal) {
144 timer_nominal =
calc_timer(uint16_t(current_block->nominal_rate), step_loops);
145 step_loops_nominal = step_loops;
147 timer = timer_nominal;
151 if (steps_completed >= current_block->steps) {
152 current_block =
nullptr;
178 circular_index_t block_index;
179 block_t *current_block;
188 rate_t acceleration_time, deceleration_time;
189 st_timer_t acc_step_rate;
191 uint8_t step_loops_nominal;
192 st_timer_t timer_nominal;
196 void CalculateTrapezoid(block_t *block,
steps_t entry_speed,
steps_t exit_speed);
199 static inline pos_t BlockShift(
const block_t *block) {
200 return block->direction ? block->steps : -block->steps;
203 #ifdef UNITTEST_MOTION
207 inline pos_t CurBlockShift()
const {
208 steps_t steps_missing = (current_block->steps - steps_completed);
209 return current_block->direction ? steps_missing : -steps_missing;
bool empty() const
Definition: circular_buffer.h:25
index_t count() const
Definition: circular_buffer.h:64
void pop()
Definition: circular_buffer.h:47
index_t front() const
Definition: circular_buffer.h:53
bool full() const
Definition: circular_buffer.h:30
TMC2130 interface - instances of this class are hidden in modules::motion::Motion::AxisData.
Definition: tmc2130.h:59
static void Step(const MotorParams ¶ms)
Step the motor.
Definition: tmc2130.h:129
static void SetDir(const MotorParams ¶ms, bool dir)
Set direction.
Definition: tmc2130.h:118
Definition: pulse_gen.h:24
void SetPosition(pos_t x)
Definition: pulse_gen.h:64
void AbortPlannedMoves(bool halt=true)
Definition: pulse_gen.cpp:155
void SetAcceleration(steps_t accel)
Set acceleration for the axis.
Definition: pulse_gen.h:38
bool Full() const
Definition: pulse_gen.h:74
pos_t CurPosition() const
Definition: pulse_gen.cpp:136
bool QueueEmpty() const
Definition: pulse_gen.h:71
bool PlanMoveTo(pos_t pos, steps_t feed_rate, steps_t end_rate=0)
Definition: pulse_gen.cpp:92
void SetJerk(steps_t max_jerk)
Set maximum jerk for the axis.
Definition: pulse_gen.h:32
pos_t Position() const
Definition: pulse_gen.h:53
steps_t Jerk() const
Definition: pulse_gen.h:29
steps_t Rate() const
Definition: pulse_gen.h:68
st_timer_t Step(const hal::tmc2130::MotorParams &motorParams)
Definition: pulse_gen.h:80
steps_t Acceleration() const
Definition: pulse_gen.h:35
static constexpr uint8_t blockBufferSize
Size for the motion planner block buffer size.
Definition: config.h:68
static uint16_t mulU24X24toH16(const uint32_t &longIn1, const uint32_t &longIn2)
(longIn1 * longIn2) >> 24
Definition: math.h:33
int32_t pos_t
Axis position (signed)
Definition: pulse_gen.h:22
uint32_t steps_t
Absolute step units.
Definition: pulse_gen.h:20
uint32_t rate_t
Type for step rates.
Definition: pulse_gen.h:21
static st_timer_t calc_timer(st_timer_t step_rate, uint8_t &step_loops)
Calculate the next timer interval and steps according to current step rate.
Definition: speed_table.h:26
The modules namespace contains models of MMU's components.
Definition: command_base.h:8