mirror of
https://github.com/EFeru/hoverboard-firmware-hack-FOC.git
synced 2025-06-24 22:41:34 +02:00
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:
15
Inc/config.h
15
Inc/config.h
@ -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
|
||||
|
18
Src/main.c
18
Src/main.c
@ -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);
|
||||
|
Reference in New Issue
Block a user