90 lines
4.1 KiB
C
90 lines
4.1 KiB
C
/*******************************************************************************
|
|
* Copyright © 2018 TRINAMIC Motion Control GmbH & Co. KG
|
|
* (now owned by Analog Devices Inc.),
|
|
*
|
|
* Copyright © 2023 Analog Devices Inc. All Rights Reserved. This software is
|
|
* proprietary & confidential to Analog Devices, Inc. and its licensors.
|
|
*******************************************************************************/
|
|
|
|
|
|
#ifndef TMC_RAMP_LINEARRAMP1_H_
|
|
#define TMC_RAMP_LINEARRAMP1_H_
|
|
|
|
#include "tmc/helpers/API_Header.h"
|
|
#include "Ramp.h"
|
|
|
|
// Default precision of the calculations. Internal calculations use a precision
|
|
// of 1/TMC_RAMP_LINEAR_PRECISION for acceleration and velocity.
|
|
// When using 2**N as precision, this results in N digits of precision.
|
|
#define TMC_RAMP_LINEAR_DEFAULT_PRECISION ((uint32_t)1<<17)
|
|
|
|
// Position mode: When hitting the target position a velocity below the V_STOP threshold will be cut off to velocity 0
|
|
#define TMC_RAMP_LINEAR_DEFAULT_HOMING_DISTANCE 5
|
|
|
|
// Position mode: When barely missing the target position by HOMING_DISTANCE or less, the remainder will be driven with V_STOP velocity
|
|
#define TMC_RAMP_LINEAR_DEFAULT_STOP_VELOCITY 5
|
|
|
|
typedef enum {
|
|
TMC_RAMP_LINEAR_MODE_VELOCITY,
|
|
TMC_RAMP_LINEAR_MODE_POSITION
|
|
} TMC_LinearRamp_Mode;
|
|
|
|
typedef enum {
|
|
TMC_RAMP_LINEAR_STATE_IDLE,
|
|
TMC_RAMP_LINEAR_STATE_DRIVING,
|
|
TMC_RAMP_LINEAR_STATE_BRAKING
|
|
} TMC_LinearRamp_State;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t maxVelocity;
|
|
int32_t targetPosition;
|
|
int32_t rampPosition;
|
|
int32_t targetVelocity;
|
|
int32_t rampVelocity;
|
|
int32_t acceleration;
|
|
bool rampEnabled;
|
|
int32_t accumulatorVelocity;
|
|
int32_t accumulatorPosition;
|
|
TMC_LinearRamp_Mode rampMode;
|
|
TMC_LinearRamp_State state;
|
|
int32_t accelerationSteps;
|
|
uint32_t precision;
|
|
uint32_t homingDistance;
|
|
uint32_t stopVelocity;
|
|
} TMC_LinearRamp;
|
|
|
|
void tmc_ramp_linear_init(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_compute(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_compute_velocity(TMC_LinearRamp *linearRamp);
|
|
void tmc_ramp_linear_compute_position(TMC_LinearRamp *linearRamp);
|
|
|
|
void tmc_ramp_linear_set_enabled(TMC_LinearRamp *linearRamp, bool enabled);
|
|
void tmc_ramp_linear_set_maxVelocity(TMC_LinearRamp *linearRamp, uint32_t maxVelocity);
|
|
void tmc_ramp_linear_set_targetPosition(TMC_LinearRamp *linearRamp, int32_t targetPosition);
|
|
void tmc_ramp_linear_set_rampPosition(TMC_LinearRamp *linearRamp, int32_t rampPosition);
|
|
void tmc_ramp_linear_set_targetVelocity(TMC_LinearRamp *linearRamp, int32_t targetVelocity);
|
|
void tmc_ramp_linear_set_rampVelocity(TMC_LinearRamp *linearRamp, int32_t rampVelocity);
|
|
void tmc_ramp_linear_set_acceleration(TMC_LinearRamp *linearRamp, int32_t acceleration);
|
|
void tmc_ramp_linear_set_mode(TMC_LinearRamp *linearRamp, TMC_LinearRamp_Mode mode);
|
|
void tmc_ramp_linear_set_precision(TMC_LinearRamp * linearRamp, uint32_t precision);
|
|
void tmc_ramp_linear_set_homingDistance(TMC_LinearRamp *linearRamp, uint32_t homingDistance);
|
|
void tmc_ramp_linear_set_stopVelocity(TMC_LinearRamp *linearRamp, uint32_t stopVelocity);
|
|
|
|
bool tmc_ramp_linear_get_enabled(TMC_LinearRamp *linearRamp);
|
|
uint32_t tmc_ramp_linear_get_maxVelocity(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_get_targetPosition(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_get_rampPosition(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_get_targetVelocity(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_get_rampVelocity(TMC_LinearRamp *linearRamp);
|
|
int32_t tmc_ramp_linear_get_acceleration(TMC_LinearRamp *linearRamp);
|
|
TMC_LinearRamp_State tmc_ramp_linear_get_state(TMC_LinearRamp *linearRamp);
|
|
TMC_LinearRamp_Mode tmc_ramp_linear_get_mode(TMC_LinearRamp *linearRamp);
|
|
uint32_t tmc_ramp_linear_get_precision(TMC_LinearRamp *linearRamp);
|
|
uint32_t tmc_ramp_linear_get_acceleration_limit(TMC_LinearRamp *linearRamp);
|
|
uint32_t tmc_ramp_linear_get_velocity_limit(TMC_LinearRamp *linearRamp);
|
|
uint32_t tmc_ramp_linear_get_homingDistance(TMC_LinearRamp *linearRamp);
|
|
uint32_t tmc_ramp_linear_get_stopVelocity(TMC_LinearRamp *linearRamp);
|
|
|
|
#endif /* TMC_RAMP_LINEARRAMP1_H_ */
|