mirror of
https://github.com/bdring/Grbl_Esp32.git
synced 2025-09-02 02:42:36 +02:00
Fixed stepstick and laser. Added dir/ena wait & pulse micros.
This commit is contained in:
@@ -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());
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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<StepStick> registration("stepstick");
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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()
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user