Skip to content

Commit

Permalink
version 0.9 for Vadena tests on 8th April 2024
Browse files Browse the repository at this point in the history
  • Loading branch information
gmazzucchi committed Apr 7, 2024
1 parent 03eaf20 commit 94fcee0
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 48 deletions.
12 changes: 6 additions & 6 deletions Core/Inc/bms_lv_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

#define max(a, b) (a > b) ? a : b

#define MIN_CHARGER_CURRENT_THRESHOLD_mA 2000.0f
#define MIN_BATTERY_CURRENT_THRESHOLD_mA 50.0f
#define MIN_CHARGER_CURRENT_THRESHOLD_mA (2000.0f)
#define MIN_BATTERY_CURRENT_THRESHOLD_mA (50.0f)

// Number of cells present in the bms lv, the cell configuration is 6s4p
#define CELL_COUNT 6
Expand All @@ -19,11 +19,11 @@
#define MAX_CELL_VOLTAGE_V (4.2f)
#define MIN_CELL_VOLTAGE_V (2.8f)
#define MIN_BATTERY_VOLTAGE_mV ((MIN_CELL_VOLTAGE_V * 1000.0f) * 6.0f)
#define MAX_CELL_TEMP 60.0f
#define MIN_CELL_TEMP 0.0f
#define MAX_CELL_TEMP (60.0f)
#define MIN_CELL_TEMP (0.0f)

// Max current output allowed
#define MAX_CURRENT_mA 30000.0f
#define MAX_CURRENT_mA (18000.0f)
// Min difference threshold between V Relay and V Battery
#define MIN_RELAY_VOLTAGE_DIFF_THRESHOLD_mV \
2000.0f // diff v relay (that could be the charger one and bat out)
Expand All @@ -34,7 +34,7 @@
// adc voltage divider value
#define ADC_VOLTAGE_DIVIDER_MULTIPLIER 9.0f
// Threshold to check if an adc feedbacks is either logic high or logic low
#define HIGH_LEVEL_THRESHOLD 1000.f * ADC_VOLTAGE_DIVIDER_MULTIPLIER
#define HIGH_LEVEL_THRESHOLD (1000.f) * ADC_VOLTAGE_DIVIDER_MULTIPLIER

#define FLOAT_UNINITIALIZED_VALUE -1.0f
#define MCP23017_INTERRUPTS_ENABLED 1
Expand Down
33 changes: 19 additions & 14 deletions Core/Inc/can_manager_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,27 @@
#define CAN_MGR_TOTAL_CAN_RX_FIFOS 2
#define CAN_MGR_CAN_WAIT_ENABLED 1

#define N_MONITORED_MESSAGES 8
#define CAN_MESSAGES_MAPPING \
{ \
PRIMARY_SET_INVERTER_CONNECTION_STATUS_FRAME_ID, \
PRIMARY_SET_RADIATOR_SPEED_FRAME_ID, PRIMARY_SET_PUMPS_SPEED_FRAME_ID, \
PRIMARY_TS_STATUS_FRAME_ID, INVERTERS_INV_L_RCV_FRAME_ID, \
INVERTERS_INV_R_RCV_FRAME_ID, \
PRIMARY_LV_CAN_FLASH_REQ_STEERING_WHEEL_FRAME_ID, \
PRIMARY_ECU_STATUS_FRAME_ID \
}
enum {
PRIMARY_LV_SET_INVERTER_CONNECTION_STATUS_FRAME_ID,
PRIMARY_LV_SET_RADIATOR_SPEED_FRAME_ID,
PRIMARY_LV_SET_PUMPS_SPEED_FRAME_ID,
PRIMARY_HV_STATUS_FRAME_ID,
INVERTERS_INV_L_RCV_FRAME_ID,
INVERTERS_INV_R_RCV_FRAME_ID,
PRIMARY_LV_CAN_FLASH_REQ_STEERING_WHEEL_FRAME_ID,
PRIMARY_LV_CAN_FLASH_REQ_TLM_FRAME_ID,
PRIMARY_ECU_STATUS,
N_MONITORED_MESSAGES
};

#define CAN_MESSAGES_HANDLERS \
{ \
primary_set_inverter_connection_status_handler, \
primary_set_radiator_speed_handler, primary_set_pumps_speed_handler, \
primary_ts_status_handler, inverters_l_handler, inverters_r_handler, \
primary_flash_request_handler, primary_ecu_status_handler \
primary_lv_set_inverter_connection_status_handler, \
primary_lv_set_radiator_speed_handler, \
primary_lv_set_pumps_speed_handler, primary_hv_status_handler, \
inverters_inv_l_rcv_handler, inverters_inv_r_rcv_handler, \
primary_flash_request_handler, primary_flash_request_handler, \
primary_ecu_status_handler, \
}

#endif // CAN_MANAGER_CONFIG_H
16 changes: 11 additions & 5 deletions Core/Src/bms_fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ int set_discharge(int state);
int set_rfe_frg(int state);
void set_relay(uint8_t status);
int set_led(int led1, int led2, int led3);
void set_time_set(uint8_t status);
void radiator_init();
void dac_pump_init();
void dac_pump_set_status(primary_lv_pumps_speed_status mode);
Expand All @@ -59,6 +60,7 @@ void bms_lv_routine(void) {
uint8_t inverter_state = 0;
bool flash_requested;
extern primary_ecu_status_converted_t ecu_status;
extern primary_hv_status_converted_t hv_status;

// SEARCH FOR Your Code Here FOR CODE INSERTION POINTS!

Expand Down Expand Up @@ -156,7 +158,7 @@ state_t do_idle(state_data_t *data) {
/* Your Code Here */
bms_lv_routine();

if (ecu_status.status == primary_ecu_status_status_start_ts_precharge) {
if (hv_status.status == primary_hv_status_status_airn_close) {
next_state = STATE_TSON;
} else if (error_get_fatal()) {
next_state = STATE_ERROR;
Expand All @@ -183,7 +185,7 @@ state_t do_error(state_data_t *data) {

// cooling OFF
// discharge ON
set_discharge(1);
set_discharge(0);
// rfe/frg OFF
set_rfe_frg(0);
primary_lv_errors_send();
Expand Down Expand Up @@ -219,7 +221,10 @@ state_t do_tson(state_data_t *data) {
// car_status -> drive -> run
if (ecu_status.status == primary_ecu_status_status_enable_inv_drive) {
next_state = STATE_RUN;
} else if (ecu_status.status == primary_ecu_status_status_idle) {
} else if (hv_status.status != primary_hv_status_status_airn_close &&
hv_status.status != primary_hv_status_status_precharge &&
hv_status.status != primary_hv_status_status_airp_close &&
hv_status.status != primary_hv_status_status_ts_on) {
next_state = STATE_IDLE;
} else if (error_get_fatal()) {
next_state = STATE_ERROR;
Expand Down Expand Up @@ -278,8 +283,9 @@ state_t do_run(state_data_t *data) {
bms_lv_routine();

// until car_status == run
if (ecu_status.status != primary_ecu_status_status_drive &&
ecu_status.status != primary_ecu_status_status_enable_inv_drive) {
if (!(ecu_status.status == primary_ecu_status_status_drive ||
ecu_status.status == primary_ecu_status_status_enable_inv_drive) ||
hv_status.status != primary_hv_status_status_ts_on) {
next_state = STATE_IDLE;
} else if (error_get_fatal()) {
next_state = STATE_ERROR;
Expand Down
40 changes: 19 additions & 21 deletions Core/Src/can_messages.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,23 @@
#include "radiator.h"
#include "spi.h"
#include "stm32f4xx_hal.h"
#include <assert.h>
#include <math.h>
#include <string.h>

extern int bms_lv_primary_can_id;
extern can_mgr_msg_t can_messages_states[N_MONITORED_MESSAGES];
extern uint8_t can_messages_is_new[N_MONITORED_MESSAGES];
static float inv_temps[2] = {0};
primary_hv_status_converted_t ts_status_converted;
primary_hv_status_converted_t hv_status;
primary_ecu_status_converted_t ecu_status;
// primary_set_inverter_connection_status_converted_t set_inv_connection_status
// = {
// 0};

int primary_set_inverter_connection_status_handler(can_mgr_msg_t *msg);
int primary_set_radiator_speed_handler(can_mgr_msg_t *msg);
int primary_set_pumps_speed_handler(can_mgr_msg_t *msg);
int primary_ts_status_handler(can_mgr_msg_t *msg);
int inverters_l_handler(can_mgr_msg_t *msg);
int inverters_r_handler(can_mgr_msg_t *msg);

int primary_lv_set_inverter_connection_status_handler(can_mgr_msg_t *msg);
int primary_lv_set_radiator_speed_handler(can_mgr_msg_t *msg);
int primary_lv_set_pumps_speed_handler(can_mgr_msg_t *msg);
int primary_hv_status_handler(can_mgr_msg_t *msg);
int inverters_inv_l_rcv_handler(can_mgr_msg_t *msg);
int inverters_inv_r_rcv_handler(can_mgr_msg_t *msg);
int primary_flash_request_handler(can_mgr_msg_t *msg);
int primary_ecu_status_handler(can_mgr_msg_t *msg);

Expand Down Expand Up @@ -70,10 +68,11 @@ int can_mgr_from_id_to_index(int can_id, int msg_id) {
case INVERTERS_INV_R_RCV_FRAME_ID:
return 5;
case PRIMARY_LV_CAN_FLASH_REQ_STEERING_WHEEL_FRAME_ID:
case PRIMARY_LV_CAN_FLASH_REQ_TLM_FRAME_ID:
return 6;
case PRIMARY_ECU_STATUS_FRAME_ID:
case PRIMARY_LV_CAN_FLASH_REQ_TLM_FRAME_ID:
return 7;
case PRIMARY_ECU_STATUS_FRAME_ID:
return 8;
default:
return -1;
}
Expand Down Expand Up @@ -141,7 +140,7 @@ int can_routine(void) {
return 0;
}

int primary_set_inverter_connection_status_handler(can_mgr_msg_t *msg) {
int primary_lv_set_inverter_connection_status_handler(can_mgr_msg_t *msg) {
// primary_set_inverter_connection_status_t set_inv_connection_raw;
// primary_set_inverter_connection_status_unpack(
// &set_inv_connection_raw, msg->data,
Expand All @@ -151,7 +150,7 @@ int primary_set_inverter_connection_status_handler(can_mgr_msg_t *msg) {
return 0;
}

int primary_set_radiator_speed_handler(can_mgr_msg_t *msg) {
int primary_lv_set_radiator_speed_handler(can_mgr_msg_t *msg) {
primary_lv_set_radiator_speed_t radiator_raw;
primary_lv_set_radiator_speed_converted_t radiator_converted;
primary_lv_set_radiator_speed_unpack(&radiator_raw, msg->data,
Expand All @@ -172,7 +171,7 @@ int primary_set_radiator_speed_handler(can_mgr_msg_t *msg) {
return 0;
}

int primary_set_pumps_speed_handler(can_mgr_msg_t *msg) {
int primary_lv_set_pumps_speed_handler(can_mgr_msg_t *msg) {
primary_lv_set_pumps_speed_t pumps_raw;
primary_lv_set_pumps_speed_converted_t pumps_converted;
primary_lv_set_pumps_speed_unpack(&pumps_raw, msg->data,
Expand All @@ -190,16 +189,15 @@ int primary_set_pumps_speed_handler(can_mgr_msg_t *msg) {
return 0;
}

int primary_ts_status_handler(can_mgr_msg_t *msg) {
int primary_hv_status_handler(can_mgr_msg_t *msg) {
primary_hv_status_t ts_status_raw;
primary_hv_status_unpack(&ts_status_raw, msg->data,
PRIMARY_HV_STATUS_BYTE_SIZE);
primary_hv_status_raw_to_conversion_struct(&ts_status_converted,
&ts_status_raw);
primary_hv_status_raw_to_conversion_struct(&hv_status, &ts_status_raw);
return 0;
}

int inverters_l_handler(can_mgr_msg_t *msg) {
int inverters_inv_l_rcv_handler(can_mgr_msg_t *msg) {
inverters_inv_l_rcv_t inv_raw;
inverters_inv_l_rcv_converted_t inv_converted;
inverters_inv_l_rcv_unpack(&inv_raw, msg->data,
Expand All @@ -222,7 +220,7 @@ int inverters_l_handler(can_mgr_msg_t *msg) {
return 0;
}

int inverters_r_handler(can_mgr_msg_t *msg) {
int inverters_inv_r_rcv_handler(can_mgr_msg_t *msg) {
inverters_inv_r_rcv_t inv_raw;
inverters_inv_r_rcv_converted_t inv_converted;
inverters_inv_r_rcv_unpack(&inv_raw, msg->data,
Expand Down
5 changes: 4 additions & 1 deletion Core/Src/lv_error_handler.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
}
}

bool error_get_fatal(void) { return fatal_error > 0; }
bool error_get_fatal(void) {
// dummy comment
return error_get_expired() > 0;
}
4 changes: 3 additions & 1 deletion Core/Src/stm32f4xx_it.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,9 @@ void NMI_Handler(void) {
*/
void HardFault_Handler(void) {
/* USER CODE BEGIN HardFault_IRQn 0 */

set_discharge(0);
set_rfe_frg(0);
set_relay(0);
/* USER CODE END HardFault_IRQn 0 */
while (1) {
/* USER CODE BEGIN W1_HardFault_IRQn 0 */
Expand Down

0 comments on commit 94fcee0

Please sign in to comment.