Midnight Sun Firmware
Loading...
Searching...
No Matches
Rear_Controller

Rear Controller Board Firmware. More...

Classes

struct  RearControllerConfig
 
struct  RearControllerStorage
 

Macros

#define REAR_CONTROLLER_PRECHARGE_EVENT   0U
 
#define REAR_CONTROLLER_KILLSWITCH_EVENT   1U
 
#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 = 4 }
 Rear Controller positive relay enable pin.
 
#define REAR_CONTROLLER_POS_RELAY_SENSE_GPIO    { .port = GPIO_PORT_B, .pin = 3 }
 Rear Controller positive relay sense pin.
 
#define REAR_CONTROLLER_NEG_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_B, .pin = 2 }
 Rear Controller negative relay enable pin.
 
#define REAR_CONTROLLER_NEG_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 12 }
 Rear Controller negative relay sense pin.
 
#define REAR_CONTROLLER_SOLAR_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_A, .pin = 5 }
 Rear Controller solar relay enable pin.
 
#define REAR_CONTROLLER_SOLAR_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 6 }
 Rear Controller solar relay sense pin.
 
#define REAR_CONTROLLER_MOTOR_RELAY_ENABLE_GPIO    { .port = GPIO_PORT_A, .pin = 9 }
 Rear Controller motor relay enable pin.
 
#define REAR_CONTROLLER_MOTOR_RELAY_SENSE_GPIO    { .port = GPIO_PORT_A, .pin = 10 }
 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_CURRENT_SENSE_I2C_PORT   I2C_PORT_1
 Current sense I2C port.
 
#define REAR_CONTROLLER_CURRENT_SENSE_I2C_SDA_GPIO    { .port = GPIO_PORT_B, .pin = 7 }
 Current sense I2C serial data pin.
 
#define REAR_CONTROLLER_CURRENT_SENSE_I2C_SCL_GPIO    { .port = GPIO_PORT_B, .pin = 6 }
 Current sense I2C clock pin.
 
#define REAR_CONTROLLER_CURRENT_SENSE_MAX17261_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 = 1 }
 Rear Controller PCS voltage sense.
 
#define REAR_CONTROLLER_AUX_VSENSE    { .port = GPIO_PORT_A, .pin = 2 }
 Rear Controller AUX voltage sense.
 
#define REAR_CONTROLLER_PCS_ISENSE    { .port = GPIO_PORT_C, .pin = 2 }
 Rear Controller PCS current sense.
 
#define REAR_CONTROLLER_AUX_ISENSE    { .port = GPIO_PORT_C, .pin = 3 }
 Rear Controller AUX current sense.
 
#define REAR_CONTROLLER_PRECHARGE_MONITOR_GPIO    { .port = GPIO_PORT_A, .pin = 3 }
 Precharge monitoring pin.
 
#define REAR_CONTROLLER_KILLSWITCH_MONITOR_GPIO    { .port = GPIO_PORT_A, .pin = 11 }
 Killswitch monitoring pin.
 
#define PACK_MAX_DISCHARGE_CURRENT_MA   58200
 
#define PACK_MAX_CHARGE_CURRENT_MA   -27000
 
#define PACK_SHORT_CIRCUIT_CURRENT_MA   60000
 
#define CELL_OVERVOLTAGE_LIMIT_MV   4200
 
#define CELL_UNDERVOLTAGE_LIMIT_MV   2500
 
#define CELL_OVERTEMP_DISCHARGE_LIMIT_C   60
 
#define CELL_OVERTEMP_CHARGE_LIMIT_C   55
 
#define CELL_UNDERTEMP_CHARGE_LIMIT_C   0
 
#define SHORT_CIRCUIT_RESPONSE_MS   1U
 
#define OVERCURRENT_RESPONSE_MS   50U
 
#define OVERTEMP_RESPONSE_MS   500U
 
#define UNDERVOLTAGE_RESPONSE_MS   1000U
 
#define OVERVOLTAGE_RESPONSE_MS   1000U
 

Enumerations

enum  RearControllerState {
  REAR_CONTROLLER_STATE_INIT = 0 , REAR_CONTROLLER_STATE_PRECHARGE , 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_PRECHARGE_SUCCESS , REAR_CONTROLLER_EVENT_PRECHARGE_FAIL ,
  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 killswitch_init (Event event, const Task *task)
 
StatusCode precharge_init (Event event, const Task *task)
 
StatusCode rear_controller_state_manager_init (void)
 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...
 

Detailed Description

Rear Controller Board Firmware.

Macro Definition Documentation

◆ CELL_OVERTEMP_CHARGE_LIMIT_C

#define CELL_OVERTEMP_CHARGE_LIMIT_C   55

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_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

◆ OVERCURRENT_RESPONSE_MS

#define OVERCURRENT_RESPONSE_MS   50U

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_MA

#define PACK_MAX_CHARGE_CURRENT_MA   -27000

Maximum allowed charge current

◆ PACK_MAX_DISCHARGE_CURRENT_MA

#define PACK_MAX_DISCHARGE_CURRENT_MA   58200

Maximum allowed discharge current

◆ PACK_SHORT_CIRCUIT_CURRENT_MA

#define PACK_SHORT_CIRCUIT_CURRENT_MA   60000

Instantaneous short-circuit threshold

◆ SHORT_CIRCUIT_RESPONSE_MS

#define SHORT_CIRCUIT_RESPONSE_MS   1U

HW trip reaction time

◆ UNDERVOLTAGE_RESPONSE_MS

#define UNDERVOLTAGE_RESPONSE_MS   1000U

Delay before under-voltage trips

Enumeration Type Documentation

◆ RearControllerState

Enumerator
REAR_CONTROLLER_STATE_INIT 

System init, checks and startup

REAR_CONTROLLER_STATE_PRECHARGE 

Precharge active, waiting for bus voltages to equalize

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

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

Initialize the state machine.

Returns
STATUS_CODE_OK if initialized succesfully 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 succesfully STATUS_CODE_UNINITIALIZED if uninitialized