From b97fb544d525c18533956ee6e147409d9195fd75 Mon Sep 17 00:00:00 2001 From: Rob Giseburt Date: Thu, 23 Feb 2017 23:09:14 -0600 Subject: [PATCH] =?UTF-8?q?Fix=20issue=20where=20power=20levels=20are=20ge?= =?UTF-8?q?tting=20scaled=20before=20the=20per-driver=20stepper=20object.?= =?UTF-8?q?=20They=E2=80=99re=20now=20scaled=20(or=20not)=20inside=20the?= =?UTF-8?q?=20stepper=20objects.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g2core/device/step_dir_driver/step_dir_driver.h | 7 ++++++- g2core/stepper.cpp | 10 +++++----- g2core/stepper.h | 8 -------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/g2core/device/step_dir_driver/step_dir_driver.h b/g2core/device/step_dir_driver/step_dir_driver.h index da3cfc1e..d64ddded 100644 --- a/g2core/device/step_dir_driver/step_dir_driver.h +++ b/g2core/device/step_dir_driver/step_dir_driver.h @@ -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 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); } diff --git a/g2core/stepper.h b/g2core/stepper.h index 709305d4..4b2f7824 100644 --- a/g2core/stepper.h +++ b/g2core/stepper.h @@ -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