Support 4 motors
Partial support for > 4 motors, needs a clean way of defining wiring.
This commit is contained in:
parent
51b5b670e6
commit
1b3e251783
6 changed files with 57 additions and 28 deletions
14
src/boards.h
14
src/boards.h
|
|
@ -32,6 +32,7 @@
|
||||||
#define PWM_NUM 0
|
#define PWM_NUM 0
|
||||||
#define WIRING_PWM_LEDS {}
|
#define WIRING_PWM_LEDS {}
|
||||||
#define SUPPORT_EEPROM
|
#define SUPPORT_EEPROM
|
||||||
|
#define STAGE_MAX_MOTORS 3
|
||||||
#elif defined(BOARD_SANGABOARDv2)
|
#elif defined(BOARD_SANGABOARDv2)
|
||||||
#define BOARD_STRING "Sangaboard v0.2"
|
#define BOARD_STRING "Sangaboard v0.2"
|
||||||
#define WIRING_MOTOR_X 13, 12, 11, 10
|
#define WIRING_MOTOR_X 13, 12, 11, 10
|
||||||
|
|
@ -45,6 +46,7 @@
|
||||||
#define PWM_NUM 0
|
#define PWM_NUM 0
|
||||||
#define WIRING_PWM_LEDS {}
|
#define WIRING_PWM_LEDS {}
|
||||||
#define SUPPORT_EEPROM
|
#define SUPPORT_EEPROM
|
||||||
|
#define STAGE_MAX_MOTORS 3
|
||||||
#elif defined(BOARD_CUSTOM_BLUEPILL)
|
#elif defined(BOARD_CUSTOM_BLUEPILL)
|
||||||
#define BOARD_STRING "Custom Bluepill board"
|
#define BOARD_STRING "Custom Bluepill board"
|
||||||
#define WIRING_MOTOR_X PB11, PB10, PB1, PB0
|
#define WIRING_MOTOR_X PB11, PB10, PB1, PB0
|
||||||
|
|
@ -57,6 +59,7 @@
|
||||||
#define PRIMARY_SERIAL_PORT Serial
|
#define PRIMARY_SERIAL_PORT Serial
|
||||||
#define PWM_NUM 0
|
#define PWM_NUM 0
|
||||||
#define WIRING_PWM_LEDS {}
|
#define WIRING_PWM_LEDS {}
|
||||||
|
#define STAGE_MAX_MOTORS 3
|
||||||
#elif defined(BOARD_CUSTOM_PICO)
|
#elif defined(BOARD_CUSTOM_PICO)
|
||||||
#define BOARD_STRING "Custom Pico board"
|
#define BOARD_STRING "Custom Pico board"
|
||||||
#define WIRING_MOTOR_X 2, 3, 4, 5
|
#define WIRING_MOTOR_X 2, 3, 4, 5
|
||||||
|
|
@ -67,13 +70,14 @@
|
||||||
#define WIRING_ENDSTOPS_MIN {A0,A1,A2}
|
#define WIRING_ENDSTOPS_MIN {A0,A1,A2}
|
||||||
#define WIRING_ENDSTOPS_MAX {A3,A4,A5}
|
#define WIRING_ENDSTOPS_MAX {A3,A4,A5}
|
||||||
#define ADDITIONAL_STEPPERS 1
|
#define ADDITIONAL_STEPPERS 1
|
||||||
#define WIRING_ADDITIONAL_STEPPERS = {{0, 1, 22, 23}}
|
#define WIRING_ADDITIONAL_STEPPER 0, 1, 22, 23
|
||||||
#define WIRING_STEPSTICK {13,14,15} //enable, step, dir todo: move to boards.h
|
#define WIRING_STEPSTICK {13,14,15} //enable, step, dir todo: move to boards.h
|
||||||
#define PRIMARY_SERIAL_PORT Serial
|
#define PRIMARY_SERIAL_PORT Serial
|
||||||
#define SECONDARY_SERIAL_PORT Serial2
|
#define SECONDARY_SERIAL_PORT Serial2
|
||||||
#define PWM_NUM 0
|
#define PWM_NUM 0
|
||||||
#define WIRING_PWM_LEDS {}
|
#define WIRING_PWM_LEDS {}
|
||||||
#define SUPPORT_EEPROM
|
#define SUPPORT_EEPROM
|
||||||
|
#define STAGE_MAX_MOTORS 4
|
||||||
#elif defined(BOARD_SANGABOARDv5)
|
#elif defined(BOARD_SANGABOARDv5)
|
||||||
#define BOARD_STRING "Sangaboard v0.5"
|
#define BOARD_STRING "Sangaboard v0.5"
|
||||||
#define WIRING_MOTOR_X 2, 3, 4, 5
|
#define WIRING_MOTOR_X 2, 3, 4, 5
|
||||||
|
|
@ -84,7 +88,7 @@
|
||||||
#define WIRING_ENDSTOPS_MIN {26,27,28}
|
#define WIRING_ENDSTOPS_MIN {26,27,28}
|
||||||
//#define WIRING_ENDSTOPS_MAX {22,23,0} //not normally used
|
//#define WIRING_ENDSTOPS_MAX {22,23,0} //not normally used
|
||||||
#define ADDITIONAL_STEPPERS 1
|
#define ADDITIONAL_STEPPERS 1
|
||||||
#define WIRING_ADDITIONAL_STEPPERS = {{0, 1, 22, 23}}
|
#define WIRING_ADDITIONAL_STEPPER 0, 1, 22, 23
|
||||||
#define WIRING_STEPSTICK {23,22,1} //enable, step, dir todo: move to boards.h
|
#define WIRING_STEPSTICK {23,22,1} //enable, step, dir todo: move to boards.h
|
||||||
#define WIRING_SERIAL_TX 8
|
#define WIRING_SERIAL_TX 8
|
||||||
#define WIRING_SERIAL_RX 9
|
#define WIRING_SERIAL_RX 9
|
||||||
|
|
@ -95,6 +99,7 @@
|
||||||
#define WIRING_CC_LED 24
|
#define WIRING_CC_LED 24
|
||||||
//TODO: 4th motor support
|
//TODO: 4th motor support
|
||||||
#define SUPPORT_EEPROM
|
#define SUPPORT_EEPROM
|
||||||
|
#define STAGE_MAX_MOTORS 4
|
||||||
#elif defined(BOARD_CUSTOM_ESP32)
|
#elif defined(BOARD_CUSTOM_ESP32)
|
||||||
#define BOARD_STRING "Custom ESP32 board"
|
#define BOARD_STRING "Custom ESP32 board"
|
||||||
#define WIRING_MOTOR_X 34, 32, 25, 27
|
#define WIRING_MOTOR_X 34, 32, 25, 27
|
||||||
|
|
@ -108,8 +113,9 @@
|
||||||
#define PRIMARY_SERIAL_PORT Serial
|
#define PRIMARY_SERIAL_PORT Serial
|
||||||
#define PWM_NUM 0
|
#define PWM_NUM 0
|
||||||
#define WIRING_PWM_LEDS {}
|
#define WIRING_PWM_LEDS {}
|
||||||
|
#define STAGE_MAX_MOTORS 3
|
||||||
#elif defined(BOARD_CUSTOM)
|
#elif defined(BOARD_CUSTOM)
|
||||||
#define BOARD_STRING "Custom board"
|
#define BOARD_STRING "Custom UNO board"
|
||||||
#define WIRING_MOTOR_X 2, 3, 4, 5
|
#define WIRING_MOTOR_X 2, 3, 4, 5
|
||||||
#define WIRING_MOTOR_Y 2, 3, 4, 5
|
#define WIRING_MOTOR_Y 2, 3, 4, 5
|
||||||
#define WIRING_MOTOR_Z 2, 3, 4, 5
|
#define WIRING_MOTOR_Z 2, 3, 4, 5
|
||||||
|
|
@ -118,10 +124,10 @@
|
||||||
#define WIRING_ENDSTOPS_MIN {1,2,0}
|
#define WIRING_ENDSTOPS_MIN {1,2,0}
|
||||||
//#define WIRING_ENDSTOPS_MAX {22,23,0} //not normally used
|
//#define WIRING_ENDSTOPS_MAX {22,23,0} //not normally used
|
||||||
#define ADDITIONAL_STEPPERS 1
|
#define ADDITIONAL_STEPPERS 1
|
||||||
#define WIRING_ADDITIONAL_STEPPERS = {{0, 1, 22, 23}}
|
|
||||||
#define WIRING_STEPSTICK {8,9,10} //enable, step, dir todo: move to boards.h
|
#define WIRING_STEPSTICK {8,9,10} //enable, step, dir todo: move to boards.h
|
||||||
#define PRIMARY_SERIAL_PORT Serial
|
#define PRIMARY_SERIAL_PORT Serial
|
||||||
#define PWM_NUM 0
|
#define PWM_NUM 0
|
||||||
#define WIRING_PWM_LEDS {}
|
#define WIRING_PWM_LEDS {}
|
||||||
#define SUPPORT_EEPROM
|
#define SUPPORT_EEPROM
|
||||||
|
#define STAGE_MAX_MOTORS 3
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -21,11 +21,6 @@
|
||||||
// #define STEPSTICK
|
// #define STEPSTICK
|
||||||
#define ILLUMINATION
|
#define ILLUMINATION
|
||||||
|
|
||||||
//module configs
|
|
||||||
#ifdef STAGE
|
|
||||||
#define STAGE_N_MOTORS 3
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ENDSTOPS
|
#ifdef ENDSTOPS
|
||||||
#define ENDSTOPS_MIN
|
#define ENDSTOPS_MIN
|
||||||
//#define ENDSTOPS_MAX
|
//#define ENDSTOPS_MAX
|
||||||
|
|
|
||||||
|
|
@ -45,5 +45,7 @@ extern void register_module(const Command commands[], void (*loop_fn)(void));
|
||||||
void get_version(String);
|
void get_version(String);
|
||||||
void get_modules(String);
|
void get_modules(String);
|
||||||
void get_eeprom_last_commit(String);
|
void get_eeprom_last_commit(String);
|
||||||
|
void get_system_status(String);
|
||||||
|
|
||||||
#define MAIN_H
|
#define MAIN_H
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -11,8 +11,8 @@
|
||||||
|
|
||||||
unsigned long retreat_steps = 5000;
|
unsigned long retreat_steps = 5000;
|
||||||
unsigned long home_move_steps = 100000;
|
unsigned long home_move_steps = 100000;
|
||||||
unsigned long axis_max[STAGE_N_MOTORS];
|
unsigned long axis_max[STAGE_MAX_MOTORS];
|
||||||
const uint8_t axis_max_eeprom = sizeof(long)*(STAGE_N_MOTORS+2);
|
const uint8_t axis_max_eeprom = 200+sizeof(long)*(STAGE_MAX_MOTORS+2);
|
||||||
#ifdef ENDSTOPS_MIN
|
#ifdef ENDSTOPS_MIN
|
||||||
const uint8_t endstops_min_pins[] = WIRING_ENDSTOPS_MIN;
|
const uint8_t endstops_min_pins[] = WIRING_ENDSTOPS_MIN;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -10,18 +10,22 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <ComPort.h>
|
#include <ComPort.h>
|
||||||
|
|
||||||
|
#if MAX_STEPPERS > 3 && !defined(WIRING_ADDITIONAL_STEPPER)
|
||||||
|
#error "Define WIRING_ADDITIONAL_STEPPER to support 4th stepper"
|
||||||
|
#endif
|
||||||
|
|
||||||
// The array below has 3 stepper objects, for X,Y,Z respectively
|
// The array below has 3 stepper objects, for X,Y,Z respectively
|
||||||
const uint8_t n_motors = STAGE_N_MOTORS;
|
uint8_t n_motors = 3;
|
||||||
const uint8_t stage_position_eeprom = 0;
|
const uint8_t stage_position_eeprom = 0;
|
||||||
long min_step_delay = -1;
|
long min_step_delay = -1;
|
||||||
const uint8_t min_step_delay_eeprom = stage_position_eeprom + sizeof(long) * n_motors;
|
const uint8_t min_step_delay_eeprom = stage_position_eeprom + sizeof(long) * STAGE_MAX_MOTORS;
|
||||||
long ramp_time = -1;
|
long ramp_time = -1;
|
||||||
const uint8_t ramp_time_eeprom = min_step_delay_eeprom + sizeof(long);
|
const uint8_t ramp_time_eeprom = min_step_delay_eeprom + sizeof(long);
|
||||||
const uint8_t axis_max_eeprom = ramp_time_eeprom + sizeof(long);
|
const uint8_t axis_max_eeprom = ramp_time_eeprom + sizeof(long);
|
||||||
const uint8_t non_blocking_moves_eeprom = axis_max_eeprom + sizeof(long);
|
const uint8_t non_blocking_moves_eeprom = axis_max_eeprom + sizeof(long);
|
||||||
Stepper *motors[n_motors];
|
Stepper *motors[STAGE_MAX_MOTORS];
|
||||||
signed long current_pos[n_motors];
|
signed long current_pos[STAGE_MAX_MOTORS];
|
||||||
long steps_remaining[n_motors];
|
long steps_remaining[STAGE_MAX_MOTORS];
|
||||||
|
|
||||||
bool stage_moving = false;
|
bool stage_moving = false;
|
||||||
bool notify_on_stop = false;
|
bool notify_on_stop = false;
|
||||||
|
|
@ -33,7 +37,15 @@ void stage_setup()
|
||||||
motors[0] = new Stepper(8, WIRING_MOTOR_X);
|
motors[0] = new Stepper(8, WIRING_MOTOR_X);
|
||||||
motors[1] = new Stepper(8, WIRING_MOTOR_Y);
|
motors[1] = new Stepper(8, WIRING_MOTOR_Y);
|
||||||
motors[2] = new Stepper(8, WIRING_MOTOR_Z);
|
motors[2] = new Stepper(8, WIRING_MOTOR_Z);
|
||||||
EACH_MOTOR
|
#if STAGE_MAX_MOTORS > 3
|
||||||
|
//TODO: support >4 stepppers
|
||||||
|
for (int i = 0; i < STAGE_MAX_MOTORS - 3; i++)
|
||||||
|
{
|
||||||
|
motors[i+3] = new Stepper(8, WIRING_ADDITIONAL_STEPPER);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EACH_MAX_MOTOR
|
||||||
{
|
{
|
||||||
motors[i]->setSpeed(10); // as a default set to 10 rpm, though this is ignored...
|
motors[i]->setSpeed(10); // as a default set to 10 rpm, though this is ignored...
|
||||||
steps_remaining[i] = 0;
|
steps_remaining[i] = 0;
|
||||||
|
|
@ -85,13 +97,13 @@ void print_position()
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long move_start_time = 0;
|
unsigned long move_start_time = 0;
|
||||||
unsigned long distance_moved[n_motors];
|
unsigned long distance_moved[STAGE_MAX_MOTORS];
|
||||||
long displacement[n_motors];
|
long displacement[STAGE_MAX_MOTORS];
|
||||||
float final_scaled_t;
|
float final_scaled_t;
|
||||||
float step_delay[n_motors];
|
float step_delay[STAGE_MAX_MOTORS];
|
||||||
int8_t move_directions[n_motors];
|
int8_t move_directions[STAGE_MAX_MOTORS];
|
||||||
|
|
||||||
void start_move(long displ[n_motors])
|
void start_move(long displ[STAGE_MAX_MOTORS])
|
||||||
{
|
{
|
||||||
// move all the axes in a nice move
|
// move all the axes in a nice move
|
||||||
// split displacements into magnitude and direction, and find max. travel
|
// split displacements into magnitude and direction, and find max. travel
|
||||||
|
|
@ -219,13 +231,10 @@ void stage_mrz(String command)
|
||||||
|
|
||||||
void stage_mr(String command)
|
void stage_mr(String command)
|
||||||
{
|
{
|
||||||
char *args[3];
|
char *args[STAGE_MAX_MOTORS];
|
||||||
parse_arguments(args, command, 3);
|
parse_arguments(args, command, n_motors);
|
||||||
EACH_MOTOR
|
EACH_MOTOR
|
||||||
{
|
{
|
||||||
if (i>3)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
displacement[i] = atol(args[i]);
|
displacement[i] = atol(args[i]);
|
||||||
free(args[i]);
|
free(args[i]);
|
||||||
}
|
}
|
||||||
|
|
@ -300,6 +309,19 @@ void update_blocking_moves(String command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void stage_n_motors(String command)
|
||||||
|
{
|
||||||
|
char *args[1];
|
||||||
|
parse_arguments(args, command, 1);
|
||||||
|
if (args[0][0] != '?')
|
||||||
|
n_motors = atoi(args[0]);
|
||||||
|
|
||||||
|
comPort->print("n_motors ");
|
||||||
|
comPort->println(n_motors);
|
||||||
|
|
||||||
|
free(args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
void stage_zero(String command)
|
void stage_zero(String command)
|
||||||
{
|
{
|
||||||
EACH_MOTOR current_pos[i] = 0;
|
EACH_MOTOR current_pos[i] = 0;
|
||||||
|
|
@ -348,4 +370,5 @@ extern const Command stage_commands[] = {
|
||||||
{"moving", is_stage_moving},
|
{"moving", is_stage_moving},
|
||||||
{"notify_on_stop", activate_notify_on_stop},
|
{"notify_on_stop", activate_notify_on_stop},
|
||||||
{"blocking_moves", update_blocking_moves},
|
{"blocking_moves", update_blocking_moves},
|
||||||
|
{"n_motors", stage_n_motors},
|
||||||
END_COMMAND};
|
END_COMMAND};
|
||||||
|
|
@ -3,7 +3,9 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#define EACH_MOTOR for (int i = 0; i < STAGE_N_MOTORS; i++)
|
#define EACH_MOTOR for (int i = 0; i < n_motors; i++)
|
||||||
|
#define EACH_MAX_MOTOR for (int i = 0; i < STAGE_MAX_MOTORS; i++)
|
||||||
|
|
||||||
|
|
||||||
void stage_setup();
|
void stage_setup();
|
||||||
void stage_loop();
|
void stage_loop();
|
||||||
|
|
@ -21,6 +23,7 @@ void stage_ramp_time(String command);
|
||||||
void stage_zero(String command);
|
void stage_zero(String command);
|
||||||
void start_move(long displ[]);
|
void start_move(long displ[]);
|
||||||
void stage_stop(String command);
|
void stage_stop(String command);
|
||||||
|
void stage_n_motors(String command);
|
||||||
|
|
||||||
extern const Command stage_commands[];
|
extern const Command stage_commands[];
|
||||||
//we want to expose these for endstops (and potentially other modules)
|
//we want to expose these for endstops (and potentially other modules)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue