Midnight Sun Firmware
Loading...
Searching...
No Matches
\n');

Rear Controller Board Firmware. More...

Classes

struct  RearControllerConfig
 
struct  RearControllerStorage
 
struct  ThermistorDataPoint
 

Macros

#define CONV_DELAY_MS   10
 
#define AUX_CONV_DELAY_MS   3
 
#define RETRY_DELAY_MS   1
 
#define CELL_SENSE_CONVERSIONS   0
 
#define SOLAR_VOLTAGE_THRESHOLD   42000
 
#define AFE_BALANCING_UPPER_THRESHOLD   41500
 
#define AFE_BALANCING_LOWER_THRESHOLD   40000
 
#define REAR_CONTROLLER_FAN_TEMP_THRESHOLD_C   40
 
#define REAR_CONTROLLER_PRECHARGE_EVENT   0U
 
#define REAR_CONTROLLER_KILLSWITCH_EVENT   1U
 
#define REAR_CONTROLLER_CURRENT_SENSE_FILTER_ALPHA   0.5
 
#define REAR_CONTROLLER_CURRENT_SENSE_MAX_RETRIES   3
 
#define REAR_CONTROLLER_SERIES_COUNT   36U
 
#define REAR_CONTROLLER_PARALLEL_COUNT   9U
 
#define REAR_CONTROLLER_CELL_CAPACITY_AH   4.5
 
#define REAR_CONTROLLER_CAN_RX    { .port = GPIO_PORT_B, .pin = 8 }
 Rear Controller CAN RX Port.
 
#define REAR_CONTROLLER_CAN_TX    { .port = GPIO_PORT_B, .pin = 9 }
 Rear Controller CAN TX Port.
 
#define REAR_CONTROLLER_POS_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_A, .pin = 6 }
 Rear Controller positive relay enable pin.
 
#define REAR_CONTROLLER_POS_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 5 }
 Rear Controller positive relay sense pin.
 
#define REAR_CONTROLLER_NEG_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_A, .pin = 4 }
 Rear Controller negative relay enable pin.
 
#define REAR_CONTROLLER_NEG_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 3 }
 Rear Controller negative relay sense pin.
 
#define REAR_CONTROLLER_SOLAR_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_A, .pin = 8 }
 Rear Controller solar relay enable pin.
 
#define REAR_CONTROLLER_SOLAR_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 9 }
 Rear Controller solar relay sense pin.
 
#define REAR_CONTROLLER_MOTOR_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_C, .pin = 4 }
 Rear Controller motor relay enable pin.
 
#define REAR_CONTROLLER_MOTOR_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 7 }
 Rear Controller motor relay sense pin.
 
#define REAR_CONTROLLER_MOTOR_LV_ENABLE_GPIO    { .port = GPIO_PORT_C, .pin = 12 }
 Rear Controller motor low-voltage enable pin.
 
#define REAR_CONTROLLER_MOTOR_FAN_PWM    { .port = GPIO_PORT_B, .pin = 2 }
 Rear Controller fan pwm.
 
#define REAR_CONTROLLER_MOTOR_FAN_SENSE_1    { .port = GPIO_PORT_B, .pin = 0 }
 Rear Controller fan sense 2.
 
#define REAR_CONTROLLER_MOTOR_FAN_SENSE_2    { .port = GPIO_PORT_B, .pin = 1 }
 Rear Controller fan sense 1.
 
#define REAR_CONTROLLER_CURRENT_SENSE_I2C_PORT   I2C_PORT_1
 Current sense I2C port.
 
#define REAR_CONTROLLER_CURRENT_SENSE_I2C_SDA_GPIO    { .port = GPIO_PORT_B, .pin = 11 }
 Current sense I2C serial data pin.
 
#define REAR_CONTROLLER_CURRENT_SENSE_I2C_SCL_GPIO    { .port = GPIO_PORT_B, .pin = 10 }
 Current sense I2C clock pin.
 
#define REAR_CONTROLLER_CURRENT_SENSE_ACS37800_I2C_ADDR   (96)
 Current sense slave address.
 
#define REAR_CONTROLLER_ADBMS_AFE_SPI_PORT   SPI_PORT_2
 AFE SPI port.
 
#define REAR_CONTROLLER_ADBMS_AFE_SPI_BAUDRATE   SPI_BAUDRATE_312_5KHZ
 AFE SPI Baudrate.
 
#define REAR_CONTROLLER_ADBMS_AFE_SPI_SDO_GPIO    { .port = GPIO_PORT_B, .pin = 15 }
 AFE SPI Serial data out.
 
#define REAR_CONTROLLER_ADBMS_AFE_SPI_SDI_GPIO    { .port = GPIO_PORT_B, .pin = 14 }
 AFE SPI Serial data in.
 
#define REAR_CONTROLLER_ADBMS_AFE_SPI_SCK_GPIO    { .port = GPIO_PORT_B, .pin = 13 }
 AFE SPI Serial clock line.
 
#define REAR_CONTROLLER_ADBMS_AFE_SPI_CS_GPIO    { .port = GPIO_PORT_B, .pin = 12 }
 AFE SPI Chip select line.
 
#define REAR_CONTROLLER_PCS_VALID1    { .port = GPIO_PORT_C, .pin = 6 }
 Rear Controller PCS input valid pin 1.
 
#define REAR_CONTROLLER_PCS_VALID2    { .port = GPIO_PORT_C, .pin = 7 }
 Rear Controller PCS input valid pin 2.
 
#define REAR_CONTROLLER_AUX_VALID1    { .port = GPIO_PORT_C, .pin = 8 }
 Rear Controller AUX input valid pin 1.
 
#define REAR_CONTROLLER_AUX_VALID2    { .port = GPIO_PORT_C, .pin = 9 }
 Rear Controller AUX input valid pin 2.
 
#define REAR_CONTROLLER_PCS_VSENSE    { .port = GPIO_PORT_A, .pin = 2 }
 Rear Controller PCS voltage sense.
 
#define REAR_CONTROLLER_AUX_VSENSE    { .port = GPIO_PORT_A, .pin = 1 }
 Rear Controller AUX voltage sense.
 
#define REAR_CONTROLLER_PCS_ISENSE    { .port = GPIO_PORT_C, .pin = 3 }
 Rear Controller PCS current sense.
 
#define REAR_CONTROLLER_AUX_ISENSE    { .port = GPIO_PORT_C, .pin = 2 }
 Rear Controller AUX current sense.
 
#define REAR_CONTROLLER_PRECHARGE_MONITOR_GPIO    { .port = GPIO_PORT_A, .pin = 0 }
 Precharge monitoring pin.
 
#define REAR_CONTROLLER_KILLSWITCH_MONITOR_GPIO    { .port = GPIO_PORT_C, .pin = 5 }
 Killswitch monitoring pin.
 
#define REAR_CONTROLLER_BOARD_LED    { .port = GPIO_PORT_A, .pin = 10 }
 Rear Controller board LED.
 
#define PACK_MAX_DISCHARGE_CURRENT_A   -80.0
 
#define PACK_MAX_CHARGE_CURRENT_A   80.0
 
#define PACK_SHORT_CIRCUIT_CURRENT_A   60000
 
#define CELL_OVERVOLTAGE_LIMIT_mV   4200
 
#define CELL_UNDERVOLTAGE_LIMIT_mV   2500
 
#define CELL_UNBALANCED_LIMIT_mV   500
 
#define PACK_OVERVOLTAGE_LIMIT_mV   151200
 
#define PACK_UNDERVOLTAGE_LIMIT_mV   90000
 
#define CELL_OVERTEMP_DISCHARGE_LIMIT_C   60
 
#define CELL_OVERTEMP_CHARGE_LIMIT_C   60
 
#define CELL_UNDERTEMP_CHARGE_LIMIT_C   0
 
#define SHORT_CIRCUIT_RESPONSE_MS   1U
 
#define OVERCURRENT_RESPONSE_LOOPS   2
 
#define OVERTEMP_RESPONSE_MS   500U
 
#define UNDERVOLTAGE_RESPONSE_MS   1000U
 
#define OVERVOLTAGE_RESPONSE_MS   1000U
 
#define NUM_REAR_RELAYS   4U
 
#define REAR_CLOSE_RELAYS_DELAY_MS   250U
 
#define REAR_CLOSE_RELAYS_DELAY_MS   250U
 
#define SOC_OCV_TABLE_SIZE   (100)
 
#define SOC_TABLE_VALUES
 SOC table initializer list. More...
 
#define OCV_TABLE_VALUES
 OCV table initializer list. More...
 
#define THERMISTOR_TABLE_SIZE   102
 

Enumerations

enum  RearControllerState { REAR_CONTROLLER_STATE_IDLE , REAR_CONTROLLER_STATE_DRIVE , REAR_CONTROLLER_STATE_CHARGE , REAR_CONTROLLER_STATE_FAULT }
 
enum  RearControllerEvent {
  REAR_CONTROLLER_EVENT_NONE = 0 , REAR_CONTROLLER_EVENT_INIT_COMPLETE , REAR_CONTROLLER_EVENT_DRIVE_REQUEST , REAR_CONTROLLER_EVENT_CHARGE_REQUEST ,
  REAR_CONTROLLER_EVENT_NEUTRAL_REQUEST , REAR_CONTROLLER_EVENT_CHARGER_REMOVED , REAR_CONTROLLER_EVENT_FAULT , REAR_CONTROLLER_EVENT_RESET
}
 

Functions

StatusCode bps_fault_init (RearControllerStorage *storage)
 Initialize the BPS fault memory. More...
 
StatusCode bps_fault_commit (void)
 Commit a new BPS fault to persist memory and CAN data. More...
 
StatusCode trigger_bps_fault (BpsFault fault)
 Trigger a BPS fault. This opens the relays and updates rear controller storage. More...
 
StatusCode bps_fault_clear ()
 Clear the BPS fault. More...
 
StatusCode cell_sense_init (RearControllerStorage *storage)
 Initializes the cell sense sub-system. More...
 
StatusCode log_cell_sense ()
 Logs the newest cell sense readings. More...
 
StatusCode current_sense_init (RearControllerStorage *rear_controller_storage)
 Initializes the current sense sub-system. More...
 
StatusCode current_sense_run ()
 Run a current sensing cycle to update pack voltage and pack current readings. More...
 
StatusCode fans_init (RearControllerStorage *storage)
 Initializes the fan sub-system. More...
 
StatusCode fans_run (void)
 Checks the max board and cell temperatures in storage, compares them against the fan threshold, and turns on or off accordingly. More...
 
StatusCode killswitch_init (Event event, const Task *task)
 
StatusCode power_path_manager_init (RearControllerStorage *storage)
 Initialize the power path manager. More...
 
StatusCode power_path_manager_run (void)
 Run power path manager calculations. More...
 
StatusCode precharge_init (Event event, const Task *task)
 
StatusCode rear_controller_init (RearControllerStorage *storage, RearControllerConfig *config)
 
StatusCode rear_controller_state_manager_init (RearControllerStorage *storage)
 Initialize the state machine. More...
 
StatusCode rear_controller_state_manager_step (RearControllerEvent event)
 Advance the state machine based on inputs/events. More...
 
RearControllerState rear_controller_state_manager_get_state (void)
 Get current state. More...
 
StatusCode relays_init (RearControllerStorage *storage)
 Initialize the relay control module. More...
 
StatusCode relays_reset ()
 Reset relays by disengaging all relays. More...
 
StatusCode relays_enable_ws22_lv (void)
 Enable the low voltage for the Wavesculptor 22. More...
 
StatusCode relays_disable_ws22_lv (void)
 Disable the low voltage for the Wavesculptor 22. More...
 
StatusCode relays_close_pos (void)
 Close the high-side (POS) relay. More...
 
StatusCode relays_open_pos (void)
 Open the high-side (POS) relay. More...
 
StatusCode relays_close_neg (void)
 Close the low-side (NEG) relay. More...
 
StatusCode relays_open_neg (void)
 Open the low-side (NEG) relay. More...
 
StatusCode relays_close_motor (void)
 Close the motor HV relay. More...
 
StatusCode relays_open_motor (void)
 Open the motor HV relay. More...
 
StatusCode relays_close_solar (void)
 Close the solar array relay. More...
 
StatusCode relays_open_solar (void)
 Open the solar array relay. More...
 
StatusCode state_of_charge_init (RearControllerStorage *storage)
 Initialize the state of charge EKF. More...
 
StatusCode state_of_charge_run ()
 Run state of charge calculation. More...
 
uint16_t calculate_board_thermistor_temperature (uint16_t thermistor_voltage_mv)
 
fid, '#pragma once\n\n' fprintf ()
 
 fprintf (fid, '#define SOC_TABLE_VALUES { \\\n')
 

Variables

const ThermistorDataPoint thermistor_table []
 
for i
 
normalize to cell capacity Downsample to points for embedded target params SOC_OCV_table_size = 100
 

Detailed Description

Rear Controller Board Firmware.


'); fprintf(fid, ' * fprintf(fid, ' * Rear Controller Board Firmware
'); fprintf(fid, ' *
'); fprintf(fid, '

Macro Definition Documentation

◆ CELL_OVERTEMP_CHARGE_LIMIT_C

#define CELL_OVERTEMP_CHARGE_LIMIT_C   60

Max temperature for charge

◆ CELL_OVERTEMP_DISCHARGE_LIMIT_C

#define CELL_OVERTEMP_DISCHARGE_LIMIT_C   60

Max temperature for discharge

◆ CELL_OVERVOLTAGE_LIMIT_mV

#define CELL_OVERVOLTAGE_LIMIT_mV   4200

Over-voltage cutoff

◆ CELL_UNBALANCED_LIMIT_mV

#define CELL_UNBALANCED_LIMIT_mV   500

Cell imbalance cutoff

◆ CELL_UNDERTEMP_CHARGE_LIMIT_C

#define CELL_UNDERTEMP_CHARGE_LIMIT_C   0

Min temperature for charge

◆ CELL_UNDERVOLTAGE_LIMIT_mV

#define CELL_UNDERVOLTAGE_LIMIT_mV   2500

Under-voltage cutoff

◆ OCV_TABLE_VALUES

#define OCV_TABLE_VALUES
Value:
{ \
4.190309f, 4.142459f, 4.125309f, 4.109280f, 4.096676f, 4.089667f, 4.081620f, 4.074673f, 4.071015f, 4.067829f, 4.064239f, 4.060644f, 4.057323f, 4.053907f, 4.050377f, 4.045739f, 4.040416f, \
4.029665f, 4.019790f, 4.009186f, 3.995196f, 3.989016f, 3.973552f, 3.959041f, 3.945586f, 3.932916f, 3.919387f, 3.906022f, 3.897782f, 3.884600f, 3.874346f, 3.865464f, 3.857186f, 3.846547f, \
3.839709f, 3.831643f, 3.822724f, 3.815790f, 3.807380f, 3.799490f, 3.789692f, 3.781002f, 3.771773f, 3.762184f, 3.753478f, 3.744195f, 3.732853f, 3.724786f, 3.715202f, 3.701670f, 3.692630f, \
3.680708f, 3.670696f, 3.662949f, 3.649588f, 3.640017f, 3.631904f, 3.621902f, 3.612311f, 3.597636f, 3.587588f, 3.577288f, 3.564566f, 3.553095f, 3.541913f, 3.528201f, 3.515210f, 3.503648f, \
3.494589f, 3.490979f, 3.481063f, 3.469875f, 3.461891f, 3.449600f, 3.431904f, 3.413725f, 3.398655f, 3.383520f, 3.363502f, 3.348831f, 3.326888f, 3.306968f, 3.287810f, 3.262994f, 3.236372f, \
3.211370f, 3.185426f, 3.155850f, 3.133044f, 3.104363f, 3.076283f, 3.039610f, 3.011365f, 2.967701f, 2.916989f, 2.873446f, 2.801993f, 2.708813f, 2.625193f, 2.501839f \
}

OCV table initializer list.

◆ OVERCURRENT_RESPONSE_LOOPS

#define OVERCURRENT_RESPONSE_LOOPS   2

Delay before over-current trips

◆ OVERTEMP_RESPONSE_MS

#define OVERTEMP_RESPONSE_MS   500U

Delay before over-temp trips

◆ OVERVOLTAGE_RESPONSE_MS

#define OVERVOLTAGE_RESPONSE_MS   1000U

Delay before over-voltage trips

◆ PACK_MAX_CHARGE_CURRENT_A

#define PACK_MAX_CHARGE_CURRENT_A   80.0

Maximum allowed charge current

◆ PACK_MAX_DISCHARGE_CURRENT_A

#define PACK_MAX_DISCHARGE_CURRENT_A   -80.0

Maximum allowed discharge current

◆ PACK_SHORT_CIRCUIT_CURRENT_A

#define PACK_SHORT_CIRCUIT_CURRENT_A   60000

Instantaneous short-circuit threshold

◆ SHORT_CIRCUIT_RESPONSE_MS

#define SHORT_CIRCUIT_RESPONSE_MS   1U

HW trip reaction time

◆ SOC_TABLE_VALUES

#define SOC_TABLE_VALUES
Value:
{ \
0.000000f, 0.011111f, 0.020000f, 0.031111f, 0.042222f, 0.051111f, 0.062222f, 0.073333f, 0.082222f, 0.093333f, 0.104444f, 0.115556f, 0.124444f, 0.135556f, 0.146667f, 0.155556f, 0.166667f, \
0.177778f, 0.186667f, 0.197778f, 0.208889f, 0.217778f, 0.228889f, 0.240000f, 0.248889f, 0.260000f, 0.271111f, 0.282222f, 0.291111f, 0.302222f, 0.313333f, 0.322222f, 0.333333f, 0.344444f, \
0.353333f, 0.364444f, 0.375556f, 0.384444f, 0.395556f, 0.406667f, 0.415556f, 0.426667f, 0.437778f, 0.448889f, 0.457778f, 0.468889f, 0.480000f, 0.488889f, 0.500000f, 0.511111f, 0.520000f, \
0.531111f, 0.542222f, 0.551111f, 0.562222f, 0.573333f, 0.582222f, 0.593333f, 0.604444f, 0.615556f, 0.624444f, 0.635556f, 0.646667f, 0.655556f, 0.666667f, 0.677778f, 0.686667f, 0.697778f, \
0.708889f, 0.717778f, 0.728889f, 0.740000f, 0.748889f, 0.760000f, 0.771111f, 0.782222f, 0.791111f, 0.802222f, 0.813333f, 0.822222f, 0.833333f, 0.844444f, 0.853333f, 0.864444f, 0.875556f, \
0.884444f, 0.895556f, 0.906667f, 0.915556f, 0.926667f, 0.937778f, 0.948889f, 0.957778f, 0.968889f, 0.980000f, 0.988889f, 1.000000f, 1.011111f, 1.020000f, 1.031111f \
}

SOC table initializer list.

◆ UNDERVOLTAGE_RESPONSE_MS

#define UNDERVOLTAGE_RESPONSE_MS   1000U

Delay before under-voltage trips

Enumeration Type Documentation

◆ RearControllerState

Enumerator
REAR_CONTROLLER_STATE_IDLE 

Ready but not driving or charging, cars in neutral

REAR_CONTROLLER_STATE_DRIVE 

Driving: motor relays closed, LV enabled

REAR_CONTROLLER_STATE_CHARGE 

Charging: charger detected, motor relay may be required

REAR_CONTROLLER_STATE_FAULT 

Faulted: relays open, latched until reset

Function Documentation

◆ bps_fault_clear()

StatusCode bps_fault_clear ( )

Clear the BPS fault.

Parameters
faultBPS Fault event
Returns
STATUS_CODE_OK if triggered successfully STATUS_CODE_UNINITIALIZED if the system is not initialized

◆ bps_fault_commit()

StatusCode bps_fault_commit ( void  )

Commit a new BPS fault to persist memory and CAN data.

Returns
STATUS_CODE_OK if committed successfully STATUS_CODE_UNINITIALIZED if the system is not initialized

◆ bps_fault_init()

StatusCode bps_fault_init ( RearControllerStorage storage)

Initialize the BPS fault memory.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK if initialized successfully STATUS_CODE_INVALID_ARGS if invalid parameter is passed in

◆ cell_sense_init()

StatusCode cell_sense_init ( RearControllerStorage storage)

Initializes the cell sense sub-system.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK if initialized succesfully STATUS_CODE_INVALID_ARGS if invalid parameter is passed in

◆ current_sense_init()

StatusCode current_sense_init ( RearControllerStorage rear_controller_storage)

Initializes the current sense sub-system.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK if initialized succesfully STATUS_CODE_INVALID_ARGS if invalid parameter is passed in

◆ current_sense_run()

StatusCode current_sense_run ( )

Run a current sensing cycle to update pack voltage and pack current readings.

Returns
STATUS_CODE_OK if current sensed successfully STATUS_CODE_UNINITIALIZED if not initialized

◆ fans_init()

StatusCode fans_init ( RearControllerStorage storage)

Initializes the fan sub-system.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK if initialized succesfully STATUS_CODE_INVALID_ARGS if invalid parameter is passed in

◆ fans_run()

StatusCode fans_run ( void  )

Checks the max board and cell temperatures in storage, compares them against the fan threshold, and turns on or off accordingly.

Returns
STATUS_CODE_OK if executed succesfully

◆ log_cell_sense()

StatusCode log_cell_sense ( )

Logs the newest cell sense readings.

Returns
STATUS_CODE_OK if logged succesfully STATUS_CODE_UNINITIALIZED if system is not initialized

◆ power_path_manager_init()

StatusCode power_path_manager_init ( RearControllerStorage storage)

Initialize the power path manager.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK if initialized successfully STATUS_CODE_INVALID_ARGS if an invalid argument is passed

◆ power_path_manager_run()

StatusCode power_path_manager_run ( void  )

Run power path manager calculations.

Returns
STATUS_CODE_OK if manager runs successfully

◆ rear_controller_state_manager_get_state()

RearControllerState rear_controller_state_manager_get_state ( void  )

Get current state.

Returns
Current rear controller state (see RearControllerState)

◆ rear_controller_state_manager_init()

StatusCode rear_controller_state_manager_init ( RearControllerStorage storage)

Initialize the state machine.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK if initialized successfully STATUS_CODE_RESOURCE_EXHAUSTED if initialized already

◆ rear_controller_state_manager_step()

StatusCode rear_controller_state_manager_step ( RearControllerEvent  event)

Advance the state machine based on inputs/events.

Parameters
eventThe triggering event
Returns
STATUS_CODE_OK if initialized successfully STATUS_CODE_UNINITIALIZED if uninitialized

◆ relays_close_motor()

StatusCode relays_close_motor ( void  )

Close the motor HV relay.

Returns
STATUS_CODE_OK if relay closed successfully

◆ relays_close_neg()

StatusCode relays_close_neg ( void  )

Close the low-side (NEG) relay.

Returns
STATUS_CODE_OK if relay closed successfully

◆ relays_close_pos()

StatusCode relays_close_pos ( void  )

Close the high-side (POS) relay.

Returns
STATUS_CODE_OK if relay closed successfully

◆ relays_close_solar()

StatusCode relays_close_solar ( void  )

Close the solar array relay.

Returns
STATUS_CODE_OK if relay closed successfully

◆ relays_disable_ws22_lv()

StatusCode relays_disable_ws22_lv ( void  )

Disable the low voltage for the Wavesculptor 22.

Returns
STATUS_CODE_OK if disabled successfully

◆ relays_enable_ws22_lv()

StatusCode relays_enable_ws22_lv ( void  )

Enable the low voltage for the Wavesculptor 22.

Returns
STATUS_CODE_OK if enabled successfully

◆ relays_init()

StatusCode relays_init ( RearControllerStorage storage)

Initialize the relay control module.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK

◆ relays_open_motor()

StatusCode relays_open_motor ( void  )

Open the motor HV relay.

Returns
STATUS_CODE_OK if relay opened successfully

◆ relays_open_neg()

StatusCode relays_open_neg ( void  )

Open the low-side (NEG) relay.

Returns
STATUS_CODE_OK if relay opened successfully

◆ relays_open_pos()

StatusCode relays_open_pos ( void  )

Open the high-side (POS) relay.

Returns
STATUS_CODE_OK if relay opened successfully

◆ relays_open_solar()

StatusCode relays_open_solar ( void  )

Open the solar array relay.

Returns
STATUS_CODE_OK if relay opened successfully

◆ relays_reset()

StatusCode relays_reset ( )

Reset relays by disengaging all relays.

Returns
STATUS_CODE_OK if relays opened successfully

◆ state_of_charge_init()

StatusCode state_of_charge_init ( RearControllerStorage storage)

Initialize the state of charge EKF.

Parameters
storagePointer to the rear controller storage
Returns
STATUS_CODE_OK when initialized successfully STATUS_CODE_INVALID_ARGS when invalid parameters are passed

◆ state_of_charge_run()

StatusCode state_of_charge_run ( )

Run state of charge calculation.

Returns
STATUS_CODE_OK when calculated successfully

◆ trigger_bps_fault()

StatusCode trigger_bps_fault ( BpsFault  fault)

Trigger a BPS fault. This opens the relays and updates rear controller storage.

Parameters
faultBPS Fault event
Returns
STATUS_CODE_OK if triggered successfully STATUS_CODE_UNINITIALIZED if the system is not initialized

Variable Documentation

◆ i

for i
Initial value:
= 1:params.SOC_OCV_table_size
fprintf(fid, ' %.6ff', params.SOC_table(i))