diff --git a/Grbl_Esp32/src/MachineConfig.cpp b/Grbl_Esp32/src/MachineConfig.cpp index 33b838ad..50c495aa 100644 --- a/Grbl_Esp32/src/MachineConfig.cpp +++ b/Grbl_Esp32/src/MachineConfig.cpp @@ -98,16 +98,6 @@ Axes::Axes() : _axis() { void Axes::init() { grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Init Motors"); - // TODO FIXME! If use_stepstick, this should be in stepstick? -#ifdef USE_STEPSTICK - grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Using StepStick Mode"); - - if (StepperResetPin->get().defined()) { - // !RESET pin on steppers (MISO On Schematic) - StepperResetPin->get().setAttr(Pin::Attr::Output | Pin::Attr::InitialOn); - } -#endif - if (_sharedStepperDisable.defined()) { _sharedStepperDisable.setAttr(Pin::Attr::Output); grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Shared stepper disable pin:%s", _sharedStepperDisable.name()); diff --git a/Grbl_Esp32/src/MachineConfig.h b/Grbl_Esp32/src/MachineConfig.h index f20570c2..2f260b2b 100644 --- a/Grbl_Esp32/src/MachineConfig.h +++ b/Grbl_Esp32/src/MachineConfig.h @@ -346,8 +346,11 @@ public: Probe* _probe = nullptr; Communications* _comms = nullptr; - bool _laserMode = false; int _pulseMicroSeconds = 3; + int _directionDelayMilliSeconds = 0; + int _disableDelayMilliSeconds = 0; + + bool _laserMode = false; float _arcTolerance = 0.002; float _junctionDeviation = 0.01; diff --git a/Grbl_Esp32/src/Motors/StepStick.cpp b/Grbl_Esp32/src/Motors/StepStick.cpp index 20fb2e60..0b0a5033 100644 --- a/Grbl_Esp32/src/Motors/StepStick.cpp +++ b/Grbl_Esp32/src/Motors/StepStick.cpp @@ -19,14 +19,24 @@ namespace Motors { handler.handle("ms1", _MS1); handler.handle("ms2", _MS2); handler.handle("ms3", _MS3); + handler.handle("reset", _Reset); + } + + void StepStick::afterParse() { + if (!_Reset.undefined()) { + grbl_msg_sendf(CLIENT_SERIAL, MsgLevel::Info, "Using StepStick Mode"); + + // !RESET pin on steppers (MISO On Schematic) + _Reset.setAttr(Pin::Attr::Output | Pin::Attr::InitialOn); + _Reset.on(); + } } // Name of the configurable. Must match the name registered in the cpp file. const char* StepStick::name() const { return "stepstick"; } // Configuration registration - namespace - { + namespace { MotorFactory::InstanceBuilder registration("stepstick"); } } diff --git a/Grbl_Esp32/src/Motors/StepStick.h b/Grbl_Esp32/src/Motors/StepStick.h index cdb7abeb..8c0af342 100644 --- a/Grbl_Esp32/src/Motors/StepStick.h +++ b/Grbl_Esp32/src/Motors/StepStick.h @@ -3,11 +3,11 @@ #include "StandardStepper.h" namespace Motors { - class StepStick : public StandardStepper - { + class StepStick : public StandardStepper { Pin _MS1; Pin _MS2; Pin _MS3; + Pin _Reset; public: StepStick() = default; @@ -18,6 +18,8 @@ namespace Motors { void validate() const override; void handle(Configuration::HandlerBase& handler) override; + void afterParse() override; + // Name of the configurable. Must match the name registered in the cpp file. const char* name() const override; diff --git a/Grbl_Esp32/src/Spindles/Laser.cpp b/Grbl_Esp32/src/Spindles/Laser.cpp index f9ceefe9..93482f05 100644 --- a/Grbl_Esp32/src/Spindles/Laser.cpp +++ b/Grbl_Esp32/src/Spindles/Laser.cpp @@ -20,6 +20,7 @@ */ #include "Laser.h" +#include "../MachineConfig.h" // ===================================== Laser ============================================== @@ -31,12 +32,12 @@ namespace Spindles { void Laser::config_message() { grbl_msg_sendf(CLIENT_ALL, MsgLevel::Info, - "Laser spindle on Pin:%s, Enbl:%s, Freq:%dHz, Res:%dbits Laser mode:%s", + "Laser spindle on Pin:%s, Enbl:%s, Freq:%dHz, Res:%dbits Laser mode:%d", _output_pin.name().c_str(), _enable_pin.name().c_str(), int(_pwm_freq), _pwm_precision, - laser_mode->getStringValue()); // the current mode + (MachineConfig::instance()->_laserMode ? 1 : 0)); // the current mode use_delays = false; // this will override the value set in Spindle::PWM::init() } diff --git a/Grbl_Esp32/src/Stepper.cpp b/Grbl_Esp32/src/Stepper.cpp index 981ca5d0..a047b15a 100644 --- a/Grbl_Esp32/src/Stepper.cpp +++ b/Grbl_Esp32/src/Stepper.cpp @@ -225,7 +225,7 @@ static void stepper_pulse_func() { #ifdef LATER // XXX this should be in the motor driver, not here if (motors_direction(st.dir_outbits)) { - auto wait_direction = direction_delay_microseconds->get(); + auto wait_direction = MachineConfig::instance()->_directionDelayMilliSeconds; if (wait_direction > 0) { // Stepper drivers need some time between changing direction and doing a pulse. switch (current_stepper) { @@ -333,16 +333,17 @@ static void stepper_pulse_func() { } } + auto pulseMicros = MachineConfig::instance()->_pulseMicroSeconds; switch (current_stepper) { case ST_I2S_STREAM: // Generate the number of pulses needed to span pulse_microseconds - i2s_out_push_sample(pulse_microseconds->get()); + i2s_out_push_sample(pulseMicros); MachineConfig::instance()->_axes->unstep(); break; case ST_I2S_STATIC: case ST_TIMED: // wait for step pulse time to complete...some time expired during code above - while (esp_timer_get_time() - step_pulse_start_time < pulse_microseconds->get()) { + while (esp_timer_get_time() - step_pulse_start_time < pulseMicros) { NOP(); // spin here until time to turn off step } MachineConfig::instance()->_axes->unstep(); @@ -394,13 +395,13 @@ void st_wake_up() { // Initialize step pulse timing from settings. Here to ensure updating after re-writing. #ifdef USE_RMT_STEPS // Step pulse delay handling is not require with ESP32...the RMT function does it. - if (direction_delay_microseconds->get() < 1) { + if (MachineConfig::instance()->_disableDelayMilliSeconds < 1) { // Set step pulse time. Ad hoc computation from oscilloscope. Uses two's complement. - st.step_pulse_time = -(((pulse_microseconds->get() - 2) * ticksPerMicrosecond) >> 3); + st.step_pulse_time = -(((MachineConfig::instance()->_pulseMicroSeconds - 2) * ticksPerMicrosecond) >> 3); } #else // Normal operation // Set step pulse time. Ad hoc computation from oscilloscope. Uses two's complement. - st.step_pulse_time = -(((pulse_microseconds->get() - 2) * ticksPerMicrosecond) >> 3); + st.step_pulse_time = -(((MachineConfig::instance()->_pulseMicroSeconds - 2) * ticksPerMicrosecond) >> 3); #endif // Enable Stepper Driver Interrupt