60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
/// @file axis.h
|
|
#pragma once
|
|
#include <stdint.h>
|
|
#include "../unit.h"
|
|
|
|
namespace config {
|
|
|
|
using namespace unit;
|
|
|
|
/// Available microstepping resolutions
|
|
enum MRes : uint8_t {
|
|
MRes_256 = 0,
|
|
MRes_128 = 1,
|
|
MRes_64 = 2,
|
|
MRes_32 = 3,
|
|
MRes_16 = 4,
|
|
MRes_8 = 5,
|
|
MRes_4 = 6,
|
|
MRes_2 = 7,
|
|
MRes_1 = 8
|
|
};
|
|
|
|
/// Axis configuration data
|
|
struct AxisConfig {
|
|
bool dirOn; ///< direction ON state (for inversion)
|
|
MRes mRes; ///< microstepping [0-8, where 0 is x256 and 8 is fullstepping]
|
|
uint8_t iRun; ///< running current
|
|
uint8_t iHold; ///< holding current
|
|
bool stealth; ///< Default to Stealth mode
|
|
long double stepsPerUnit; ///< steps per unit
|
|
long double stepsPerUnitReciprocal; ///< reciprocal of step per unit (used to avoid divisions)
|
|
int8_t sg_thrs; /// @todo 7bit two's complement for the sg_thrs
|
|
};
|
|
|
|
/// List of available axes
|
|
enum Axis : uint8_t {
|
|
Pulley,
|
|
Selector,
|
|
Idler,
|
|
_Axis_Last = Idler
|
|
};
|
|
|
|
/// Number of available axes
|
|
static constexpr uint8_t NUM_AXIS = Axis::_Axis_Last + 1;
|
|
|
|
/// Phisical limits for an axis
|
|
template <UnitBase B>
|
|
struct AxisLimits {
|
|
static constexpr UnitBase base = B;
|
|
Unit<long double, B, Lenght> lenght; ///< Longest move that can be performed by the axis
|
|
Unit<long double, B, Speed> jerk; ///< Maximum jerk for the axis
|
|
Unit<long double, B, Accel> accel; ///< Maximum acceleration for the axis
|
|
};
|
|
|
|
typedef AxisLimits<Millimeter> PulleyLimits; ///< Pulley axis limits
|
|
typedef AxisLimits<Millimeter> SelectorLimits; ///< Selector axis limits
|
|
typedef AxisLimits<Degree> IdlerLimits; ///< Idler axis limits
|
|
|
|
} // namespace config
|