mirror of
https://github.com/synthetos/g2.git
synced 2026-02-06 02:51:54 +08:00
* Add enable polarity (`1ep`, etc.) to motors. * Cleanup enable polarity code. Note that Stepper object initialization has changed!
This commit is contained in:
@@ -336,7 +336,7 @@ void dda_timer_type::interrupt()
|
||||
}
|
||||
#endif
|
||||
|
||||
// Process end of segment.
|
||||
// Process end of segment.
|
||||
// One more interrupt will occur to turn of any pulses set in this pass.
|
||||
if (--st_run.dda_ticks_downcount == 0) {
|
||||
_load_move(); // load the next move at the current interrupt level
|
||||
@@ -451,7 +451,7 @@ static void _load_move()
|
||||
|
||||
// ...start motor power timeouts
|
||||
// for (uint8_t motor = MOTOR_1; motor < MOTORS; motor++) {
|
||||
// Motors[motor]->motionStopped();
|
||||
// Motors[motor]->motionStopped();
|
||||
// }
|
||||
// loop unrolled version
|
||||
motor_1.motionStopped(); // ...start motor power timeouts
|
||||
@@ -626,7 +626,7 @@ static void _load_move()
|
||||
// handle synchronous commands
|
||||
} else if (st_pre.block_type == BLOCK_TYPE_COMMAND) {
|
||||
mp_runtime_command(st_pre.bf);
|
||||
|
||||
|
||||
} // else null - which is okay in many cases
|
||||
|
||||
// all other cases drop to here (e.g. Null moves after Mcodes skip to here)
|
||||
@@ -926,7 +926,7 @@ stat_t st_set_su(nvObj_t *nv) // motor steps per unit (direct)
|
||||
if (cm_get_axis_type(nv->index) == AXIS_TYPE_LINEAR) {
|
||||
nv->value *= INCHES_PER_MM;
|
||||
}
|
||||
}
|
||||
}
|
||||
set_flt(nv);
|
||||
st_cfg.mot[m].units_per_step = 1.0/st_cfg.mot[m].steps_per_unit;
|
||||
|
||||
@@ -936,20 +936,45 @@ stat_t st_set_su(nvObj_t *nv) // motor steps per unit (direct)
|
||||
return(STAT_OK);
|
||||
}
|
||||
|
||||
stat_t st_set_ep(nvObj_t *nv) // set motor enable polarity
|
||||
{
|
||||
if (nv->value < IO_ACTIVE_LOW) { return (STAT_INPUT_LESS_THAN_MIN_VALUE); }
|
||||
if (nv->value > IO_ACTIVE_HIGH) { return (STAT_INPUT_EXCEEDS_MAX_VALUE); }
|
||||
|
||||
uint8_t motor = _get_motor(nv->index);
|
||||
if (motor > MOTORS) { return STAT_INPUT_VALUE_RANGE_ERROR; };
|
||||
|
||||
Motors[motor]->setEnablePolarity((ioMode)nv->value);
|
||||
return (STAT_OK);
|
||||
}
|
||||
|
||||
stat_t st_get_ep(nvObj_t *nv) // get motor enable polarity
|
||||
{
|
||||
if (nv->value < IO_ACTIVE_LOW) { return (STAT_INPUT_LESS_THAN_MIN_VALUE); }
|
||||
if (nv->value > IO_ACTIVE_HIGH) { return (STAT_INPUT_EXCEEDS_MAX_VALUE); }
|
||||
|
||||
uint8_t motor = _get_motor(nv->index);
|
||||
if (motor > MOTORS) { return STAT_INPUT_VALUE_RANGE_ERROR; };
|
||||
|
||||
nv->value = (float)Motors[motor]->getEnablePolarity();
|
||||
nv->valuetype = TYPE_INT;
|
||||
return (STAT_OK);
|
||||
}
|
||||
|
||||
stat_t st_set_pm(nvObj_t *nv) // set motor power mode
|
||||
{
|
||||
if (nv->value < 0) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
return (STAT_INPUT_LESS_THAN_MIN_VALUE);
|
||||
}
|
||||
if (nv->value >= MOTOR_POWER_MODE_MAX_VALUE) {
|
||||
if (nv->value >= MOTOR_POWER_MODE_MAX_VALUE) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
return (STAT_INPUT_EXCEEDS_MAX_VALUE);
|
||||
return (STAT_INPUT_EXCEEDS_MAX_VALUE);
|
||||
}
|
||||
uint8_t motor = _get_motor(nv->index);
|
||||
if (motor > MOTORS) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
return STAT_INPUT_VALUE_RANGE_ERROR;
|
||||
return STAT_INPUT_VALUE_RANGE_ERROR;
|
||||
};
|
||||
|
||||
// We do this *here* in order for this to take effect immediately.
|
||||
@@ -963,7 +988,7 @@ stat_t st_get_pm(nvObj_t *nv) // get motor power mode
|
||||
uint8_t motor = _get_motor(nv->index);
|
||||
if (motor > MOTORS) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
return STAT_INPUT_VALUE_RANGE_ERROR;
|
||||
return STAT_INPUT_VALUE_RANGE_ERROR;
|
||||
};
|
||||
|
||||
nv->value = (float)Motors[motor]->getPowerMode();
|
||||
@@ -982,7 +1007,7 @@ stat_t st_set_pl(nvObj_t *nv) // motor power level
|
||||
{
|
||||
if (nv->value < (float)0.0) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
return (STAT_INPUT_LESS_THAN_MIN_VALUE);
|
||||
return (STAT_INPUT_LESS_THAN_MIN_VALUE);
|
||||
}
|
||||
if (nv->value > (float)1.0) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
@@ -1044,7 +1069,7 @@ stat_t st_set_mt(nvObj_t *nv)
|
||||
|
||||
// Make sure this function is not part of initialization --> f00
|
||||
// nv->value is seconds of timeout
|
||||
stat_t st_set_me(nvObj_t *nv)
|
||||
stat_t st_set_me(nvObj_t *nv)
|
||||
{
|
||||
for (uint8_t motor = MOTOR_1; motor < MOTORS; motor++) {
|
||||
Motors[motor]->enable(nv->value); // nv->value is the timeout or 0 for default
|
||||
@@ -1054,7 +1079,7 @@ stat_t st_set_me(nvObj_t *nv)
|
||||
|
||||
// Make sure this function is not part of initialization --> f00
|
||||
// nv-value is motor to disable, or 0 for all motors
|
||||
stat_t st_set_md(nvObj_t *nv)
|
||||
stat_t st_set_md(nvObj_t *nv)
|
||||
{
|
||||
if (nv->value < 0) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
@@ -1063,7 +1088,7 @@ stat_t st_set_md(nvObj_t *nv)
|
||||
if (nv->value > MOTORS) {
|
||||
nv->valuetype = TYPE_NULL;
|
||||
return (STAT_INPUT_EXCEEDS_MAX_VALUE);
|
||||
}
|
||||
}
|
||||
// de-energize all motors
|
||||
if ((uint8_t)nv->value == 0) { // 0 means all motors
|
||||
for (uint8_t motor = MOTOR_1; motor < MOTORS; motor++) {
|
||||
@@ -1097,6 +1122,7 @@ static const char fmt_0tr[] = "[%s%s] m%s travel per revolution%10.4f%s\n";
|
||||
static const char fmt_0mi[] = "[%s%s] m%s microsteps%16d [1,2,4,8,16,32]\n";
|
||||
static const char fmt_0su[] = "[%s%s] m%s steps per unit %17.5f steps per%s\n";
|
||||
static const char fmt_0po[] = "[%s%s] m%s polarity%18d [0=normal,1=reverse]\n";
|
||||
static const char fmt_0ep[] = "[%s%s] m%s enable polarity%11d [0=active HIGH,1=ractive LOW]\n";
|
||||
static const char fmt_0pm[] = "[%s%s] m%s power management%10d [0=disabled,1=always on,2=in cycle,3=when moving]\n";
|
||||
static const char fmt_0pl[] = "[%s%s] m%s motor power level%13.3f [0.000=minimum, 1.000=maximum]\n";
|
||||
static const char fmt_pwr[] = "[%s%s] Motor %c power level:%12.3f\n";
|
||||
@@ -1135,6 +1161,7 @@ void st_print_tr(nvObj_t *nv) { _print_motor_flt_units(nv, fmt_0tr, cm_get_units
|
||||
void st_print_mi(nvObj_t *nv) { _print_motor_int(nv, fmt_0mi);}
|
||||
void st_print_su(nvObj_t *nv) { _print_motor_flt_units(nv, fmt_0su, cm_get_units_mode(MODEL));}
|
||||
void st_print_po(nvObj_t *nv) { _print_motor_int(nv, fmt_0po);}
|
||||
void st_print_ep(nvObj_t *nv) { _print_motor_int(nv, fmt_0ep);}
|
||||
void st_print_pm(nvObj_t *nv) { _print_motor_int(nv, fmt_0pm);}
|
||||
void st_print_pl(nvObj_t *nv) { _print_motor_flt(nv, fmt_0pl);}
|
||||
void st_print_pwr(nvObj_t *nv){ _print_motor_pwr(nv, fmt_pwr);}
|
||||
|
||||
Reference in New Issue
Block a user