diff --git a/Core/Inc/u_efuses.h b/Core/Inc/u_efuses.h index ce60d97c..871e4cf9 100644 --- a/Core/Inc/u_efuses.h +++ b/Core/Inc/u_efuses.h @@ -4,6 +4,18 @@ #include #include #include "main.h" +#include "can_messages_tx.h" +#include "serial.h" +#include "u_dti.h" + +/* Tempeature constants to control */ + +#define PUMP1_UPPER_MOTOR_TEMP 45 +#define PUMP1_LOWER_MOTOR_TEMP 35 +#define PUMP2_UPPER_CONTROLLER_TEMP 45 +#define PUMP2_LOWER_CONTROLLER_TEMP 35 +#define RADFAN_UPPER_MOTOR_TEMP 65 +#define RADFAN_LOWER_MOTOR_TEMP 35 typedef enum { EFUSE_DASHBOARD, @@ -31,8 +43,41 @@ typedef struct { } efuse_data_t; /* API */ -efuse_data_t efuse_getData(void); // Returns an instance of efuse_data_t with all current eFuse data. void efuse_enable(efuse_t efuse); // Enables an eFuse. void efuse_disable(efuse_t efuse); // Disables an eFuse. + +/** + * @brief Enables eFuses which should be on by default. + * + * The following eFuses should be enabled by default: + * - `EFUSE_DASHBOARD` + * - `EFUSE_LV` + * - `EFUSE_BATTBOX` + * - `EFUSE_MC` + * - `EFUSE_FANBATT` ?? (We may need to do this conditionally based on pack temp) + */ +void efuse_init(void); + +/** + * @brief Updates the states of eFuses. + * + * The following eFuses are controlled based on temperature: + * - `EFUSE_PUMP1` + * - Turned on if the motor temperature exceeds `PUMP1_UPPER_MOTOR_TEMP`. + * - Turned off if the motor temperature falls below `PUMP1_LOWER_MOTOR_TEMP`. + * - `EFUSE_PUMP2` + * - Turned on if the motor controller (MC) temperature exceeds `PUMP2_UPPER_CONTROLLER_TEMP`. + * - Turned off if the MC temperature falls below `PUMP2_LOWER_CONTROLLER_TEMP`. + * - `EFUSE_RADFAN` + * - Turned on if the motor temperature exceeds `RADFAN_UPPER_MOTOR_TEMP`. + * - Turned off if the motor temperature falls below `RADFAN_LOWER_MOTOR_TEMP`. + * + * Also, some eFuses should be updated according to the CAN message. + */ +void efuse_update(void); + +void efuse_send_to_dashboard(void); +void efuse_send_to_serial(void); + #endif /* u_efuses.h */ \ No newline at end of file diff --git a/Core/Src/u_efuses.c b/Core/Src/u_efuses.c index 5e310374..63683f1a 100644 --- a/Core/Src/u_efuses.c +++ b/Core/Src/u_efuses.c @@ -37,7 +37,7 @@ static const _metadata efuses[] = { /* Returns an instance of efuse_data_t with all current eFuse data. */ #define V_REF 3.3f // V_(REF) = 3V3 -efuse_data_t efuse_getData(void) { +static efuse_data_t efuse_getData(void) { raw_efuse_adc_t adc = adc_getEFuseData(); /* Loop through each eFuse and calculate the necessary values. */ @@ -62,12 +62,158 @@ efuse_data_t efuse_getData(void) { return data; } -/* Enables an eFuse. */ void efuse_enable(efuse_t efuse) { HAL_GPIO_WritePin(efuses[efuse].en_port, efuses[efuse].en_pin, GPIO_PIN_SET); } -/* Disables an eFuse. */ void efuse_disable(efuse_t efuse) { HAL_GPIO_WritePin(efuses[efuse].en_port, efuses[efuse].en_pin, GPIO_PIN_RESET); -} \ No newline at end of file +} + +void efuse_init(void) { + efuse_enable(EFUSE_DASHBOARD); + efuse_enable(EFUSE_LV); + efuse_enable(EFUSE_BATTBOX); + efuse_enable(EFUSE_MC); + efuse_enable(EFUSE_FANBATT); +} + +void efuse_update(void) { + efuse_data_t eFuse_data = efuse_getData(); + + uint16_t motor_temp = dti_get_motor_temp(); + uint16_t controller_temp = dti_get_controller_temp(); + + if (motor_temp > PUMP1_UPPER_MOTOR_TEMP) { + if (eFuse_data.enabled[EFUSE_PUMP1] == false) { + efuse_enable(EFUSE_PUMP1); + } + } + if (motor_temp < PUMP1_LOWER_MOTOR_TEMP) { + if (eFuse_data.enabled[EFUSE_PUMP1] == true) { + efuse_disable(EFUSE_PUMP1); + } + } + + if (controller_temp > PUMP2_UPPER_CONTROLLER_TEMP) { + if (eFuse_data.enabled[EFUSE_PUMP2] == false) { + efuse_enable(EFUSE_PUMP2); + } + } + if (controller_temp < PUMP2_LOWER_CONTROLLER_TEMP) { + if (eFuse_data.enabled[EFUSE_PUMP2] == true) { + efuse_disable(EFUSE_PUMP2); + } + } + + if (motor_temp > RADFAN_UPPER_MOTOR_TEMP) { + if (eFuse_data.enabled[EFUSE_RADFAN] == false) { + efuse_enable(EFUSE_RADFAN); + } + } + if (motor_temp < RADFAN_LOWER_MOTOR_TEMP) { + if (eFuse_data.enabled[EFUSE_RADFAN] == true) { + efuse_disable(EFUSE_RADFAN); + } + } +} + +void efuse_send_to_dashboard(void) { + efuse_data_t data = efuse_getData(); + + send_dashboard_efuse( + data.raw[EFUSE_DASHBOARD], + data.voltage[EFUSE_DASHBOARD], + data.current[EFUSE_DASHBOARD], + data.faulted[EFUSE_DASHBOARD], + data.enabled[EFUSE_DASHBOARD] + ); + + send_brake_efuse( + data.raw[EFUSE_BRAKE], + data.voltage[EFUSE_BRAKE], + data.current[EFUSE_BRAKE], + data.faulted[EFUSE_BRAKE], + data.enabled[EFUSE_BRAKE] + ); + + send_shutdown_efuse( + data.raw[EFUSE_SHUTDOWN], + data.voltage[EFUSE_SHUTDOWN], + data.current[EFUSE_SHUTDOWN], + data.faulted[EFUSE_SHUTDOWN], + data.enabled[EFUSE_SHUTDOWN] + ); + + send_lv_efuse( + data.raw[EFUSE_LV], + data.voltage[EFUSE_LV], + data.current[EFUSE_LV], + data.faulted[EFUSE_LV], + data.enabled[EFUSE_LV] + ); + + send_radfan_efuse( + data.raw[EFUSE_RADFAN], + data.voltage[EFUSE_RADFAN], + data.current[EFUSE_RADFAN], + data.faulted[EFUSE_RADFAN], + data.enabled[EFUSE_RADFAN] + ); + + send_fanbatt_efuse( + data.raw[EFUSE_FANBATT], + data.voltage[EFUSE_FANBATT], + data.current[EFUSE_FANBATT], + data.faulted[EFUSE_FANBATT], + data.enabled[EFUSE_FANBATT] + ); + + send_pumpone_efuse( + data.raw[EFUSE_PUMP1], + data.voltage[EFUSE_PUMP1], + data.current[EFUSE_PUMP1], + data.faulted[EFUSE_PUMP1], + data.enabled[EFUSE_PUMP1] + ); + + send_pumptwo_efuse( + data.raw[EFUSE_PUMP2], + data.voltage[EFUSE_PUMP2], + data.current[EFUSE_PUMP2], + data.faulted[EFUSE_PUMP2], + data.enabled[EFUSE_PUMP2] + ); + + send_battbox_efuse( + data.raw[EFUSE_BATTBOX], + data.voltage[EFUSE_BATTBOX], + data.current[EFUSE_BATTBOX], + data.faulted[EFUSE_BATTBOX], + data.enabled[EFUSE_BATTBOX] + ); + + send_mc_efuse( + data.raw[EFUSE_MC], + data.voltage[EFUSE_MC], + data.current[EFUSE_MC], + data.faulted[EFUSE_MC], + data.enabled[EFUSE_MC] + ); +} + +void efuse_send_to_serial(void) { + efuse_data_t data = efuse_getData(); + + serial_monitor("lv_efuse", "raw", "%d", data.raw[EFUSE_LV]); + serial_monitor("lv_efuse", "voltage", "%f", data.voltage[EFUSE_LV]); + serial_monitor("lv_efuse", "current", "%f", data.current[EFUSE_LV]); + serial_monitor("lv_efuse", "faulted?", "%d", data.faulted[EFUSE_LV]); + serial_monitor("lv_efuse", "enabled?", "%d", data.enabled[EFUSE_LV]); + + serial_monitor("radfan_efuse", "raw", "%d", data.raw[EFUSE_RADFAN]); + serial_monitor("radfan_efuse", "voltage", "%f", data.voltage[EFUSE_RADFAN]); + serial_monitor("radfan_efuse", "current", "%f", data.current[EFUSE_RADFAN]); + serial_monitor("radfan_efuse", "faulted?", "%d", data.faulted[EFUSE_RADFAN]); + serial_monitor("radfan_efuse", "enabled?", "%d", data.enabled[EFUSE_RADFAN]); +} diff --git a/Core/Src/u_threads.c b/Core/Src/u_threads.c index a9271d59..dc63254d 100644 --- a/Core/Src/u_threads.c +++ b/Core/Src/u_threads.c @@ -440,133 +440,17 @@ void vEFuses(ULONG thread_input) { bool faulted; bool enabled; } efuse_message_t; + + efuse_init(); while(1) { PRINTLN_INFO("thread ran"); - /* Get data. */ - efuse_data_t data = efuse_getData(); + efuse_update(); - /* Send dashboard eFuse message. */ - send_dashboard_efuse( - data.raw[EFUSE_DASHBOARD], - data.voltage[EFUSE_DASHBOARD], - data.current[EFUSE_DASHBOARD], - data.faulted[EFUSE_DASHBOARD], - data.enabled[EFUSE_DASHBOARD] - ); - // serial_monitor("dashboard_efuse", "raw", "%d", data.raw[EFUSE_DASHBOARD]); - // serial_monitor("dashboard_efuse", "voltage", "%f", data.voltage[EFUSE_DASHBOARD]); - // serial_monitor("dashboard_efuse", "current", "%f", data.current[EFUSE_DASHBOARD]); - // serial_monitor("dashboard_efuse", "faulted?", "%d", data.faulted[EFUSE_DASHBOARD]); - // serial_monitor("dashboard_efuse", "enabled?", "%d", data.enabled[EFUSE_DASHBOARD]); - efuse_enable(EFUSE_DASHBOARD); - - - /* Send brake eFuse message. */ - send_brake_efuse( - data.raw[EFUSE_BRAKE], - data.voltage[EFUSE_BRAKE], - data.current[EFUSE_BRAKE], - data.faulted[EFUSE_BRAKE], - data.enabled[EFUSE_BRAKE] - ); - // serial_monitor("brake_efuse", "raw", "%d", data.raw[EFUSE_BRAKE]); - // serial_monitor("brake_efuse", "voltage", "%f", data.voltage[EFUSE_BRAKE]); - // serial_monitor("brake_efuse", "current", "%f", data.current[EFUSE_BRAKE]); - // serial_monitor("brake_efuse", "faulted?", "%d", data.faulted[EFUSE_BRAKE]); - // serial_monitor("brake_efuse", "enabled?", "%d", data.enabled[EFUSE_BRAKE]); - - /* Send shutdown eFuse message. */ - send_shutdown_efuse( - data.raw[EFUSE_SHUTDOWN], - data.voltage[EFUSE_SHUTDOWN], - data.current[EFUSE_SHUTDOWN], - data.faulted[EFUSE_SHUTDOWN], - data.enabled[EFUSE_SHUTDOWN] - ); - // serial_monitor("shutdown_efuse", "raw", "%d", data.raw[EFUSE_SHUTDOWN]); - // serial_monitor("shutdown_efuse", "voltage", "%f", data.voltage[EFUSE_SHUTDOWN]); - // serial_monitor("shutdown_efuse", "current", "%f", data.current[EFUSE_SHUTDOWN]); - // serial_monitor("shutdown_efuse", "faulted?", "%d", data.faulted[EFUSE_SHUTDOWN]); - // serial_monitor("shutdown_efuse", "enabled?", "%d", data.enabled[EFUSE_SHUTDOWN]); - - /* Send LV eFuse message. */ - send_lv_efuse( - data.raw[EFUSE_LV], - data.voltage[EFUSE_LV], - data.current[EFUSE_LV], - data.faulted[EFUSE_LV], - data.enabled[EFUSE_LV] - ); - efuse_enable(EFUSE_LV); - serial_monitor("lv_efuse", "raw", "%d", data.raw[EFUSE_LV]); - serial_monitor("lv_efuse", "voltage", "%f", data.voltage[EFUSE_LV]); - serial_monitor("lv_efuse", "current", "%f", data.current[EFUSE_LV]); - serial_monitor("lv_efuse", "faulted?", "%d", data.faulted[EFUSE_LV]); - serial_monitor("lv_efuse", "enabled?", "%d", data.enabled[EFUSE_LV]); - - - /* Send radfan eFuse message. */ - send_radfan_efuse( - data.raw[EFUSE_RADFAN], - data.voltage[EFUSE_RADFAN], - data.current[EFUSE_RADFAN], - data.faulted[EFUSE_RADFAN], - data.enabled[EFUSE_RADFAN] - ); - efuse_enable(EFUSE_RADFAN); - serial_monitor("radfan_efuse", "raw", "%d", data.raw[EFUSE_RADFAN]); - serial_monitor("radfan_efuse", "voltage", "%f", data.voltage[EFUSE_RADFAN]); - serial_monitor("radfan_efuse", "current", "%f", data.current[EFUSE_RADFAN]); - serial_monitor("radfan_efuse", "faulted?", "%d", data.faulted[EFUSE_RADFAN]); - serial_monitor("radfan_efuse", "enabled?", "%d", data.enabled[EFUSE_RADFAN]); - - /* Send fanbatt eFuse message. */ - send_fanbatt_efuse( - data.raw[EFUSE_FANBATT], - data.voltage[EFUSE_FANBATT], - data.current[EFUSE_FANBATT], - data.faulted[EFUSE_FANBATT], - data.enabled[EFUSE_FANBATT] - ); - - /* Send pump1 eFuse message. */ - send_pumpone_efuse( - data.raw[EFUSE_PUMP1], - data.voltage[EFUSE_PUMP1], - data.current[EFUSE_PUMP1], - data.faulted[EFUSE_PUMP1], - data.enabled[EFUSE_PUMP1] - ); - - /* Send pump2 eFuse message. */ - send_pumptwo_efuse( - data.raw[EFUSE_PUMP2], - data.voltage[EFUSE_PUMP2], - data.current[EFUSE_PUMP2], - data.faulted[EFUSE_PUMP2], - data.enabled[EFUSE_PUMP2] - ); - - /* Send battbox eFuse message. */ - send_battbox_efuse( - data.raw[EFUSE_BATTBOX], - data.voltage[EFUSE_BATTBOX], - data.current[EFUSE_BATTBOX], - data.faulted[EFUSE_BATTBOX], - data.enabled[EFUSE_BATTBOX] - ); - - /* Send MC eFuse message. */ - send_mc_efuse( - data.raw[EFUSE_MC], - data.voltage[EFUSE_MC], - data.current[EFUSE_MC], - data.faulted[EFUSE_MC], - data.enabled[EFUSE_MC] - ); + efuse_send_to_dashboard(); + efuse_send_to_serial(); /* Sleep Thread for specified number of ticks. */ tx_thread_sleep(efuses_thread.sleep); diff --git a/Drivers/Embedded-Base b/Drivers/Embedded-Base index 92e6d211..22074014 160000 --- a/Drivers/Embedded-Base +++ b/Drivers/Embedded-Base @@ -1 +1 @@ -Subproject commit 92e6d2111c0957a27ff7c4702ac91a901177cc1f +Subproject commit 220740141b0c4ddb2465bbf4ec2090550a61c875 diff --git a/Drivers/Odyssey-Definitions b/Drivers/Odyssey-Definitions index 5fc8a314..743dbf0c 160000 --- a/Drivers/Odyssey-Definitions +++ b/Drivers/Odyssey-Definitions @@ -1 +1 @@ -Subproject commit 5fc8a314c014e2f8a51f6c3f8b0afffe696cfb0e +Subproject commit 743dbf0c746cae95d00fb9863bd4d9ea012b8d1a