V1.6
This commit is contained in:
		@ -29,3 +29,11 @@ V1.5
 | 
			
		||||
- int16_t auxVoltages[MAXIMUM_AUX_VOLTAGES] to float
 | 
			
		||||
- errors out when no messages are recieved for CAN_TIMEOUT messages
 | 
			
		||||
- void set_error_source(int source); -> void set_error_source(SlaveErrorKind source);
 | 
			
		||||
 | 
			
		||||
V1.6
 | 
			
		||||
- set temperature limit to 59
 | 
			
		||||
- precharge and discharge durations are now 5 seconds
 | 
			
		||||
- RELAY_BAT/ESC_SIDE and CURRENT_MEASUREMENT to int32_t
 | 
			
		||||
- CAN messages are now correctly formated
 | 
			
		||||
- minimum cell voltage is now set to 3200 mV 
 | 
			
		||||
- powerground calibration is now done in STATE_PRECHARGE (well yes but actually no)
 | 
			
		||||
 | 
			
		||||
@ -18,9 +18,9 @@
 | 
			
		||||
 | 
			
		||||
// Time to wait after reaching 95% of battery voltage before exiting precharge
 | 
			
		||||
// Set this to 1000 in scruti to demonstrate the voltage on the multimeter
 | 
			
		||||
#define PRECHARGE_DURATION 3000 // ms
 | 
			
		||||
#define PRECHARGE_DURATION 5000 // ms
 | 
			
		||||
// Time to wait for discharge
 | 
			
		||||
#define DISCHARGE_DURATION 3000 // ms
 | 
			
		||||
#define DISCHARGE_DURATION 5000 // ms
 | 
			
		||||
// Time to wait for charger voltage before going to TS_ERROR
 | 
			
		||||
#define MAX_CHARGING_CHECK_DURATION 2000 // ms
 | 
			
		||||
// Time to wait between closing relays
 | 
			
		||||
@ -62,9 +62,9 @@ typedef struct {
 | 
			
		||||
} StateHandle;
 | 
			
		||||
 | 
			
		||||
extern StateHandle state;
 | 
			
		||||
extern int16_t RELAY_BAT_SIDE_VOLTAGE;
 | 
			
		||||
extern int16_t RELAY_ESC_SIDE_VOLTAGE;
 | 
			
		||||
extern int16_t CURRENT_MEASUREMENT;
 | 
			
		||||
extern int32_t RELAY_BAT_SIDE_VOLTAGE;
 | 
			
		||||
extern int32_t RELAY_ESC_SIDE_VOLTAGE;
 | 
			
		||||
extern int32_t CURRENT_MEASUREMENT;
 | 
			
		||||
extern uint8_t powerground_status;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -136,7 +136,7 @@ uint8_t AMS_Idle_Loop() {
 | 
			
		||||
  
 | 
			
		||||
  int any_voltage_error = 0;
 | 
			
		||||
  for (size_t i = 0; i < numberofCells; i++) {
 | 
			
		||||
    if (module.cellVoltages[i] < 2500) {
 | 
			
		||||
    if (module.cellVoltages[i] < 3200) {
 | 
			
		||||
      any_voltage_error = 1;
 | 
			
		||||
      error_data.data_kind = SEK_UNDERVOLT;
 | 
			
		||||
      error_data.data[0] = i;
 | 
			
		||||
 | 
			
		||||
@ -51,6 +51,7 @@ void PWM_powerground_control(uint8_t percent){
 | 
			
		||||
  if (percent > 100){ //something went wrong
 | 
			
		||||
    __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_3, 0);
 | 
			
		||||
    __HAL_TIM_SET_COMPARE(powerground, TIM_CHANNEL_4, 0);
 | 
			
		||||
      powerground_status = 0;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  powerground_status = percent;
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
#include "TMP1075.h"
 | 
			
		||||
 | 
			
		||||
#define MAX_TEMP        ((int16_t)(30 / 0.0625f))
 | 
			
		||||
#define MAX_TEMP        ((int16_t)(59 / 0.0625f))
 | 
			
		||||
#define MAX_FAILED_TEMP 2 //TODO: change value for compliance with the actual number of sensors
 | 
			
		||||
#warning "change value for compliance with the actual number of sensors"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -67,10 +67,10 @@ void can_handle_send_status() {
 | 
			
		||||
  data[0] = ((state.current_state << 4) | (powerground_status >> 4));               // 1 bit emptyy | 3 bit state | 4 bit powerground 
 | 
			
		||||
  data[1] = ((powerground_status << 4) | (state.error_source >> 4));              // 4 bit powerground | 4 bit error 
 | 
			
		||||
  data[2] = ((state.error_source << 4) | (0));                                      // 4 bit error | 4 bit state of charge
 | 
			
		||||
  data[3] = ((0) + (RELAY_BAT_SIDE_VOLTAGE >> 12));                                // 4 bit state of charge | 4 bit battery voltage
 | 
			
		||||
  data[4] = ((RELAY_BAT_SIDE_VOLTAGE >> 4));
 | 
			
		||||
  data[3] = ((RELAY_BAT_SIDE_VOLTAGE >> 8));                                // 4 bit state of charge | 4 bit battery voltage
 | 
			
		||||
  data[4] = ((RELAY_BAT_SIDE_VOLTAGE >> 0));
 | 
			
		||||
  data[5] = ((CURRENT_MEASUREMENT >> 8));
 | 
			
		||||
  data[6] = ((CURRENT_MEASUREMENT & 0x00F0) | (highest_temp >> 12));
 | 
			
		||||
  data[6] = ((CURRENT_MEASUREMENT & 0x000F) | (highest_temp >> 12));
 | 
			
		||||
  data[7] = ((highest_temp) >> 4);
 | 
			
		||||
  //data[7] = state.error_source;
 | 
			
		||||
  ftcan_transmit(CAN_ID_OUT, data, sizeof(data));
 | 
			
		||||
@ -110,6 +110,14 @@ void can_handle_send_status() {
 | 
			
		||||
  data[7] = 0;
 | 
			
		||||
  
 | 
			
		||||
  ftcan_transmit(CAN_ID_OUT, data, sizeof(data));
 | 
			
		||||
 | 
			
		||||
  021E  30
 | 
			
		||||
  0232  50
 | 
			
		||||
  0238  60
 | 
			
		||||
  0246  70
 | 
			
		||||
  0250  80
 | 
			
		||||
  025A  90
 | 
			
		||||
  0264  100
 | 
			
		||||
  */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -16,10 +16,11 @@
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
StateHandle state;
 | 
			
		||||
int16_t RELAY_BAT_SIDE_VOLTAGE;
 | 
			
		||||
int16_t RELAY_ESC_SIDE_VOLTAGE;
 | 
			
		||||
int16_t CURRENT_MEASUREMENT;
 | 
			
		||||
int32_t RELAY_BAT_SIDE_VOLTAGE;
 | 
			
		||||
int32_t RELAY_ESC_SIDE_VOLTAGE;
 | 
			
		||||
int32_t CURRENT_MEASUREMENT;
 | 
			
		||||
bool CURRENT_MEASUREMENT_ON;
 | 
			
		||||
float base_offset = 0;
 | 
			
		||||
 | 
			
		||||
uint8_t powerground_status;
 | 
			
		||||
uint32_t precharge_timer;
 | 
			
		||||
@ -44,15 +45,14 @@ void sm_update(){
 | 
			
		||||
  sm_check_errors();
 | 
			
		||||
  sm_precharge_discharge_manager();
 | 
			
		||||
  sm_calibrate_powerground();
 | 
			
		||||
  if (CAN_timer < HAL_GetTick())
 | 
			
		||||
    state.current_state = state.target_state = STATE_ERROR;
 | 
			
		||||
  //if (CAN_timer < HAL_GetTick())
 | 
			
		||||
  //  state.current_state = state.target_state = STATE_ERROR;
 | 
			
		||||
 | 
			
		||||
  int16_t base_offset = 0;
 | 
			
		||||
  if (state.current_state == STATE_INACTIVE){
 | 
			
		||||
    base_offset = module.auxVoltages[0];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  CURRENT_MEASUREMENT = (module.auxVoltages[0] - base_offset) * 300;
 | 
			
		||||
  CURRENT_MEASUREMENT = roundf((module.auxVoltages[0] - base_offset) * 350);
 | 
			
		||||
  CURRENT_MEASUREMENT_ON = (module.auxVoltages[1] > 2400);
 | 
			
		||||
  RELAY_ESC_SIDE_VOLTAGE = module.auxVoltages[2] * 11.711;
 | 
			
		||||
  RELAY_BAT_SIDE_VOLTAGE = module.auxVoltages[3] * 11.711;     // the calculation says the factor is 11. 11.711 yields the better result
 | 
			
		||||
@ -120,7 +120,6 @@ State sm_update_ready(){
 | 
			
		||||
    case STATE_DISCHARGE:         // if CAN Signal 0000 0000 then shutdown
 | 
			
		||||
      return STATE_DISCHARGE;
 | 
			
		||||
    default:
 | 
			
		||||
      sm_calibrate_powerground();
 | 
			
		||||
      return STATE_READY;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -266,7 +265,7 @@ void sm_calibrate_powerground(){
 | 
			
		||||
  if (powerground_calibration_stage != 4 && state.current_state == STATE_READY){
 | 
			
		||||
    switch (powerground_calibration_stage) {
 | 
			
		||||
      case 0:
 | 
			
		||||
        powerground_calibration_timer = HAL_GetTick() + 5000;
 | 
			
		||||
        powerground_calibration_timer = HAL_GetTick() + 0;
 | 
			
		||||
        powerground_calibration_stage = 1;
 | 
			
		||||
        return;
 | 
			
		||||
      case 1:
 | 
			
		||||
@ -348,7 +347,7 @@ void sm_check_errors(){
 | 
			
		||||
  state.error_type.bms_timeout = (error_data.error_sources & (1 << 7)) ? 1 : 0;
 | 
			
		||||
  state.error_type.bms_fault = (error_data.error_sources & (1 << 8) || error_data.error_sources & (1 << 10) || error_data.error_sources & (1 << 9)) ? 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_error = (powerground_status > 10 && CURRENT_MEASUREMENT < 500) ? 1 : 0;
 | 
			
		||||
  state.error_type.current_sensor_missing = (!CURRENT_MEASUREMENT_ON) ? 1 : 0;
 | 
			
		||||
  state.error_type.voltage_missing = (RELAY_BAT_SIDE_VOLTAGE < 1000) ? 1 : 0;
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user