3 #include "../config/axis.h"
13 using config::Selector;
67 template <
typename T, Axis A, config::UnitType U>
71 static constexpr
Axis axis = A;
78 constexpr
self_t operator+(
const self_t r)
const {
return { v + r.v }; }
79 constexpr
self_t operator-(
const self_t r)
const {
return { v - r.v }; }
80 constexpr
self_t operator-()
const {
return { -v }; }
81 constexpr
self_t operator*(
const self_t r)
const {
return { v * r.v }; }
82 constexpr
self_t operator/(
const self_t r)
const {
return { v / r.v }; }
85 constexpr
self_t operator*(
const long double f)
const {
return { (T)(v * f) }; }
86 constexpr
self_t operator/(
const long double f)
const {
return { (T)(v / f) }; }
90 template <
typename T, Axis A, config::UnitType U>
96 long double stepsPerUnit;
108 template <
typename AU,
typename U>
110 static_assert(AU::unit == U::unit,
"incorrect unit type conversion");
111 static_assert(U::base == axisScale[AU::axis].base,
"incorrect unit base conversion");
112 return { (
typename AU::type_t)(v.v * axisScale[AU::axis].stepsPerUnit) };
125 template <
typename U,
typename AU,
typename T =
int32_t>
127 static_assert(AU::unit == U::unit,
"incorrect unit type conversion");
128 static_assert(U::base == axisScale[AU::axis].base,
"incorrect unit base conversion");
129 return { ((T)v.v / (T)(axisScale[AU::axis].stepsPerUnit / mul)) };
136 template <
typename U,
typename T =
int32_t>
138 return (T)(v.v * mul);
143 template <
typename AU,
typename U>
145 return unitToAxisUnit<AU>(v).v;
153 static constexpr
P_pos_t operator"" _P_mm(
long double mm) {
157 static constexpr
P_speed_t operator"" _P_mm_s(
long double mm_s) {
161 static constexpr
P_accel_t operator"" _P_mm_s2(
long double mm_s2) {
170 static constexpr
S_pos_t operator"" _S_mm(
long double mm) {
174 static constexpr
S_speed_t operator"" _S_mm_s(
long double mm_s) {
178 static constexpr
S_accel_t operator"" _S_mm_s2(
long double mm_s2) {
187 static constexpr
I_pos_t operator"" _I_deg(
long double deg) {
191 static constexpr
I_speed_t operator"" _I_deg_s(
long double deg_s) {
195 static constexpr
I_accel_t operator"" _I_deg_s2(
long double deg_s2) {
203 using modules::motion::operator
"" _P_mm;
204 using modules::motion::operator
"" _P_mm_s;
205 using modules::motion::operator
"" _P_mm_s2;
206 using modules::motion::operator
"" _S_mm;
207 using modules::motion::operator
"" _S_mm_s;
208 using modules::motion::operator
"" _S_mm_s2;
209 using modules::motion::operator
"" _I_deg;
210 using modules::motion::operator
"" _I_deg_s;
211 using modules::motion::operator
"" _I_deg_s2;
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 AxisConfig idler
End: Selector configuration.
Definition: config.h:186
static constexpr PulleyLimits pulleyLimits
Pulley motion limits.
Definition: config.h:122
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
Axis
List of available axes.
Definition: axis.h:35
Definition: command_base.h:9
AxisUnit< pos_t, Selector, Lenght > S_pos_t
Selector position type (steps)
Definition: axisunit.h:166
static constexpr T truncatedUnit(U v, long double mul=1.)
Definition: axisunit.h:137
AxisUnit< steps_t, Idler, Accel > I_accel_t
Idler acceleration type (steps/s2)
Definition: axisunit.h:185
AxisUnit< pos_t, Idler, Lenght > I_pos_t
Idler position type (steps)
Definition: axisunit.h:183
AxisUnit< steps_t, Idler, Speed > I_speed_t
Idler speed type (steps/s)
Definition: axisunit.h:184
AxisUnit< steps_t, Pulley, Speed > P_speed_t
Pulley speed type (steps/s)
Definition: axisunit.h:150
AxisUnit< steps_t, Selector, Accel > S_accel_t
Selector acceleration type (steps/s2)
Definition: axisunit.h:168
static constexpr AU::type_t unitToSteps(U v)
Definition: axisunit.h:144
AxisUnit< pos_t, Pulley, Lenght > P_pos_t
Pulley position type (steps)
Definition: axisunit.h:149
static constexpr AU unitToAxisUnit(U v)
Definition: axisunit.h:109
AxisUnit< steps_t, Selector, Speed > S_speed_t
Selector speed type (steps/s)
Definition: axisunit.h:167
AxisUnit< steps_t, Pulley, Accel > P_accel_t
Pulley acceleration type (steps/s2)
Definition: axisunit.h:151
static constexpr T axisUnitToTruncatedUnit(AU v, long double mul=1.)
Definition: axisunit.h:126
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
UnitType
Unit types for conformability testing.
Definition: unit.h:34
UnitBase
Base units for conformability testing.
Definition: unit.h:28
long double stepsPerUnit
steps per unit
Definition: axis.h:30
Axis type conversion table for template expansion.
Definition: axisunit.h:94
Definition: axisunit.h:68
Generic unit type for compile-time conformability testing.
Definition: unit.h:42