17 using pulse_gen::st_timer_t;
23 "stepTimerQuantum must be larger than the maximal stepping frequency interval");
37 return axis.stealth ? MotorMode::Stealth : MotorMode::Normal;
73 inline constexpr
Motion() =
default;
79 bool InitAxis(
Axis axis);
83 bool Enabled(
Axis axis)
const {
return axisData[axis].enabled; }
87 void SetEnabled(
Axis axis,
bool enabled);
95 void SetMode(
Axis axis, MotorMode mode);
98 void SetMode(MotorMode mode);
101 bool StallGuard(
Axis axis);
104 void StallGuardReset(
Axis axis);
108 void PlanStallGuardThreshold(
Axis axis, int8_t sg_thrs);
124 PlanMoveTo(A, pos.v, feed_rate.v, end_rate.v);
130 template <Axis A, config::UnitBase B>
146 PlanMoveTo(axis, Position(axis) + delta, feed_rate, end_rate);
155 PlanMove(A, delta.v, feed_rate.v, end_rate.v);
161 template <Axis A, config::UnitBase B>
200 #if !defined(UNITTEST) || defined(UNITTEST_MOTION)
202 axisData[axis].ctrl.SetPosition(x);
213 return axisData[axis].ctrl.Acceleration();
220 axisData[axis].ctrl.SetAcceleration(accel);
228 SetAcceleration(A, accel.v);
236 template <Axis A, config::UnitBase B>
245 return axisData[axis].ctrl.Jerk();
252 return axisData[axis].ctrl.SetJerk(max_jerk);
260 return axisData[axis].ctrl.Rate();
265 #if !defined(UNITTEST) || defined(UNITTEST_MOTION)
266 inline st_timer_t Step() {
270 for (uint8_t i = 0; i !=
NUM_AXIS; ++i) {
271 timers[i] = axisData[i].residual;
273 if (timers[i] || !axisData[i].ctrl.QueueEmpty()) {
274 st_timer_t next = axisData[i].ctrl.Step(
axisParams[i].params);
289 st_timer_t next = timers[0];
290 for (uint8_t i = 1; i !=
NUM_AXIS; ++i) {
291 if (timers[i] && (!next || timers[i] < next))
296 for (uint8_t i = 0; i !=
NUM_AXIS; ++i) {
297 axisData[i].residual = (timers[i] ? timers[i] - next : 0);
308 bool QueueEmpty()
const;
312 #if !defined(UNITTEST) || defined(UNITTEST_MOTION)
314 return axisData[axis].ctrl.QueueEmpty();
318 bool QueueEmpty(
Axis axis)
const;
321 #if !defined(UNITTEST) || defined(UNITTEST_MOTION)
324 return axisData[axis].ctrl.PlannedMoves();
328 uint8_t PlannedMoves(
Axis axis)
const;
332 bool Full(
Axis axis)
const {
return axisData[axis].ctrl.Full(); }
337 void AbortPlannedMoves(
Axis axis,
bool halt =
true);
341 void AbortPlannedMoves(
bool halt =
true);
345 return axisData[axis].drv;
352 return axisData[axis].drv;
357 return axisData[axis].ctrl;
361 return axisData[axis].currents;
363 inline void SetIRunForAxis(
Axis axis, uint8_t i) {
364 axisData[axis].currents.
iRun = i;
370 pulse_gen::PulseGen ctrl;
377 static AxisData DataForAxis(
Axis axis) {
392 DataForAxis(Selector),
400 extern Motion motion;
TMC2130 interface - instances of this class are hidden in modules::motion::Motion::AxisData.
Definition: tmc2130.h:59
void SetAcceleration(config::Unit< long double, B, Accel > accel)
Definition: motion.h:237
constexpr void PlanMove(AxisUnit< pos_t, A, Lenght > delta, AxisUnit< steps_t, A, Speed > feed_rate, AxisUnit< steps_t, A, Speed > end_rate={ 0 })
Definition: motion.h:153
bool Full(Axis axis) const
Definition: motion.h:332
void PlanMove(Axis axis, pos_t delta, steps_t feed_rate, steps_t end_rate=0)
Definition: motion.h:145
hal::tmc2130::TMC2130 & MMU_NEEDS_ATTENTION_DriverForAxis(Axis axis)
Definition: motion.h:351
const pulse_gen::PulseGen & CtrlForAxis(Axis axis) const
Definition: motion.h:356
constexpr void PlanMoveTo(config::Unit< long double, B, Lenght > pos, config::Unit< long double, B, Speed > feed_rate, config::Unit< long double, B, Speed > end_rate={ 0 })
Definition: motion.h:131
steps_t Acceleration(Axis axis) const
Definition: motion.h:212
void SetAcceleration(AxisUnit< steps_t, A, Accel > accel)
Definition: motion.h:227
void SetPosition(Axis axis, pos_t x)
Definition: motion.h:201
constexpr void PlanMove(config::Unit< long double, B, Lenght > delta, config::Unit< long double, B, Speed > feed_rate, config::Unit< long double, B, Speed > end_rate={ 0 })
Definition: motion.h:162
void Disable(Axis axis)
Definition: motion.h:91
constexpr AxisUnit< pos_t, A, Lenght > CurPosition() const
Definition: motion.h:193
bool QueueEmpty(Axis axis) const
Definition: motion.h:313
uint8_t PlannedMoves(Axis axis) const
Definition: motion.h:323
steps_t Rate(Axis axis) const
Definition: motion.h:259
void SetJerk(Axis axis, steps_t max_jerk)
Definition: motion.h:251
bool Enabled(Axis axis) const
Return the axis power status.
Definition: motion.h:83
constexpr void PlanMoveTo(AxisUnit< pos_t, A, Lenght > pos, AxisUnit< steps_t, A, Speed > feed_rate, AxisUnit< steps_t, A, Speed > end_rate={ 0 })
Definition: motion.h:122
steps_t Jerk(Axis axis) const
Definition: motion.h:244
hal::tmc2130::TMC2130 & DriverForAxis(Axis axis)
Definition: motion.h:344
constexpr AxisUnit< pos_t, A, Lenght > Position() const
Definition: motion.h:178
void SetAcceleration(Axis axis, steps_t accel)
Definition: motion.h:219
Definition: pulse_gen.h:24
#define F_CPU
Main clock frequency.
Definition: cpu.h:11
static constexpr AxisConfig selector
End: Pulley axis configuration.
Definition: config.h:136
static constexpr IdlerLimits idlerLimits
Idler motion limits.
Definition: config.h:197
static constexpr SelectorLimits selectorLimits
Selector motion limits.
Definition: config.h:149
static constexpr uint16_t maxStepFrequency
Max step frequency 40KHz.
Definition: config.h:62
static constexpr AxisConfig idler
End: Selector configuration.
Definition: config.h:186
static constexpr PulleyLimits pulleyLimits
Pulley motion limits.
Definition: config.h:122
static constexpr uint8_t stepTimerFrequencyDivider
Step timer frequency divider (F = F_CPU / divider)
Definition: config.h:71
static constexpr AxisConfig pulley
Begin: Pulley axis configuration.
Definition: config.h:111
static constexpr uint8_t NUM_AXIS
Number of available axes.
Definition: axis.h:43
static constexpr uint16_t stepTimerQuantum
Definition: config.h:76
Axis
List of available axes.
Definition: axis.h:35
Definition: tmc2130.cpp:82
Definition: command_base.h:9
static AxisParams axisParams[NUM_AXIS]
Static axis configuration.
Definition: motion.h:41
static constexpr MotorMode DefaultMotorMode(const config::AxisConfig &axis)
Return the default motor mode for an Axis.
Definition: motion.h:36
static constexpr AU unitToAxisUnit(U v)
Definition: axisunit.h:109
void Init()
ISR initialization.
Definition: motion.cpp:151
int32_t pos_t
Axis position (signed)
Definition: pulse_gen.h:22
uint32_t steps_t
Absolute step units.
Definition: pulse_gen.h:20
The modules namespace contains models of MMU's components.
Definition: command_base.h:8
Axis configuration data.
Definition: axis.h:24
bool dirOn
direction ON state (for inversion)
Definition: axis.h:25
MRes mRes
microstepping [0-8, where 0 is x256 and 8 is fullstepping]
Definition: axis.h:26
uint8_t iRun
Running current.
Definition: tmc2130.h:34
Main axis enumeration.
Definition: motion.h:26
Definition: axisunit.h:68