1
0
mirror of https://github.com/bdring/Grbl_Esp32.git synced 2025-08-28 16:49:54 +02:00

Merge pull request #340 from bdring/Devt

Devt
This commit is contained in:
bdring
2020-02-20 19:51:00 -06:00
committed by GitHub
9 changed files with 133 additions and 60 deletions

View File

@@ -817,7 +817,7 @@
#define USE_RMT_STEPS
#define USE_TRINAMIC // Using at least 1 trinamic driver
#define USE_TRINAMIC // Using at least 1 trinamic driver
#define X_STEP_PIN GPIO_NUM_12
#define X_DIRECTION_PIN GPIO_NUM_26
@@ -1011,56 +1011,74 @@
#ifdef N_AXIS
#undef N_AXIS
#endif
#define N_AXIS 4
#define N_AXIS 4 // can be 3 or 4. (if 3 install bypass jumper next to the A driver)
#define USE_TRINAMIC
#define TRINAMIC_DAISY_CHAIN
// Use SPI enable instead of the enable pin
// The hardware enable pin is tied to ground
#define USE_TRINAMIC_ENABLE
#define USE_RMT_STEPS
#define X_DRIVER_TMC2130 // Which Driver Type?
#define X_RSENSE 0.11f // .11 Ohm...typical of 2130 type 0.075 typical for TMC5160
#define X_STEP_PIN GPIO_NUM_12
#define X_DIRECTION_PIN GPIO_NUM_14
#define X_TRINAMIC // using SPI control
#define X_DRIVER_TMC2130 // Which Driver Type?
#define X_CS_PIN GPIO_NUM_17 // Daisy Chain, all share same CS pin
#define X_RSENSE 0.11f // .11 Ohm
#define Y_DRIVER_TMC2130 // Which Driver Type?
#define Y_RSENSE 0.11f // .11 Ohm...typical of 2130 type 0.075 typical for TMC5160
#define Y_STEP_PIN GPIO_NUM_27
#define Y_DIRECTION_PIN GPIO_NUM_26
#define Y_TRINAMIC // using SPI control
#define Y_DRIVER_TMC2130 // Which Driver Type?
#define Y_CS_PIN X_CS_PIN // Daisy Chain, all share same CS pin
#define Y_RSENSE 0.11f // .11 Ohm
#define Z_DRIVER_TMC2130 // Which Driver Type?
#define Z_RSENSE 0.11f // .11 Ohm...typical of 2130 type 0.075 typical for TMC5160
#define Z_STEP_PIN GPIO_NUM_15
#define Z_DIRECTION_PIN GPIO_NUM_2
#define Z_TRINAMIC // using SPI control
#define Z_DRIVER_TMC2130 // Which Driver Type?
#define Z_CS_PIN X_CS_PIN // Daisy Chain, all share same CS pin
#define Z_RSENSE 0.11f // .11 Ohm
#define A_STEP_PIN GPIO_NUM_33
#define A_DIRECTION_PIN GPIO_NUM_32
#define A_TRINAMIC // using SPI control
#define A_DRIVER_TMC2130 // Which Driver Type?
#define A_CS_PIN X_CS_PIN // Daisy Chain, all share same CS pin
#define A_RSENSE 0.11f // .11 Ohm
#define STEPPERS_DISABLE_PIN GPIO_NUM_13
#if (N_AXIS == 4)
#define A_DRIVER_TMC2130 // Which Driver Type?
#define A_RSENSE 0.11f // .11 Ohm...typical of 2130 type 0.075 typical for TMC5160
#define A_STEP_PIN GPIO_NUM_33
#define A_DIRECTION_PIN GPIO_NUM_32
#define A_TRINAMIC // using SPI control
#define A_CS_PIN X_CS_PIN // Daisy Chain, all share same CS pin
#endif
// Mist is a 3.3V output
// Turn on with M7 and off with M9
#define COOLANT_MIST_PIN GPIO_NUM_21
#define SPINDLE_PWM_PIN GPIO_NUM_25
#define SPINDLE_ENABLE_PIN GPIO_NUM_4
#define SPINDLE_PWM_CHANNEL 0
#define SPINDLE_PWM_BIT_PRECISION 8
#define SPINDLE_PWM_BIT_PRECISION 8
// Relay operation
// Install Jumper near relay
// For spindle Use max RPM of 1
// For PWM remove jumper and set MAX RPM to something higher ($30 setting)
// Interlock jumper along top edge needs to be installed for both versions
#define DEFAULT_SPINDLE_RPM_MAX 1 // Should be 1 for relay operation
#define PROBE_PIN GPIO_NUM_22
#define X_LIMIT_PIN GPIO_NUM_36
#define Y_LIMIT_PIN GPIO_NUM_39
#define Z_LIMIT_PIN GPIO_NUM_34
#define A_LIMIT_PIN GPIO_NUM_35
#define LIMIT_MASK B1111
#if (N_AXIS == 4)
#define A_LIMIT_PIN GPIO_NUM_35
#define LIMIT_MASK B1111
#else
#define LIMIT_MASK B0111
#endif
#endif

View File

@@ -190,43 +190,43 @@
// =========== AXIS RESOLUTION ======
#ifndef DEFAULT_X_STEPS_PER_MM
#define DEFAULT_X_STEPS_PER_MM 800.0
#define DEFAULT_X_STEPS_PER_MM 100.0
#endif
#ifndef DEFAULT_Y_STEPS_PER_MM
#define DEFAULT_Y_STEPS_PER_MM 800.0
#define DEFAULT_Y_STEPS_PER_MM 100.0
#endif
#ifndef DEFAULT_Z_STEPS_PER_MM
#define DEFAULT_Z_STEPS_PER_MM 800.0
#define DEFAULT_Z_STEPS_PER_MM 100.0
#endif
#ifndef DEFAULT_A_STEPS_PER_MM
#define DEFAULT_A_STEPS_PER_MM 800.0
#define DEFAULT_A_STEPS_PER_MM 100.0
#endif
#ifndef DEFAULT_B_STEPS_PER_MM
#define DEFAULT_B_STEPS_PER_MM 800.0
#define DEFAULT_B_STEPS_PER_MM 100.0
#endif
#ifndef DEFAULT_C_STEPS_PER_MM
#define DEFAULT_C_STEPS_PER_MM 800.0
#define DEFAULT_C_STEPS_PER_MM 100.0
#endif
// ============ AXIS MAX SPPED =========
#ifndef DEFAULT_X_MAX_RATE
#define DEFAULT_X_MAX_RATE 5000.0 // mm/min
#define DEFAULT_X_MAX_RATE 1000.0 // mm/min
#endif
#ifndef DEFAULT_Y_MAX_RATE
#define DEFAULT_Y_MAX_RATE 5000.0 // mm/min
#define DEFAULT_Y_MAX_RATE 1000.0 // mm/min
#endif
#ifndef DEFAULT_Z_MAX_RATE
#define DEFAULT_Z_MAX_RATE 5000.0 // mm/min
#define DEFAULT_Z_MAX_RATE 1000.0 // mm/min
#endif
#ifndef DEFAULT_A_MAX_RATE
#define DEFAULT_A_MAX_RATE 5000.0 // mm/min
#define DEFAULT_A_MAX_RATE 1000.0 // mm/min
#endif
#ifndef DEFAULT_B_MAX_RATE
#define DEFAULT_B_MAX_RATE 5000.0 // mm/min
#define DEFAULT_B_MAX_RATE 1000.0 // mm/min
#endif
#ifndef DEFAULT_C_MAX_RATE
#define DEFAULT_C_MAX_RATE 5000.0 // mm/min
#define DEFAULT_C_MAX_RATE 1000.0 // mm/min
#endif
// ============== Axis Acceleration =========

View File

@@ -20,7 +20,7 @@
// Grbl versioning system
#define GRBL_VERSION "1.1f"
#define GRBL_VERSION_BUILD "20200216"
#define GRBL_VERSION_BUILD "20200219"
//#include <sdkconfig.h>
#include <Arduino.h>

View File

@@ -51,7 +51,7 @@ void IRAM_ATTR isr_limit_switches()
#ifdef ENABLE_SOFTWARE_DEBOUNCE
// we will start a task that will recheck the switches after a small delay
int evt;
xQueueSendFromISR(limit_sw_queue, &evt, NULL);
xQueueSendFromISR(limit_sw_queue, &evt, NULL);
#else
#ifdef HARD_LIMIT_FORCE_STATE_CHECK
// Check limit pin state.
@@ -450,11 +450,16 @@ void limitCheckTask(void *pvParameters)
{
while(true) {
int evt;
xQueueReceive(limit_sw_queue, &evt, portMAX_DELAY); // block until receive queue
xQueueReceive(limit_sw_queue, &evt, portMAX_DELAY); // block until receive queue
vTaskDelay( DEBOUNCE_PERIOD / portTICK_PERIOD_MS ); // delay a while
if (limits_get_state()) {
mc_reset(); // Initiate system kill.
uint8_t switch_state;
switch_state = limits_get_state();
if (switch_state) {
grbl_msg_sendf(CLIENT_SERIAL, MSG_LEVEL_INFO, "Limit Switch State %08d", switch_state);
mc_reset(); // Initiate system kill.
system_set_exec_alarm(EXEC_ALARM_HARD_LIMIT); // Indicate hard limit critical event
}
}

View File

@@ -133,9 +133,7 @@
// TODO ABC Axes
void Trinamic_Init()
{
uint8_t testResult;
{
grbl_msg_sendf(CLIENT_SERIAL, MSG_LEVEL_INFO, "TMCStepper Init using Library Ver 0x%06x", TMCSTEPPER_VERSION);
SPI.begin();
@@ -147,9 +145,8 @@ void Trinamic_Init()
#ifdef X_TRINAMIC
TRINAMIC_X.begin(); // Initiate pins and registries
testResult = TRINAMIC_X.test_connection();
trinamic_test_response(testResult, "X");
TRINAMIC_X.toff(5);
trinamic_test_response(TRINAMIC_X.test_connection(), "X");
TRINAMIC_X.toff(TRINAMIC_DEFAULT_TOFF);
TRINAMIC_X.microsteps(settings.microsteps[X_AXIS]);
TRINAMIC_X.rms_current(settings.current[X_AXIS] * 1000.0, settings.hold_current[X_AXIS]/100.0);
TRINAMIC_X.en_pwm_mode(1); // Enable extremely quiet stepping
@@ -158,9 +155,8 @@ void Trinamic_Init()
#ifdef Y_TRINAMIC
TRINAMIC_Y.begin(); // Initiate pins and registries
testResult = TRINAMIC_Y.test_connection();
trinamic_test_response(testResult, "Y");
TRINAMIC_Y.toff(5);
trinamic_test_response(TRINAMIC_Y.test_connection(), "Y");
TRINAMIC_Y.toff(TRINAMIC_DEFAULT_TOFF);
TRINAMIC_Y.microsteps(settings.microsteps[Y_AXIS]);
TRINAMIC_Y.rms_current(settings.current[Y_AXIS] * 1000.0, settings.hold_current[Y_AXIS]/100.0);
TRINAMIC_Y.en_pwm_mode(1); // Enable extremely quiet stepping
@@ -169,9 +165,8 @@ void Trinamic_Init()
#ifdef Z_TRINAMIC
TRINAMIC_Z.begin(); // Initiate pins and registries
testResult = TRINAMIC_Z.test_connection();
trinamic_test_response(testResult, "Z");
TRINAMIC_Z.toff(5);
trinamic_test_response(TRINAMIC_Z.test_connection(), "Z");
TRINAMIC_Z.toff(TRINAMIC_DEFAULT_TOFF);
TRINAMIC_Z.microsteps(settings.microsteps[Z_AXIS]);
TRINAMIC_Z.rms_current(settings.current[Z_AXIS] * 1000.0, settings.hold_current[Z_AXIS]/100.0);
TRINAMIC_Z.en_pwm_mode(1); // Enable extremely quiet stepping
@@ -180,9 +175,8 @@ void Trinamic_Init()
#ifdef A_TRINAMIC
TRINAMIC_A.begin(); // Initiate pins and registries
testResult = TRINAMIC_A.test_connection();
trinamic_test_response(testResult, "A");
TRINAMIC_A.toff(5);
trinamic_test_response(TRINAMIC_A.test_connection(), "A");
TRINAMIC_A.toff(TRINAMIC_DEFAULT_TOFF);
TRINAMIC_A.microsteps(settings.microsteps[A_AXIS]);
TRINAMIC_A.rms_current(settings.current[A_AXIS] * 1000.0, settings.hold_current[A_AXIS]/100.0);
TRINAMIC_A.en_pwm_mode(1); // Enable extremely quiet stepping
@@ -191,9 +185,8 @@ void Trinamic_Init()
#ifdef B_TRINAMIC
TRINAMIC_B.begin(); // Initiate pins and registries
testResult = TRINAMIC_B.test_connection();
trinamic_test_response(testResult, "B");
TRINAMIC_B.toff(5);
trinamic_test_response(TRINAMIC_B.test_connection(), "B");
TRINAMIC_B.toff(TRINAMIC_DEFAULT_TOFF);
TRINAMIC_B.microsteps(settings.microsteps[B_AXIS]);
TRINAMIC_B.rms_current(settings.current[B_AXIS] * 1000.0, settings.hold_current[B_AXIS]/100.0);
TRINAMIC_B.en_pwm_mode(1); // Enable extremely quiet stepping
@@ -202,9 +195,8 @@ void Trinamic_Init()
#ifdef C_TRINAMIC
TRINAMIC_C.begin(); // Initiate pins and registries
testResult = TRINAMIC_C.test_connection();
trinamic_test_response(testResult, "C");
TRINAMIC_C.toff(5);
trinamic_test_response(TRINAMIC_C.test_connection(), "C");
TRINAMIC_C.toff(TRINAMIC_DEFAULT_TOFF);
TRINAMIC_C.microsteps(settings.microsteps[C_AXIS]);
TRINAMIC_C.rms_current(settings.current[C_AXIS] * 1000.0, settings.hold_current[C_AXIS]/100.0);
TRINAMIC_C.en_pwm_mode(1); // Enable extremely quiet stepping
@@ -266,4 +258,50 @@ void trinamic_test_response(uint8_t result, const char *axis)
}
}
void trinamic_stepper_enable(bool enable) {
// Trinamic_Init() has already enabled the drivers in case #define USE_TRINAMIC_ENABLE is not used
// so the previous_state is set accordingly
static bool previous_state = true;
uint8_t toff;
if (enable == previous_state)
return;
previous_state = enable;
grbl_msg_sendf(CLIENT_SERIAL, MSG_LEVEL_INFO, "Trinamic Enable: %d", enable);
if (enable)
toff = TRINAMIC_DEFAULT_TOFF;
else
toff = 0; // diables driver
#ifdef X_TRINAMIC
TRINAMIC_X.toff(toff);
#endif
#ifdef Y_TRINAMIC
TRINAMIC_Y.toff(toff);
#endif
#ifdef Z_TRINAMIC
TRINAMIC_Z.toff(toff);
#endif
#ifdef A_TRINAMIC
TRINAMIC_A.toff(toff);
#endif
#ifdef B_TRINAMIC
TRINAMIC_B.toff(toff);
#endif
#ifdef C_TRINAMIC
TRINAMIC_C.toff(toff);
#endif
}
#endif

View File

@@ -17,6 +17,8 @@
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/
#define TRINAMIC_DEFAULT_TOFF 5
#ifndef GRBL_TRINAMIC_h
#define GRBL_TRINAMIC_h
@@ -28,6 +30,7 @@
void Trinamic_Init();
void trinamic_change_settings();
void trinamic_test_response(uint8_t result, const char *axis);
void trinamic_stepper_enable(bool enable);
#endif
#endif

View File

@@ -202,6 +202,8 @@ void get_state(char *foo)
}
}
// Handles the primary confirmation protocol response for streaming interfaces and human-feedback.
// For every incoming line, this method responds with an 'ok' for a successful command or an
// 'error:' to indicate some error event with the line or some critical system error during

View File

@@ -205,8 +205,14 @@ void spindle_sync(uint8_t state, float rpm)
void grbl_analogWrite(uint8_t chan, uint32_t duty)
{
if (ledcRead(chan) != duty) // reduce unnecessary calls to ledcWrite()
// Remember the old duty cycle in memory instead of reading
// it from the I/O peripheral because I/O reads are quite
// a bit slower than memory reads.
static uint32_t old_duty = 0;
if (old_duty != duty) // reduce unnecessary calls to ledcWrite()
{
old_duty = duty;
ledcWrite(chan, duty);
}
}

View File

@@ -1501,8 +1501,9 @@ void IRAM_ATTR Stepper_Timer_Stop()
void set_stepper_disable(uint8_t isOn) // isOn = true // to disable
{
#ifdef TRINAMIC
return;
#ifdef USE_TRINAMIC_ENABLE
trinamic_stepper_enable(!isOn);
#endif
if (bit_istrue(settings.flags,BITFLAG_INVERT_ST_ENABLE)) {