BMS_LTC.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /*********************************************************************
  2. *
  3. * LTC6803 API Header
  4. *
  5. *********************************************************************
  6. * FileName: BMS_LTC.h
  7. * Processor: PIC18F45K80
  8. * Compiler: Microchip C18 v3.41
  9. * Company: KIT - CN - IPE
  10. *
  11. * Author Date Comment
  12. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  13. * Reiling V. 17.02.2012 Release
  14. * Reiling V. 29.03.2012 Release 2. see change log file
  15. *********************************************************************/
  16. //#ifndef LTC_H // To avoid duplicate inclusion
  17. #define LTC_H
  18. /*********************************************************************
  19. *
  20. * General purpose typedef's
  21. *
  22. ********************************************************************/
  23. typedef union _LTC_CFG
  24. {
  25. struct
  26. {
  27. uint8_t LTC_CFG_RAW[16];
  28. uint8_t CDC[2];
  29. uint8_t CELL10[2];
  30. uint8_t LVL_PL[2];
  31. uint8_t GPIO[2];
  32. uint8_t WDT[2];
  33. uint16_t DCC[2];
  34. uint16_t MC[2];
  35. int16_t VUV[2];
  36. int16_t VOV[2];
  37. };
  38. } LTC_CFG;
  39. typedef union _LTC_CVAD
  40. {
  41. struct
  42. {
  43. uint8_t LTC_CVAD_RAW[40];
  44. int16_t CVAD[24];
  45. };
  46. } LTC_CVAD;
  47. typedef union _LTC_TMP
  48. {
  49. struct
  50. {
  51. uint8_t LTC_TMP_RAW[14];
  52. int8_t ETMP[24];
  53. int8_t ITMP[2];
  54. uint8_t THSD[2];
  55. };
  56. } LTC_TMP;
  57. typedef union _LTC_DRG
  58. {
  59. struct
  60. {
  61. uint8_t LTC_DRG_RAW[8];
  62. int16_t REF[2];
  63. uint8_t MUXFAIL[2];
  64. uint8_t REV[2];
  65. uint8_t PEC_Counter;
  66. };
  67. } LTC_DRG;
  68. typedef union _LTC_STATUS
  69. {
  70. struct
  71. {
  72. uint16_t LTC_StatusSlave;
  73. uint8_t LTC_PECFailCounter;
  74. int8_t HeatSinkTemperature;
  75. uint16_t LTC_SelfTest;
  76. };
  77. }LTC_STATUS;
  78. typedef union _CAN_CONFIG
  79. {
  80. struct
  81. {
  82. uint8_t SlaveNo;
  83. uint8_t BRP;
  84. uint8_t PROPSEG;
  85. uint8_t PHSEG1;
  86. uint8_t PHSEG2;
  87. uint8_t SJW;
  88. uint8_t PHSEG2_MODE;
  89. uint8_t BUS_SAMPLE_MODE;
  90. uint8_t WAKEUP_MODE;
  91. uint8_t FILTER_MODE;
  92. };
  93. } CAN_CONFIG;
  94. /*********************************************************************
  95. *
  96. * Defines
  97. *
  98. *********************************************************************/
  99. #define LTC_OK 0
  100. #define LTC_NOK 0x8000
  101. // LTC6803-3 Self Test Flags
  102. #define LTC1_VST1_NOK 0x0001 // Fehler im ersten Test des ADCs im Spannungsmodus
  103. #define LTC1_VST2_NOK 0x0002 // Fehler im zweiten Test des ADCs im Spannungsmodus
  104. #define LTC1_TST1_NOK 0x0004 // Fehler im ersten Test des ADCs im Temperaturmodus
  105. #define LTC1_TST2_NOK 0x0008 // Fehler im zweiten Test des ADCs im Temperaturmodus
  106. #define LTC1_RefL_NOK 0x0010 // Referenzspannung low - Underflow
  107. #define LTC1_RefH_NOK 0x0020 // Referenzspannung high - Overflow
  108. #define LTC1_MUX_NOK 0x0040 // Fehler des internen Multiplexers des LTC
  109. #define LTC_PEC_NOK 0x0080 // PEC Fehler innerhalb der LTC_SelfTest( ) Abarbeitung
  110. #define LTC2_VST1_NOK 0x0100 // Fehler im ersten Test des ADCs im Spannungsmodus
  111. #define LTC2_VST2_NOK 0x0200 // Fehler im zweiten Test des ADCs im Spannungsmodus
  112. #define LTC2_TST1_NOK 0x0400 // Fehler im ersten Test des ADCs im Temperaturmodus
  113. #define LTC2_TST2_NOK 0x0800 // Fehler im zweiten Test des ADCs im Temperaturmodus
  114. #define LTC2_RefL_NOK 0x1000 // Referenzspannung low - Underflow
  115. #define LTC2_RefH_NOK 0x2000 // Referenzspannung high - Overflow
  116. #define LTC2_MUX_NOK 0x4000 // Fehler des internen Multiplexers des LTC
  117. // LTC6803-3 Status Flags
  118. #define WarnLowTemp -40 // Untergrenze bei der eine Warnung generiert wird
  119. #define WarnHighTemp 80 // Obergrenze bei der eine Warnung generiert wird
  120. #define LTC1_LowTemp_NOK 0x0001
  121. #define LTC2_LowTemp_NOK 0x0002
  122. #define LTC1_HighTemp_NOK 0x0004
  123. #define LTC2_HighTemp_NOK 0x0008
  124. #define LTC1_THSD_NOK 0x0010
  125. #define LTC2_THSD_NOK 0x0020
  126. #define LTC_TimeOut 0x0040
  127. #define LTC_PEC_NOK 0x0080
  128. #define RELAIS_ON 0x0100
  129. #define CAN_Rx_Overrun 0x0200
  130. #define CAN_Rx_Warning 0x0400
  131. #define CAN_Rx_Passiv 0x0800
  132. #define CAN_Tx_Warning 0x1000
  133. #define CAN_Tx_Passiv 0x2000
  134. // LTC6803-3 Command Codes
  135. #define WRCFG 0x01 // Write config
  136. #define RDCFG 0x02 // Read config
  137. #define RDCV 0x04 // Read cells
  138. #define RDFLG 0x0C // Read flags
  139. #define RDTMP 0x0E // Read Temps
  140. #define STCVAD_ALL 0x10 // Start all A/D's - poll status
  141. #define STCVAD_CLR 0x1D // Start clear all A/D's - poll status - read 0xFF
  142. #define STCVAD_ST1 0x1E // Start Self Test 1 all A/D's - poll status - read 0x55
  143. #define STCVAD_ST2 0x1F // Start Self Test 2 all A/D's - poll status - read 0xAA
  144. #define STOWAD 0x20 // Start testing all open wire - poll status
  145. #define STTMPAD_ALL 0x30 // Start all temperatures A/D's - poll status
  146. #define STTMPAD_ST1 0x3E // Start Self Test 1 all temperatures A/D's - poll status - read 0x55
  147. #define STTMPAD_ST2 0x3F // Start Self Test 2 all temperatures A/D's - poll status - read
  148. #define PLINT 0x50 // Poll Interrupt Status
  149. #define DAGN 0x52 // Start Diagnose and Poll Status
  150. #define RDDGNR 0x54 // Read Diagnostic Register
  151. #define WRCFG_PEC 0xC7
  152. #define RDCFG_PEC 0xCE
  153. #define STCVAD_ALL_PEC 0xB0
  154. #define STCVAD_CLEAR_PEC 0x93
  155. #define STCVAD_ST1_PEC 0x9A
  156. #define STCVAD_ST2_PEC 0x9D
  157. #define RDCV_PEC 0xDC
  158. #define STTMPAD_ALL_PEC 0x50
  159. #define STTMPAD_ST1_PEC 0x7A
  160. #define STTMPAD_ST2_PEC 0x7D
  161. #define RDTMP_PEC 0xEA
  162. #define DAGN_PEC 0x79
  163. #define RDDGNR_PEC 0x6B
  164. #define CDC_0 0 // Comperator OFF, Measure OFF
  165. #define CDC_1 1 // Comperator OFF, Measure 13ms
  166. #define CDC_2 2 // Comperator 13ms, Measure 13ms
  167. #define CDC_3 3 // Comperator 130ms, Measure 13ms
  168. #define CDC_4 4 // Comperator 500ms, Measure 13ms
  169. #define CDC_5 5 // Comperator 130ms, Measure 21ms
  170. #define CDC_6 6 // Comperator 500ms, Measure 21ms
  171. #define CDC_7 7 // Comperator 2000ms, Measure 21ms
  172. #define LVLPL 0x10 // Level Polling
  173. #define On 1
  174. #define Off 0
  175. #define EV__TimeSlot30ms 0x0001
  176. #define EV__TimeSlot100ms 0x0002
  177. #define EV__TimeSlot160ms 0x0004
  178. #define EV__TimeSlot1000ms 0x0008
  179. #define EV__LTC_V_Start 0x0010
  180. #define EV__LTC_V_Wait 0x0020
  181. #define EV__LTC_T_Start 0x0040
  182. #define EV__LTC_T_Wait 0x0080
  183. #define EV__LTC_S_Start 0x0010
  184. #define EV__LTC_S_Wait 0x0020
  185. #define LTC_ADC_Ready 0x10
  186. #define SlaveNo_VAL 0
  187. #define BRP_VAL 4
  188. #define PROPSEG_VAL 1
  189. #define PHSEG1_VAL 8
  190. #define PHSEG2_VAL 6
  191. #define SJW_VAL 1
  192. #define PHSEG2_MODE_VAL 1
  193. #define BUS_SAMPLE_MODE_VAL ECAN_BUS_SAMPLE_MODE_THRICE
  194. #define WAKEUP_MODE_VAL ECAN_WAKEUP_MODE_ENABLE
  195. #define FILTER_MODE_VAL ECAN_FILTER_MODE_DISABLE
  196. #define MAX_ALIVE 8
  197. #define MAX_MUX 6
  198. #define VOLTAGE_MIN 2800
  199. #define VOLTAGE_MAX 3600
  200. #define CELL_BYPASSED 3
  201. #define TEMP_MIN 10
  202. #define TEMP_MAX 50
  203. #define BAL_TEMP_MIN 0
  204. #define BAL_TEMP_MAX 70
  205. #define TEMP_NOT_CON -45
  206. /*********************************************************************
  207. *
  208. * Function Prototypes
  209. *
  210. *********************************************************************/
  211. void LTC_Init ( void );
  212. void LTC_Do ( uint16_t *gEvent );
  213. void LTC_BalanceOn ( uint8_t No );
  214. void LTC_BalanceOff ( uint8_t No );
  215. void LTC_Terminate ( void );
  216. int16_t LTC_GetVoltage ( uint8_t No );
  217. int16_t LTC_GetTemperature ( uint8_t No );
  218. void LTC_GetStatus ( LTC_STATUS *LTC_Status );
  219. void LTC_GetHeatSink ( LTC_STATUS *LTC_Status );
  220. uint16_t LTC_SelfTest ( void );
  221. void LTC_SetCFG ( uint8_t CDC, uint32_t setDCC, uint32_t clearDCC );
  222. uint8_t LTC_GetCFG ( void );
  223. uint8_t LTC_MeasureVoltage ( uint8_t CMD, uint8_t CMD_PEC, uint16_t Status );
  224. uint8_t LTC_MeasureTemperature ( uint8_t CMD, uint8_t CMD_PEC, uint16_t Status );
  225. uint8_t LTC_CalcPEC ( uint8_t *Array, uint8_t Size_Of );
  226. void InitSPI ( void );
  227. int16_t LTC_Field2IntEven ( uint8_t ucByteLow, uint8_t ucByteHigh );
  228. int16_t LTC_Field2IntOdd ( uint8_t ucByteLow, uint8_t ucByteHigh );
  229. void LTC_StartMeasure ( uint8_t COMAND, uint8_t COMAND_PEC );
  230. void LTC_Read ( uint8_t CMD, uint8_t CMD_PEC, uint8_t Length, uint8_t *ptr );
  231. uint8_t LTC_MeasureDiag ( uint16_t Status );
  232. void InitTimer ( void );
  233. void Set_LTC_TimeOut ( void );
  234. int16_t ADC_supply_voltage ( void );