/* * BatteryManagement.c * * Created on: 29.01.2022 * Author: max */ #include "BatteryManagement.h" #include "BQ_Abstraction_Layer.h" extern uint16_t cell_voltages[N_CELLS]; void ams_init(UART_HandleTypeDef* uarthandle, DMA_HandleTypeDef* uartdma) { afe_init(uarthandle); } void ams_loop_discharging() { afe_measure(); if (bq_status == BQ_ERROR) { ams_status = AMS_TIMEOUT_ERROR; } else { ams_check_cell_voltages(); } } void ams_loop_charging() {} void ams_check_cell_voltages() { modulesumvoltage = 0; highestcell = 0; lowestcell = 0; uint16_t lowestvoltage = cell_voltages[0]; uint16_t highestvoltage = cell_voltages[0]; for (int n = 0; n < N_CELLS; n++) { modulesumvoltage += cell_voltages[n]; if (cell_voltages[n] > highestvoltage) highestvoltage = cell_voltages[n]; if (cell_voltages[n] < lowestvoltage) lowestvoltage = cell_voltages[n]; if (cell_voltages[n] > OVERVOLTAGE_LIMIT) ams_status = AMS_OV_ERROR; if (cell_voltages[n] < UNDERVOLTAGE_LIMIT) ams_status = AMS_UV_ERROR; } } void ams_check_cell_temperaures() {} void ams_step_soc_model() {} void ams_step_balancing_model() {} void ams_fan_control() {}