123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- //##############################################################################
- //
- // FILE: BMS_Master.h
- //
- // TITLE: Central Header & Main Header
- //
- //
- //##############################################################################
- //
- //==============================================================================
- // Change History:
- //==============================================================================
- // Datum: | Name | Version:| Change / Cause: | No
- //------------------------------------------------------------------------------
- // | | | | 002
- //------------------------------------------------------------------------------
- // 07.02.14 | VR | 1.1 | upgrade 2 CoreWarrior 10.5 id: 130916 | 001
- //------------------------------------------------------------------------------
- // 20.04.12 | TM | 1.0 | New Build | 000
- //==============================================================================
- //==============================================================================
- // Comment Change / Cause:
- //==============================================================================
- // Change: 003 // 003
- //----------------------
- //
- //
- //==============================================================================
- // Change: 002 // 002
- //----------------------
- //
- //
- //==============================================================================
- // Change: 001 // 001
- //----------------------
- //
- //
- //==============================================================================
- #ifndef __BMS_MASTER_H__
- #define __BMS_MASTER_H__
- // ***** Includes **************************************************************
- #include "MPC5646C.h"
- #include "Typedefs.h"
- #include "IntcInterrupts.h"
- #include "Device.h"
- #include "FlexCAN.h"
- #include "BMS_Typedefs.h"
- #include "BMS_CANx_Tools.h"
- #include "BMS_CAN0_gen_test_data.h"
- #include "DSPI.h"
- #include "FRAM.h"
- #include "BoardPeripherals.h"
- #include "MultitaskOS.h"
- #include "RelaisLEDs.h"
- #include "BMS_Defines.h"
- #include "ADC_1.h"
- #include "UartToUsb.h"
- #include "LIN_Uart.h"
- #include "DebugUndTest.h"
- #include "TempSensorSpi.h"
- #include "utils.h"
- #include "BMS_SoC_estimator.h"
- // ***** global Variables **********************************************************
- extern BSD_t gBSD;
- extern BSE_t gBSE;
- extern uint8_t gMaxDischargeCurrent;
- extern FramStatus_t Fram_S;
- extern uint32_t gEvent;
- extern uint32_t gErrorEvent;
- extern uint8_t gCANErrorInsert;
- extern MASTER_CAN0_STRUCT_t gDUMMY_data_struct;
- extern CAN_MAILBOX CAN_Tx0_RCT_INVERTER;
- extern CAN_MAILBOX CAN_Tx1_RCT_INVERTER;
- extern CAN_MAILBOX CAN_Rx_RCT_INVERTER;
- // ***** Local Prototypes ******************************************************
-
- uint16_t init_master_CAN0_fsm(MASTER_CAN0_STRUCT_t* s,BMS_SLAVE_CONFIGURATION_t* cellConfig,BMS_UI_CONFIGURATION_t* uiConfig);
- uint16_t Master_CAN0_fsm(MASTER_CAN0_STRUCT_t* s,uint64_t time);
- uint16_t init_master_operation_fsm(BMS_MASTER_OPERATION_t* opFsm);
- uint16_t Master_operation_fsm(MASTER_CAN0_STRUCT_t* canFsm,uint32_t time,BMS_MASTER_OPERATION_t* opFsm);
- void set_slave_cell_connection_state(MASTER_CAN0_STRUCT_t* s,uint8_t slaveNr,CELL_STATE_t* cell_state);
- void set_slave_temp_connection_state(MASTER_CAN0_STRUCT_t* s,uint8_t slaveNr,TEMP_SENSOR_STATE_t* temp_state);
- uint8_t check_slave_data(MASTER_CAN0_STRUCT_t* s,
- BMS_CAN0_SLAVE_t* Slave,
- BMS_CAN0_SLAVE_t* tempSlave,
- int8_t overTemp_charge,
- int8_t overTemp_discharge,
- int8_t underTemp_charge,
- int8_t underTemp_discharge,
- uint16_t overVoltage,uint16_t underVoltage) ;
- void initCellConfig(BMS_SLAVE_CONFIGURATION_t* cellConfig);
- void initUiConfig(BMS_UI_CONFIGURATION_t* uiConfig) ;
-
- int16_t CAN1_request_float_value(uint64_t timestamp,float* value,uint32_t requestId) ;
- uint16_t CAN2_init( void );
- uint16_t CAN2_update( void );
- uint32_t set_balancer_off(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t BMS_set_Error_check_if_stable_discharge(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_set_Error_check_if_active_stable_discharge(MASTER_CAN0_STRUCT_t* s);
-
-
- uint8_t check_UI_data(BMS_CAN0_SLAVE_t* Slave, BMS_CAN0_SLAVE_t* tempSlave,BMS_CAN0_UI_t* ui,BMS_CAN0_UI_t* tempUI);
- uint32_t calc_block_voltage(BMS_CAN0_SLAVE_t* Slave);
- uint32_t set_block_min_max_temp(BMS_CAN0_SLAVE_t* Slave);
- uint32_t calc_system_voltage(MASTER_CAN0_STRUCT_t* s);
- void calc_system_SoC(MASTER_CAN0_STRUCT_t* s);
- void refresh_inverter_tx_data(MASTER_CAN0_STRUCT_t* s);
- uint8_t check_if_all_values_are_initialized(MASTER_CAN0_STRUCT_t* s);
- void shuffle_lsb_msb_can1(uint8_t* value);
- uint16_t Master_CAN1_fsm(MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_STRUCT_t* can1Fsm,uint32_t time);
- uint16_t Master_CAN1_fsm_init(MASTER_CAN1_STRUCT_t* can1Fsm);
- uint32_t Master_CAN1_Inverter_fsm(MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_INVERTER_STRUCT_t* fsmStruct) ;
- uint32_t set_balancer(MASTER_CAN0_STRUCT_t* s) ;
-
- uint32_t Master_Balancer_fsm(MASTER_CAN0_STRUCT_t* s);
- uint32_t calc_min_max_voltage_slave(BMS_CAN0_SLAVE_t* Slave) ;
- uint32_t calc_min_max_voltage_system(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t balance_cell(BMS_CAN0_SLAVE_t* Slave,uint8_t cell_nr);
- uint32_t set_system_min_max_temp(MASTER_CAN0_STRUCT_t* s);
- uint32_t set_system_min_max_heatsink_temp(MASTER_CAN0_STRUCT_t* s);
-
- uint16_t CAN0_clear_all_interrupt_flags();
- uint32_t generateCellInfoPkg(MASTER_CAN0_STRUCT_t* s, uint8_t cellIndex,BMS_CAN1_INVERTER_CELL_DATA_t* txPkg);
-
- uint8_t get_nr_of_connected_slaves(MASTER_CAN0_STRUCT_t* s);
- uint32_t ErrorStackPushSlaveError(MASTER_CAN0_STRUCT_t* s,uint8_t slaveNr,uint32_t ErrorCode,uint8_t CellNr,uint8_t ErrorClass);
- uint32_t ErrorStackPushUiError(MASTER_CAN0_STRUCT_t* s,uint32_t ErrorCode,uint8_t ErrorClass);
- uint32_t ErrorStackPushMasterError(MASTER_CAN0_STRUCT_t* s,uint32_t ErrorCode,uint8_t ErrorClass);
- uint32_t ErrorStackGenerateStatusPkg(uint8_t* targetBuffer,uint8_t* ErrorCode);
- uint32_t ErrorStackCheckBufferForError(MASTER_CAN0_STRUCT_t* s,uint32_t ErrorWord,uint8_t ErrorClass) ;
- uint32_t ErrorStackCheckForActiveErrors(MASTER_CAN0_STRUCT_t* s,uint8_t ErrorClass);
- uint32_t ErrorStackClearBuffer(MASTER_CAN0_STRUCT_t* s);
- uint32_t ErrorStackCheckForActiveErrors(MASTER_CAN0_STRUCT_t* s,uint8_t ErrorClass);
-
- uint32_t BMS_Clear_Error_Buffer(MASTER_CAN0_STRUCT_t* s,uint8_t ErrorClass);
-
-
- uint32_t BMS_Master_ES1_fsm(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Master_ES2_fsm(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Master_ES3_fsm(MASTER_CAN0_STRUCT_t* s);
-
-
- uint32_t BMS_Set_Error_check_Voltage_level_min(MASTER_CAN0_STRUCT_t* s);
-
-
- uint16_t Master_CAN0_ERROR_fsm(MASTER_CAN0_STRUCT_t* s,uint32_t time);
-
- int32_t checkIfInverterHasPower(MASTER_CAN0_STRUCT_t* s);
- uint32_t OPModeFSM(MASTER_CAN0_STRUCT_t* s);
- uint32_t RunningModeFSM(MASTER_CAN0_STRUCT_t* s);
-
- uint32_t write_fram_byte(uint8_t byte,uint32_t timeout,const vuint16_t Addr);
- uint32_t write_fram_word(uint16_t word,uint32_t timeout,const vuint16_t Addr);
- uint32_t write_fram_float(float float_value,uint32_t timeout,const vuint16_t Addr);
- uint32_t read_fram_byte(uint8_t* word,uint32_t timeout,const vuint16_t Addr);
- uint32_t read_fram_word(uint16_t* word,uint32_t timeout,const vuint16_t Addr);
- uint32_t read_fram_float(float* word,uint32_t timeout,const vuint16_t Addr);
- uint32_t write_fram_set_SoC(float SoC) ;
- uint32_t read_fram_get_startup_state(MASTER_CAN0_STRUCT_t* s);
- float read_fram_get_SoC() ;
- uint32_t write_fram_set_startup_state(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t write_fram_clear_startup_state();
- uint32_t write_fram_uint32(uint32_t word,uint32_t timeout,const vuint16_t Addr);
- uint32_t read_fram_uint32(uint32_t* word,uint32_t timeout,const vuint16_t Addr);
- uint32_t write_fram_write_error(uint32_t Error,uint8_t ErrorLevel,uint8_t ErrorNr);
- uint32_t read_fram_read_error_buffer(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t write_fram_clear_error_buffer(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t readMasterTempSensorFsm(MASTER_CAN0_STRUCT_t* s) ;
-
- uint32_t startup_BMS(MASTER_CAN0_STRUCT_t* s) ;
-
-
- int32_t bms_SoC_init_estimator_FRAM(MASTER_SOC_ESTIMATOR_t* cell_SoC, uint16_t voltage);
-
- uint32_t BMS_Set_Error_check_System_voltage_level_max(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Set_Error_check_Voltage_level_max(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t BMS_set_Error_check_if_stable_charge(MASTER_CAN0_STRUCT_t* s) ;
-
- uint32_t BMS_Set_Error_Check_derating(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Clear_Error_State_Slave(MASTER_CAN0_STRUCT_t* s,BMS_ERROR_STATE_t* error_state);
- uint32_t BMS_Clear_Error_State_check_restore_timeout(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t BMS_Clear_Error_State_Master(MASTER_CAN0_STRUCT_t* s,BMS_ERROR_STATE_t* error_state,uint8_t Error_nr,uint8_t Error_class) ;
- uint32_t BMS_Clear_Error_init_recovery_struct(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_RCT_init_fsm(MASTER_CAN0_STRUCT_t* s);
-
- uint32_t BMS_RCT_Inverter_fsm (MASTER_CAN0_STRUCT_t* s);
- uint32_t ErrorStackCheckifUmin1ErrorRecoveryPending(MASTER_CAN0_STRUCT_t* s);
- uint32_t ErrorStackCheckifUmin2ErrorRecoveryPending(MASTER_CAN0_STRUCT_t* s);
- uint32_t ErrorStackCheckifAnyErrorRecoveryPending(MASTER_CAN0_STRUCT_t* s);
-
- uint32_t initUIFifo(MASTER_CAN0_STRUCT_t* s);
- uint32_t popUIFiFo(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t BMS_Set_Error_CAN1_Timeout(MASTER_CAN0_STRUCT_t* s) ;
-
- uint32_t BMS_Can_ID_init_recofigure_CAN_IDs(MASTER_CAN0_STRUCT_t* s) ;
- uint32_t BMS_Can_ID_init_fsm (MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Can_ID_init_init_startupConfig (MASTER_CAN0_STRUCT_t* s);
-
- uint32_t Master_CAN1_select_comm_mode (MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_INVERTER_STRUCT_t* fsmStruct) ;
- uint32_t Master_CAN1_Fast_request_fsm (MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_INVERTER_STRUCT_t* fsmStruct) ;
- uint32_t pushInverterCurrentFIFO(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Set_Error_Check_current_consitency(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_Set_Error_Check_voltage_inconsitency(MASTER_CAN0_STRUCT_t* s);
- uint32_t BMS_set_Error_Check_UI_Flags(MASTER_CAN0_STRUCT_t* s) ;
-
- uint32_t initSoCFifo(MASTER_CAN0_STRUCT_t* s);
- uint32_t pushSoCFiFo(MASTER_SOC_ESTIMATOR_t* est);
-
- // ***** Global Prototypes *****************************************************
- void SwitchRelais ( uint8_t, uint8_t );
-
- #endif /* ifndef*/
-
-
- // ***** End BMS_Master.h ******************************************************
-
|