mirror of
https://github.com/synthetos/g2.git
synced 2026-09-24 05:53:49 +08:00
Fix issue where power levels are getting scaled before the per-driver stepper object. They’re now scaled (or not) inside the stepper objects.
This commit is contained in:
@@ -40,6 +40,11 @@ using Motate::kStartHigh;
|
||||
using Motate::kNormal;
|
||||
using Motate::Timeout;
|
||||
|
||||
// Stepper power management settings
|
||||
// These should be more flexible, but for now this will do
|
||||
#define Vcc 3.3 // volts
|
||||
#define MaxVref 2.25 // max vref for driver circuit. Our ckt is 2.25 volts
|
||||
#define POWER_LEVEL_SCALE_FACTOR ((MaxVref/Vcc)) // scale power level setting for voltage range
|
||||
|
||||
// Motor structures
|
||||
template <pin_number step_num, // Setup a stepper template to hold our pins
|
||||
@@ -141,7 +146,7 @@ struct StepDirStepper final : Stepper {
|
||||
|
||||
void setPowerLevel(float new_pl) override {
|
||||
if (!_vref.isNull()) {
|
||||
_vref = new_pl;
|
||||
_vref = new_pl * POWER_LEVEL_SCALE_FACTOR;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
+5
-5
@@ -133,8 +133,8 @@ void stepper_init()
|
||||
|
||||
// setup motor power levels and apply power level to stepper drivers
|
||||
for (uint8_t motor=0; motor<MOTORS; motor++) {
|
||||
Motors[motor]->setPowerLevel(st_cfg.mot[motor].power_level_scaled);
|
||||
st_run.mot[motor].power_level_dynamic = st_cfg.mot[motor].power_level_scaled;
|
||||
Motors[motor]->setPowerLevel(st_cfg.mot[motor].power_level);
|
||||
st_run.mot[motor].power_level_dynamic = st_cfg.mot[motor].power_level;
|
||||
}
|
||||
board_stepper_init();
|
||||
stepper_reset(); // reset steppers to known state
|
||||
@@ -1000,9 +1000,9 @@ stat_t st_set_pl(nvObj_t *nv) // motor power level
|
||||
set_flt(nv); // set power_setting value in the motor config struct (st)
|
||||
|
||||
uint8_t motor = _get_motor(nv->index);
|
||||
st_cfg.mot[motor].power_level_scaled = (nv->value * POWER_LEVEL_SCALE_FACTOR);
|
||||
st_run.mot[motor].power_level_dynamic = (st_cfg.mot[motor].power_level_scaled);
|
||||
Motors[motor]->setPowerLevel(st_cfg.mot[motor].power_level_scaled);
|
||||
st_cfg.mot[motor].power_level = nv->value;
|
||||
st_run.mot[motor].power_level_dynamic = (st_cfg.mot[motor].power_level);
|
||||
Motors[motor]->setPowerLevel(st_cfg.mot[motor].power_level);
|
||||
|
||||
return(STAT_OK);
|
||||
}
|
||||
|
||||
@@ -282,11 +282,6 @@ typedef enum {
|
||||
MOTOR_POWER_MODE_MAX_VALUE // for input range checking
|
||||
} stPowerMode;
|
||||
|
||||
// Stepper power management settings
|
||||
#define Vcc 3.3 // volts
|
||||
#define MaxVref 2.25 // max vref for driver circuit. Our ckt is 2.25 volts
|
||||
#define POWER_LEVEL_SCALE_FACTOR ((MaxVref/Vcc)) // scale power level setting for voltage range
|
||||
|
||||
// Min/Max timeouts allowed for motor disable. Allow for inertial stop; must be non-zero
|
||||
#define MOTOR_TIMEOUT_SECONDS_MIN (float)0.1 // seconds !!! SHOULD NEVER BE ZERO !!!
|
||||
#define MOTOR_TIMEOUT_SECONDS_MAX (float)4294967 // (4294967295/1000) -- for conversion to uint32_t
|
||||
@@ -359,9 +354,6 @@ typedef struct cfgMotor { // per-motor configs
|
||||
float travel_rev; // mm or deg of travel per motor revolution
|
||||
float steps_per_unit; // microsteps per mm (or degree) of travel
|
||||
float units_per_step; // mm or degrees of travel per microstep
|
||||
|
||||
// private
|
||||
float power_level_scaled; // scaled to internal range - must be between 0 and 1
|
||||
} cfgMotor_t;
|
||||
|
||||
typedef struct stConfig { // stepper configs
|
||||
|
||||
Reference in New Issue
Block a user