Compare commits
5 Commits
f5e26aad24
...
48ae56fbdf
Author | SHA1 | Date | |
---|---|---|---|
48ae56fbdf | |||
6810790349 | |||
c43b6a3b6e | |||
29b411e4af | |||
6c27b83377 |
@ -41,7 +41,7 @@ extern "C" {
|
|||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
/* Exported constants --------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN EC */
|
/* USER CODE BEGIN EC */
|
||||||
|
extern int sdc_closed;
|
||||||
/* USER CODE END EC */
|
/* USER CODE END EC */
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t current;
|
int32_t current;
|
||||||
int32_t voltage1;
|
int32_t voltage_bat;
|
||||||
int32_t voltage2;
|
int32_t voltage_veh;
|
||||||
int32_t voltage3;
|
int32_t voltage3;
|
||||||
int32_t busbartemp;
|
int32_t busbartemp;
|
||||||
int32_t power;
|
int32_t power;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#define N_SLAVES 6
|
#define N_SLAVES 5
|
||||||
#define N_CELLS_SERIES 17
|
#define N_CELLS_SERIES 17
|
||||||
#define N_CELLS_PARALLEL 5
|
#define N_CELLS_PARALLEL 5
|
||||||
#define N_TEMP_SENSORS 32
|
#define N_TEMP_SENSORS 32
|
||||||
|
@ -8,7 +8,8 @@
|
|||||||
// Minimum vehicle side voltage to exit precharge
|
// Minimum vehicle side voltage to exit precharge
|
||||||
#define MIN_VEHICLE_SIDE_VOLTAGE 150000 // mV
|
#define MIN_VEHICLE_SIDE_VOLTAGE 150000 // mV
|
||||||
// Time to wait after reaching 95% of battery voltage before exiting precharge
|
// Time to wait after reaching 95% of battery voltage before exiting precharge
|
||||||
#define PRECHARGE_95_DURATION 500 // ms
|
// Set this to 1000 in scruti to demonstrate the voltage on the multimeter
|
||||||
|
#define PRECHARGE_95_DURATION 0 // ms
|
||||||
// Time to wait for discharge
|
// Time to wait for discharge
|
||||||
#define DISCHARGE_DURATION 5000 // ms
|
#define DISCHARGE_DURATION 5000 // ms
|
||||||
// Time to wait after there is no more error condition before exiting TS_ERROR
|
// Time to wait after there is no more error condition before exiting TS_ERROR
|
||||||
|
@ -21,7 +21,7 @@ void can_init(CAN_HandleTypeDef *handle) {
|
|||||||
|
|
||||||
HAL_StatusTypeDef can_send_status() {
|
HAL_StatusTypeDef can_send_status() {
|
||||||
uint8_t data[6];
|
uint8_t data[6];
|
||||||
data[0] = ts_state.current_state;
|
data[0] = ts_state.current_state | (sdc_closed << 7);
|
||||||
data[1] = current_soc;
|
data[1] = current_soc;
|
||||||
ftcan_marshal_unsigned(&data[2], min_voltage, 2);
|
ftcan_marshal_unsigned(&data[2], min_voltage, 2);
|
||||||
ftcan_marshal_signed(&data[4], max_temp, 2);
|
ftcan_marshal_signed(&data[4], max_temp, 2);
|
||||||
|
@ -55,7 +55,7 @@ CAN_HandleTypeDef hcan;
|
|||||||
UART_HandleTypeDef huart1;
|
UART_HandleTypeDef huart1;
|
||||||
|
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN PV */
|
||||||
|
int sdc_closed = 0;
|
||||||
/* USER CODE END PV */
|
/* USER CODE END PV */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
@ -132,6 +132,8 @@ int main(void) {
|
|||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
HAL_GPIO_TogglePin(STATUS1_GPIO_Port, STATUS1_Pin);
|
HAL_GPIO_TogglePin(STATUS1_GPIO_Port, STATUS1_Pin);
|
||||||
|
sdc_closed = HAL_GPIO_ReadPin(SDC_VOLTAGE_GPIO_Port, SDC_VOLTAGE_Pin) ==
|
||||||
|
GPIO_PIN_SET;
|
||||||
|
|
||||||
slaves_check();
|
slaves_check();
|
||||||
shunt_check();
|
shunt_check();
|
||||||
|
@ -12,8 +12,8 @@ ShuntData shunt_data;
|
|||||||
|
|
||||||
void shunt_init() {
|
void shunt_init() {
|
||||||
shunt_data.current = 0;
|
shunt_data.current = 0;
|
||||||
shunt_data.voltage1 = 0;
|
shunt_data.voltage_veh = 0;
|
||||||
shunt_data.voltage2 = 0;
|
shunt_data.voltage_bat = 0;
|
||||||
shunt_data.voltage3 = 0;
|
shunt_data.voltage3 = 0;
|
||||||
shunt_data.busbartemp = 0;
|
shunt_data.busbartemp = 0;
|
||||||
shunt_data.power = 0;
|
shunt_data.power = 0;
|
||||||
@ -36,10 +36,10 @@ void shunt_handle_can_msg(uint16_t id, const uint8_t *data) {
|
|||||||
shunt_data.current = result;
|
shunt_data.current = result;
|
||||||
break;
|
break;
|
||||||
case CAN_ID_SHUNT_VOLTAGE1:
|
case CAN_ID_SHUNT_VOLTAGE1:
|
||||||
shunt_data.voltage1 = result;
|
shunt_data.voltage_bat = result;
|
||||||
break;
|
break;
|
||||||
case CAN_ID_SHUNT_VOLTAGE2:
|
case CAN_ID_SHUNT_VOLTAGE2:
|
||||||
shunt_data.voltage2 = result;
|
shunt_data.voltage_veh = result;
|
||||||
break;
|
break;
|
||||||
case CAN_ID_SHUNT_VOLTAGE3:
|
case CAN_ID_SHUNT_VOLTAGE3:
|
||||||
shunt_data.voltage3 = result;
|
shunt_data.voltage3 = result;
|
||||||
|
@ -63,7 +63,7 @@ TSState ts_sm_update_inactive() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TSState ts_sm_update_active() {
|
TSState ts_sm_update_active() {
|
||||||
if (ts_state.target_state == TS_INACTIVE) {
|
if (ts_state.target_state == TS_INACTIVE || !sdc_closed) {
|
||||||
discharge_begin_timestamp = HAL_GetTick();
|
discharge_begin_timestamp = HAL_GetTick();
|
||||||
return TS_DISCHARGE;
|
return TS_DISCHARGE;
|
||||||
}
|
}
|
||||||
@ -72,12 +72,12 @@ TSState ts_sm_update_active() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TSState ts_sm_update_precharge() {
|
TSState ts_sm_update_precharge() {
|
||||||
if (ts_state.target_state == TS_INACTIVE) {
|
if (ts_state.target_state == TS_INACTIVE || !sdc_closed) {
|
||||||
discharge_begin_timestamp = HAL_GetTick();
|
discharge_begin_timestamp = HAL_GetTick();
|
||||||
return TS_DISCHARGE;
|
return TS_DISCHARGE;
|
||||||
}
|
}
|
||||||
if (shunt_data.voltage2 > MIN_VEHICLE_SIDE_VOLTAGE &&
|
if (shunt_data.voltage_veh > MIN_VEHICLE_SIDE_VOLTAGE &&
|
||||||
shunt_data.voltage2 > 0.95 * shunt_data.voltage3) {
|
shunt_data.voltage_veh > 0.95 * shunt_data.voltage_bat) {
|
||||||
uint32_t now = HAL_GetTick();
|
uint32_t now = HAL_GetTick();
|
||||||
if (precharge_95_reached_timestamp == 0) {
|
if (precharge_95_reached_timestamp == 0) {
|
||||||
precharge_95_reached_timestamp = now;
|
precharge_95_reached_timestamp = now;
|
||||||
@ -106,20 +106,22 @@ TSState ts_sm_update_error() {
|
|||||||
no_error_since = now;
|
no_error_since = now;
|
||||||
} else if (now - no_error_since > NO_ERROR_TIME) {
|
} else if (now - no_error_since > NO_ERROR_TIME) {
|
||||||
no_error_since = 0;
|
no_error_since = 0;
|
||||||
|
HAL_GPIO_WritePin(AMS_NERROR_GPIO_Port, AMS_NERROR_Pin, GPIO_PIN_SET);
|
||||||
return TS_INACTIVE;
|
return TS_INACTIVE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HAL_GPIO_WritePin(AMS_NERROR_GPIO_Port, AMS_NERROR_Pin, GPIO_PIN_RESET);
|
||||||
return TS_ERROR;
|
return TS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
TSState ts_sm_update_charging_check() {
|
TSState ts_sm_update_charging_check() {
|
||||||
if (ts_state.target_state == TS_INACTIVE) {
|
if (ts_state.target_state == TS_INACTIVE || !sdc_closed) {
|
||||||
discharge_begin_timestamp = HAL_GetTick();
|
discharge_begin_timestamp = HAL_GetTick();
|
||||||
return TS_DISCHARGE;
|
return TS_DISCHARGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shunt_data.voltage2 > shunt_data.voltage3) {
|
if (shunt_data.voltage_veh > shunt_data.voltage_bat) {
|
||||||
return TS_CHARGING;
|
return TS_CHARGING;
|
||||||
} else if (HAL_GetTick() - charging_check_timestamp >
|
} else if (HAL_GetTick() - charging_check_timestamp >
|
||||||
MAX_CHARGING_CHECK_DURATION) {
|
MAX_CHARGING_CHECK_DURATION) {
|
||||||
@ -130,7 +132,7 @@ TSState ts_sm_update_charging_check() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TSState ts_sm_update_charging() {
|
TSState ts_sm_update_charging() {
|
||||||
if (ts_state.target_state == TS_INACTIVE) {
|
if (ts_state.target_state == TS_INACTIVE || !sdc_closed) {
|
||||||
discharge_begin_timestamp = HAL_GetTick();
|
discharge_begin_timestamp = HAL_GetTick();
|
||||||
return TS_DISCHARGE;
|
return TS_DISCHARGE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user