Skip to content

Commit

Permalink
fixes for Vadena 8th April
Browse files Browse the repository at this point in the history
  • Loading branch information
gmazzucchi committed Apr 11, 2024
1 parent ecf6060 commit a6989e0
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 36 deletions.
2 changes: 1 addition & 1 deletion Core/Lib/can
19 changes: 15 additions & 4 deletions Core/UI/steering/can_messages.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,25 @@ void send_steer_status(lv_timer_t *main_timer) {
}

void send_bal(bool on) {
primary_hv_set_balancing_status_steering_wheel_converted_t converted = {
{
primary_hv_set_balancing_status_steering_wheel_converted_t converted = {
.set_balancing_status =
on ? primary_hv_set_balancing_status_steering_wheel_set_balancing_status_on
: primary_hv_set_balancing_status_steering_wheel_set_balancing_status_off,
.balancing_threshold = 50};
STEER_CAN_PACK(primary, PRIMARY, hv_set_balancing_status_steering_wheel,
HV_SET_BALANCING_STATUS_STEERING_WHEEL)
can_send(&msg, true);
STEER_CAN_PACK(primary, PRIMARY, hv_set_balancing_status_steering_wheel, HV_SET_BALANCING_STATUS_STEERING_WHEEL)
can_send(&msg, true);
}

{
primary_hv_set_balancing_status_handcart_converted_t converted = {
.set_balancing_status =
on ? primary_hv_set_balancing_status_handcart_set_balancing_status_on
: primary_hv_set_balancing_status_handcart_set_balancing_status_off,
.balancing_threshold = 50};
STEER_CAN_PACK(primary, PRIMARY, hv_set_balancing_status_handcart, HV_SET_BALANCING_STATUS_HANDCART)
can_send(&msg, true);
}
}

void handle_primary(can_message_t *msg) {
Expand Down
29 changes: 20 additions & 9 deletions Core/UI/steering/controls.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ void manettino_right_actions(int dsteps) {
send_pork_fans_status((float)pork_fans_status_last_state / 100.0f);
break;
case TAB_LV: {
steering_wheel_lv_radiator_speed_state = STEERING_WHEEL_COOLING_STATUS_SET;
float new_radspeed_val = steering_wheel_state_radiator_speed.radiator_speed + ((float)dsteps / 10.0f);
new_radspeed_val = fminf(new_radspeed_val, SET_RADIATORS_MAX);
new_radspeed_val = fmaxf(new_radspeed_val, SET_RADIATORS_MIN);
Expand Down Expand Up @@ -184,6 +185,7 @@ void manettino_left_actions(int dsteps) {
// wheel map (see images)
break;
case TAB_LV: {
steering_wheel_lv_pumps_speed_state = STEERING_WHEEL_COOLING_STATUS_SET;
float new_pumps_speed_val = steering_wheel_state_pumps_speed.pumps_speed + ((float)dsteps / 10.0f);
new_pumps_speed_val = fminf(new_pumps_speed_val, SET_PUMP_SPEED_MAX);
new_pumps_speed_val = fmaxf(new_pumps_speed_val, SET_PUMP_SPEED_MIN);
Expand Down Expand Up @@ -227,15 +229,13 @@ void manettino_send_radiators_speed() {
}

void manettino_set_radiators_speed() {
steering_wheel_lv_radiator_speed_state = STEERING_WHEEL_COOLING_STATUS_SET;
steering_wheel_lv_radiators_speed_sent_timestamp = get_current_time_ms();
steering_wheel_state_radiator_speed.status = primary_lv_radiator_speed_status_manual;

if (steering_wheel_state_radiator_speed.radiator_speed < 0.0f) {
steering_wheel_state_radiator_speed.radiator_speed = 0.0f;
steering_wheel_state_radiator_speed.status = primary_lv_radiator_speed_status_auto;
snprintf(sprintf_buffer_controls, BUFSIZ, "AUTO");
snprintf(sprintf_buffer_controls, BUFSIZ, "zero");
} else {
steering_wheel_state_radiator_speed.status = primary_lv_radiator_speed_status_manual;
snprintf(sprintf_buffer_controls, BUFSIZ, "%0.1f", steering_wheel_state_radiator_speed.radiator_speed);
}
set_tab_lv_label_text(sprintf_buffer_controls, tab_lv_lb_radiators_local);
Expand All @@ -251,21 +251,30 @@ void manettino_send_pumps_speed() {
}

void manettino_set_pumps_speed() {
steering_wheel_lv_pumps_speed_state = STEERING_WHEEL_COOLING_STATUS_SET;
steering_wheel_lv_pumps_speed_sent_timestamp = get_current_time_ms();
steering_wheel_state_pumps_speed.status = primary_lv_pumps_speed_status_manual;

if (steering_wheel_state_pumps_speed.pumps_speed < 0.0f) {
steering_wheel_state_pumps_speed.pumps_speed = 0.0f;
steering_wheel_state_pumps_speed.status = primary_lv_pumps_speed_status_auto;
snprintf(sprintf_buffer_controls, BUFSIZ, "AUTO");
snprintf(sprintf_buffer_controls, BUFSIZ, "zero");
} else {
steering_wheel_state_pumps_speed.status = primary_lv_pumps_speed_status_manual;
snprintf(sprintf_buffer_controls, BUFSIZ, "%d%%", (int)(steering_wheel_state_pumps_speed.pumps_speed * 100.f));
snprintf(sprintf_buffer_controls, BUFSIZ, "%0.1f", steering_wheel_state_pumps_speed.pumps_speed);
}
set_tab_lv_label_text(sprintf_buffer_controls, tab_lv_lb_pumps_local);
manettino_send_pumps_speed();
}

void set_cooling_auto_mode() {
steering_wheel_state_pumps_speed.status = primary_lv_pumps_speed_status_auto;
steering_wheel_state_pumps_speed.pumps_speed = 0.0f;

steering_wheel_state_radiator_speed.status = primary_lv_radiator_speed_status_auto;
steering_wheel_state_radiator_speed.radiator_speed = 0.0f;

manettino_send_pumps_speed();
manettino_send_radiators_speed();
}

void buttons_pressed_actions(uint8_t button) {
switch (button) {
case PADDLE_TOP_RIGHT: {
Expand Down Expand Up @@ -360,6 +369,8 @@ void buttons_pressed_actions(uint8_t button) {
default:
break;
}
} else if (current_racing_tab == TAB_LV) {
set_cooling_auto_mode();
}
}
break;
Expand Down
8 changes: 4 additions & 4 deletions Core/UI/steering/controls.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
#define TORQUE_VECTORING_MIN (0)
#define SLIP_CONTROL_MAX (100)
#define SLIP_CONTROL_MIN (0)
#define SET_PUMP_SPEED_MAX (100)
#define SET_PUMP_SPEED_MIN (-10)
#define SET_RADIATORS_MAX (100)
#define SET_RADIATORS_MIN (-10)
#define SET_PUMP_SPEED_MAX (1.0f)
#define SET_PUMP_SPEED_MIN (-0.2f)
#define SET_RADIATORS_MAX (1.0f)
#define SET_RADIATORS_MIN (-0.2f)
#define PORK_HIGH_FANS_SPEED (100)
#define PORK_LOW_FANS_SPEED (-10)
#define POWER_MAP_MAX (100)
Expand Down
44 changes: 27 additions & 17 deletions Core/UI/steering/steering.c
Original file line number Diff line number Diff line change
Expand Up @@ -376,13 +376,17 @@ void lv_pumps_speed_update_all_graphics(primary_lv_pumps_speed_converted_t* msg)
}
lv_set_pumps_speed_bar((int32_t) (msg->pumps_speed * 100.0f));
}

#define ALMOST_ERROR (0.05f)
#define IS_ALMOST_EQUAL(val1, val2) ((fabs(val1 - val2) < ALMOST_ERROR))
/*
- valori diversi - timeout passato -> errore, aggiorno e cambio stato (1)
- valori diversi - timeout non passato -> aggiorno solo i valori del porchetto (2)
- valori uguali - timeout passato -> aggiorno e cambio stato (3)
- valori uguali - timeout non passato -> aggiorno e cambio stato (3)
*/
void lv_pumps_speed_update() {
return;
GET_LAST_STATE(primary, lv_pumps_speed, PRIMARY, LV_PUMPS_SPEED);
float actual_speed = primary_lv_pumps_speed_last_state->pumps_speed;
float actual_status = primary_lv_pumps_speed_last_state->status;
Expand All @@ -396,8 +400,8 @@ void lv_pumps_speed_update() {
break;
}
case STEERING_WHEEL_COOLING_STATUS_SET: {
if ((steering_wheel_state_pumps_speed.pumps_speed != actual_speed) &&
(steering_wheel_state_pumps_speed.status != actual_status) &&
if ((!IS_ALMOST_EQUAL (steering_wheel_state_pumps_speed.pumps_speed, actual_speed)) &&
!IS_ALMOST_EQUAL(steering_wheel_state_pumps_speed.status, actual_status) &&
((get_current_time_ms() - steering_wheel_lv_pumps_speed_sent_timestamp) > COOLING_STATE_SYNC_TIMEOUT)) {

display_notification("Porket does not respond on pumps settings", 500);
Expand All @@ -408,9 +412,9 @@ void lv_pumps_speed_update() {
} else if ((steering_wheel_state_pumps_speed.pumps_speed != actual_speed) &&
(steering_wheel_state_pumps_speed.status != actual_status)){

snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%0.1f", actual_speed);
set_tab_lv_label_text(snprintf_buffer, tab_lv_lb_pumps_actual);
lv_set_pumps_speed_bar((int32_t) (actual_speed * 100.0f));
// snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%0.1f", actual_speed);
// set_tab_lv_label_text(snprintf_buffer, tab_lv_lb_pumps_actual);
// lv_set_pumps_speed_bar((int32_t) (actual_speed * 100.0f));
} else {
lv_pumps_speed_update_all_graphics(&steering_wheel_state_pumps_speed);
steering_wheel_lv_pumps_speed_state = STEERING_WHEEL_COOLING_STATUS_SYNC;
Expand All @@ -434,11 +438,11 @@ void lv_radiator_speed_update_all_graphics(primary_lv_radiator_speed_converted_t
}

void lv_radiator_speed_update() {
return;
GET_LAST_STATE(primary, lv_radiator_speed, PRIMARY, LV_RADIATOR_SPEED);
float actual_speed = primary_lv_radiator_speed_last_state->radiator_speed;
float actual_status = primary_lv_radiator_speed_last_state->status;


switch (steering_wheel_lv_radiator_speed_state) {
case STEERING_WHEEL_COOLING_STATUS_SYNC: {
steering_wheel_state_radiator_speed.radiator_speed = actual_speed;
Expand All @@ -447,8 +451,8 @@ void lv_radiator_speed_update() {
break;
}
case STEERING_WHEEL_COOLING_STATUS_SET: {
if ((steering_wheel_state_radiator_speed.radiator_speed != actual_speed) &&
(steering_wheel_state_radiator_speed.status != actual_status) &&
if (!IS_ALMOST_EQUAL(steering_wheel_state_radiator_speed.radiator_speed, actual_speed) &&
!IS_ALMOST_EQUAL(steering_wheel_state_radiator_speed.status, actual_status) &&
((get_current_time_ms() - steering_wheel_lv_radiators_speed_sent_timestamp) > COOLING_STATE_SYNC_TIMEOUT)) {

display_notification("Porket does not respond on radiator settings", 500);
Expand All @@ -459,9 +463,9 @@ void lv_radiator_speed_update() {
} else if ((steering_wheel_state_radiator_speed.radiator_speed != actual_speed) &&
(steering_wheel_state_radiator_speed.status != actual_status)){

snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%0.1f", actual_speed);
set_tab_lv_label_text(snprintf_buffer, tab_lv_lb_radiators_actual);
lv_set_radiators_speed_bar((int32_t) (actual_speed * 100.0f));
// snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%0.1f", actual_speed);
// set_tab_lv_label_text(snprintf_buffer, tab_lv_lb_radiators_actual);
// lv_set_radiators_speed_bar((int32_t) (actual_speed * 100.0f));
} else {
lv_radiator_speed_update_all_graphics(&steering_wheel_state_radiator_speed);
steering_wheel_lv_radiator_speed_state = STEERING_WHEEL_COOLING_STATUS_SYNC;
Expand Down Expand Up @@ -701,11 +705,19 @@ float l_igbt_temp = INVERTER_MESSAGE_UNINITIALIZED;
float r_motor_temp = INVERTER_MESSAGE_UNINITIALIZED;
float r_igbt_temp = INVERTER_MESSAGE_UNINITIALIZED;


float IGBT_TEMP_COEFFICIENT[6] = { (float) 3.58282057e-18, (float) -4.14165530e-13, (float) 1.90916947e-08, (float) -4.38539758e-04, (float) 5.02717412e+00, (float) -2.30219791e+04 };

float convert_t_motor(float val) { return (val - 9393.9f) / 55.1f; }
float convert_t_igbt(float val) {
return (powf((val), 5) * IGBT_TEMP_COEFFICIENT[0]) + (powf((val), 4) * IGBT_TEMP_COEFFICIENT[1]) + (powf((val), 3) * IGBT_TEMP_COEFFICIENT[2]) + (powf((val), 2) * IGBT_TEMP_COEFFICIENT[3]) + (val * IGBT_TEMP_COEFFICIENT[4]) + IGBT_TEMP_COEFFICIENT[5];
}

void inv_l_rcv_update(void) {
GET_LAST_STATE(inverters, inv_l_rcv, INVERTERS, INV_L_RCV);
if (inverters_inv_l_rcv_last_state->rcv_mux ==
INVERTERS_INV_L_RCV_RCV_MUX_ID_49_T_MOTOR_CHOICE) {
l_motor_temp = (inverters_inv_l_rcv_last_state->t_motor - 9393.9f) / 55.1f;
l_motor_temp = convert_t_motor(inverters_inv_l_rcv_last_state->t_motor);
snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%.0f", l_motor_temp);
set_tab_racing_label_text(snprintf_buffer, tab_rac_mot_idx);

Expand All @@ -719,8 +731,7 @@ void inv_l_rcv_update(void) {

if (inverters_inv_l_rcv_last_state->rcv_mux ==
INVERTERS_INV_L_RCV_RCV_MUX_ID_4A_T_IGBT_CHOICE) {
l_igbt_temp =
INVERTER_TEMP_CONVERSION(inverters_inv_l_rcv_last_state->t_igbt);
l_igbt_temp = convert_t_igbt(inverters_inv_l_rcv_last_state->t_igbt);
snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%.0f", l_igbt_temp);
set_tab_sensors_label_text(snprintf_buffer,
tab_sensors_lb_left_inverter_temp);
Expand All @@ -737,16 +748,15 @@ void inv_r_rcv_update() {
GET_LAST_STATE(inverters, inv_r_rcv, INVERTERS, INV_R_RCV);
if (inverters_inv_r_rcv_last_state->rcv_mux ==
INVERTERS_INV_R_RCV_RCV_MUX_ID_49_T_MOTOR_CHOICE) {
r_motor_temp = (inverters_inv_r_rcv_last_state->t_motor - 9393.9f) / 55.1f;
r_motor_temp = convert_t_motor(inverters_inv_r_rcv_last_state->t_motor);
snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%.0f", r_motor_temp);
set_tab_sensors_label_text(snprintf_buffer,
tab_sensors_lb_right_motor_temp);
}

if (inverters_inv_r_rcv_last_state->rcv_mux ==
INVERTERS_INV_R_RCV_RCV_MUX_ID_4A_T_IGBT_CHOICE) {
r_igbt_temp =
INVERTER_TEMP_CONVERSION(inverters_inv_r_rcv_last_state->t_igbt);
r_igbt_temp = convert_t_igbt(inverters_inv_r_rcv_last_state->t_igbt);
snprintf(snprintf_buffer, SNPRINTF_BUFFER_SIZE, "%.0f", r_igbt_temp);
set_tab_sensors_label_text(snprintf_buffer,
tab_sensors_lb_right_inverter_temp);
Expand Down
2 changes: 1 addition & 1 deletion Core/UI/steering/steering_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ typedef enum {
/***
* Cooling
*/
#define COOLING_STATE_SYNC_TIMEOUT 500 // in ms
#define COOLING_STATE_SYNC_TIMEOUT 1000 // in ms

typedef enum {
STEERING_WHEEL_COOLING_STATUS_SYNC,
Expand Down

0 comments on commit a6989e0

Please sign in to comment.