This commit is contained in:
hamza 2024-07-07 01:57:00 +03:00
parent dfad2fee02
commit 879464e587
3 changed files with 43 additions and 22 deletions

View File

@ -28,7 +28,7 @@ uint16_t amsov = 0;
uint8_t amserrorcode = 0;
uint8_t amswarningcode = 0;
uint8_t numberofCells = 14;
uint8_t numberofCells = 13;
uint8_t numberofAux = 0;
uint8_t packetChecksumFails = 0;

View File

@ -40,6 +40,7 @@ HAL_StatusTypeDef tmp1075_measure() {
err = 1;
} else {
tmp1075_temps[i] >>= 4;
//tmp1075_temps[i] = tmp1075_temps[i] * 100/1600;
tmp1075_failed_sensors &= ~(1 << i);
if (tmp1075_temps[i] >= MAX_TEMP) {
temp_error = 1;

View File

@ -23,16 +23,12 @@ uint8_t powerground_calibration_stage;
static uint32_t timestamp;
void sm_init(){
state.current_state = STATE_INACTIVE;
state.target_state = STATE_INACTIVE;
state.current_state = STATE_ERROR;
state.target_state = STATE_ERROR;
state.error_source = 0;
precharge_timer = discharge_timer = powerground_calibration_timer = 0;
}
void sm_update_BMS_state(){
}
#warning change amsState here
void sm_update(){
sm_check_errors();
@ -87,6 +83,8 @@ State sm_update_inactive(){
return STATE_PRECHARGE;
case STATE_CHARGING_PRECHARGE:
return STATE_CHARGING_PRECHARGE;
case STATE_ERROR:
return STATE_ERROR;
default:
return STATE_INACTIVE;
}
@ -130,6 +128,8 @@ State sm_update_discharge(){
switch (state.target_state) {
case STATE_INACTIVE:
return STATE_INACTIVE;
case STATE_ERROR:
return STATE_ERROR;
default:
return STATE_DISCHARGE;
}
@ -159,6 +159,8 @@ State sm_update_error(){
switch (state.target_state) {
case STATE_DISCHARGE:
return STATE_DISCHARGE;
case STATE_INACTIVE:
return STATE_INACTIVE;
default:
return STATE_ERROR;
}
@ -310,12 +312,22 @@ void sm_handle_ams_in(const uint8_t *data){
case 0xF1: // EEPROM
break;
case 0xFF: // EMERGENCY SHUTDOWN
state.current_state = STATE_DISCHARGE;
state.target_state = STATE_ERROR;
break;
}
}
void sm_set_error(ErrorKind error_kind, bool is_errored){}
/*
bool sm_is_errored(){
return state.error_type.current_error == 1 || state.error_type.current_sensor_missing == 1 || //state.error_type.eeprom_error == 1 ||
state.error_type.state_transition_fail == 1 || state.error_type.temperature_error == 1 || state.error_type.voltage_error == 1 ||
state.error_type.voltage_missing == 1 || state.error_type.bms_fault == 1 || state.error_type.bms_timeout == 1;
}
*/
#warning TODO: add error checking for everything here
void sm_check_errors(){
switch (error_data.data_kind) {
@ -330,7 +342,7 @@ void sm_check_errors(){
state.error_type.voltage_error = 1;
break;
case SEK_EEPROM_ERR:
state.error_type.eeprom_error = 1;
//state.error_type.eeprom_error = 1;
break;
case SEK_INTERNAL_BMS_TIMEOUT:
state.error_type.bms_timeout = 1;
@ -341,22 +353,30 @@ void sm_check_errors(){
state.error_type.bms_fault = 1;
break;
}
state.error_type.temperature_error = (error_data.data_kind == SEK_OVERTEMP || error_data.data_kind == SEK_UNDERTEMP ||error_data.data_kind == SEK_TOO_FEW_TEMPS) ? 1 : 0;
state.error_type.voltage_error = (error_data.data_kind == SEK_OVERVOLT || error_data.data_kind == SEK_UNDERVOLT ||error_data.data_kind == SEK_OPENWIRE) ? 1 : 0;
state.error_type.bms_timeout = (error_data.data_kind == SEK_INTERNAL_BMS_TIMEOUT) ? 1 : 0;
state.error_type.bms_fault = (error_data.data_kind == SEK_INTERNAL_BMS_CHECKSUM_FAIL || error_data.data_kind == SEK_INTERNAL_BMS_FAULT || error_data.data_kind == SEK_INTERNAL_BMS_OVERTEMP) ? 1 : 0;
//SEK_EEPROM_ERR: state.error_type.eeprom_error = 1;
state.error_type.current_error = (powerground_status > 10 && CURRENT_MEASUREMENT < 1000) ? 1 : 0;
state.error_type.current_sensor_missing = (!CURRENT_MEASUREMENT_ON) ? 1 : 0;
state.error_type.voltage_error = (RELAY_BAT_SIDE_VOLTAGE < 30000) ? 1 : 0;
state.error_type.voltage_missing = (RELAY_BAT_SIDE_VOLTAGE < 1000) ? 1 : 0;
if (1){
state.error_type.current_error = 1;
}
if (1){
state.error_type.current_sensor_missing = 1;
}
if (RELAY_BAT_SIDE_VOLTAGE < 30000){
state.error_type.voltage_error = 1;
}
if (1){
state.error_type.voltage_missing = 1;
if ( state.error_type.current_error == 1 || state.error_type.current_sensor_missing == 1 || //state.error_type.eeprom_error == 1 ||
state.error_type.state_transition_fail == 1 || state.error_type.temperature_error == 1 || state.error_type.voltage_error == 1 ||
state.error_type.voltage_missing == 1 || state.error_type.bms_fault == 1 || state.error_type.bms_timeout == 1){
if (state.current_state != STATE_INACTIVE && state.current_state != STATE_ERROR)
state.current_state = STATE_DISCHARGE;
state.target_state = STATE_ERROR;
PWM_powerground_control(255);
} else {
if (state.current_state == STATE_ERROR)
state.target_state = STATE_INACTIVE;
}
}
int16_t sm_return_cell_temperature(int id){ return tmp1075_temps[id]; }