123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- /*********************************************************************
- *
- * LTC6803 API Header
- *
- *********************************************************************
- * FileName: BMS_LTC.h
- * Processor: PIC18F45K80
- * Compiler: Microchip C18 v3.41
- * Company: KIT - CN - IPE
- *
- * Author Date Comment
- *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * Reiling V. 17.02.2012 Release
- * Reiling V. 29.03.2012 Release 2. see change log file
- *********************************************************************/
- //#ifndef LTC_H // To avoid duplicate inclusion
- #define LTC_H
- /*********************************************************************
- *
- * General purpose typedef's
- *
- ********************************************************************/
- typedef union _LTC_CFG
- {
- struct
- {
- uint8_t LTC_CFG_RAW[16];
- uint8_t CDC[2];
- uint8_t CELL10[2];
- uint8_t LVL_PL[2];
- uint8_t GPIO[2];
- uint8_t WDT[2];
- uint16_t DCC[2];
- uint16_t MC[2];
- int16_t VUV[2];
- int16_t VOV[2];
- };
- } LTC_CFG;
- typedef union _LTC_CVAD
- {
- struct
- {
- uint8_t LTC_CVAD_RAW[40];
- int16_t CVAD[24];
- };
- } LTC_CVAD;
- typedef union _LTC_TMP
- {
- struct
- {
- uint8_t LTC_TMP_RAW[14];
- int8_t ETMP[24];
- int8_t ITMP[2];
- uint8_t THSD[2];
- };
- } LTC_TMP;
- typedef union _LTC_DRG
- {
- struct
- {
- uint8_t LTC_DRG_RAW[8];
- int16_t REF[2];
- uint8_t MUXFAIL[2];
- uint8_t REV[2];
- uint8_t PEC_Counter;
- };
- } LTC_DRG;
- typedef union _LTC_STATUS
- {
- struct
- {
- uint16_t LTC_StatusSlave;
- uint8_t LTC_PECFailCounter;
- int8_t HeatSinkTemperature;
- uint16_t LTC_SelfTest;
- };
- }LTC_STATUS;
- typedef union _CAN_CONFIG
- {
- struct
- {
- uint8_t SlaveNo;
- uint8_t BRP;
- uint8_t PROPSEG;
- uint8_t PHSEG1;
- uint8_t PHSEG2;
- uint8_t SJW;
- uint8_t PHSEG2_MODE;
- uint8_t BUS_SAMPLE_MODE;
- uint8_t WAKEUP_MODE;
- uint8_t FILTER_MODE;
- };
- } CAN_CONFIG;
- /*********************************************************************
- *
- * Defines
- *
- *********************************************************************/
- #define LTC_OK 0
- #define LTC_NOK 0x8000
- // LTC6803-3 Self Test Flags
- #define LTC1_VST1_NOK 0x0001 // Fehler im ersten Test des ADCs im Spannungsmodus
- #define LTC1_VST2_NOK 0x0002 // Fehler im zweiten Test des ADCs im Spannungsmodus
- #define LTC1_TST1_NOK 0x0004 // Fehler im ersten Test des ADCs im Temperaturmodus
- #define LTC1_TST2_NOK 0x0008 // Fehler im zweiten Test des ADCs im Temperaturmodus
- #define LTC1_RefL_NOK 0x0010 // Referenzspannung low - Underflow
- #define LTC1_RefH_NOK 0x0020 // Referenzspannung high - Overflow
- #define LTC1_MUX_NOK 0x0040 // Fehler des internen Multiplexers des LTC
- #define LTC_PEC_NOK 0x0080 // PEC Fehler innerhalb der LTC_SelfTest( ) Abarbeitung
- #define LTC2_VST1_NOK 0x0100 // Fehler im ersten Test des ADCs im Spannungsmodus
- #define LTC2_VST2_NOK 0x0200 // Fehler im zweiten Test des ADCs im Spannungsmodus
- #define LTC2_TST1_NOK 0x0400 // Fehler im ersten Test des ADCs im Temperaturmodus
- #define LTC2_TST2_NOK 0x0800 // Fehler im zweiten Test des ADCs im Temperaturmodus
- #define LTC2_RefL_NOK 0x1000 // Referenzspannung low - Underflow
- #define LTC2_RefH_NOK 0x2000 // Referenzspannung high - Overflow
- #define LTC2_MUX_NOK 0x4000 // Fehler des internen Multiplexers des LTC
- // LTC6803-3 Status Flags
- #define WarnLowTemp -40 // Untergrenze bei der eine Warnung generiert wird
- #define WarnHighTemp 80 // Obergrenze bei der eine Warnung generiert wird
- #define LTC1_LowTemp_NOK 0x0001
- #define LTC2_LowTemp_NOK 0x0002
- #define LTC1_HighTemp_NOK 0x0004
- #define LTC2_HighTemp_NOK 0x0008
- #define LTC1_THSD_NOK 0x0010
- #define LTC2_THSD_NOK 0x0020
- #define LTC_TimeOut 0x0040
- #define LTC_PEC_NOK 0x0080
- #define RELAIS_ON 0x0100
- #define CAN_Rx_Overrun 0x0200
- #define CAN_Rx_Warning 0x0400
- #define CAN_Rx_Passiv 0x0800
- #define CAN_Tx_Warning 0x1000
- #define CAN_Tx_Passiv 0x2000
- // LTC6803-3 Command Codes
- #define WRCFG 0x01 // Write config
- #define RDCFG 0x02 // Read config
- #define RDCV 0x04 // Read cells
- #define RDFLG 0x0C // Read flags
- #define RDTMP 0x0E // Read Temps
- #define STCVAD_ALL 0x10 // Start all A/D's - poll status
- #define STCVAD_CLR 0x1D // Start clear all A/D's - poll status - read 0xFF
- #define STCVAD_ST1 0x1E // Start Self Test 1 all A/D's - poll status - read 0x55
- #define STCVAD_ST2 0x1F // Start Self Test 2 all A/D's - poll status - read 0xAA
- #define STOWAD 0x20 // Start testing all open wire - poll status
- #define STTMPAD_ALL 0x30 // Start all temperatures A/D's - poll status
- #define STTMPAD_ST1 0x3E // Start Self Test 1 all temperatures A/D's - poll status - read 0x55
- #define STTMPAD_ST2 0x3F // Start Self Test 2 all temperatures A/D's - poll status - read
- #define PLINT 0x50 // Poll Interrupt Status
- #define DAGN 0x52 // Start Diagnose and Poll Status
- #define RDDGNR 0x54 // Read Diagnostic Register
- #define WRCFG_PEC 0xC7
- #define RDCFG_PEC 0xCE
- #define STCVAD_ALL_PEC 0xB0
- #define STCVAD_CLEAR_PEC 0x93
- #define STCVAD_ST1_PEC 0x9A
- #define STCVAD_ST2_PEC 0x9D
- #define RDCV_PEC 0xDC
- #define STTMPAD_ALL_PEC 0x50
- #define STTMPAD_ST1_PEC 0x7A
- #define STTMPAD_ST2_PEC 0x7D
- #define RDTMP_PEC 0xEA
- #define DAGN_PEC 0x79
- #define RDDGNR_PEC 0x6B
- #define CDC_0 0 // Comperator OFF, Measure OFF
- #define CDC_1 1 // Comperator OFF, Measure 13ms
- #define CDC_2 2 // Comperator 13ms, Measure 13ms
- #define CDC_3 3 // Comperator 130ms, Measure 13ms
- #define CDC_4 4 // Comperator 500ms, Measure 13ms
- #define CDC_5 5 // Comperator 130ms, Measure 21ms
- #define CDC_6 6 // Comperator 500ms, Measure 21ms
- #define CDC_7 7 // Comperator 2000ms, Measure 21ms
- #define LVLPL 0x10 // Level Polling
- #define On 1
- #define Off 0
- #define EV__TimeSlot30ms 0x0001
- #define EV__TimeSlot100ms 0x0002
- #define EV__TimeSlot160ms 0x0004
- #define EV__TimeSlot1000ms 0x0008
- #define EV__LTC_V_Start 0x0010
- #define EV__LTC_V_Wait 0x0020
- #define EV__LTC_T_Start 0x0040
- #define EV__LTC_T_Wait 0x0080
- #define EV__LTC_S_Start 0x0010
- #define EV__LTC_S_Wait 0x0020
- #define LTC_ADC_Ready 0x10
- #define SlaveNo_VAL 0
- #define BRP_VAL 4
- #define PROPSEG_VAL 1
- #define PHSEG1_VAL 8
- #define PHSEG2_VAL 6
- #define SJW_VAL 1
- #define PHSEG2_MODE_VAL 1
- #define BUS_SAMPLE_MODE_VAL ECAN_BUS_SAMPLE_MODE_THRICE
- #define WAKEUP_MODE_VAL ECAN_WAKEUP_MODE_ENABLE
- #define FILTER_MODE_VAL ECAN_FILTER_MODE_DISABLE
- #define MAX_ALIVE 8
- #define MAX_MUX 6
- #define VOLTAGE_MIN 2800
- #define VOLTAGE_MAX 3600
- #define CELL_BYPASSED 3
- #define TEMP_MIN 10
- #define TEMP_MAX 50
- #define BAL_TEMP_MIN 0
- #define BAL_TEMP_MAX 70
- #define TEMP_NOT_CON -45
- /*********************************************************************
- *
- * Function Prototypes
- *
- *********************************************************************/
- void LTC_Init ( void );
- void LTC_Do ( uint16_t *gEvent );
- void LTC_BalanceOn ( uint8_t No );
- void LTC_BalanceOff ( uint8_t No );
- void LTC_Terminate ( void );
- int16_t LTC_GetVoltage ( uint8_t No );
- int16_t LTC_GetTemperature ( uint8_t No );
- void LTC_GetStatus ( LTC_STATUS *LTC_Status );
- void LTC_GetHeatSink ( LTC_STATUS *LTC_Status );
- uint16_t LTC_SelfTest ( void );
- void LTC_SetCFG ( uint8_t CDC, uint32_t setDCC, uint32_t clearDCC );
- uint8_t LTC_GetCFG ( void );
- uint8_t LTC_MeasureVoltage ( uint8_t CMD, uint8_t CMD_PEC, uint16_t Status );
- uint8_t LTC_MeasureTemperature ( uint8_t CMD, uint8_t CMD_PEC, uint16_t Status );
- uint8_t LTC_CalcPEC ( uint8_t *Array, uint8_t Size_Of );
- void InitSPI ( void );
- int16_t LTC_Field2IntEven ( uint8_t ucByteLow, uint8_t ucByteHigh );
- int16_t LTC_Field2IntOdd ( uint8_t ucByteLow, uint8_t ucByteHigh );
- void LTC_StartMeasure ( uint8_t COMAND, uint8_t COMAND_PEC );
- void LTC_Read ( uint8_t CMD, uint8_t CMD_PEC, uint8_t Length, uint8_t *ptr );
- uint8_t LTC_MeasureDiag ( uint16_t Status );
- void InitTimer ( void );
- void Set_LTC_TimeOut ( void );
- int16_t ADC_supply_voltage ( void );
|