HOVERCAR: improved MULTI_MODE

- improved MULTI_MODE by adding torque and speed limits
  - BEGINNER MODE: Power ON + Brake [released] + Throttle [released or pressed]
  - INTERMEDIATE MODE: Power ON + Brake [pressed] + Throttle [released]
  - ADVANCED MODE: Power ON + Brake [pressed] + Throttle [pressed]
- made Voltage mode as default for hovercar (better for toddlers)
- made MULTI_MODE_DRIVE active as default
This commit is contained in:
EmanuelFeru
2022-08-15 18:30:29 +02:00
parent 5aa85d9af0
commit a6430e3a3e
2 changed files with 24 additions and 9 deletions

View File

@ -500,7 +500,7 @@
#ifdef VARIANT_HOVERCAR
#define FLASH_WRITE_KEY 0x1107 // Flash memory writing key. Change this key to ignore the input calibrations from the flash memory and use the ones in config.h
#undef CTRL_MOD_REQ
#define CTRL_MOD_REQ TRQ_MODE // HOVERCAR works best in TORQUE Mode
#define CTRL_MOD_REQ VLT_MODE // HOVERCAR works best in TORQUE Mode. VOLTAGE mode is preffered when freewheeling is not desired when throttle is released.
#define CONTROL_ADC 0 // use ADC as input. Number indicates priority for dual-input. Disable CONTROL_SERIAL_USART2, FEEDBACK_SERIAL_USART2, DEBUG_SERIAL_USART2!
#define SIDEBOARD_SERIAL_USART3 1 // Rx from right sensor board: to use photosensors as buttons. Number indicates priority for dual-input. Comment-out if sideboard is not used!
#define FEEDBACK_SERIAL_USART3 // Tx to right sensor board: for LED battery indication. Comment-out if sideboard is not used!
@ -525,16 +525,25 @@
// #define ELECTRIC_BRAKE_MAX 100 // (0, 500) Maximum electric brake to be applied when input torque request is 0 (pedal fully released).
// #define ELECTRIC_BRAKE_THRES 120 // (0, 500) Threshold below at which the electric brake starts engaging.
// #define MULTI_MODE_DRIVE
#define MULTI_MODE_DRIVE // This option enables the selection of 3 driving modes at start-up using combinations of Brake and Throttle pedals (see below)
#ifdef MULTI_MODE_DRIVE
// BEGINNER MODE: Power ON + Brake [released] + Throttle [released or pressed]
#define MULTI_MODE_DRIVE_M1_MAX 175
#define MULTI_MODE_DRIVE_M1_RATE 175
#define MULTI_MODE_DRIVE_M1_RATE 250
#define MULTI_MODE_M1_I_MOT_MAX 4
#define MULTI_MODE_M1_N_MOT_MAX 30
// INTERMEDIATE MODE: Power ON + Brake [pressed] + Throttle [released]
#define MULTI_MODE_DRIVE_M2_MAX 500
#define MULTI_MODE_DRIVE_M2_RATE 300
#define MULTI_MODE_M2_I_MOT_MAX 8
#define MULTI_MODE_M2_N_MOT_MAX 80
// ADVANCED MODE: Power ON + Brake [pressed] + Throttle [pressed]
#define MULTI_MODE_DRIVE_M3_MAX 1000
#define MULTI_MODE_DRIVE_M3_RATE 450
#define MULTI_MODE_M3_I_MOT_MAX I_MOT_MAX
#define MULTI_MODE_M3_N_MOT_MAX N_MOT_MAX
#endif
#endif

View File

@ -214,18 +214,24 @@ int main(void) {
int16_t board_temp_adcFilt = adc_buffer.temp;
#ifdef MULTI_MODE_DRIVE
if (adc_buffer.l_rx2 >= input1[0].min) {
drive_mode = 0;
max_speed = MULTI_MODE_DRIVE_M1_MAX;
rate = MULTI_MODE_DRIVE_M1_RATE;
} else if (adc_buffer.l_tx2 >= input2[0].min) {
if (adc_buffer.l_tx2 > input1[0].min + 50 && adc_buffer.l_rx2 > input2[0].min + 50) {
drive_mode = 2;
max_speed = MULTI_MODE_DRIVE_M3_MAX;
rate = MULTI_MODE_DRIVE_M3_RATE;
} else {
rtP_Left.n_max = rtP_Right.n_max = MULTI_MODE_M3_N_MOT_MAX << 4;
rtP_Left.i_max = rtP_Right.i_max = (MULTI_MODE_M3_I_MOT_MAX * A2BIT_CONV) << 4;
} else if (adc_buffer.l_tx2 > input1[0].min + 50) {
drive_mode = 1;
max_speed = MULTI_MODE_DRIVE_M2_MAX;
rate = MULTI_MODE_DRIVE_M2_RATE;
rtP_Left.n_max = rtP_Right.n_max = MULTI_MODE_M2_N_MOT_MAX << 4;
rtP_Left.i_max = rtP_Right.i_max = (MULTI_MODE_M2_I_MOT_MAX * A2BIT_CONV) << 4;
} else {
drive_mode = 0;
max_speed = MULTI_MODE_DRIVE_M1_MAX;
rate = MULTI_MODE_DRIVE_M1_RATE;
rtP_Left.n_max = rtP_Right.n_max = MULTI_MODE_M1_N_MOT_MAX << 4;
rtP_Left.i_max = rtP_Right.i_max = (MULTI_MODE_M1_I_MOT_MAX * A2BIT_CONV) << 4;
}
printf("Drive mode %i selected: max_speed:%i acc_rate:%i \r\n", drive_mode, max_speed, rate);