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:
Rob Giseburt
2017-02-23 23:09:14 -06:00
parent c2f5bfdb99
commit b97fb544d5
3 changed files with 11 additions and 14 deletions
@@ -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
View File
@@ -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);
}
-8
View File
@@ -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