123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- #ifndef _CP_DETECTION_H
- #define _CP_DETECTION_H
- /**
- ******************************************************************************
- * @file cp_detection.h
- * @author Edward Lien
- * @brief This file provides Control Pilot Voltage detection with filter algorithm.
- * @Version D0.01
- * @Date 2019/13/11
- ******************************************************************************
- */
- /* Private includes ----------------------------------------------------------*/
- /* USER CODE BEGIN Includes */
- #include "cmsis_os.h"
- #include "main.h"
- /* USER CODE END Includes */
- /* Private typedef -----------------------------------------------------------*/
- /* USER CODE BEGIN PTD */
- typedef struct
- {
- uint8_t State;
- uint32_t PositiveValue;
- uint32_t NegativeValue;
- uint8_t MaxPTB;
- uint16_t MaxPTBCount;
- uint8_t MaxNTB;
- uint16_t MaxNTBCount;
- }sCPModuleResult_t;
- typedef struct
- {
- uint16_t CpP12VHigh;
- uint16_t CpP12VLow;
- uint16_t CpP9VHigh;
- uint16_t CpP9VLow;
- uint16_t CpP6VHigh;
- uint16_t CpP6VLow;
- uint16_t CpP3VHigh;
- uint16_t CpP3VLow;
- uint16_t Cp0VHigh;
- uint16_t Cp0VLow;
- uint16_t CpN12VHigh;
- uint16_t CpN12VLow;
- }sCPVoltageBoundary_t;
- typedef struct
- {
- uint16_t HysteresisP12VHigh;
- uint16_t HysteresisP12VLow;
- uint16_t HysteresisP9VHigh;
- uint16_t HysteresisP9VLow;
- uint16_t HysteresisP6VHigh;
- uint16_t HysteresisP6VLow;
- uint16_t HysteresisP3VHigh;
- uint16_t HysteresisP3VLow;
- uint16_t Hysteresis0VHigh;
- uint16_t Hysteresis0VLow;
- uint16_t HysteresisN12VHigh;
- uint16_t HysteresisN12VLow;
- }sCPVoltageHysteresis_t;
- //typedef struct
- //{
- // uint16_t *TB_P12V;
- // uint16_t *TB_P9V;
- // uint16_t *TB_P6V;
- // uint16_t *TB_P3V;
- // uint16_t *TB_0V;
- // uint16_t *TB_N12V;
- // uint16_t *TB_UD;
- //
- //}sCPTempBuffer_t;
- //******************************************************************
- #define FUNC_CP_ADC_MODIFY //Hao@20210113: To avoid hard-coding in cp_detection.h/.c
- #ifdef FUNC_CP_ADC_MODIFY
- //#define FUNC_CP_ADC_MODIFY_DEBUG //Comment this line to DISABLE debug function
- //#define TRACE_CP //Hao@20210120: Test
- #define NEW_CP_SPEC
- #ifdef NEW_CP_SPEC
- #define NEW_CP_SPEC_20210525
- #endif //NEW_CP_SPEC
- #define FUNC_CP_CLASSIFY_TO_OV_RANGE
- #define MODIFY_UNKNOWN_TO_STATE_E
- #define MODIFY_STATE_F_HYSTERESIS
- #define MODIFY_STATE_UNKNOWN_HYSTERESIS
- #ifdef MODIFY_CP_DETECTION_STATE_F
- #define MODIFY_UNKNOWN_TO_STATE_F
- #endif
- /*
- _______(Rf)________
- | |
- | |
- (CP) | |\ |
- VinN______(RinN)__|_____|-\ |
- | \________|____Vout (to MCU ADC pin)
- | /
- VinP___(RinP)___(VopP)__|+/
- | |/
- |
- (Rg)
- |
- ////
- */
- #define CP_ADC_REFVOLT (3.343) //AW
- //#define CP_ADC_REFVOLT (3.37) //AX
- #define CP_ADC_MIN_COUNT (0)
- #define CP_ADC_MAX_COUNT (4096 - 1)
- #define CP_ADC_RESOLUTION (CP_ADC_REFVOLT / (CP_ADC_MAX_COUNT - CP_ADC_MIN_COUNT))
- #define CP_ADC_OPA_RIN_P (113.0)
- #define CP_ADC_OPA_RIN_N (475.0)
- #define CP_ADC_OPA_RG (15.0 + 0.287)
- #define CP_ADC_OPA_RF (53.6)
- #define CP_ADC_OPA_VIN_P (12.0)
- #define CP_ADC_OPA_VOP_P ((CP_ADC_OPA_VIN_P * CP_ADC_OPA_RG) / (CP_ADC_OPA_RIN_P + CP_ADC_OPA_RG))
- #define CP_ADC_OPA_GAIN (CP_ADC_OPA_RF / CP_ADC_OPA_RIN_N)
- #define CP_ADC_OPA_GAIN_RECIPROCAL (CP_ADC_OPA_RIN_N / CP_ADC_OPA_RF)
- #define CP_ADC_OPA_CALC_OPA_VOUT_SLOP ((-1) * CP_ADC_OPA_GAIN)
- #define CP_ADC_OPA_CALC_OPA_VOUT_OFFS ((1 + CP_ADC_OPA_GAIN) * CP_ADC_OPA_VOP_P)
- #define CP_ADC_OPA_CALC_OPA_VIN_SLOP ((-1) * CP_ADC_OPA_GAIN_RECIPROCAL)
- #define CP_ADC_OPA_CALC_OPA_VIN_OFFS ((1 + CP_ADC_OPA_GAIN_RECIPROCAL) * CP_ADC_OPA_VOP_P)
- #define CP_GET_OPA_VOUT(Vin) (((Vin) * CP_ADC_OPA_CALC_OPA_VOUT_SLOP) + CP_ADC_OPA_CALC_OPA_VOUT_OFFS)
- #define CP_GET_OPA_VOUT_ADC(Vin) ((uint32_t)(CP_GET_OPA_VOUT(Vin) / CP_ADC_RESOLUTION))
- #define CP_GET_OPA_VOLT_DIFF_ADC(VoltDiff) (CP_GET_OPA_VOUT_ADC(0) - CP_GET_OPA_VOUT_ADC(VoltDiff))
- #define CP_GET_OPA_VIN(Vout) (((Vout) * CP_ADC_OPA_CALC_OPA_VIN_SLOP) + CP_ADC_OPA_CALC_OPA_VIN_OFFS)
- #define CP_GET_OPA_VIN_USE_ADC(AdcCount) (CP_GET_OPA_VIN(CP_ADC_RESOLUTION * (AdcCount)))
- #ifdef FUNC_CP_ADC_MODIFY_DEBUG
- void CP_ADC_OPA_PrintParam(void);
- void CP_ADC_OPA_TestFormula(void);
- void CP_ADC_OPA_TestBoundaryValue(void);
- #endif
- #ifdef TRACE_CP
- void TRACE_CP_Print_CPModuleResult(sCPModuleResult_t *p, uint8_t bOK, long EQ_Sum, long EQ_NG1, long EQ_NG2);
- #endif
- #endif //FUNC_CP_ADC_MODIFY
- //******************************************************************
- /* USER CODE END PTD */
- /* Private define ------------------------------------------------------------*/
- /* USER CODE BEGIN PD */
- #define SYSTEM_STATE_UNKNOWN 0x00
- #define SYSTEM_STATE_A 0x01
- #define SYSTEM_STATE_B 0x02
- #define SYSTEM_STATE_C 0x03
- #define SYSTEM_STATE_D 0x04
- #define SYSTEM_STATE_E 0x05
- #define SYSTEM_STATE_F 0x06
- #define MAX_CLASSIFY_SECTION 8
- #define MAX_SECTION_COUNT 1000
- #define MAX_STATE_COUNTER 1
- //******************************************************************
- #ifdef FUNC_CP_ADC_MODIFY
- #ifdef NEW_CP_SPEC
- extern void CpDetectModuleInitialize(char SafetyRegulationCode);
- #endif //NEW_CP_SPEC
- #endif //FUNC_CP_ADC_MODIFY
- extern void CpCalculate(uint32_t * adc_value, uint16_t sample_times, sCPModuleResult_t * result);
- /* USER CODE END PD */
- /* Private macro -------------------------------------------------------------*/
- /* USER CODE BEGIN PM */
- /* USER CODE END PM */
- /* Private variables ---------------------------------------------------------*/
- /* USER CODE BEGIN PV */
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- /* USER CODE BEGIN PFP */
- /* USER CODE END PFP */
- /* Private user code ---------------------------------------------------------*/
- /* USER CODE BEGIN 0 */
- /* USER CODE END 0 */
- #endif //_CP_DETECTION_H
|