Skip to content

Commit

Permalink
Updated Root CNC v3 map and added Root CNC Pro map. Ref. issue #102.
Browse files Browse the repository at this point in the history
Added missing comma. Ref. ioSender issue 367.
Added tentative support for additional I2C API functions.
  • Loading branch information
terjeio committed Apr 19, 2024
1 parent 383f7b8 commit c36e32f
Show file tree
Hide file tree
Showing 7 changed files with 220 additions and 10 deletions.
17 changes: 16 additions & 1 deletion driver.json
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@
},
{
"name": "Root CNC v3",
"notes": "Not tested!",
"symbol": "BOARD_ROOTCNC_V3",
"URL": "https://wiki.rootcnc.com/en/Root-Controller-ISO/DetailedInfo",
"MAP": "main/boards/root_cnc_v3_map.h",
Expand All @@ -237,6 +236,22 @@
"bluetooth": 1
}
},
{
"name": "Root CNC PRO",
"notes": "For verification!",
"symbol": "BOARD_ROOTCNC_PRO",
"URL": "https://wiki.rootcnc.com/en/Root-Controller-pro/DetailedInfo",
"MAP": "main/boards/root_cnc_pro_map.h",
"caps": {
"axes": 6,
"digital_in": 1,
"serial_ports": 2,
"estop": 0,
"sdcard": 1,
"wifi": 1,
"bluetooth": 1
}
},
{
"name": "CNC 3040",
"symbol": "BOARD_CNC3040",
Expand Down
151 changes: 151 additions & 0 deletions main/boards/root_cnc_pro_map.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
/*
root_cnc_pro_map.h - An embedded CNC Controller with rs274/ngc (g-code) support
Driver code for ESP32
Part of grblHAL
Copyright (c) 2024 NEWTech Creative 2024
grblHAL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
grblHAL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
*/

#define BOARD_NAME "Root CNC Pro"
#define BOARD_URL "https://wiki.rootcnc.com/en/Root-Controller-pro/DetailedInfo"

#if KEYPAD_ENABLE == 1
#error No free pins for I2C keypad!
#endif

#define USE_I2S_OUT
#define I2S_OUT_PIN_BASE 64

// timer definitions
#define STEP_TIMER_GROUP TIMER_GROUP_0
#define STEP_TIMER_INDEX TIMER_0

#if SDCARD_ENABLE || TRINAMIC_SPI_ENABLE

// Pin mapping when using SPI mode.
// With this mapping, SD card can be used both in SPI and 1-line SD mode.
#define PIN_NUM_MISO 19
#define PIN_NUM_MOSI 23
#define PIN_NUM_CLK 18
#if SDCARD_ENABLE
// Note that a pull-up on CS line is required in SD mode.
#define PIN_NUM_CS 5
#endif // SDCARD_ENABLE
#endif // SDCARD_ENABLE || TRINAMIC_SPI_ENABLE

#define I2S_OUT_BCK GPIO_NUM_22
#define I2S_OUT_WS GPIO_NUM_21
#define I2S_OUT_DATA GPIO_NUM_12

#define X_STEP_PIN I2SO(1)
#define X_DIRECTION_PIN I2SO(0)
#define X_ENABLE_PIN I2SO(15)
#define X_LIMIT_PIN GPIO_NUM_36

#define Y_STEP_PIN I2SO(21)
#define Y_DIRECTION_PIN I2SO(20)
#define Y_ENABLE_PIN I2SO(19)
#define Y_LIMIT_PIN GPIO_NUM_32

#define Z_STEP_PIN I2SO(29)
#define Z_DIRECTION_PIN I2SO(28)
#define Z_ENABLE_PIN I2SO(27)
#define Z_LIMIT_PIN GPIO_NUM_36

// Define ganged axis or A axis step pulse and step direction output pins.
#if N_ABC_MOTORS >= 1
#define M3_AVAILABLE
#define M3_STEP_PIN I2SO(13)
#define M3_DIRECTION_PIN I2SO(12)
#define M3_ENABLE_PIN I2SO(11)
#define M3_LIMIT_PIN GPIO_NUM_35
#endif

// Define ganged axis or B axis step pulse and step direction output pins.
#if N_ABC_MOTORS >= 2
#define M4_AVAILABLE
#define M4_STEP_PIN I2SO(9)
#define M4_DIRECTION_PIN I2SO(8)
#define M4_ENABLE_PIN I2SO(23)
#define M4_LIMIT_PIN GPIO_NUM_34
#endif

// Define ganged axis or B axis step pulse and step direction output pins.
#if N_ABC_MOTORS == 3
#define M5_AVAILABLE
#define M5_STEP_PIN I2SO(17)
#define M5_DIRECTION_PIN I2SO(16)
#define M5_ENABLE_PIN I2SO(31)
#endif

// Define driver spindle pins

#if DRIVER_SPINDLE_PWM_ENABLE
#define SPINDLE_PWM_PIN GPIO_NUM_33
#else
#define AUXOUTPUT0_PIN GPIO_NUM_33
#endif

#if DRIVER_SPINDLE_DIR_ENABLE
#define SPINDLE_DIRECTION_PIN I2SO(0)
#else
#define AUXOUTPUT1_PIN I2SO(0)
#endif

#if DRIVER_SPINDLE_ENABLE
#define SPINDLE_ENABLE_PIN I2SO(1)
#else
#define AUXOUTPUT2_PIN I2SO(1)
#endif

// Define flood and mist coolant and aux enable output pins.

#define COOLANT_MIST_PIN I2SO(20)
#define COOLANT_FLOOD_PIN I2SO(21)
#define AUXOUTPUT0_PIN GPIO_NUM_13
#define AUXOUTPUT1_PIN I2SO(5)
#define AUXOUTPUT2_PIN I2SO(6)
#define AUXOUTPUT3_PIN I2SO(7)
#define AUXOUTPUT4_PIN I2SO(3)

// Define user-control CONTROLs (cycle start, reset, feed hold) input pins.

#define AUXINPUT0_PIN GPIO_NUM_33
#define AUXINPUT1_PIN GPIO_NUM_26
#define AUXINPUT2_PIN GPIO_NUM_2

#if PROBE_ENABLE
#define PROBE_PIN AUXINPUT0_PIN
#endif

#if SAFETY_DOOR_ENABLE
#define SAFETY_DOOR_PIN AUXINPUT1_PIN
#endif

#if CYCLE_START_ENABLE
#define SAFETY_DOOR_PIN AUXINPUT2_PIN
#endif
// N/A

#ifdef ADD_SERIAL2
#define UART2_RX_PIN GPIO_NUM_16
#define UART2_TX_PIN GPIO_NUM_17
#if MODBUS_ENABLE & MODBUS_RTU_DIR_ENABLED
#define MODBUS_DIRECTION_PIN GPIO_NUM_4
#endif
#endif
8 changes: 5 additions & 3 deletions main/boards/root_cnc_v3_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
You should have received a copy of the GNU General Public License
along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
Tested by NEWTech Creative
*/

#define BOARD_NAME "Root CNC v3"
Expand Down Expand Up @@ -49,7 +51,7 @@
#endif // SDCARD_ENABLE || TRINAMIC_SPI_ENABLE

#define I2S_OUT_BCK GPIO_NUM_22
#define I2S_OUT_WS GPIO_NUM_17
#define I2S_OUT_WS GPIO_NUM_21
#define I2S_OUT_DATA GPIO_NUM_12

#define X_STEP_PIN I2SO(7)
Expand Down Expand Up @@ -116,8 +118,8 @@

// Define flood and mist coolant enable output pins.

#define COOLANT_MIST_PIN I2SO(20)
#define COOLANT_FLOOD_PIN I2SO(21)
#define COOLANT_MIST_PIN I2SO(22)
#define COOLANT_FLOOD_PIN I2SO(13)

// Define user-control CONTROLs (cycle start, reset, feed hold) input pins.

Expand Down
2 changes: 2 additions & 0 deletions main/driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ typedef struct {
#include "boards/root_cnc_v2_map.h"
#elif defined(BOARD_ROOTCNC_V3)
#include "boards/root_cnc_v3_map.h"
#elif defined(BOARD_ROOTCNC_PRO)
#include "boards/root_cnc_pro_map.h"
#elif defined(BOARD_BLOX)
#include "boards/blox_map.h"
#elif defined(BOARD_CNC3040)
Expand Down
49 changes: 44 additions & 5 deletions main/i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,20 @@
Part of grblHAL driver for ESP32
Copyright (c) 2018-2023 Terje Io
Copyright (c) 2018-2024 Terje Io
Grbl is free software: you can redistribute it and/or modify
grblHAL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Grbl is distributed in the hope that it will be useful,
grblHAL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>.
along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
*/

#include "i2c.h"
Expand Down Expand Up @@ -124,6 +124,45 @@ void I2CInit (void)
}
}

bool i2c_probe (uint_fast16_t i2c_address)
{
esp_err_t ret = ESP_FAIL;

if(i2cBusy != NULL && xSemaphoreTake(i2cBusy, 5 / portTICK_PERIOD_MS) == pdTRUE) {
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (i2c_address << 1)|I2C_MASTER_WRITE, true);
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_PORT, cmd, 1000 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);

xSemaphoreGive(i2cBusy);
}

return ret == ESP_OK;
}

bool i2c_send (uint_fast16_t i2c_address, uint8_t *data, size_t size, bool block)
{
esp_err_t ret = ESP_FAIL;

// always blocking... TODO: post non-blocking to I2CTask()

if(i2cBusy != NULL && xSemaphoreTake(i2cBusy, 5 / portTICK_PERIOD_MS) == pdTRUE) {
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (i2c_address << 1)|I2C_MASTER_WRITE, true);
i2c_master_write(cmd, data, size, true);
i2c_master_stop(cmd);
ret = i2c_master_cmd_begin(I2C_PORT, cmd, 1000 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);

xSemaphoreGive(i2cBusy);
}

return ret == ESP_OK;
}

void i2c_get_keycode (uint_fast16_t i2cAddr, keycode_callback_ptr callback)
{
static i2c_task_t i2c_task = {
Expand Down
1 change: 1 addition & 0 deletions main/my_machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
//#define BOARD_BLACKBOX_X32 // NOTE: Enable in CMakeLists.txt to set board specific defaults for the core!
//#define BOARD_ROOTCNC_V2 //
//#define BOARD_ROOTCNC_V3 //
#define BOARD_ROOTCNC_PRO //
//#define BOARD_JACKPOT // Uses TMC2209 drivers, untested!
//#define BOARD_CNC_BOOSTERPACK //
//#define BOARD_GENERIC_I2S_S3 // Generic map for ESP32-S3 with I2S shift registers for I/O expansion
Expand Down
2 changes: 1 addition & 1 deletion main/uart_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ static io_stream_properties_t serial[] = {
.flags.rx_only = On,
#endif
.claim = serial2Init
}
},
#endif // SERIAL2_ENABLE
#if SERIAL3_ENABLE
{
Expand Down

0 comments on commit c36e32f

Please sign in to comment.