.
This commit is contained in:
		@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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]; }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user