.
This commit is contained in:
parent
dfad2fee02
commit
879464e587
@ -28,7 +28,7 @@ uint16_t amsov = 0;
|
|||||||
uint8_t amserrorcode = 0;
|
uint8_t amserrorcode = 0;
|
||||||
uint8_t amswarningcode = 0;
|
uint8_t amswarningcode = 0;
|
||||||
|
|
||||||
uint8_t numberofCells = 14;
|
uint8_t numberofCells = 13;
|
||||||
uint8_t numberofAux = 0;
|
uint8_t numberofAux = 0;
|
||||||
|
|
||||||
uint8_t packetChecksumFails = 0;
|
uint8_t packetChecksumFails = 0;
|
||||||
|
@ -40,6 +40,7 @@ HAL_StatusTypeDef tmp1075_measure() {
|
|||||||
err = 1;
|
err = 1;
|
||||||
} else {
|
} else {
|
||||||
tmp1075_temps[i] >>= 4;
|
tmp1075_temps[i] >>= 4;
|
||||||
|
//tmp1075_temps[i] = tmp1075_temps[i] * 100/1600;
|
||||||
tmp1075_failed_sensors &= ~(1 << i);
|
tmp1075_failed_sensors &= ~(1 << i);
|
||||||
if (tmp1075_temps[i] >= MAX_TEMP) {
|
if (tmp1075_temps[i] >= MAX_TEMP) {
|
||||||
temp_error = 1;
|
temp_error = 1;
|
||||||
|
@ -23,16 +23,12 @@ uint8_t powerground_calibration_stage;
|
|||||||
static uint32_t timestamp;
|
static uint32_t timestamp;
|
||||||
|
|
||||||
void sm_init(){
|
void sm_init(){
|
||||||
state.current_state = STATE_INACTIVE;
|
state.current_state = STATE_ERROR;
|
||||||
state.target_state = STATE_INACTIVE;
|
state.target_state = STATE_ERROR;
|
||||||
state.error_source = 0;
|
state.error_source = 0;
|
||||||
precharge_timer = discharge_timer = powerground_calibration_timer = 0;
|
precharge_timer = discharge_timer = powerground_calibration_timer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sm_update_BMS_state(){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#warning change amsState here
|
#warning change amsState here
|
||||||
void sm_update(){
|
void sm_update(){
|
||||||
sm_check_errors();
|
sm_check_errors();
|
||||||
@ -87,6 +83,8 @@ State sm_update_inactive(){
|
|||||||
return STATE_PRECHARGE;
|
return STATE_PRECHARGE;
|
||||||
case STATE_CHARGING_PRECHARGE:
|
case STATE_CHARGING_PRECHARGE:
|
||||||
return STATE_CHARGING_PRECHARGE;
|
return STATE_CHARGING_PRECHARGE;
|
||||||
|
case STATE_ERROR:
|
||||||
|
return STATE_ERROR;
|
||||||
default:
|
default:
|
||||||
return STATE_INACTIVE;
|
return STATE_INACTIVE;
|
||||||
}
|
}
|
||||||
@ -130,6 +128,8 @@ State sm_update_discharge(){
|
|||||||
switch (state.target_state) {
|
switch (state.target_state) {
|
||||||
case STATE_INACTIVE:
|
case STATE_INACTIVE:
|
||||||
return STATE_INACTIVE;
|
return STATE_INACTIVE;
|
||||||
|
case STATE_ERROR:
|
||||||
|
return STATE_ERROR;
|
||||||
default:
|
default:
|
||||||
return STATE_DISCHARGE;
|
return STATE_DISCHARGE;
|
||||||
}
|
}
|
||||||
@ -159,6 +159,8 @@ State sm_update_error(){
|
|||||||
switch (state.target_state) {
|
switch (state.target_state) {
|
||||||
case STATE_DISCHARGE:
|
case STATE_DISCHARGE:
|
||||||
return STATE_DISCHARGE;
|
return STATE_DISCHARGE;
|
||||||
|
case STATE_INACTIVE:
|
||||||
|
return STATE_INACTIVE;
|
||||||
default:
|
default:
|
||||||
return STATE_ERROR;
|
return STATE_ERROR;
|
||||||
}
|
}
|
||||||
@ -310,12 +312,22 @@ void sm_handle_ams_in(const uint8_t *data){
|
|||||||
case 0xF1: // EEPROM
|
case 0xF1: // EEPROM
|
||||||
break;
|
break;
|
||||||
case 0xFF: // EMERGENCY SHUTDOWN
|
case 0xFF: // EMERGENCY SHUTDOWN
|
||||||
|
state.current_state = STATE_DISCHARGE;
|
||||||
|
state.target_state = STATE_ERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sm_set_error(ErrorKind error_kind, bool is_errored){}
|
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
|
#warning TODO: add error checking for everything here
|
||||||
void sm_check_errors(){
|
void sm_check_errors(){
|
||||||
switch (error_data.data_kind) {
|
switch (error_data.data_kind) {
|
||||||
@ -330,7 +342,7 @@ void sm_check_errors(){
|
|||||||
state.error_type.voltage_error = 1;
|
state.error_type.voltage_error = 1;
|
||||||
break;
|
break;
|
||||||
case SEK_EEPROM_ERR:
|
case SEK_EEPROM_ERR:
|
||||||
state.error_type.eeprom_error = 1;
|
//state.error_type.eeprom_error = 1;
|
||||||
break;
|
break;
|
||||||
case SEK_INTERNAL_BMS_TIMEOUT:
|
case SEK_INTERNAL_BMS_TIMEOUT:
|
||||||
state.error_type.bms_timeout = 1;
|
state.error_type.bms_timeout = 1;
|
||||||
@ -342,21 +354,29 @@ void sm_check_errors(){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (1){
|
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.current_error = 1;
|
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 ( 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t sm_return_cell_temperature(int id){ return tmp1075_temps[id]; }
|
int16_t sm_return_cell_temperature(int id){ return tmp1075_temps[id]; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user