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

Rear Controller Board Firmware. More...

Classes

struct  CurrentSenseConfigs
 
struct  RearControllerConfig
 
struct  RearControllerStorage
 

Macros

#define CONV_DELAY_MS   10
 
#define AUX_CONV_DELAY_MS   3
 
#define RETRY_DELAY_MS   10U
 
#define CELL_SENSE_CONVERSIONS   0
 
#define SOLAR_VOLTAGE_THRESHOLD   41500
 
#define AFE_BALANCING_UPPER_THRESHOLD   41500
 
#define AFE_BALANCING_LOWER_THRESHOLD   40000
 
#define IS_USING_CURRENT_SENSE_REV_3   1U
 
#define REAR_CONTROLLER_FAN_IDLE_DUTY_PCT   10U
 
#define REAR_CONTROLLER_FAN_MAX_DUTY_PCT   100U
 
#define REAR_CONTROLLER_FAN_RAMP_MIN_C   45
 
#define REAR_CONTROLLER_FAN_RAMP_MAX_C   55
 
#define REAR_CONTROLLER_PRECHARGE_EVENT   0U
 
#define REAR_CONTROLLER_PRECHARGE_CYCLE_DELAY_MS   MASTER_50HZ_TO_MS
 
#define REAR_CONTROLLER_PRECHARGE_TIMEOUT_COUNTER   5000 / REAR_CONTROLLER_PRECHARGE_CYCLE_DELAY_MS
 
#define REAR_CONTROLLER_CURRENT_SENSE_FILTER_ALPHA   0.5
 
#define REAR_CONTROLLER_CURRENT_SENSE_MAX_RETRIES   3
 
#define REAR_CONTROLLER_RELAY_INRUSH_MIN_DELAY_MS   130U
 
#define REAR_CONTROLLER_SERIES_COUNT   36U
 
#define REAR_CONTROLLER_PARALLEL_COUNT   9U
 
#define REAR_CONTROLLER_CELL_CAPACITY_AH   4.5
 
#define REAR_CONTROLLER_GPIO_DEF(PORT, PIN)    { .port = GPIO_PORT_##PORT, .pin = PIN }
 
#define GPIO_REAR_CONTROLLER_CAN_RX   REAR_CONTROLLER_GPIO_DEF(B, 8)
 Rear Controller CAN RX Port.
 
#define GPIO_REAR_CONTROLLER_CAN_TX   REAR_CONTROLLER_GPIO_DEF(B, 9)
 Rear Controller CAN TX Port.
 
#define GPIO_REAR_CONTROLLER_POS_RELAY_ENABLE   REAR_CONTROLLER_GPIO_DEF(A, 6)
 Rear Controller positive relay enable pin.
 
#define GPIO_REAR_CONTROLLER_POS_RELAY_SENSE   REAR_CONTROLLER_GPIO_DEF(A, 5)
 Rear Controller positive relay sense pin.
 
#define GPIO_REAR_CONTROLLER_NEG_RELAY_ENABLE   REAR_CONTROLLER_GPIO_DEF(A, 4)
 Rear Controller negative relay enable pin.
 
#define GPIO_REAR_CONTROLLER_NEG_RELAY_SENSE   REAR_CONTROLLER_GPIO_DEF(A, 3)
 Rear Controller negative relay sense pin.
 
#define GPIO_REAR_CONTROLLER_SOLAR_RELAY_ENABLE   REAR_CONTROLLER_GPIO_DEF(A, 8)
 Rear Controller solar relay enable pin.
 
#define GPIO_REAR_CONTROLLER_SOLAR_RELAY_SENSE   REAR_CONTROLLER_GPIO_DEF(A, 9)
 Rear Controller solar relay sense pin.
 
#define GPIO_REAR_CONTROLLER_MOTOR_RELAY_ENABLE   REAR_CONTROLLER_GPIO_DEF(C, 4)
 Rear Controller motor relay enable pin.
 
#define GPIO_REAR_CONTROLLER_MOTOR_RELAY_SENSE   REAR_CONTROLLER_GPIO_DEF(A, 7)
 Rear Controller motor relay sense pin.
 
#define GPIO_REAR_CONTROLLER_MOTOR_LV_ENABLE   REAR_CONTROLLER_GPIO_DEF(C, 12)
 Rear Controller motor low-voltage enable pin.
 
#define GPIO_REAR_CONTROLLER_MOTOR_FAN_PWM_1   REAR_CONTROLLER_GPIO_DEF(B, 2)
 Rear Controller fan pwm 1.
 
#define GPIO_REAR_CONTROLLER_MOTOR_FAN_PWM_2   REAR_CONTROLLER_GPIO_DEF(B, 3)
 Rear Controller fan pwm 2.
 
#define GPIO_REAR_CONTROLLER_MOTOR_FAN_PWR_1   REAR_CONTROLLER_GPIO_DEF(B, 4)
 Rear Controller fan pwr 1.
 
#define GPIO_REAR_CONTROLLER_MOTOR_FAN_SENSE_1   REAR_CONTROLLER_GPIO_DEF(B, 0)
 Rear Controller fan sense 2.
 
#define GPIO_REAR_CONTROLLER_MOTOR_FAN_SENSE_2   REAR_CONTROLLER_GPIO_DEF(B, 1)
 Rear Controller fan sense 1.
 
#define REAR_CONTROLLER_CURRENT_SENSE_I2C_PORT   I2C_PORT_3
 Current sense I2C port.
 
#define GPIO_REAR_CONTROLLER_CURRENT_SENSE_I2C_SDA_GPIO   REAR_CONTROLLER_GPIO_DEF(C, 1)
 Current sense I2C serial data pin.
 
#define GPIO_REAR_CONTROLLER_CURRENT_SENSE_I2C_SCL_GPIO   REAR_CONTROLLER_GPIO_DEF(C, 0)
 Current sense I2C clock pin.
 
#define REAR_CONTROLLER_CURRENT_SENSE_ACS37800_I2C_ADDR   (96)
 Current sense slave address.
 
#define REAR_CONTOLLER_CURRENT_SENSE_ADC122_I2C_ADDR   (64)
 Current sense slave address.
 
#define REAR_CONTROLLER_HYDROGEN_SENSOR_I2C_PORT   I2C_PORT_2
 Hydrogen sensor I2C port.
 
#define GPIO_REAR_CONTROLLER_HYDROGEN_SENSOR_I2C_SDA_GPIO   REAR_CONTROLLER_GPIO_DEF(B, 11)
 Hydrogen sensor I2C serial data pin.
 
#define GPIO_REAR_CONTROLLER_HYDROGEN_SENSOR_I2C_SCL_GPIO   REAR_CONTROLLER_GPIO_DEF(B, 10)
 Hydrogen sensor I2C clock pin.
 
#define REAR_CONTROLLER_HYDROGEN_SENSOR_I2C_ADDR   (0x36)
 Hydrogen sensor slave address.
 
#define GPIO_REAR_CONTROLLER_HYDROGEN_SENSOR_STANDBY   REAR_CONTROLLER_GPIO_DEF(D, 2)
 Hydrogen sensor standby.
 
#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 GPIO_REAR_CONTROLLER_ADBMS_AFE_SPI_SDO_GPIO   REAR_CONTROLLER_GPIO_DEF(B, 15)
 AFE SPI Serial data out.
 
#define GPIO_REAR_CONTROLLER_ADBMS_AFE_SPI_SDI_GPIO   REAR_CONTROLLER_GPIO_DEF(B, 14)
 AFE SPI Serial data in.
 
#define GPIO_REAR_CONTROLLER_ADBMS_AFE_SPI_SCK_GPIO   REAR_CONTROLLER_GPIO_DEF(B, 13)
 AFE SPI Serial clock line.
 
#define GPIO_REAR_CONTROLLER_ADBMS_AFE_SPI_CS_GPIO   REAR_CONTROLLER_GPIO_DEF(B, 12)
 AFE SPI Chip select line.
 
#define GPIO_REAR_CONTROLLER_PCS_VALID1   REAR_CONTROLLER_GPIO_DEF(C, 6)
 Rear Controller PCS input valid pin 1.
 
#define GPIO_REAR_CONTROLLER_PCS_VALID2   REAR_CONTROLLER_GPIO_DEF(C, 7)
 Rear Controller PCS input valid pin 2.
 
#define GPIO_REAR_CONTROLLER_AUX_VALID1   REAR_CONTROLLER_GPIO_DEF(C, 8)
 Rear Controller AUX input valid pin 1.
 
#define GPIO_REAR_CONTROLLER_AUX_VALID2   REAR_CONTROLLER_GPIO_DEF(C, 9)
 Rear Controller AUX input valid pin 2.
 
#define GPIO_REAR_CONTROLLER_PCS_VSENSE   REAR_CONTROLLER_GPIO_DEF(A, 2)
 Rear Controller PCS voltage sense.
 
#define GPIO_REAR_CONTROLLER_AUX_VSENSE   REAR_CONTROLLER_GPIO_DEF(A, 1)
 Rear Controller AUX voltage sense.
 
#define GPIO_REAR_CONTROLLER_PCS_ISENSE   REAR_CONTROLLER_GPIO_DEF(C, 3)
 Rear Controller PCS current sense.
 
#define GPIO_REAR_CONTROLLER_AUX_ISENSE   REAR_CONTROLLER_GPIO_DEF(C, 2)
 Rear Controller AUX current sense.
 
#define GPIO_REAR_CONTROLLER_PRECHARGE_MONITOR_GPIO   REAR_CONTROLLER_GPIO_DEF(A, 0)
 Precharge monitoring pin.
 
#define GPIO_REAR_CONTROLLER_KILLSWITCH_MONITOR   REAR_CONTROLLER_GPIO_DEF(C, 5)
 Killswitch monitoring pin.
 
#define GPIO_REAR_CONTROLLER_BOARD_LED   REAR_CONTROLLER_GPIO_DEF(A, 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   4210
 
#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_POWER_WS22_DELAY_MS   750U
 
#define SOC_OCV_TABLE_SIZE   (100)
 
#define SOC_TABLE_VALUES
 SOC table initializer list. More...
 
#define OCV_TABLE_VALUES
 OCV table initializer list. More...
 

Enumerations

enum  RearControllerState { REAR_CONTROLLER_STATE_IDLE , REAR_CONTROLLER_STATE_DRIVE , REAR_CONTROLLER_STATE_FAULT , REAR_CONTROLLER_STATE_START }
 
enum  RearControllerEvent {
  REAR_CONTROLLER_EVENT_NONE = 0 , REAR_CONTROLLER_EVENT_INIT_COMPLETE , REAR_CONTROLLER_EVENT_DRIVE_REQUEST , REAR_CONTROLLER_EVENT_NEUTRAL_REQUEST ,
  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 trigger_bps_fault_with_cell (BpsFault fault, uint8_t cell_at_fault)
 Trigger a BPS fault with an associated cell index. More...
 
StatusCode trigger_bps_fault_with_data (BpsFault fault, uint8_t cell_at_fault, BpsFaultData data)
 Trigger a BPS fault with a detail snapshot for the fault data payload. More...
 
StatusCode bps_fault_clear ()
 Clear the BPS fault. More...
 
bool bps_is_disabled (void)
 Whether BPS protection is disabled from steering (manual override) 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)
 Ramps both PWM fans from idle to full over the temp band, and drives fan_pwr_1 on BPS fault. More...
 
StatusCode killswitch_init (Event event, const Task *task)
 Initializes the killswitch with interrupt handling. More...
 
StatusCode killswitch_run ()
 Run the program that checks killswitch.
 
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, RearControllerStorage *storage)
 Initializes the precharge pin with interrupt handling. More...
 
StatusCode precharge_run ()
 Run the program that checks precharge completion. More...
 
StatusCode rear_controller_init (RearControllerStorage *storage, RearControllerConfig *config, Ws22MotorCanConfig *motor_can_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 rear_controller_update_state_manager_medium_cycle ()
 Update the state/set relays based on information recieved from CAN (medium cycle). 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

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   4210

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_FAULT 

Faulted: relays open, latched until reset

REAR_CONTROLLER_STATE_START 

Start: relays open, latched until begin

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

◆ bps_is_disabled()

bool bps_is_disabled ( void  )

Whether BPS protection is disabled from steering (manual override)

Defaults to enabled until the first steering frame is received, so protection is never spuriously off at boot when the steering bitfield still reads its zero default.

Returns
true if BPS is disabled, false otherwise

◆ 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  )

Ramps both PWM fans from idle to full over the temp band, and drives fan_pwr_1 on BPS fault.

Returns
STATUS_CODE_OK if executed succesfully

◆ killswitch_init()

StatusCode killswitch_init ( Event  event,
const Task task 
)

Initializes the killswitch with interrupt handling.

Parameters
eventEvent to raise when killswitch is triggered
taskTask to notify when event is raised
Returns
StatusCode indicating success or failure of initialization

◆ 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

◆ precharge_init()

StatusCode precharge_init ( Event  event,
const Task task,
RearControllerStorage storage 
)

Initializes the precharge pin with interrupt handling.

Parameters
eventEvent to raise when precharge is complete
taskTask to notify when event is raised
Returns
StatusCode indicating success or failure of initialization

◆ precharge_run()

StatusCode precharge_run ( )

Run the program that checks precharge completion.

Returns
StatusCode indicating success or failure

◆ 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

◆ rear_controller_update_state_manager_medium_cycle()

StatusCode rear_controller_update_state_manager_medium_cycle ( )

Update the state/set relays based on information recieved from CAN (medium cycle).

Returns
STATUS_CODE_OK if udpated successfully

◆ 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

◆ trigger_bps_fault_with_cell()

StatusCode trigger_bps_fault_with_cell ( BpsFault  fault,
uint8_t  cell_at_fault 
)

Trigger a BPS fault with an associated cell index.

Parameters
faultBPS Fault event
cell_at_faultOne-based cell index for cell-related faults, or 0 if not applicable
Returns
STATUS_CODE_OK if triggered successfully STATUS_CODE_UNINITIALIZED if the system is not initialized

◆ trigger_bps_fault_with_data()

StatusCode trigger_bps_fault_with_data ( BpsFault  fault,
uint8_t  cell_at_fault,
BpsFaultData  data 
)

Trigger a BPS fault with a detail snapshot for the fault data payload.

The detail is latched only for the first (root) fault while a fault is active. The fault code bitmask still accumulates every active fault bit.

Parameters
faultBPS Fault event
cell_at_faultOne-based cell index for cell-related faults, or 0 if not applicable
dataFault-specific detail snapshot (see BpsFaultData in global_enums.h)
Returns
STATUS_CODE_OK if triggered successfully STATUS_CODE_UNINITIALIZED if the system is not initialized STATUS_CODE_INVALID_ARGS if the fault is out of range

Variable Documentation

◆ i

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