From bd4b68dd8326e5e49c7ae5ae3efcbcb8c5a4df72 Mon Sep 17 00:00:00 2001 From: Dani White Date: Wed, 5 Sep 2018 09:19:58 -0400 Subject: [PATCH 01/13] Revert "Remove launch control" This reverts commit 4ed266bb1614938db0cfd3bbe79f9740a81966b1. --- can_spec_my18.yml | 20 ++--- src/dashboard/src/page_manager.c | 32 +++++++ src/vcu/inc/controls.h | 22 +++++ src/vcu/inc/state_vcu.h | 1 - src/vcu/src/can_handles.c | 5 ++ src/vcu/src/controls.c | 139 +++++++++++++++++++++++++++---- src/vcu/src/main.c | 2 +- src/vcu/src/state_error.c | 2 + src/vcu/src/state_vcu_driving.c | 3 +- 9 files changed, 197 insertions(+), 29 deletions(-) diff --git a/can_spec_my18.yml b/can_spec_my18.yml index 664967c..bd306e5 100644 --- a/can_spec_my18.yml +++ b/can_spec_my18.yml @@ -334,16 +334,6 @@ buses: position: 6 length: 1 c_type: bool - lc_state: - position: 7 - length: 3 - c_type: enum - enum: - BEFORE: 0 - SPEEDING_UP: 1 - SPEED_CONTROLLER: 2 - ZERO_TORQUE: 3 - DONE: 4 VCUErrors: can_id: 0x0F4 period: 111ms @@ -581,8 +571,16 @@ buses: length: 16 c_type: uint16_t signed: false - limp_factor: # Ranges from 0 to 100 + using_launch_ctrl: position: 17 + length: 1 + c_type: bool + launch_ctrl_slip_ratio: # Ranges from 105 to 115 + position: 18 + length: 16 + c_type: uint16_t + limp_factor: # Ranges from 0 to 100 + position: 34 length: 16 c_type: uint16_t ButtonRequest: diff --git a/src/dashboard/src/page_manager.c b/src/dashboard/src/page_manager.c index 99f7809..b59ecda 100644 --- a/src/dashboard/src/page_manager.c +++ b/src/dashboard/src/page_manager.c @@ -74,6 +74,7 @@ void draw_nav_line(page_manager_t *pm, NHD_US2066_OLED *oled) { void draw_critical_page(page_manager_t *pm, NHD_US2066_OLED *oled); void draw_regen_page(page_manager_t *pm, NHD_US2066_OLED *oled); +void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled); void draw_traction_page(page_manager_t *pm, NHD_US2066_OLED *oled); void draw_wheel_speed_page(page_manager_t *pm, NHD_US2066_OLED *oled); void draw_fault_page(page_manager_t *pm, NHD_US2066_OLED *oled); @@ -89,6 +90,9 @@ void page_manager_update(page_manager_t *pm, NHD_US2066_OLED *oled) { case DASH_PAGE_REGEN: draw_regen_page(pm, oled); break; + case DASH_PAGE_LAUNCH_CONTROL: + draw_launch_control_page(pm, oled); + break; case DASH_PAGE_TRACTION: draw_traction_page(pm, oled); break; @@ -250,6 +254,34 @@ void draw_regen_page(page_manager_t *pm, NHD_US2066_OLED *oled) { } } +void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled) { + carstats_t *stats = pm->stats; + + oled_clearline(oled, 1); + oled_set_pos(oled, 1, 0); + + if (stats->buttons.right.rising_edge) { + stats->controls.launch_ctrl_slip_ratio += 1; + } + + stats->controls.launch_ctrl_slip_ratio = LOOPOVER(stats->controls.launch_ctrl_slip_ratio, 101, 120); + + if (stats->buttons.B.rising_edge) stats->controls.using_launch_ctrl ^= 1; // NOT + + oled_print(oled, "LAUNCH CONTROL "); + + oled_print(oled, (stats->controls.using_launch_ctrl) ? "ON" : "OFF"); + + oled_rprint_pad(oled, "SLIP RATIO ", 4); + + if (stats->controls.launch_ctrl_slip_ratio != -1) { + oled_print_num(oled, stats->controls.launch_ctrl_slip_ratio); + } + else { + oled_print(oled, DATA_UNKNOWN); + } +} + void draw_fault_page(page_manager_t *pm, NHD_US2066_OLED *oled) { carstats_t *stats = pm->stats; diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index 676720f..83165a0 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -13,6 +13,15 @@ #define MAX_ACCEL_VAL 1000 #define MIN_ACCEL_VAL 0 +// Launch control contants +// After wheel speed crosses this threshold, start using slip controller +#define LC_WS_THRESH 45000 +#define LC_cGR 347 // Gear ratio times 100 +#define LC_ACCEL_BEGIN 950 // 95% +#define LC_ACCEL_RELEASE 50 // 5% +#define LC_BRAKE_BEGIN 100 // We want a lower threshold +#define LC_BACKWARDS_CUTOFF 10 + // RG = regen #define RG_MOTOR_SPEED_THRESH 250 // RPM #define RG_CAR_SPEED_THRESH 5 // kph @@ -32,20 +41,33 @@ typedef struct { bool using_regen; + bool using_launch_control; uint16_t cBB_ef; // Electric front brake bias * 100 + uint16_t slip_ratio; // Slip ratio * 100 uint16_t limp_factor; // Limp facotr * 100 } Controls_Settings_T; +typedef enum { + BEFORE, + SPEEDING_UP, + SPEED_CONTROLLER, + ZERO_TORQUE, + DONE, +} Launch_Control_State_T; + extern Controls_Settings_T control_settings; // PRIVATE FUNCTIONS static int16_t get_torque(void); static int32_t get_regen_torque(void); +static int32_t get_launch_control_speed(uint32_t front_wheel_speed); // INTERACTION FUNCTIONS void enable_controls(void); void disable_controls(void); bool get_controls_enabled(void); void execute_controls(void); +void set_lc_done(void); +void set_lc_state_before(); #endif // ifndef __TORQUE_CALC diff --git a/src/vcu/inc/state_vcu.h b/src/vcu/inc/state_vcu.h index 56eaecc..dc33730 100644 --- a/src/vcu/inc/state_vcu.h +++ b/src/vcu/inc/state_vcu.h @@ -26,7 +26,6 @@ typedef struct { Voltage_T bus; Voltage_T pack; Voltage_T precharge_target; - uint16_t cell_min_mV; } Voltages_T; typedef struct { diff --git a/src/vcu/src/can_handles.c b/src/vcu/src/can_handles.c index 5614a58..5b7b433 100644 --- a/src/vcu/src/can_handles.c +++ b/src/vcu/src/can_handles.c @@ -234,6 +234,11 @@ void handleDashControls(Frame *msg) { control_settings.using_regen = unpacked_msg.using_regen; } + if (unpacked_msg.launch_ctrl_slip_ratio != 65535) { + control_settings.slip_ratio = unpacked_msg.launch_ctrl_slip_ratio; + control_settings.using_launch_control = unpacked_msg.using_launch_ctrl; + } + if (unpacked_msg.limp_factor != 65535) { control_settings.limp_factor = unpacked_msg.limp_factor; } diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index 0ae9676..d38e1ea 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -4,11 +4,16 @@ static bool enabled = false; static int16_t torque_command = 0; static int16_t speed_command = 0; Controls_Settings_T control_settings = {}; +static Launch_Control_State_T lc_state = BEFORE; +static uint32_t get_front_wheel_speed(void); +static bool any_lc_faults(); void init_controls_defaults(void) { control_settings.using_regen = false; + control_settings.using_launch_control = false; control_settings.cBB_ef = 56; + control_settings.slip_ratio = 112; control_settings.limp_factor = 100; } @@ -24,6 +29,7 @@ void disable_controls(void) { enabled = false; torque_command = 0; speed_command = 0; + lc_state = DONE; set_brake_valve(false); lock_brake_valve(); @@ -38,24 +44,75 @@ void execute_controls(void) { torque_command = get_torque(); + if (control_settings.using_launch_control && lc_state != DONE) { + // We shouldn't be braking in launch control, so don't worry about regen + set_brake_valve(false); + uint32_t front_wheel_speed = get_front_wheel_speed(); + + // Mini FSM + switch (lc_state) { + case BEFORE: + sendSpeedCmdMsg(0, 0); + + // Transition + if (pedalbox_min(accel) > LC_ACCEL_BEGIN) { + lc_state = SPEEDING_UP; + printf("[LAUNCH CONTROL] SPEEDING UP STATE ENTERED\r\n"); + } + break; + case SPEEDING_UP: + if (1000 > torque_command) sendSpeedCmdMsg(500, torque_command); + else sendSpeedCmdMsg(300, 1000); + + // Transition + if (any_lc_faults()) { + lc_state = ZERO_TORQUE; + printf("[LAUNCH CONTROL] ZERO TORQUE STATE ENTERED\r\n"); + } else if (front_wheel_speed > LC_WS_THRESH) { + lc_state = SPEED_CONTROLLER; + printf("[LAUNCH CONTROL] SPEED CONTROLLER STATE ENTERED\r\n"); + } + break; + case SPEED_CONTROLLER: + speed_command = get_launch_control_speed(front_wheel_speed); + sendSpeedCmdMsg(speed_command, torque_command); + + // Transition + if (any_lc_faults()) { + lc_state = ZERO_TORQUE; + printf("[LAUNCH CONTROL] ZERO TORQUE STATE ENTERED\r\n"); + } + case ZERO_TORQUE: + sendTorqueCmdMsg(0); + + if (pedalbox_max(accel) < LC_ACCEL_RELEASE) { + lc_state = DONE; + printf("[LAUNCH CONTROL] DONE STATE ENTERED\r\n"); + } + break; + default: + printf("ERROR: NO STATE!\r\n"); + } - // Control regen brake valve: - bool brake_valve_state = control_settings.using_regen && get_pascals(pedalbox.REAR_BRAKE) < RG_REAR_BRAKE_THRESH; - set_brake_valve(brake_valve_state); - - int32_t regen_torque; - if (brake_valve_state) { - regen_torque = get_regen_torque(); } else { - regen_torque = 0; - } + // Control regen brake valve: + bool brake_valve_state = control_settings.using_regen && get_pascals(pedalbox.REAR_BRAKE) < RG_REAR_BRAKE_THRESH; + set_brake_valve(brake_valve_state); + + int32_t regen_torque; + if (brake_valve_state) { + regen_torque = get_regen_torque(); + } else { + regen_torque = 0; + } - // Extra check to ensure we are only sending regen torque when allowed - if (torque_command == 0) { - torque_command = regen_torque; - } + // Extra check to ensure we are only sending regen torque when allowed + if (torque_command == 0) { + torque_command = regen_torque; + } - sendTorqueCmdMsg(torque_command); + sendTorqueCmdMsg(torque_command); + } } static int16_t get_torque(void) { @@ -93,6 +150,58 @@ static int32_t get_regen_torque() { } } - // Regen is negative torque, and we've calculated a positive number so far return -1 * regen_torque; } + +static int32_t get_launch_control_speed(uint32_t front_wheel_speed) { +uint32_t front_wheel_speedRPM = front_wheel_speed / 1000; + // Divide 100 because slip ratio is times 100, divide by 100 again because + // gear ratio is also multiplied by 100 + int32_t target_speed = front_wheel_speedRPM * control_settings.slip_ratio * LC_cGR / (100 * 100); + return target_speed; +} + +static uint32_t get_front_wheel_speed() { + uint32_t left_front_speed; + uint32_t right_front_speed; + + // If the 32 bit wheel speed is zero, then it's disconnect (in which case we should + // use the 16 bit one), or the wheels are actually not moving, so the 16 bit one will + // be zero as well + if (wheel_speeds.front_left_32b_wheel_speed == 0) { + left_front_speed = wheel_speeds.front_left_16b_wheel_speed; + } else { + left_front_speed = wheel_speeds.front_left_32b_wheel_speed; + } + + if (wheel_speeds.front_right_32b_wheel_speed == 0) { + right_front_speed = wheel_speeds.front_right_16b_wheel_speed; + } else { + right_front_speed = wheel_speeds.front_right_32b_wheel_speed; + } + + uint32_t avg_wheel_speed = left_front_speed/2 + right_front_speed/2; + return avg_wheel_speed; +} + +static bool any_lc_faults() { + if (pedalbox_min(accel) < LC_ACCEL_BEGIN) { + printf("[LAUNCH CONTROL ERROR] Accel min (%d) too low\r\n", pedalbox_min(accel)); + return true; + } else if (pedalbox.brake_2 > LC_BRAKE_BEGIN) { + printf("[LAUNCH CONTROL ERROR] Brake min (%d) too low\r\n", pedalbox.brake_2); + return true; + } else if (mc_readings.speed > LC_BACKWARDS_CUTOFF) { + printf("[LAUNCH CONTROL ERROR] MC reading (%d) is great than cutoff (%d)\r\n", mc_readings.speed, LC_BACKWARDS_CUTOFF); + return true; + } + return false; +} + +void set_lc_state_before() { + lc_state = BEFORE; +} + +void set_lc_zero_torque() { + lc_state = ZERO_TORQUE; +} diff --git a/src/vcu/src/main.c b/src/vcu/src/main.c index a18ecdd..c0034be 100755 --- a/src/vcu/src/main.c +++ b/src/vcu/src/main.c @@ -76,7 +76,7 @@ int main(void) { if (HAL_GetTick() - lastt > 1000) { HAL_GPIO_TogglePin(GPIO(LED)); - printf("CONTROLS PARAMS:\r\n USING REGEN: %d\r\n cBB_ef: %d\r\n LIMP FACTOR: %d\r\n", control_settings.using_regen, control_settings.cBB_ef, control_settings.limp_factor); + printf("CONTROLS PARAMS:\r\n USING REGEN: %d\r\n USING LAUNCH CONTROL: %d\r\n cBB_ef: %d\r\n SLIP RATIO: %d\r\n LIMP FACTOR: %d\r\n", control_settings.using_regen, control_settings.using_launch_control, control_settings.cBB_ef, control_settings.slip_ratio, control_settings.limp_factor); lastt = HAL_GetTick(); } diff --git a/src/vcu/src/state_error.c b/src/vcu/src/state_error.c index 2d66a73..bed518f 100644 --- a/src/vcu/src/state_error.c +++ b/src/vcu/src/state_error.c @@ -59,6 +59,7 @@ void update_no_error_state(void) { } void enter_recoverable_error_state(void) { + set_lc_zero_torque(); printf("[ERROR FSM : RECOVERABLE_ERROR_STATE] ENTERED!\r\n"); } @@ -85,6 +86,7 @@ void update_recoverable_error_state(void) { void enter_fatal_error_state(void) { printf("[ERROR FSM : FATAL_ERROR_STATE] ENTERED!\r\n"); + set_lc_zero_torque(); } void update_fatal_error_state(void) { diff --git a/src/vcu/src/state_vcu_driving.c b/src/vcu/src/state_vcu_driving.c index 9f7a9ca..58ca1e6 100644 --- a/src/vcu/src/state_vcu_driving.c +++ b/src/vcu/src/state_vcu_driving.c @@ -18,8 +18,9 @@ void enter_vcu_state_driving() { rtd_started = false; rtd_last = 0; - printf("CONTROLS PARAMS:\r\n USING REGEN: %d\r\n cBB_ef: %d\r\n LIMP FACTOR: %d\r\n", control_settings.using_regen, control_settings.cBB_ef, control_settings.limp_factor); + printf("CONTROLS PARAMS:\r\n USING REGEN: %d\r\n USING LAUNCH CONTROL: %d\r\n cBB_ef: %d\r\n SLIP RATIO: %d\r\n LIMP FACTOR: %d\r\n", control_settings.using_regen, control_settings.using_launch_control, control_settings.cBB_ef, control_settings.slip_ratio, control_settings.limp_factor); + set_lc_state_before(); enable_controls(); } From ffca8857912d1d5097cc8ee2b0638320bec9aa85 Mon Sep 17 00:00:00 2001 From: Dani White Date: Wed, 5 Sep 2018 16:43:01 -0400 Subject: [PATCH 02/13] Fix compilation errors --- can_spec_my18.yml | 2 +- src/vcu/inc/controls.h | 2 +- src/vcu/src/can_handles.c | 6 ++---- src/vcu/src/controls.c | 11 +++++++---- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/can_spec_my18.yml b/can_spec_my18.yml index c3495dd..44bbb43 100644 --- a/can_spec_my18.yml +++ b/can_spec_my18.yml @@ -748,7 +748,7 @@ buses: position: 0 length: 1 c_type: bool - launch_ctrl_slip_ratio: # Ranges from 105 to 115 + slip_ratio: # Ranges from 105 to 115 position: 16 length: 16 c_type: uint16_t diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index 5826ad2..fefa70e 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -65,6 +65,6 @@ void disable_controls(void); bool get_controls_enabled(void); void execute_controls(void); void set_lc_done(void); -void set_lc_state_before(); +void set_lc_state_before(void); #endif // ifndef __TORQUE_CALC diff --git a/src/vcu/src/can_handles.c b/src/vcu/src/can_handles.c index 4baaaa4..ba267d0 100644 --- a/src/vcu/src/can_handles.c +++ b/src/vcu/src/can_handles.c @@ -294,13 +294,13 @@ void handleDashRequest(Frame *msg) { } void handle_DashRequestLC(Frame *msg) { - can0_DashRequestLC unpacked_msg; + can0_DashRequestLC_T unpacked_msg; unpack_can0_DashRequestLC(msg, &unpacked_msg); if (unpacked_msg.launch_ctrl_slip_ratio != 65535) { lc_settings.slip_ratio = unpacked_msg.launch_ctrl_slip_ratio; - lc_settings.using_launch_control = unpacked_msg.using_launch_ctrl; + lc_settings.using_launch_ctrl = unpacked_msg.using_launch_ctrl; } } @@ -345,8 +345,6 @@ void send_VCUControlsParams(void) { can0_VCUControlsParams_Write(&control_settings); } -void send_VCU - void send_VCUControlsMonitoring(void) { LIMIT(can0_VCUControlsMonitoring); diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index bd83b36..e8581c0 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -4,6 +4,7 @@ static bool enabled = false; static int32_t torque_command = 0; static int32_t speed_command = 0; can0_VCUControlsParams_T control_settings = {}; +can0_VCUParamsLC_T lc_settings = {}; static Launch_Control_State_T lc_state = BEFORE; static uint32_t get_front_wheel_speed(void); @@ -29,7 +30,7 @@ void init_controls_defaults(void) { control_settings.torque_temp_limited = false; lc_settings.using_launch_ctrl = false; - lc_settings.launch_ctrl_slip_ratio = 112; + lc_settings.slip_ratio = 112; } void enable_controls(void) { @@ -101,7 +102,7 @@ void execute_controls(void) { // } if (!control_settings.using_temp_limiting) temp_limited_torque = torque_command; - torque_temp_limited = temp_limited_torque < torque_command; + uint32_t torque_temp_limited = temp_limited_torque < torque_command; // Whether torque is temp limited needs to be sent out over CAN so the dash knows not to allow regen control_settings.torque_temp_limited = temp_limited_torque < torque_command; @@ -124,7 +125,7 @@ void execute_controls(void) { torque_command = limited_torque; bool torque_limited = limited_torque < controls_monitoring.raw_torque; - if (control_settings.using_launch_control && lc_state != DONE && !torque_limited) { + if (lc_settings.using_launch_ctrl && lc_state != DONE && !torque_limited) { launch_ctrl_entered = true; // We shouldn't be braking in launch control, so reset regen valve @@ -226,7 +227,7 @@ static int32_t get_launch_control_speed(uint32_t front_wheel_speed) { uint32_t front_wheel_speedRPM = front_wheel_speed / 1000; // Divide 100 because slip ratio is times 100, divide by 100 again because // gear ratio is also multiplied by 100 - int32_t target_speed = front_wheel_speedRPM * control_settings.slip_ratio * LC_cGR / (100 * 100); + int32_t target_speed = front_wheel_speedRPM * lc_settings.slip_ratio * LC_cGR / (100 * 100); return target_speed; } @@ -273,6 +274,8 @@ void set_lc_state_before() { void set_lc_zero_torque() { lc_state = ZERO_TORQUE; +} + static int32_t get_temp_limited_torque(int32_t pedal_torque) { uint32_t temp_sum = 0; for (uint32_t i = 0; i < TEMP_LOG_LENGTH; i++) { From db2936ffa68ca4e9cca099a80f941ef5315e41e6 Mon Sep 17 00:00:00 2001 From: Sebastian Lopez-Cot Date: Fri, 7 Sep 2018 01:16:28 -0400 Subject: [PATCH 03/13] Removing annoyance with pngs tricking git to notice changes for wrong file formats --- .gitignore | 2 ++ test/controls/plotting_old/log_delay.png | Bin 24736 -> 0 bytes test/controls/plotting_old/log_no_serial.png | Bin 73595 -> 0 bytes test/controls/plotting_old/log_serial.png | Bin 108674 -> 0 bytes 4 files changed, 2 insertions(+) delete mode 100644 test/controls/plotting_old/log_delay.png delete mode 100644 test/controls/plotting_old/log_no_serial.png delete mode 100644 test/controls/plotting_old/log_serial.png diff --git a/.gitignore b/.gitignore index 5e0baf2..e4c9cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ src/**/bin # Annoying ropeproject **/.ropeproject +test/**/*.png + # vim *.swp diff --git a/test/controls/plotting_old/log_delay.png b/test/controls/plotting_old/log_delay.png deleted file mode 100644 index 3b2f93c7750a6a767d3e6844a9faed33e92bb42d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24736 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 diff --git a/test/controls/plotting_old/log_no_serial.png b/test/controls/plotting_old/log_no_serial.png deleted file mode 100644 index 4953921c19019d5356053c5c7d6388fc5cc2c1cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73595 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

+nL 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 Z($?4txj>s;593k0^0F#2ndh(E`+ow^-3I^w diff --git a/test/controls/plotting_old/log_serial.png b/test/controls/plotting_old/log_serial.png deleted file mode 100644 index ed4a3634c327a18de60ddfd1e6035d6b02b1bad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108674 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�c94pWF6A(FyC}_E#~JjX@w4AhGP{mr~9vrCrSAks>`_x zj`C(I2f|BRjFQ8W!{VJbrA&8=;+jqmHh z*EAR92N~97S+)pt*a1aCI^IA0iLDDX<=o|mPR8RdL{{ENIN}+o18R}Q-va@} zmpiDE6Iwtkqed*>di;^^7nd}sbor$whqDykEw2HGV>LRH~MAz-kvmP;x ziT!6N2NX9Kt)ooNFX%Hx((BxK4&3~u2n6p|r?VzW_#cmX*l#AJ7+yMCvsiJ4Vg1c7 zQ+;#pJc|#@pYBtjy2K3EMhh+mrvgXNO8a~7#2YmD1y|g@fETVDd`BAt-W%9 z^!mb%apgdH8}^nv7CSm4B8SLw%-FZb z9FkS#)wXMMn}n$i#fZu3VI(>ol*!Zz$F=(R-p!Y_iMbD&^@iEVzTb|`=MH^w?48g3;>vTsJUY*6GE_J~uWX;8vWSIR zU~|IW({S|1xyCuI9F~JEMi7s87a3)!+gJVRP@cJ5%ESw55*#NNYktGV7aq0mvq87f zSCkJCIA@Pvd;RcsZIm+b=iEDFFAWD3RVoTKZXHuKWP2cei?^$cCUxsTfuy@{fUZnE z8@b7@-g|(*vPSW;?rK|-4*PX}PFh`yidhN04lJ@%+}%iQi67LT%xGN-Za?304?_sC zl8F_x>ip+uGu`t{e4beGS#lYO8T4sm@FBR6*> z8#Ct2N$=UT6vm!1NbSJ&5aL~sRhnjhgVp%G56<|?U0v>IqAZDq0DaQe!gnl#md2&Y zNo3P=$#hqvcQiDaO%RH=u9B(+OACD=tqN#sKok}oI=2~6zGq;Fy}Y9D!^8C3yA>v; z_&FZ0z%o_+;(|%F4l@$5^r~NqsaoNZV%`yP71N+0ozeQBkIAQ%q9ycXZ4N_Bccwl? z`}S7dPQrqIFxp1i$LiM?ctJ`iTqsO+esdyjGB)iS=lxT)lHLakNUgSvc7Ag0K3%5t zQ>-T$|BUrZ!OE=j1NeZHd*dAq;LnH1vgBrMp<5eV=&hE&0)0aR;joGNpz7O)-TZ5G z>pH!DI5_iU+@2wlf&ZajV*TT-xW)lY6i&YA^TKj?B~b14*aNDqA!!G>>}z*|9(


LRGw%3oqp;2SwyS$wSE{NsbyLm76O|9ed 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 Date: Sat, 8 Sep 2018 14:52:36 -0400 Subject: [PATCH 04/13] Bug fixes --- src/vcu/src/can_handles.c | 31 ++++++++++--------------------- src/vcu/src/controls.c | 15 +++++++-------- 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/src/vcu/src/can_handles.c b/src/vcu/src/can_handles.c index ba267d0..7b5af31 100644 --- a/src/vcu/src/can_handles.c +++ b/src/vcu/src/can_handles.c @@ -70,8 +70,8 @@ void handleCAN(CAN_HandleTypeDef *hcan) { handleCurrentSensor_Power(&frame); break; - case can0_MCMotor_Position_Info: - handleMCMotor_Position_Info(&frame); + case can0_MCMotorPositionInfo: + handleMCMotorPositionInfo(&frame); break; case can0_SBG_EKF_Velocity: @@ -86,8 +86,8 @@ void handleCAN(CAN_HandleTypeDef *hcan) { handleFrontCanNodeLeftWheelSpeed(&frame); break; - case can0_MCTorque_Timer_Info: - handleMCTorque_Timer_Info(&frame); + case can0_MCTorqueTimerInfo: + handleMCTorqueTimerInfo(&frame); break; case can0_DashRequest: @@ -210,10 +210,10 @@ void handleCurrentSensor_Power(Frame *msg) { cs_readings.power = unpacked_msg.result; } -void handleMCMotor_Position_Info(Frame *msg) { - can0_MCMotor_Position_Info_T unpacked_msg; +void handleMCMotorPositionInfo(Frame *msg) { + can0_MCMotorPositionInfo_T unpacked_msg; - unpack_can0_MCMotor_Position_Info(msg, &unpacked_msg); + unpack_can0_MCMotorPositionInfo(msg, &unpacked_msg); mc_readings.speed = unpacked_msg.motor_speed; } @@ -245,10 +245,10 @@ void handleFrontCanNodeRightWheelSpeed(Frame *msg) { wheel_speeds.front_right_16b_wheel_speed = unpacked_msg.right_16b; } -void handleMCTorque_Timer_Info(Frame *msg) { - can0_MCTorque_Timer_Info_T unpacked_msg; +void handleMCTorqueTimerInfo(Frame *msg) { + can0_MCTorqueTimerInfo_T unpacked_msg; - unpack_can0_MCTorque_Timer_Info(msg, &unpacked_msg); + unpack_can0_MCTorqueTimerInfo(msg, &unpacked_msg); mc_readings.torque_feedback = unpacked_msg.torque_feedback; } @@ -293,17 +293,6 @@ void handleDashRequest(Frame *msg) { control_settings.active_aero_enabled = unpacked_msg.active_aero_enabled; } -void handle_DashRequestLC(Frame *msg) { - can0_DashRequestLC_T unpacked_msg; - - unpack_can0_DashRequestLC(msg, &unpacked_msg); - - if (unpacked_msg.launch_ctrl_slip_ratio != 65535) { - lc_settings.slip_ratio = unpacked_msg.launch_ctrl_slip_ratio; - lc_settings.using_launch_ctrl = unpacked_msg.using_launch_ctrl; - } -} - void send_VCUHeartbeat(void) { LIMIT(can0_VCUHeartbeat); diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index e8581c0..7b093ff 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -37,6 +37,7 @@ void enable_controls(void) { enabled = true; torque_command = 0; speed_command = 0; + lc_state = BEFORE; unlock_brake_valve(); } @@ -81,7 +82,7 @@ void execute_controls(void) { if (torque_command == 0) { torque_command = regen_torque; } else { // Only use limits and launch control when we're not doing regen - // Even if we are doing launch control, calculate limits for loggind also so that we are not doing + // Even if we are doing launch control, calculate limits for loggind also so that we are not doing // launch control when we're supposed to be limiting int32_t voltage_limited_torque = get_voltage_limited_torque(torque_command); @@ -124,10 +125,8 @@ void execute_controls(void) { torque_command = limited_torque; bool torque_limited = limited_torque < controls_monitoring.raw_torque; - - if (lc_settings.using_launch_ctrl && lc_state != DONE && !torque_limited) { - launch_ctrl_entered = true; + if (launch_ctrl_entered = (lc_settings.using_launch_ctrl && lc_state != DONE && !torque_limited)) { // We shouldn't be braking in launch control, so reset regen valve set_brake_valve(false); uint32_t front_wheel_speed = get_front_wheel_speed(); @@ -144,7 +143,7 @@ void execute_controls(void) { } break; case SPEEDING_UP: - if (1000 > torque_command) sendSpeedCmdMsg(500, torque_command); + if (torque_command < 1000) sendSpeedCmdMsg(500, torque_command); else sendSpeedCmdMsg(300, 1000); // Transition @@ -165,6 +164,7 @@ void execute_controls(void) { lc_state = ZERO_TORQUE; printf("[LAUNCH CONTROL] ZERO TORQUE STATE ENTERED\r\n"); } + break; case ZERO_TORQUE: sendTorqueCmdMsg(0); @@ -175,12 +175,11 @@ void execute_controls(void) { break; default: printf("ERROR: NO STATE!\r\n"); + break; } - } else { - launch_ctrl_entered = false; } } - if (launch_ctrl_entered) { + if (!launch_ctrl_entered) { // In LC we already sent our command above sendTorqueCmdMsg(torque_command); } From 69bf3ff4c9087adddddfb03ec92fc3abd8b27860 Mon Sep 17 00:00:00 2001 From: Sebastian Lopez-Cot Date: Sat, 8 Sep 2018 16:39:25 -0400 Subject: [PATCH 05/13] Fixing constants, unused function, and comments --- src/vcu/inc/controls.h | 6 +++--- src/vcu/src/controls.c | 40 ++++++++-------------------------------- 2 files changed, 11 insertions(+), 35 deletions(-) diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index fefa70e..288c2e4 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -14,7 +14,7 @@ #define MAX_ACCEL_VAL 1000 #define MIN_ACCEL_VAL 0 -// Launch control contants +// Launch control constants // After wheel speed crosses this threshold, start using slip controller #define LC_WS_THRESH 45000 #define LC_cGR 347 // Gear ratio times 100 @@ -22,6 +22,7 @@ #define LC_ACCEL_RELEASE 50 // 5% #define LC_BRAKE_BEGIN 100 // We want a lower threshold #define LC_BACKWARDS_CUTOFF 10 +#define LC_DEFAULT_SLIP_RATIO 112 // RG = regen #define RG_MOTOR_SPEED_THRESH 250 // RPM @@ -64,7 +65,6 @@ void enable_controls(void); void disable_controls(void); bool get_controls_enabled(void); void execute_controls(void); -void set_lc_done(void); -void set_lc_state_before(void); +void set_lc_zero_torque(void); #endif // ifndef __TORQUE_CALC diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index 7b093ff..d9a643e 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -30,7 +30,7 @@ void init_controls_defaults(void) { control_settings.torque_temp_limited = false; lc_settings.using_launch_ctrl = false; - lc_settings.slip_ratio = 112; + lc_settings.slip_ratio = LC_DEFAULT_SLIP_RATIO; } void enable_controls(void) { @@ -82,25 +82,15 @@ void execute_controls(void) { if (torque_command == 0) { torque_command = regen_torque; } else { // Only use limits and launch control when we're not doing regen - // Even if we are doing launch control, calculate limits for loggind also so that we are not doing + // Even if we are doing launch control, calculate limits for logging also so that we are not doing // launch control when we're supposed to be limiting int32_t voltage_limited_torque = get_voltage_limited_torque(torque_command); - // static uint32_t last_vt = 0; - // if (HAL_GetTick() - last_vt > 10) { - // printf("VT: %d\r\n", voltage_limited_torque); - // - // last_vt = HAL_GetTick(); - // } + if (!control_settings.using_voltage_limiting) voltage_limited_torque = torque_command; int32_t temp_limited_torque = get_temp_limited_torque(torque_command); - // static uint32_t last_tt = 0; - // if (HAL_GetTick() - last_tt > 10) { - // printf("TT: %d\r\n", temp_limited_torque); - // - // last_tt = HAL_GetTick(); - // } + if (!control_settings.using_temp_limiting) temp_limited_torque = torque_command; uint32_t torque_temp_limited = temp_limited_torque < torque_command; @@ -174,6 +164,8 @@ void execute_controls(void) { } break; default: + sendTorqueCmdMsg(0); + printf("ERROR: NO STATE!\r\n"); break; } @@ -258,6 +250,8 @@ static bool any_lc_faults() { printf("[LAUNCH CONTROL ERROR] Accel min (%d) too low\r\n", pedalbox_min(accel)); return true; } else if (pedalbox.brake_2 > LC_BRAKE_BEGIN) { + // In this test, we only need to check brake_2 because it is the only brake line + // that is indicative of driver braking intent. The other brake is for regen. printf("[LAUNCH CONTROL ERROR] Brake min (%d) too low\r\n", pedalbox.brake_2); return true; } else if (mc_readings.speed > LC_BACKWARDS_CUTOFF) { @@ -267,10 +261,6 @@ static bool any_lc_faults() { return false; } -void set_lc_state_before() { - lc_state = BEFORE; -} - void set_lc_zero_torque() { lc_state = ZERO_TORQUE; } @@ -288,13 +278,6 @@ static int32_t get_temp_limited_torque(int32_t pedal_torque) { // Thresh was in degrees, so multiply it by 100 int32_t thresh_cC = control_settings.temp_lim_thresh_temp * 100; - // static uint32_t lastt = 0; - // if (HAL_GetTick() - lastt > 100) { - // printf("Filtered Temp: %d\tTemp threshold: %d\r\n", temp_cC, thresh_cC); - // - // lastt = HAL_GetTick(); - // } - int32_t gain = hinge_limiter(temp_cC, control_settings.temp_lim_min_gain, thresh_cC, MAX_TEMP); controls_monitoring.tl_gain = gain; @@ -308,13 +291,6 @@ static int32_t get_voltage_limited_torque(int32_t pedal_torque) { int32_t cell_voltage = (cs_readings.V_bus - 72) / 720; controls_monitoring.voltage_used = cell_voltage; - // static uint32_t lastt = 0; - // if (HAL_GetTick() - lastt > 100) { - // printf("Voltage: %d\tVoltage threshold: %d\r\n", cell_voltage, control_settings.volt_lim_min_voltage); - // - // lastt = HAL_GetTick(); - // } - int32_t gain = hinge_limiter(cell_voltage, control_settings.volt_lim_min_gain, control_settings.volt_lim_min_voltage, MIN_VOLTAGE); controls_monitoring.vl_gain = gain; From 0554ab53a52fd1ca7ce9c6acc14068f995f257f0 Mon Sep 17 00:00:00 2001 From: Dani White Date: Sat, 8 Sep 2018 18:50:53 -0400 Subject: [PATCH 06/13] Pull out constants, other style fixes In response to review --- src/vcu/inc/controls.h | 6 ++++-- src/vcu/src/controls.c | 17 +++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index 288c2e4..512a73a 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -17,12 +17,14 @@ // Launch control constants // After wheel speed crosses this threshold, start using slip controller #define LC_WS_THRESH 45000 -#define LC_cGR 347 // Gear ratio times 100 +#define LC_GR 347 // Gear ratio times 100 #define LC_ACCEL_BEGIN 950 // 95% #define LC_ACCEL_RELEASE 50 // 5% -#define LC_BRAKE_BEGIN 100 // We want a lower threshold +#define LC_BRAKE_BEGIN 100 // We want a lower threshold than normal to make it super easy to exit LC #define LC_BACKWARDS_CUTOFF 10 #define LC_DEFAULT_SLIP_RATIO 112 +#define LC_SPEEDING_UP_TORQUE 1000 +#define LC_SPEEDING_UP_SPEED 500 // RG = regen #define RG_MOTOR_SPEED_THRESH 250 // RPM diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index d9a643e..69963f4 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -95,7 +95,7 @@ void execute_controls(void) { uint32_t torque_temp_limited = temp_limited_torque < torque_command; // Whether torque is temp limited needs to be sent out over CAN so the dash knows not to allow regen - control_settings.torque_temp_limited = temp_limited_torque < torque_command; + control_settings.torque_temp_limited = torque_temp_limited; int32_t min_sensor_torque; if (voltage_limited_torque < temp_limited_torque) { @@ -133,8 +133,9 @@ void execute_controls(void) { } break; case SPEEDING_UP: - if (torque_command < 1000) sendSpeedCmdMsg(500, torque_command); - else sendSpeedCmdMsg(300, 1000); + // Command max(torque_command, LC_SPEEDING_UP_TORQUE) + if (torque_command < LC_SPEEDING_UP_TORQUE) sendSpeedCmdMsg(LC_SPEEDING_UP_SPEED, torque_command); + else sendSpeedCmdMsg(LC_SPEEDING_UP_SPEED, LC_SPEEDING_UP_TORQUE); // Transition if (any_lc_faults()) { @@ -218,7 +219,7 @@ static int32_t get_launch_control_speed(uint32_t front_wheel_speed) { uint32_t front_wheel_speedRPM = front_wheel_speed / 1000; // Divide 100 because slip ratio is times 100, divide by 100 again because // gear ratio is also multiplied by 100 - int32_t target_speed = front_wheel_speedRPM * lc_settings.slip_ratio * LC_cGR / (100 * 100); + int32_t target_speed = front_wheel_speedRPM * lc_settings.slip_ratio * LC_GR / (100 * 100); return target_speed; } @@ -245,7 +246,7 @@ static uint32_t get_front_wheel_speed() { return avg_wheel_speed; } -static bool any_lc_faults() { +static bool any_lc_faults(void) { if (pedalbox_min(accel) < LC_ACCEL_BEGIN) { printf("[LAUNCH CONTROL ERROR] Accel min (%d) too low\r\n", pedalbox_min(accel)); return true; @@ -261,7 +262,11 @@ static bool any_lc_faults() { return false; } -void set_lc_zero_torque() { +void set_lc_state_before(void) { + lc_state = BEFORE; +} + +void set_lc_zero_torque(void) { lc_state = ZERO_TORQUE; } From e037a983d26e7c2f8a087a90c0b27826d694cf36 Mon Sep 17 00:00:00 2001 From: Dani White Date: Sat, 8 Sep 2018 19:04:09 -0400 Subject: [PATCH 07/13] Move fault checks outside switch statement --- src/vcu/src/controls.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index 69963f4..a5ac600 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -122,6 +122,10 @@ void execute_controls(void) { uint32_t front_wheel_speed = get_front_wheel_speed(); // Mini FSM + if (any_lc_faults() && lc_state != DONE && lc_state != BEFORE) { + lc_state = ZERO_TORQUE; + printf("[LAUNCH CONTROL] ZERO TORQUE STATE ENTERED\r\n"); + } switch (lc_state) { case BEFORE: sendSpeedCmdMsg(0, 0); @@ -138,10 +142,7 @@ void execute_controls(void) { else sendSpeedCmdMsg(LC_SPEEDING_UP_SPEED, LC_SPEEDING_UP_TORQUE); // Transition - if (any_lc_faults()) { - lc_state = ZERO_TORQUE; - printf("[LAUNCH CONTROL] ZERO TORQUE STATE ENTERED\r\n"); - } else if (front_wheel_speed > LC_WS_THRESH) { + if (front_wheel_speed > LC_WS_THRESH) { lc_state = SPEED_CONTROLLER; printf("[LAUNCH CONTROL] SPEED CONTROLLER STATE ENTERED\r\n"); } @@ -149,12 +150,6 @@ void execute_controls(void) { case SPEED_CONTROLLER: speed_command = get_launch_control_speed(front_wheel_speed); sendSpeedCmdMsg(speed_command, torque_command); - - // Transition - if (any_lc_faults()) { - lc_state = ZERO_TORQUE; - printf("[LAUNCH CONTROL] ZERO TORQUE STATE ENTERED\r\n"); - } break; case ZERO_TORQUE: sendTorqueCmdMsg(0); From f302216418cf4613a1aecd360e899b05a2f3eafe Mon Sep 17 00:00:00 2001 From: Dani White Date: Sat, 8 Sep 2018 23:23:11 -0400 Subject: [PATCH 08/13] Update launch control dash page --- can_spec_my18.yml | 22 ++++++-- src/dashboard/inc/carstats.h | 3 ++ src/dashboard/inc/page_manager.h | 1 + src/dashboard/src/carstats.c | 19 +++++-- src/dashboard/src/dispatch.c | 8 +++ src/dashboard/src/page_manager.c | 90 ++++++++++++++++++++++++++++---- 6 files changed, 122 insertions(+), 21 deletions(-) diff --git a/can_spec_my18.yml b/can_spec_my18.yml index 700e4bf..821f37d 100644 --- a/can_spec_my18.yml +++ b/can_spec_my18.yml @@ -681,14 +681,26 @@ buses: is_big_endian: true period: 69ms segments: - using_launch_ctrl: + speeding_up_torque: position: 0 - length: 1 - c_type: bool - launch_ctrl_slip_ratio: # Ranges from 105 to 115 + length: 16 + c_type: uint16_t + speeding_up_speed: position: 16 length: 16 c_type: uint16_t + ws_thresh: + position: 32 + length: 16 + c_type: uint16_t + launch_ctrl_slip_ratio: # Ranges from 105 to 115 + position: 48 + length: 8 + c_type: uint16_t + using_launch_ctrl: + position: 56 + length: 1 + c_type: bool VCUControlsParams: can_id: 0x0D4 is_big_endian: true @@ -738,7 +750,7 @@ buses: position: 60 length: 1 c_type: bool - VCUParamsLC: + VCUControlsParamsLC: can_id: 0x0D6 is_big_endian: true period: 200ms diff --git a/src/dashboard/inc/carstats.h b/src/dashboard/inc/carstats.h index 23ee4fb..629e4df 100644 --- a/src/dashboard/inc/carstats.h +++ b/src/dashboard/inc/carstats.h @@ -58,9 +58,12 @@ typedef struct { // Controls values can0_DashRequest_T controls; + can0_DashRequestLC_T lc_controls; can0_VCUControlsParams_T vcu_controls; + can0_VCUControlsParamsLC_T vcu_lc_controls; bool vcu_controls_received; + bool vcu_lc_controls_received; Buttons_T buttons; } carstats_t; diff --git a/src/dashboard/inc/page_manager.h b/src/dashboard/inc/page_manager.h index eb2f1c5..3420519 100644 --- a/src/dashboard/inc/page_manager.h +++ b/src/dashboard/inc/page_manager.h @@ -9,6 +9,7 @@ typedef enum { DASH_PAGE_CRITICAL = 0, DASH_PAGE_TRACTION, DASH_PAGE_REGEN, + DASH_PAGE_LAUNCH_CONTROL, DASH_PAGE_TEMP_LIM, DASH_PAGE_VOLT_LIM, DASH_PAGE_FAULT, diff --git a/src/dashboard/src/carstats.c b/src/dashboard/src/carstats.c index e2fd9f7..d229315 100644 --- a/src/dashboard/src/carstats.c +++ b/src/dashboard/src/carstats.c @@ -78,9 +78,9 @@ void can_handle_bms_heartbeat(carstats_t *cs) { cs->soc = msg.soc; } -void can_handle_mc_temperature1(carstats_t *cs) { - can0_MCTemperature1_T msg; - unpack_can0_MCTemperature1(&frame, &msg); +void can_handle_mc_temperature(carstats_t *cs) { + can0_MCTemperature_T msg; + unpack_can0_MCTemperature(&frame, &msg); int16_t max = msg.module_a_temp; if (msg.module_b_temp > max) @@ -117,6 +117,11 @@ void can_handle_vcu_controls(carstats_t *cs) { cs->vcu_controls_received = true; } +void can_handle_vcu_lc_controls(carstats_t *cs) { + unpack_can0_VCUControlsParamsLC(&frame, &cs->vcu_lc_controls); + cs->vcu_lc_controls_received = true; +} + void can_update_carstats(carstats_t *cs) { handle_can_error(Can_RawRead(&frame)); @@ -151,8 +156,8 @@ void can_update_carstats(carstats_t *cs) { case can0_VCUHeartbeat: can_handle_vcu_heartbeat(cs); break; - case can0_MCTemperature1: - can_handle_mc_temperature1(cs); + case can0_MCTemperature: + can_handle_mc_temperature(cs); break; case can0_ButtonRequest: can_handle_button_request(cs); @@ -162,6 +167,10 @@ void can_update_carstats(carstats_t *cs) { break; case can0_VCUControlsParams: can_handle_vcu_controls(cs); + break; + case can0_VCUControlsParamsLC: + can_handle_vcu_controls(cs); + break; default: // do nothing break; diff --git a/src/dashboard/src/dispatch.c b/src/dashboard/src/dispatch.c index 67c1abe..13e5312 100644 --- a/src/dashboard/src/dispatch.c +++ b/src/dashboard/src/dispatch.c @@ -99,7 +99,14 @@ void dispatch_init() { carstats.controls.using_voltage_limiting = false; carstats.controls.active_aero_enabled = false; + carstats.lc_controls.speeding_up_torque = -1; + carstats.lc_controls.speeding_up_speed = -1; + carstats.lc_controls.ws_thresh = -1; + carstats.lc_controls.launch_ctrl_slip_ratio = -1; + carstats.lc_controls.using_launch_ctrl = false; + carstats.vcu_controls_received = false; + carstats.vcu_lc_controls_received = false; init_button_state(&carstats.buttons.left); init_button_state(&carstats.buttons.right); @@ -169,6 +176,7 @@ void update_lights(void) { void send_dash_controls(void) { LIMIT(can0_DashRequest_period); handle_can_error(can0_DashRequest_Write(&carstats.controls)); + handle_can_error(can0_DashRequestLC_Write(&carstats.lc_controls)); } void vcu_controls_update(void) { diff --git a/src/dashboard/src/page_manager.c b/src/dashboard/src/page_manager.c index 1ce048c..a8b397e 100644 --- a/src/dashboard/src/page_manager.c +++ b/src/dashboard/src/page_manager.c @@ -436,28 +436,96 @@ void draw_volt_lim_page(page_manager_t *pm, NHD_US2066_OLED *oled) { void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled) { carstats_t *stats = pm->stats; + static int var_toggled = 0; + + // Process contextual actions + if (stats->buttons.B.rising_edge) var_toggled++; + var_toggled = LOOPOVER(var_toggled, 1, 5); + + if (stats->buttons.left.action == BUTTON_ACTION_TAP) { + switch (var_toggled) { + case 1: + stats->lc_controls.using_launch_ctrl ^= 1; + break; + case 2: + stats->lc_controls.launch_ctrl_slip_ratio -= 1; + break; + case 3: + stats->lc_controls.speeding_up_torque -= 100; + break; + case 4: + stats->lc_controls.speeding_up_speed -= 100; + break; + case 5: + stats->lc_controls.ws_thresh -= 100; + break; + } + } + + if (stats->buttons.right.action == BUTTON_ACTION_TAP) { + switch (var_toggled) { + case 1: + stats->lc_controls.using_launch_ctrl ^= 1; + break; + case 2: + stats->lc_controls.launch_ctrl_slip_ratio += 1; + break; + case 3: + stats->lc_controls.speeding_up_torque += 100; + break; + case 4: + stats->lc_controls.speeding_up_speed += 500; + break; + case 5: + stats->lc_controls.ws_thresh += 100; + break; + } + } oled_clearline(oled, 1); oled_set_pos(oled, 1, 0); - if (stats->buttons.right.rising_edge) { - stats->controls.launch_ctrl_slip_ratio += 1; - } + stats->lc_controls.launch_ctrl_slip_ratio = LOOPOVER(stats->lc_controls.launch_ctrl_slip_ratio, 101, 120); + stats->lc_controls.speeding_up_torque = LOOPOVER(stats->lc_controls.speeding_up_torque, 0, 2400); + stats->lc_controls.speeding_up_speed = LOOPOVER(stats->lc_controls.speeding_up_speed, 0, 5000); + stats->lc_controls.ws_thresh = LOOPOVER(stats->lc_controls.ws_thresh, 0, 2500); - stats->controls.launch_ctrl_slip_ratio = LOOPOVER(stats->controls.launch_ctrl_slip_ratio, 101, 120); + oled_print(oled, "LCTRL "); - if (stats->buttons.B.rising_edge) stats->controls.using_launch_ctrl ^= 1; // NOT + oled_print(oled, (stats->lc_controls.using_launch_ctrl) ? "ON" : "OFF"); - oled_print(oled, "LAUNCH CONTROL "); + oled_rprint_pad(oled, "SR ", 4); - oled_print(oled, (stats->controls.using_launch_ctrl) ? "ON" : "OFF"); + if (stats->lc_controls.launch_ctrl_slip_ratio != 255) { + oled_print_num(oled, stats->lc_controls.launch_ctrl_slip_ratio); + } else { + oled_print(oled, DATA_UNKNOWN); + } - oled_rprint_pad(oled, "SLIP RATIO ", 4); + oled_clearline(oled, 2); + oled_set_pos(oled, 2, 0); + + oled_print(oled, "TORQ "); + if (stats->lc_controls.speeding_up_torque != 65535) { + oled_print_num(oled, stats->lc_controls.speeding_up_torque); + } else { + oled_print(oled, DATA_UNKNOWN); + } - if (stats->controls.launch_ctrl_slip_ratio != -1) { - oled_print_num(oled, stats->controls.launch_ctrl_slip_ratio); + oled_rprint_pad(oled, "SPD ", 4); + if (stats->lc_controls.speeding_up_speed != 65535) { + oled_print_num(oled, stats->lc_controls.speeding_up_speed); + } else { + oled_print(oled, DATA_UNKNOWN); } - else { + + oled_clearline(oled, 3); + oled_set_pos(oled, 3, 0); + + oled_print(oled, "WS THRESH "); + if (stats->lc_controls.ws_thresh != 65535) { + oled_print_num(oled, stats->lc_controls.ws_thresh); + } else { oled_print(oled, DATA_UNKNOWN); } } From 4a4fa971a7b6cd4f2a80c03dee2eaf167e0d7b32 Mon Sep 17 00:00:00 2001 From: Dani White Date: Sat, 8 Sep 2018 23:50:28 -0400 Subject: [PATCH 09/13] Fix launch control page --- can_spec_my18.yml | 20 +++++++++++++++---- src/vcu/inc/controls.h | 2 +- src/vcu/src/can_handles.c | 41 +++++++++++++++++++++++++++++++++++++++ src/vcu/src/controls.c | 9 ++++++--- src/vcu/src/main.c | 4 ++-- 5 files changed, 66 insertions(+), 10 deletions(-) diff --git a/can_spec_my18.yml b/can_spec_my18.yml index 821f37d..f650466 100644 --- a/can_spec_my18.yml +++ b/can_spec_my18.yml @@ -755,14 +755,26 @@ buses: is_big_endian: true period: 200ms segments: - using_launch_ctrl: + speeding_up_torque: position: 0 - length: 1 - c_type: bool - slip_ratio: # Ranges from 105 to 115 + length: 16 + c_type: uint16_t + speeding_up_speed: position: 16 length: 16 c_type: uint16_t + ws_thresh: + position: 32 + length: 16 + c_type: uint16_t + launch_ctrl_slip_ratio: # Ranges from 105 to 115 + position: 48 + length: 8 + c_type: uint16_t + using_launch_ctrl: + position: 56 + length: 1 + c_type: bool ButtonRequest: can_id: 0x0D8 period: 73ms diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index 512a73a..ea8babd 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -60,7 +60,7 @@ typedef enum { #define TEMP_LOG_LENGTH 200 extern can0_VCUControlsParams_T control_settings; -extern can0_VCUParamsLC_T lc_settings; +extern can0_VCUControlsParamsLC_T lc_settings; // INTERACTION FUNCTIONS void enable_controls(void); diff --git a/src/vcu/src/can_handles.c b/src/vcu/src/can_handles.c index 7b5af31..0b4e800 100644 --- a/src/vcu/src/can_handles.c +++ b/src/vcu/src/can_handles.c @@ -93,6 +93,9 @@ void handleCAN(CAN_HandleTypeDef *hcan) { case can0_DashRequest: handleDashRequest(&frame); break; + + case can0_DashRequestLC: + handleDashRequestLC(&frame); default: break; @@ -293,6 +296,37 @@ void handleDashRequest(Frame *msg) { control_settings.active_aero_enabled = unpacked_msg.active_aero_enabled; } +void handleDashRequestLC(Frame *msg) { + can0_DashRequestLC_T unpacked_msg; + + unpack_can0_DashRequestLC(msg, &unpacked_msg); + + // printf("speeding_up_torque: %d\r\n", unpacked_msg.speeding_up_torque); + // printf("speeding_up_speed: %d\r\n", unpacked_msg.speeding_up_speed); + // printf("ws_thresh: %d\r\n", unpacked_msg.ws_thresh); + // printf("launch_ctrl_slip_ratio: %d\r\n", unpacked_msg.launch_ctrl_slip_ratio); + // printf("using_launch_ctrl: %d\r\n", unpacked_msg.using_launch_ctrl); + + lc_settings.using_launch_ctrl = unpacked_msg.using_launch_ctrl; + + + if (unpacked_msg.speeding_up_torque != 65535) { + lc_settings.speeding_up_torque = unpacked_msg.speeding_up_torque; + } + + if (unpacked_msg.speeding_up_speed != 65535) { + lc_settings.speeding_up_speed = unpacked_msg.speeding_up_speed; + } + + if (unpacked_msg.ws_thresh != 65535) { + lc_settings.ws_thresh = unpacked_msg.ws_thresh; + } + + if (unpacked_msg.launch_ctrl_slip_ratio != 255) { + lc_settings.launch_ctrl_slip_ratio = unpacked_msg.launch_ctrl_slip_ratio; + } +} + void send_VCUHeartbeat(void) { LIMIT(can0_VCUHeartbeat); @@ -334,6 +368,12 @@ void send_VCUControlsParams(void) { can0_VCUControlsParams_Write(&control_settings); } +void send_VCUControlsParamsLC(void) { + LIMIT(can0_VCUControlsParamsLC); + + can0_VCUControlsParamsLC_Write(&control_settings); +} + void send_VCUControlsMonitoring(void) { LIMIT(can0_VCUControlsMonitoring); @@ -344,6 +384,7 @@ void send_VCU(void) { send_VCUHeartbeat(); send_VCUErrors(); send_VCUControlsParams(); + send_VCUControlsParamsLC(); send_VCUControlsMonitoring(); } diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index a5ac600..c41a4f6 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -4,7 +4,7 @@ static bool enabled = false; static int32_t torque_command = 0; static int32_t speed_command = 0; can0_VCUControlsParams_T control_settings = {}; -can0_VCUParamsLC_T lc_settings = {}; +can0_VCUControlsParamsLC_T lc_settings = {}; static Launch_Control_State_T lc_state = BEFORE; static uint32_t get_front_wheel_speed(void); @@ -30,7 +30,10 @@ void init_controls_defaults(void) { control_settings.torque_temp_limited = false; lc_settings.using_launch_ctrl = false; - lc_settings.slip_ratio = LC_DEFAULT_SLIP_RATIO; + lc_settings.launch_ctrl_slip_ratio = LC_DEFAULT_SLIP_RATIO; + lc_settings.speeding_up_torque = 1000; + lc_settings.speeding_up_speed = 2000; + lc_settings.ws_thresh = 300; } void enable_controls(void) { @@ -214,7 +217,7 @@ static int32_t get_launch_control_speed(uint32_t front_wheel_speed) { uint32_t front_wheel_speedRPM = front_wheel_speed / 1000; // Divide 100 because slip ratio is times 100, divide by 100 again because // gear ratio is also multiplied by 100 - int32_t target_speed = front_wheel_speedRPM * lc_settings.slip_ratio * LC_GR / (100 * 100); + int32_t target_speed = front_wheel_speedRPM * lc_settings.launch_ctrl_slip_ratio * LC_GR / (100 * 100); return target_speed; } diff --git a/src/vcu/src/main.c b/src/vcu/src/main.c index ca714dd..9bf7db9 100755 --- a/src/vcu/src/main.c +++ b/src/vcu/src/main.c @@ -84,8 +84,8 @@ int main(void) { send_mc_fault_clear(); } - // printf("CONTROLS PARAMS:\r\n using_regen: %d\r\n using_voltage_limiting: %d\r\n using_temp_limiting: %d\r\n regen_bias: %d\r\n limp_factor: %d\r\n temp_lim_min_gain: %d\r\n temp_lim_thresh_temp: %d\r\n temp_abs_thesh: %d\r\n volt_lim_min_gain: %d\r\n volt_lim_min_voltage: %d\r\n volt_abs_thresh: %d\r\n\r\n", - // control_settings.using_regen, control_settings.using_voltage_limiting, control_settings.using_temp_limiting, control_settings.regen_bias, control_settings.limp_factor, control_settings.temp_lim_min_gain, control_settings.temp_lim_thresh_temp, MAX_TEMP, control_settings.volt_lim_min_gain, control_settings.volt_lim_min_voltage, MIN_VOLTAGE); + // printf("CONTROLS PARAMS:\r\n speeding_up_torque: %d\r\n speeding_up_speed: %d\r\n ws_thresh: %d\r\n launch_ctrl_slip_ratio: %d\r\n using_launch_ctrl: %d\r\n\r\n", + // lc_settings.speeding_up_torque, lc_settings.speeding_up_speed, lc_settings.ws_thresh, lc_settings.launch_ctrl_slip_ratio, lc_settings.using_launch_ctrl); lastt = HAL_GetTick(); From 73f6043b678391d4c865c0f47f2ad9fd327c0f0a Mon Sep 17 00:00:00 2001 From: Dani White Date: Sun, 9 Sep 2018 02:49:51 -0400 Subject: [PATCH 10/13] Use dash values properly --- can_spec_my18.yml | 10 ++++++++++ src/dashboard/src/carstats.c | 4 ++-- src/dashboard/src/page_manager.c | 24 ++++++++++++++++++++++-- src/frontCANnode/src/output.c | 10 ++++++++++ src/vcu/inc/controls.h | 6 +++--- src/vcu/src/can_handles.c | 3 ++- src/vcu/src/controls.c | 26 +++++++++++++++----------- src/vcu/src/main.c | 28 ++++++++++++++++++++++++---- 8 files changed, 88 insertions(+), 23 deletions(-) diff --git a/can_spec_my18.yml b/can_spec_my18.yml index f650466..a3d7853 100644 --- a/can_spec_my18.yml +++ b/can_spec_my18.yml @@ -775,6 +775,16 @@ buses: position: 56 length: 1 c_type: bool + lc_state: + position: 57 + length: 3 + c_type: enum + enum: + BEFORE: 0 + SPEEDING_UP: 1 + SPEED_CONTROLLER: 2 + ZERO_TORQUE: 3 + DONE: 4 ButtonRequest: can_id: 0x0D8 period: 73ms diff --git a/src/dashboard/src/carstats.c b/src/dashboard/src/carstats.c index d229315..3159c5f 100644 --- a/src/dashboard/src/carstats.c +++ b/src/dashboard/src/carstats.c @@ -117,7 +117,7 @@ void can_handle_vcu_controls(carstats_t *cs) { cs->vcu_controls_received = true; } -void can_handle_vcu_lc_controls(carstats_t *cs) { +void can_handle_vcu_controls_lc(carstats_t *cs) { unpack_can0_VCUControlsParamsLC(&frame, &cs->vcu_lc_controls); cs->vcu_lc_controls_received = true; } @@ -169,7 +169,7 @@ void can_update_carstats(carstats_t *cs) { can_handle_vcu_controls(cs); break; case can0_VCUControlsParamsLC: - can_handle_vcu_controls(cs); + can_handle_vcu_controls_lc(cs); break; default: // do nothing diff --git a/src/dashboard/src/page_manager.c b/src/dashboard/src/page_manager.c index a8b397e..850f38e 100644 --- a/src/dashboard/src/page_manager.c +++ b/src/dashboard/src/page_manager.c @@ -454,7 +454,7 @@ void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled) { stats->lc_controls.speeding_up_torque -= 100; break; case 4: - stats->lc_controls.speeding_up_speed -= 100; + stats->lc_controls.speeding_up_speed -= 200; break; case 5: stats->lc_controls.ws_thresh -= 100; @@ -474,7 +474,7 @@ void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled) { stats->lc_controls.speeding_up_torque += 100; break; case 4: - stats->lc_controls.speeding_up_speed += 500; + stats->lc_controls.speeding_up_speed += 200; break; case 5: stats->lc_controls.ws_thresh += 100; @@ -482,6 +482,26 @@ void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled) { } } + oled_clearline(oled, 0); + oled_set_pos(oled, 0, 0); + switch (stats->vcu_lc_controls.lc_state) { + case 0: + oled_print(oled, "BEFORE"); + break; + case 1: + oled_print(oled, "SPEEDING UP"); + break; + case 2: + oled_print(oled, "SPEED CONTROLLER"); + break; + case 3: + oled_print(oled, "ZERO TORQUE"); + break; + case 4: + oled_print(oled, "DONE"); + break; + } + oled_clearline(oled, 1); oled_set_pos(oled, 1, 0); diff --git a/src/frontCANnode/src/output.c b/src/frontCANnode/src/output.c index d1af2f5..d26aa77 100644 --- a/src/frontCANnode/src/output.c +++ b/src/frontCANnode/src/output.c @@ -50,6 +50,11 @@ void write_can_left_wheel_speed_msg() { msg.left_32b = input.speed->can_node_left_32b_wheel_speed; msg.left_16b = input.speed->can_node_left_16b_wheel_speed; + /*Serial_Print("32l: "); + Serial_PrintNumber(msg.left_32b, 10); + Serial_Print(", 16l: "); + Serial_PrintlnNumber(msg.left_16b, 10);*/ + handle_can_error(can0_FrontCanNodeLeftWheelSpeed_Write(&msg)); } @@ -61,6 +66,11 @@ void write_can_right_wheel_speed_msg() { msg.right_32b = input.speed->can_node_right_32b_wheel_speed; msg.right_16b = input.speed->can_node_right_16b_wheel_speed; + /*Serial_Print("32r: "); + Serial_PrintNumber(msg.right_32b, 10); + Serial_Print(", 16r: "); + Serial_PrintlnNumber(msg.right_16b, 10);*/ + handle_can_error(can0_FrontCanNodeRightWheelSpeed_Write(&msg)); } void handle_can_error(Can_ErrorID_T error) { diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index ea8babd..85215f8 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -16,15 +16,15 @@ // Launch control constants // After wheel speed crosses this threshold, start using slip controller -#define LC_WS_THRESH 45000 +#define LC_DEFAULT_WS_THRESH 45 // rpm #define LC_GR 347 // Gear ratio times 100 #define LC_ACCEL_BEGIN 950 // 95% #define LC_ACCEL_RELEASE 50 // 5% #define LC_BRAKE_BEGIN 100 // We want a lower threshold than normal to make it super easy to exit LC #define LC_BACKWARDS_CUTOFF 10 #define LC_DEFAULT_SLIP_RATIO 112 -#define LC_SPEEDING_UP_TORQUE 1000 -#define LC_SPEEDING_UP_SPEED 500 +#define LC_DEFAULT_SPEEDING_UP_TORQUE 1000 +#define LC_DEFAULT_SPEEDING_UP_SPEED 500 // RG = regen #define RG_MOTOR_SPEED_THRESH 250 // RPM diff --git a/src/vcu/src/can_handles.c b/src/vcu/src/can_handles.c index 0b4e800..4b054ca 100644 --- a/src/vcu/src/can_handles.c +++ b/src/vcu/src/can_handles.c @@ -370,8 +370,9 @@ void send_VCUControlsParams(void) { void send_VCUControlsParamsLC(void) { LIMIT(can0_VCUControlsParamsLC); + lc_settings.lc_state = get_lc_state(); - can0_VCUControlsParamsLC_Write(&control_settings); + can0_VCUControlsParamsLC_Write(&lc_settings); } void send_VCUControlsMonitoring(void) { diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index c41a4f6..02e733c 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -7,7 +7,7 @@ can0_VCUControlsParams_T control_settings = {}; can0_VCUControlsParamsLC_T lc_settings = {}; static Launch_Control_State_T lc_state = BEFORE; -static uint32_t get_front_wheel_speed(void); +uint32_t get_front_wheel_speed(void); static bool any_lc_faults(); static int32_t hinge_limiter(int32_t x, int32_t m, int32_t e, int32_t c); @@ -31,9 +31,9 @@ void init_controls_defaults(void) { lc_settings.using_launch_ctrl = false; lc_settings.launch_ctrl_slip_ratio = LC_DEFAULT_SLIP_RATIO; - lc_settings.speeding_up_torque = 1000; - lc_settings.speeding_up_speed = 2000; - lc_settings.ws_thresh = 300; + lc_settings.speeding_up_torque = LC_DEFAULT_SPEEDING_UP_TORQUE; + lc_settings.speeding_up_speed = LC_DEFAULT_SPEEDING_UP_SPEED; + lc_settings.ws_thresh = LC_DEFAULT_WS_THRESH; } void enable_controls(void) { @@ -140,12 +140,12 @@ void execute_controls(void) { } break; case SPEEDING_UP: - // Command max(torque_command, LC_SPEEDING_UP_TORQUE) - if (torque_command < LC_SPEEDING_UP_TORQUE) sendSpeedCmdMsg(LC_SPEEDING_UP_SPEED, torque_command); - else sendSpeedCmdMsg(LC_SPEEDING_UP_SPEED, LC_SPEEDING_UP_TORQUE); + // Command max(torque_command, lc_settings.speeding_up_torque) + if (torque_command < lc_settings.speeding_up_torque) sendSpeedCmdMsg(lc_settings.speeding_up_speed, torque_command); + else sendSpeedCmdMsg(lc_settings.speeding_up_speed, lc_settings.speeding_up_torque); // Transition - if (front_wheel_speed > LC_WS_THRESH) { + if (front_wheel_speed > lc_settings.ws_thresh * 1000) { // lc_state = SPEED_CONTROLLER; printf("[LAUNCH CONTROL] SPEED CONTROLLER STATE ENTERED\r\n"); } @@ -221,7 +221,7 @@ uint32_t front_wheel_speedRPM = front_wheel_speed / 1000; return target_speed; } -static uint32_t get_front_wheel_speed() { +uint32_t get_front_wheel_speed() { uint32_t left_front_speed; uint32_t right_front_speed; @@ -241,7 +241,7 @@ static uint32_t get_front_wheel_speed() { } uint32_t avg_wheel_speed = left_front_speed/2 + right_front_speed/2; - return avg_wheel_speed; + return left_front_speed; } static bool any_lc_faults(void) { @@ -251,7 +251,7 @@ static bool any_lc_faults(void) { } else if (pedalbox.brake_2 > LC_BRAKE_BEGIN) { // In this test, we only need to check brake_2 because it is the only brake line // that is indicative of driver braking intent. The other brake is for regen. - printf("[LAUNCH CONTROL ERROR] Brake min (%d) too low\r\n", pedalbox.brake_2); + printf("[LAUNCH CONTROL ERROR] Brake (%d) too high\r\n", pedalbox.brake_2); return true; } else if (mc_readings.speed > LC_BACKWARDS_CUTOFF) { printf("[LAUNCH CONTROL ERROR] MC reading (%d) is great than cutoff (%d)\r\n", mc_readings.speed, LC_BACKWARDS_CUTOFF); @@ -268,6 +268,10 @@ void set_lc_zero_torque(void) { lc_state = ZERO_TORQUE; } +Launch_Control_State_T get_lc_state() { + return lc_state; +} + static int32_t get_temp_limited_torque(int32_t pedal_torque) { uint32_t temp_sum = 0; for (uint32_t i = 0; i < TEMP_LOG_LENGTH; i++) { diff --git a/src/vcu/src/main.c b/src/vcu/src/main.c index 9bf7db9..73149cb 100755 --- a/src/vcu/src/main.c +++ b/src/vcu/src/main.c @@ -75,6 +75,7 @@ int main(void) { HAL_GPIO_WritePin(GPIO(ACTIVE_AERO), control_settings.active_aero_enabled); static uint32_t lastt = 0; + static uint32_t lastt2 = 0; print_gate_faults(false); if (HAL_GetTick() - lastt > 100) { @@ -84,12 +85,31 @@ int main(void) { send_mc_fault_clear(); } - // printf("CONTROLS PARAMS:\r\n speeding_up_torque: %d\r\n speeding_up_speed: %d\r\n ws_thresh: %d\r\n launch_ctrl_slip_ratio: %d\r\n using_launch_ctrl: %d\r\n\r\n", - // lc_settings.speeding_up_torque, lc_settings.speeding_up_speed, lc_settings.ws_thresh, lc_settings.launch_ctrl_slip_ratio, lc_settings.using_launch_ctrl); - - lastt = HAL_GetTick(); } + if (HAL_GetTick() - lastt2 > 100) { + // printf("CONTROLS PARAMS:\r\n speeding_up_torque: %d\r\n speeding_up_speed: %d\r\n ws_thresh: %d\r\n launch_ctrl_slip_ratio: %d\r\n using_launch_ctrl: %d\r\n accel: %d\r\n wheel speed: %d\r\n", + // lc_settings.speeding_up_torque, lc_settings.speeding_up_speed, lc_settings.ws_thresh, lc_settings.launch_ctrl_slip_ratio, lc_settings.using_launch_ctrl, pedalbox_min(accel), get_front_wheel_speed()); + // switch (get_lc_state()) { + // case BEFORE: + // printf("BEFORE\r\n"); + // break; + // case SPEEDING_UP: + // printf("SPEEDING_UP\r\n"); + // break; + // case SPEED_CONTROLLER: + // printf("SPEED_CONTROLLER\r\n"); + // break; + // case ZERO_TORQUE: + // printf("SPEEDING_UP\r\n"); + // break; + // case DONE: + // printf("DONE\r\n"); + // break; + // } + // printf("\r\n"); + lastt2 = HAL_GetTick(); + } } } From 5e853b2c6b8fa5f8b8e92e61ed9df4ebf4af8347 Mon Sep 17 00:00:00 2001 From: Dani White Date: Wed, 12 Sep 2018 01:23:47 -0400 Subject: [PATCH 11/13] Remove first speed commands, up allowed slip ratio --- src/dashboard/src/page_manager.c | 2 +- src/vcu/src/controls.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/dashboard/src/page_manager.c b/src/dashboard/src/page_manager.c index 850f38e..7e8e18c 100644 --- a/src/dashboard/src/page_manager.c +++ b/src/dashboard/src/page_manager.c @@ -505,7 +505,7 @@ void draw_launch_control_page(page_manager_t *pm, NHD_US2066_OLED *oled) { oled_clearline(oled, 1); oled_set_pos(oled, 1, 0); - stats->lc_controls.launch_ctrl_slip_ratio = LOOPOVER(stats->lc_controls.launch_ctrl_slip_ratio, 101, 120); + stats->lc_controls.launch_ctrl_slip_ratio = LOOPOVER(stats->lc_controls.launch_ctrl_slip_ratio, 101, 130); stats->lc_controls.speeding_up_torque = LOOPOVER(stats->lc_controls.speeding_up_torque, 0, 2400); stats->lc_controls.speeding_up_speed = LOOPOVER(stats->lc_controls.speeding_up_speed, 0, 5000); stats->lc_controls.ws_thresh = LOOPOVER(stats->lc_controls.ws_thresh, 0, 2500); diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index 02e733c..22bd732 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -131,7 +131,7 @@ void execute_controls(void) { } switch (lc_state) { case BEFORE: - sendSpeedCmdMsg(0, 0); + sendTorqueCmdMsg(0); // Transition if (pedalbox_min(accel) > LC_ACCEL_BEGIN) { @@ -140,9 +140,10 @@ void execute_controls(void) { } break; case SPEEDING_UP: - // Command max(torque_command, lc_settings.speeding_up_torque) - if (torque_command < lc_settings.speeding_up_torque) sendSpeedCmdMsg(lc_settings.speeding_up_speed, torque_command); - else sendSpeedCmdMsg(lc_settings.speeding_up_speed, lc_settings.speeding_up_torque); + // Command max(torque_command, lc_settings.speeding_up_torque) + // if (torque_command < lc_settings.speeding_up_torque) sendSpeedCmdMsg(lc_settings.speeding_up_speed, torque_command); + // else sendSpeedCmdMsg(lc_settings.speeding_up_speed, lc_settings.speeding_up_torque); + sendTorqueCmdMsg(lc_settings.speeding_up_torque); // Transition if (front_wheel_speed > lc_settings.ws_thresh * 1000) { // From 528d33b19ea33767ffe10941f2d96830fd48bd6c Mon Sep 17 00:00:00 2001 From: Dani White Date: Sat, 22 Sep 2018 20:01:16 -0400 Subject: [PATCH 12/13] Up brake threshold --- src/vcu/inc/controls.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vcu/inc/controls.h b/src/vcu/inc/controls.h index 85215f8..fd3c3dd 100644 --- a/src/vcu/inc/controls.h +++ b/src/vcu/inc/controls.h @@ -20,7 +20,7 @@ #define LC_GR 347 // Gear ratio times 100 #define LC_ACCEL_BEGIN 950 // 95% #define LC_ACCEL_RELEASE 50 // 5% -#define LC_BRAKE_BEGIN 100 // We want a lower threshold than normal to make it super easy to exit LC +#define LC_BRAKE_BEGIN 150 // We want a lower threshold than normal to make it super easy to exit LC #define LC_BACKWARDS_CUTOFF 10 #define LC_DEFAULT_SLIP_RATIO 112 #define LC_DEFAULT_SPEEDING_UP_TORQUE 1000 From 903e520e0e54dfaaf9125357cc07ce264834eed9 Mon Sep 17 00:00:00 2001 From: Dani White Date: Sun, 23 Sep 2018 13:40:11 -0400 Subject: [PATCH 13/13] Constant speed, no backwards check --- src/vcu/src/controls.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/vcu/src/controls.c b/src/vcu/src/controls.c index 22bd732..ab9e67c 100644 --- a/src/vcu/src/controls.c +++ b/src/vcu/src/controls.c @@ -135,24 +135,12 @@ void execute_controls(void) { // Transition if (pedalbox_min(accel) > LC_ACCEL_BEGIN) { - lc_state = SPEEDING_UP; - printf("[LAUNCH CONTROL] SPEEDING UP STATE ENTERED\r\n"); - } - break; - case SPEEDING_UP: - // Command max(torque_command, lc_settings.speeding_up_torque) - // if (torque_command < lc_settings.speeding_up_torque) sendSpeedCmdMsg(lc_settings.speeding_up_speed, torque_command); - // else sendSpeedCmdMsg(lc_settings.speeding_up_speed, lc_settings.speeding_up_torque); - sendTorqueCmdMsg(lc_settings.speeding_up_torque); - - // Transition - if (front_wheel_speed > lc_settings.ws_thresh * 1000) { // lc_state = SPEED_CONTROLLER; printf("[LAUNCH CONTROL] SPEED CONTROLLER STATE ENTERED\r\n"); } break; case SPEED_CONTROLLER: - speed_command = get_launch_control_speed(front_wheel_speed); + speed_command = 500; // get_launch_control_speed(front_wheel_speed); sendSpeedCmdMsg(speed_command, torque_command); break; case ZERO_TORQUE: @@ -254,10 +242,10 @@ static bool any_lc_faults(void) { // that is indicative of driver braking intent. The other brake is for regen. printf("[LAUNCH CONTROL ERROR] Brake (%d) too high\r\n", pedalbox.brake_2); return true; - } else if (mc_readings.speed > LC_BACKWARDS_CUTOFF) { + } else /*else if (mc_readings.speed > LC_BACKWARDS_CUTOFF) {m printf("[LAUNCH CONTROL ERROR] MC reading (%d) is great than cutoff (%d)\r\n", mc_readings.speed, LC_BACKWARDS_CUTOFF); return true; - } + }*/ return false; }