BMS_Master.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. //##############################################################################
  2. //
  3. // FILE: BMS_Master.h
  4. //
  5. // TITLE: Central Header & Main Header
  6. //
  7. //
  8. //##############################################################################
  9. //
  10. //==============================================================================
  11. // Change History:
  12. //==============================================================================
  13. // Datum: | Name | Version:| Change / Cause: | No
  14. //------------------------------------------------------------------------------
  15. // | | | | 002
  16. //------------------------------------------------------------------------------
  17. // 07.02.14 | VR | 1.1 | upgrade 2 CoreWarrior 10.5 id: 130916 | 001
  18. //------------------------------------------------------------------------------
  19. // 20.04.12 | TM | 1.0 | New Build | 000
  20. //==============================================================================
  21. //==============================================================================
  22. // Comment Change / Cause:
  23. //==============================================================================
  24. // Change: 003 // 003
  25. //----------------------
  26. //
  27. //
  28. //==============================================================================
  29. // Change: 002 // 002
  30. //----------------------
  31. //
  32. //
  33. //==============================================================================
  34. // Change: 001 // 001
  35. //----------------------
  36. //
  37. //
  38. //==============================================================================
  39. #ifndef __BMS_MASTER_H__
  40. #define __BMS_MASTER_H__
  41. // ***** Includes **************************************************************
  42. #include "MPC5646C.h"
  43. #include "Typedefs.h"
  44. #include "IntcInterrupts.h"
  45. #include "Device.h"
  46. #include "FlexCAN.h"
  47. #include "BMS_Typedefs.h"
  48. #include "BMS_CANx_Tools.h"
  49. #include "BMS_CAN0_gen_test_data.h"
  50. #include "DSPI.h"
  51. #include "FRAM.h"
  52. #include "BoardPeripherals.h"
  53. #include "MultitaskOS.h"
  54. #include "RelaisLEDs.h"
  55. #include "BMS_Defines.h"
  56. #include "ADC_1.h"
  57. #include "UartToUsb.h"
  58. #include "LIN_Uart.h"
  59. #include "DebugUndTest.h"
  60. #include "TempSensorSpi.h"
  61. #include "utils.h"
  62. #include "BMS_SoC_estimator.h"
  63. // ***** global Variables **********************************************************
  64. extern BSD_t gBSD;
  65. extern BSE_t gBSE;
  66. extern uint8_t gMaxDischargeCurrent;
  67. extern FramStatus_t Fram_S;
  68. extern uint32_t gEvent;
  69. extern uint32_t gErrorEvent;
  70. extern uint8_t gCANErrorInsert;
  71. extern MASTER_CAN0_STRUCT_t gDUMMY_data_struct;
  72. extern CAN_MAILBOX CAN_Tx0_RCT_INVERTER;
  73. extern CAN_MAILBOX CAN_Tx1_RCT_INVERTER;
  74. extern CAN_MAILBOX CAN_Rx_RCT_INVERTER;
  75. // ***** Local Prototypes ******************************************************
  76. uint16_t init_master_CAN0_fsm(MASTER_CAN0_STRUCT_t* s,BMS_SLAVE_CONFIGURATION_t* cellConfig,BMS_UI_CONFIGURATION_t* uiConfig);
  77. uint16_t Master_CAN0_fsm(MASTER_CAN0_STRUCT_t* s,uint64_t time);
  78. uint16_t init_master_operation_fsm(BMS_MASTER_OPERATION_t* opFsm);
  79. uint16_t Master_operation_fsm(MASTER_CAN0_STRUCT_t* canFsm,uint32_t time,BMS_MASTER_OPERATION_t* opFsm);
  80. void set_slave_cell_connection_state(MASTER_CAN0_STRUCT_t* s,uint8_t slaveNr,CELL_STATE_t* cell_state);
  81. void set_slave_temp_connection_state(MASTER_CAN0_STRUCT_t* s,uint8_t slaveNr,TEMP_SENSOR_STATE_t* temp_state);
  82. uint8_t check_slave_data(MASTER_CAN0_STRUCT_t* s,
  83. BMS_CAN0_SLAVE_t* Slave,
  84. BMS_CAN0_SLAVE_t* tempSlave,
  85. int8_t overTemp_charge,
  86. int8_t overTemp_discharge,
  87. int8_t underTemp_charge,
  88. int8_t underTemp_discharge,
  89. uint16_t overVoltage,uint16_t underVoltage) ;
  90. void initCellConfig(BMS_SLAVE_CONFIGURATION_t* cellConfig);
  91. void initUiConfig(BMS_UI_CONFIGURATION_t* uiConfig) ;
  92. int16_t CAN1_request_float_value(uint64_t timestamp,float* value,uint32_t requestId) ;
  93. uint16_t CAN2_init( void );
  94. uint16_t CAN2_update( void );
  95. uint32_t set_balancer_off(MASTER_CAN0_STRUCT_t* s) ;
  96. uint32_t BMS_set_Error_check_if_stable_discharge(MASTER_CAN0_STRUCT_t* s);
  97. uint32_t BMS_set_Error_check_if_active_stable_discharge(MASTER_CAN0_STRUCT_t* s);
  98. 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);
  99. uint32_t calc_block_voltage(BMS_CAN0_SLAVE_t* Slave);
  100. uint32_t set_block_min_max_temp(BMS_CAN0_SLAVE_t* Slave);
  101. uint32_t calc_system_voltage(MASTER_CAN0_STRUCT_t* s);
  102. void calc_system_SoC(MASTER_CAN0_STRUCT_t* s);
  103. void refresh_inverter_tx_data(MASTER_CAN0_STRUCT_t* s);
  104. uint8_t check_if_all_values_are_initialized(MASTER_CAN0_STRUCT_t* s);
  105. void shuffle_lsb_msb_can1(uint8_t* value);
  106. uint16_t Master_CAN1_fsm(MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_STRUCT_t* can1Fsm,uint32_t time);
  107. uint16_t Master_CAN1_fsm_init(MASTER_CAN1_STRUCT_t* can1Fsm);
  108. uint32_t Master_CAN1_Inverter_fsm(MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_INVERTER_STRUCT_t* fsmStruct) ;
  109. uint32_t set_balancer(MASTER_CAN0_STRUCT_t* s) ;
  110. uint32_t Master_Balancer_fsm(MASTER_CAN0_STRUCT_t* s);
  111. uint32_t calc_min_max_voltage_slave(BMS_CAN0_SLAVE_t* Slave) ;
  112. uint32_t calc_min_max_voltage_system(MASTER_CAN0_STRUCT_t* s) ;
  113. uint32_t balance_cell(BMS_CAN0_SLAVE_t* Slave,uint8_t cell_nr);
  114. uint32_t set_system_min_max_temp(MASTER_CAN0_STRUCT_t* s);
  115. uint32_t set_system_min_max_heatsink_temp(MASTER_CAN0_STRUCT_t* s);
  116. uint16_t CAN0_clear_all_interrupt_flags();
  117. uint32_t generateCellInfoPkg(MASTER_CAN0_STRUCT_t* s, uint8_t cellIndex,BMS_CAN1_INVERTER_CELL_DATA_t* txPkg);
  118. uint8_t get_nr_of_connected_slaves(MASTER_CAN0_STRUCT_t* s);
  119. uint32_t ErrorStackPushSlaveError(MASTER_CAN0_STRUCT_t* s,uint8_t slaveNr,uint32_t ErrorCode,uint8_t CellNr,uint8_t ErrorClass);
  120. uint32_t ErrorStackPushUiError(MASTER_CAN0_STRUCT_t* s,uint32_t ErrorCode,uint8_t ErrorClass);
  121. uint32_t ErrorStackPushMasterError(MASTER_CAN0_STRUCT_t* s,uint32_t ErrorCode,uint8_t ErrorClass);
  122. uint32_t ErrorStackGenerateStatusPkg(uint8_t* targetBuffer,uint8_t* ErrorCode);
  123. uint32_t ErrorStackCheckBufferForError(MASTER_CAN0_STRUCT_t* s,uint32_t ErrorWord,uint8_t ErrorClass) ;
  124. uint32_t ErrorStackCheckForActiveErrors(MASTER_CAN0_STRUCT_t* s,uint8_t ErrorClass);
  125. uint32_t ErrorStackClearBuffer(MASTER_CAN0_STRUCT_t* s);
  126. uint32_t ErrorStackCheckForActiveErrors(MASTER_CAN0_STRUCT_t* s,uint8_t ErrorClass);
  127. uint32_t BMS_Clear_Error_Buffer(MASTER_CAN0_STRUCT_t* s,uint8_t ErrorClass);
  128. uint32_t BMS_Master_ES1_fsm(MASTER_CAN0_STRUCT_t* s);
  129. uint32_t BMS_Master_ES2_fsm(MASTER_CAN0_STRUCT_t* s);
  130. uint32_t BMS_Master_ES3_fsm(MASTER_CAN0_STRUCT_t* s);
  131. uint32_t BMS_Set_Error_check_Voltage_level_min(MASTER_CAN0_STRUCT_t* s);
  132. uint16_t Master_CAN0_ERROR_fsm(MASTER_CAN0_STRUCT_t* s,uint32_t time);
  133. int32_t checkIfInverterHasPower(MASTER_CAN0_STRUCT_t* s);
  134. uint32_t OPModeFSM(MASTER_CAN0_STRUCT_t* s);
  135. uint32_t RunningModeFSM(MASTER_CAN0_STRUCT_t* s);
  136. uint32_t write_fram_byte(uint8_t byte,uint32_t timeout,const vuint16_t Addr);
  137. uint32_t write_fram_word(uint16_t word,uint32_t timeout,const vuint16_t Addr);
  138. uint32_t write_fram_float(float float_value,uint32_t timeout,const vuint16_t Addr);
  139. uint32_t read_fram_byte(uint8_t* word,uint32_t timeout,const vuint16_t Addr);
  140. uint32_t read_fram_word(uint16_t* word,uint32_t timeout,const vuint16_t Addr);
  141. uint32_t read_fram_float(float* word,uint32_t timeout,const vuint16_t Addr);
  142. uint32_t write_fram_set_SoC(float SoC) ;
  143. uint32_t read_fram_get_startup_state(MASTER_CAN0_STRUCT_t* s);
  144. float read_fram_get_SoC() ;
  145. uint32_t write_fram_set_startup_state(MASTER_CAN0_STRUCT_t* s) ;
  146. uint32_t write_fram_clear_startup_state();
  147. uint32_t write_fram_uint32(uint32_t word,uint32_t timeout,const vuint16_t Addr);
  148. uint32_t read_fram_uint32(uint32_t* word,uint32_t timeout,const vuint16_t Addr);
  149. uint32_t write_fram_write_error(uint32_t Error,uint8_t ErrorLevel,uint8_t ErrorNr);
  150. uint32_t read_fram_read_error_buffer(MASTER_CAN0_STRUCT_t* s) ;
  151. uint32_t write_fram_clear_error_buffer(MASTER_CAN0_STRUCT_t* s) ;
  152. uint32_t readMasterTempSensorFsm(MASTER_CAN0_STRUCT_t* s) ;
  153. uint32_t startup_BMS(MASTER_CAN0_STRUCT_t* s) ;
  154. int32_t bms_SoC_init_estimator_FRAM(MASTER_SOC_ESTIMATOR_t* cell_SoC, uint16_t voltage);
  155. uint32_t BMS_Set_Error_check_System_voltage_level_max(MASTER_CAN0_STRUCT_t* s);
  156. uint32_t BMS_Set_Error_check_Voltage_level_max(MASTER_CAN0_STRUCT_t* s) ;
  157. uint32_t BMS_set_Error_check_if_stable_charge(MASTER_CAN0_STRUCT_t* s) ;
  158. uint32_t BMS_Set_Error_Check_derating(MASTER_CAN0_STRUCT_t* s);
  159. uint32_t BMS_Clear_Error_State_Slave(MASTER_CAN0_STRUCT_t* s,BMS_ERROR_STATE_t* error_state);
  160. uint32_t BMS_Clear_Error_State_check_restore_timeout(MASTER_CAN0_STRUCT_t* s) ;
  161. 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) ;
  162. uint32_t BMS_Clear_Error_init_recovery_struct(MASTER_CAN0_STRUCT_t* s);
  163. uint32_t BMS_RCT_init_fsm(MASTER_CAN0_STRUCT_t* s);
  164. uint32_t BMS_RCT_Inverter_fsm (MASTER_CAN0_STRUCT_t* s);
  165. uint32_t ErrorStackCheckifUmin1ErrorRecoveryPending(MASTER_CAN0_STRUCT_t* s);
  166. uint32_t ErrorStackCheckifUmin2ErrorRecoveryPending(MASTER_CAN0_STRUCT_t* s);
  167. uint32_t ErrorStackCheckifAnyErrorRecoveryPending(MASTER_CAN0_STRUCT_t* s);
  168. uint32_t initUIFifo(MASTER_CAN0_STRUCT_t* s);
  169. uint32_t popUIFiFo(MASTER_CAN0_STRUCT_t* s) ;
  170. uint32_t BMS_Set_Error_CAN1_Timeout(MASTER_CAN0_STRUCT_t* s) ;
  171. uint32_t BMS_Can_ID_init_recofigure_CAN_IDs(MASTER_CAN0_STRUCT_t* s) ;
  172. uint32_t BMS_Can_ID_init_fsm (MASTER_CAN0_STRUCT_t* s);
  173. uint32_t BMS_Can_ID_init_init_startupConfig (MASTER_CAN0_STRUCT_t* s);
  174. uint32_t Master_CAN1_select_comm_mode (MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_INVERTER_STRUCT_t* fsmStruct) ;
  175. uint32_t Master_CAN1_Fast_request_fsm (MASTER_CAN0_STRUCT_t* s,MASTER_CAN1_INVERTER_STRUCT_t* fsmStruct) ;
  176. uint32_t pushInverterCurrentFIFO(MASTER_CAN0_STRUCT_t* s);
  177. uint32_t BMS_Set_Error_Check_current_consitency(MASTER_CAN0_STRUCT_t* s);
  178. uint32_t BMS_Set_Error_Check_voltage_inconsitency(MASTER_CAN0_STRUCT_t* s);
  179. uint32_t BMS_set_Error_Check_UI_Flags(MASTER_CAN0_STRUCT_t* s) ;
  180. uint32_t initSoCFifo(MASTER_CAN0_STRUCT_t* s);
  181. uint32_t pushSoCFiFo(MASTER_SOC_ESTIMATOR_t* est);
  182. uint32_t BMS_Set_Error_UI_Relais(MASTER_CAN0_STRUCT_t* s) ;
  183. // ***** Global Prototypes *****************************************************
  184. void SwitchRelais ( uint8_t, uint8_t );
  185. #endif /* ifndef*/
  186. // ***** End BMS_Master.h ******************************************************