LL01/code_app_out/Source/app/WheelHeat.c
2025-04-26 16:03:23 +08:00

991 lines
31 KiB
C

/** ##########################################################################
** Filename : WheelHeat.c
** Project :
** Module :
** Processor :
** Version : 1.0
** Compiler :
** Date/Time :
** Abstract :
** Contents :
** Note :
** (c) Copyright dmdz Co.,Ltd
** --------------------------------------------------------------------------
** R E V I S I O N H I S T O R Y
** --------------------------------------------------------------------------
** Date Ver Author Description
** -20231107- V01-- --Linboyi--- --初版--
** #########################################################################*/
/*****************************************************************************
* I N C L U D E F I L E S
*****************************************************************************/
#include "Cpu.h"
#include "common_types.h"
#include "common_memory.h"
#include "WheelHeat.h"
#include "Com_Cfg.h"
#include "adc.h"
#include "pwm_manage.h"
#include "Com.h"
#include "Com_Cfg.h"
#include "can_app.h"
#include "system_voltage_manage.h"
#include "system_voltage_manage_cfg.h"
#include "DEM_Cfg.h"
#include "Demm.h"
/*****************************************************************************
* D E F I N E S / M A C R O S11
*****************************************************************************/
#define WHEEL_HEAT_STATE_ON 1u
#define WHEEL_HEAT_STATE_OFF 0u
#define WHEEL_HEAT_STATE_HOLD 2u
#define WHEEL_HEAT_STATE_HARD_FALUT 3u
#define WHEEL_HEAT_STATE_SLOW_DOWN 4u
#define WHEEL_HEAT_TIME_30MIN (1800000ul / 10ul)
#define WHEEL_HEAT_GEAR_OFF_CLOSE_DELAY_5S (5000ul / 10ul)
#define WHEEL_HEAT_OPEN_SHORT_DETECT_2S (2000ul / 10ul)
#define WHEEL_HEAT_OPEN_SHORT_DETECT_10S (10000ul / 10ul)
#define TEMP_SENSOR_OPEN_ADC_RESULT 4900
#define TEMP_SENSOR_SHORT_ADC_RESULT 100
#define WHEEL_HEAT_WIRE_ERROR_3S (3000ul / 10ul)
#define WHEEL_HEAT_WIRE_ERROR_2S (2950ul / 10ul)
#define WHEEL_HEAT_SHORT_ADC_RESULT 640
#define WHEEL_HEAT_OPEN_ADC_RESULT (uint8_t)50
const uint16_t HEAT_LEVEL_NTC_TAB[WHEEL_HEAT_NTCLV_NUM] =
{
WHEEL_HEAT_NTC_LV3,WHEEL_HEAT_NTC_LV1,WHEEL_HEAT_NTC_LV2,WHEEL_HEAT_NTC_LV3
};
/*****************************************************************************
* T Y P E D E F I N I T I O N S
*****************************************************************************/
typedef struct
{
uint8_t ucEvent;
//uint32_t ulRunTimer;
uint8_t ucEcuControlState;
uint8_t ucDcmControlState;
uint8_t ucIsControlByDcm;
//uint8_t ucErrorTimer;
uint16_t usOffGearDelay;
uint8_t ucGearEvent;
uint16_t ucTempSensorFalutTimer;
uint16_t u16OverCurrentFalutTimer;
uint8_t u16OverCurrentFlag;
uint32_t ulForceOutput;
uint16_t usSlowDownTimer;
uint16_t usSlowDownDuty;
uint16_t usSlowDownTimerStep;
uint8_t usDigNtcState;
uint8_t usDigOverCurrent;
uint8_t ucHeatGear;
uint8_t ucLimitAcc;
uint16_t ucHeatDigaTimeOpen;
//uint16_t ucHeatWireOpenTimeOpen;
uint16_t ucHeatDigaTime;
uint16_t ucHeatWireOpenTime;
uint16_t ucHeatWireShortTime;
uint8_t ucHeatWireOpenFlag;
uint8_t ucHeatWireShortFlag;
uint8_t ucHeatPowerOnFlag;
uint8_t ucHeatOnFlag;
}WheelHeat_Struct_Type;
/**************************************1***************************************
* G L O B A L V A R I A B L E S
* only configuration table allowed here,variables are not allowed!
*****************************************************************************/
static WheelHeat_Struct_Type WheelHeat_Struct;
/*****************************************************************************
* C O N S T A N T S
*****************************************************************************/
/*****************************************************************************
* F U N C T I O N P R O T O T Y P E
*****************************************************************************/
static uint8_t WheelHeat_GetEvent(void);
static void WheelHeat_Handle(void);
static void WheelHeat_RunTime(void);
static uint8_t WheelHeat_GetGearEvevt(void);
static void WheelHeat_OffGearDelay(void);
static void WheelHeat_EventProcess(void);
static void WheelHeat_CanTxProcess(void);
static void WheelHeat_Diag(void);
/*****************************************************************************
|Prototype : WheelHeat_Init
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_Init(void)
{
common_memory_fill((uint8_t *)(&WheelHeat_Struct.ucEvent), 0u, sizeof(WheelHeat_Struct));
WheelHeat_SetHeating_Gear(HEAT_LV3);
WheelHeat_Struct.ucHeatPowerOnFlag =HEAT_DIAG_ENABLE;
}
/*****************************************************************************
|Prototype : WheelHeat_SetEvent
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_SetEvent(uint8_t Event)
{
(void)System_DisableIrqGlobal();
WheelHeat_Struct.ucEvent = Event;
(void)System_EnableIrqGlobal();
}
/*****************************************************************************
|Prototype : WheelHeat_Set_Heat_Limit_ACC
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_Set_Heat_Limit_ACC(uint8_t Evevt)
{
WheelHeat_Struct.ucLimitAcc = Evevt;
}
/*****************************************************************************
|Prototype : WheelHeat_GetEvent
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static uint8_t WheelHeat_GetEvent(void)
{
uint8_t Event;
(void)System_DisableIrqGlobal();
Event = WheelHeat_Struct.ucEvent;
if(COM_RXIPDUMETER_1_DIR_4BF_TIMEOUTFLAG ==HEAT_DIAG_ENABLE)
{
WheelHeat_Set_Heat_Limit_ACC(Heat_Limit_ACC_DISABLE);
}
if((WheelHeat_Struct.ucLimitAcc == Heat_Limit_ACC_Enbale) &&(WheelHeat_Struct.ucEcuControlState == WHEEL_HEAT_STATE_OFF))
{
Event = WHEEL_HEAT_EVENT_IDLE;
}
WheelHeat_Struct.ucEvent = WHEEL_HEAT_EVENT_IDLE;
(void)System_EnableIrqGlobal();
return (Event);
}
/*****************************************************************************
|Prototype : WheelHeat_Handle
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static void WheelHeat_Handle(void)
{
uint16_t NTC_AdcResult;
uint8_t SystemVoltageMod;
uint8_t State;
NTC_AdcResult = adc_get_voltage_value(1);
SystemVoltageMod = system_voltage_manage_mode_get(FUNC_SYSTEM_VOLTAGE_MANAGE_ID);
if(WheelHeat_Struct.ucIsControlByDcm > 0u)
{
State = WheelHeat_Struct.ucDcmControlState;
}
else
{
if((SystemVoltageMod == SYSTEM_VOLTAGE_MODE_LOW) || (SystemVoltageMod == SYSTEM_VOLTAGE_MODE_HIGH))
{
State = WHEEL_HEAT_STATE_OFF;
}
else
{
State = WheelHeat_Struct.ucEcuControlState;
}
}
switch(State)
{
case WHEEL_HEAT_STATE_OFF:
if(WheelHeat_Struct.ucHeatPowerOnFlag ==HEAT_DIAG_ENABLE)
{
WheelHeat_Wire_Short_Check_PowerOn();
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, (uint8_t)1, (uint16_t)0);
}
break;
case WHEEL_HEAT_STATE_ON:
if(WheelHeat_Struct.ulForceOutput > 0)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, (uint8_t)1, (uint16_t)1000);
WheelHeat_Struct.ulForceOutput --;
if(NTC_AdcResult <= 3081)
{
WheelHeat_Struct.ulForceOutput = 0;
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_HOLD;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_HOLD;
}
if(WheelHeat_Struct.ulForceOutput == 0)
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_SLOW_DOWN;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_SLOW_DOWN;
}
}
else
{
WheelHeat_HeatingGear_STATE_ON();//档位加热功能调用
}
break;
case WHEEL_HEAT_STATE_HOLD:
WheelHeat_HeatingGear_STATE_HOLD();//档位加热功能调用
break;
case WHEEL_HEAT_STATE_SLOW_DOWN:
WheelHeat_Struct.usSlowDownTimer ++;
if(WheelHeat_Struct.usSlowDownTimer >= WheelHeat_Struct.usSlowDownTimerStep)
{
WheelHeat_Struct.usSlowDownTimer = 0;
if(WheelHeat_Struct.usSlowDownDuty > (uint16_t)600)
{
WheelHeat_Struct.usSlowDownDuty -= (uint16_t)1;
pwm_set_duty(PWM_BASE_ID_GPTM0, (uint8_t)1, WheelHeat_Struct.usSlowDownDuty);
}
else
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_HOLD;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_HOLD;
}
}
if(NTC_AdcResult <= 3081u)
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_HOLD;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_HOLD;
}
break;
case WHEEL_HEAT_STATE_HARD_FALUT:
if(WheelHeat_Struct.ucHeatPowerOnFlag ==HEAT_DIAG_ENABLE)
{
WheelHeat_Wire_Short_Check_PowerOn();
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 0);
}
break;
default:
while(1);
}
}
/*****************************************************************************
|Prototype : WheelHeat_RunTime
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static void WheelHeat_RunTime(void)
{
#if 0 //取消30分钟加热超时
if(WheelHeat_Struct.ucEcuControlState > WHEEL_HEAT_STATE_OFF)
{
if(WheelHeat_Struct.ulRunTimer < 0xfffffffful)
{
WheelHeat_Struct.ulRunTimer ++;
}
if(WheelHeat_Struct.ulRunTimer >= WHEEL_HEAT_TIME_30MIN)
{
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
}
}
else
{
WheelHeat_Struct.ulRunTimer = 0;
}
#endif
}
/*****************************************************************************
|Prototype : WheelHeat_SetGearEvevt
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_SetGearEvevt(uint8_t Evevt)
{
WheelHeat_Struct.ucGearEvent = Evevt;
}
/*****************************************************************************
|Prototype : WheelHeat_SetHeating_Gear
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_SetHeating_Gear(uint8_t Evevt)
{
WheelHeat_Struct.ucHeatGear = Evevt;
}
/*****************************************************************************
|Prototype : WheelHeat_SetHeating_Gear
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_HeatingGear_STATE_ON(void) //维持在客户需求温度的加热功率
{
u8 heat_gear;
uint16_t NTC_AdcResult;
NTC_AdcResult = adc_get_voltage_value(1);
if(WheelHeat_Struct.ucHeatGear == 0u)
{
WheelHeat_Struct.ucHeatGear= HEAT_LV3;
}
heat_gear = WheelHeat_Struct.ucHeatGear;
switch(heat_gear)
{
case HEAT_LV1:
if(NTC_AdcResult <= 3690u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 400u);
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_HOLD;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_HOLD;
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 1000);
}
break;
case HEAT_LV2:
if(NTC_AdcResult <= 3400u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 400);
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_HOLD;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_HOLD;
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 1000);
}
break;
case HEAT_LV3:
if(NTC_AdcResult <= 3350u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 500);
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_HOLD;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_HOLD;
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 1000);
}
break;
default:
break;
}
}
/*****************************************************************************
|Prototype : WheelHeat_SetHeating_Gear
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_HeatingGear_STATE_HOLD(void)
{
u8 heat_gear;
uint16_t NTC_AdcResult;
NTC_AdcResult = adc_get_voltage_value(1);
if(WheelHeat_Struct.ucHeatGear == 0u)
{
WheelHeat_Struct.ucHeatGear= HEAT_LV3;
}
heat_gear = WheelHeat_Struct.ucHeatGear;
switch(heat_gear)
{
case HEAT_LV1:
if(NTC_AdcResult >= 3600u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 1000);
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_ON;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_ON;
}
else if(NTC_AdcResult < 3510u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 0);
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 400);
}
break;
case HEAT_LV2:
if(NTC_AdcResult >= 3450u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 1000);
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_ON;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_ON;
}
if(NTC_AdcResult < 3300u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 0);
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 400);
}
break;
case HEAT_LV3:
if(NTC_AdcResult >= 3280u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 1000);
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_ON;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_ON;
}
if(NTC_AdcResult < 3200u)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 0);
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 500);
}
break;
default:
break;
}
}
/*****************************************************************************
|Prototype : WheelHeat_GetGearEvevt
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static uint8_t WheelHeat_GetGearEvevt(void)
{
uint8_t Event;
Event = WheelHeat_Struct.ucGearEvent;
WheelHeat_Struct.ucGearEvent = POWER_GEAR_EVENT_NULL;
return (Event);
}
/*****************************************************************************
|Prototype : WheelHeat_OffGearDelay
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static void WheelHeat_OffGearDelay(void)
{
uint8_t Event;
Event = WheelHeat_GetGearEvevt();
if(WheelHeat_Struct.usOffGearDelay)
{
WheelHeat_Struct.usOffGearDelay --;
if(WheelHeat_Struct.usOffGearDelay == 0u)
{
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
}
}
else
{
WheelHeat_Struct.usOffGearDelay = 0;
if(WheelHeat_Struct.ucEcuControlState > WHEEL_HEAT_STATE_OFF)
{
if(Event == POWER_GEAR_EVENT_OFF)
{
WheelHeat_Struct.usOffGearDelay = WHEEL_HEAT_GEAR_OFF_CLOSE_DELAY_5S;
}
}
}
}
/*****************************************************************************
|Prototype : WheelHeat_ControlForDcm
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_ControlForDcm(uint8_t Open)
{
WheelHeat_Struct.ucIsControlByDcm = 1u;
if(Open)
{
if(WheelHeat_Struct.ucDcmControlState == WHEEL_HEAT_STATE_OFF)
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_ON;
}
WheelHeat_Struct.ucTempSensorFalutTimer = 0;
WheelHeat_Struct.u16OverCurrentFalutTimer = 0;
}
else
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
}
}
/*****************************************************************************
|Prototype : WheelHeat_ReturnControlForEcu
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_ReturnControlForEcu(void)
{
WheelHeat_Struct.ucIsControlByDcm = 0u;
}
/*****************************************************************************
|Prototype : WheelHeat_EventProcess
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static void WheelHeat_EventProcess(void)
{
uint8_t Event;
uint8_t PowerGear;
uint16_t NTC_AdcResult;
Event = WheelHeat_GetEvent();
NTC_AdcResult = adc_get_voltage_value(1);
can_app_receive_signal(COM_RXSIGBCM1_POWER_GEAR,&PowerGear);
if(WHEEL_HEAT_EVENT_OPEN == Event)
{
if(PowerGear == POWER_GEAR_ON || PowerGear == POWER_GEAR_ACC)
{
if(WheelHeat_Struct.ucEcuControlState == WHEEL_HEAT_STATE_OFF)
{
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_ON;
WheelHeat_Struct.ucHeatPowerOnFlag = HEAT_DIAG_DISABLE;
if(NTC_AdcResult >= TEMP_POSITIVE_0C && NTC_AdcResult < TEMP_NEGATIVE_5C)
{
WheelHeat_Struct.ulForceOutput = WHEEL_HEAT_FORCE_OUTPUT_4MIN;
WheelHeat_Struct.usSlowDownTimerStep = 600 / 10;
WheelHeat_Struct.usSlowDownTimer = 0;
WheelHeat_Struct.usSlowDownDuty = 1000;
}
else if(NTC_AdcResult >= TEMP_NEGATIVE_5C && NTC_AdcResult < TEMP_NEGATIVE_10C)
{
WheelHeat_Struct.ulForceOutput = WHEEL_HEAT_FORCE_OUTPUT_5MIN;
WheelHeat_Struct.usSlowDownTimerStep = 600 / 10;
WheelHeat_Struct.usSlowDownTimer = 0;
WheelHeat_Struct.usSlowDownDuty = 1000;
}
else if(NTC_AdcResult > TEMP_NEGATIVE_10C && NTC_AdcResult < TEMP_NEGATIVE_15C)
{
WheelHeat_Struct.ulForceOutput = WHEEL_HEAT_FORCE_OUTPUT_6MIN;
WheelHeat_Struct.usSlowDownTimerStep = 800 / 10;
WheelHeat_Struct.usSlowDownTimer = 0;
WheelHeat_Struct.usSlowDownDuty = 1000;
}
else if(NTC_AdcResult >= TEMP_NEGATIVE_15C && NTC_AdcResult < TEMP_NEGATIVE_25C)
{
WheelHeat_Struct.ulForceOutput = WHEEL_HEAT_FORCE_OUTPUT_10MIN;
WheelHeat_Struct.usSlowDownTimerStep = 1000 / 10;
WheelHeat_Struct.usSlowDownTimer = 0;
WheelHeat_Struct.usSlowDownDuty = 1000;
}
else if(NTC_AdcResult >= TEMP_NEGATIVE_25C)
{
WheelHeat_Struct.ulForceOutput = WHEEL_HEAT_FORCE_OUTPUT_8MIN;
WheelHeat_Struct.usSlowDownTimerStep = 1200 / 10;
WheelHeat_Struct.usSlowDownTimer = 0;
WheelHeat_Struct.usSlowDownDuty = 1000;
}
else
{
WheelHeat_Struct.ulForceOutput = 0;
}
}
//WheelHeat_Struct.ulRunTimer = 0;
WheelHeat_Struct.ucTempSensorFalutTimer = 0;
WheelHeat_Struct.u16OverCurrentFalutTimer = 0;
}
}
else if(WHEEL_HEAT_EVENT_CLOSE == Event)
{
if (WheelHeat_Struct.ucEcuControlState > WHEEL_HEAT_STATE_OFF)
{
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
}
}
else
{
}
}
/*****************************************************************************
|Prototype : WheelHeat_CanTxProcess
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static void WheelHeat_CanTxProcess(void)
{
uint8_t Output;
uint8_t State;
if(WheelHeat_Struct.ucIsControlByDcm > 0u)
{
State = WheelHeat_Struct.ucDcmControlState;
}
else
{
State = WheelHeat_Struct.ucEcuControlState;
}
if(State > WHEEL_HEAT_STATE_OFF)
{
Output = 0x02;
}
else
{
Output = 0x01;
}
if(State == WHEEL_HEAT_STATE_HARD_FALUT)
{
Output = 0x01;
}
Com_SendSignal(COM_TX_SIGSWS_C_SWH_STATE, &Output);
Output = WheelHeat_Struct.ucHeatGear;
Com_SendSignal(COM_TX_SIGSWS_C_HEAT_GEAR, &Output);
}
/*****************************************************************************
|Prototype : WheelHeat_Diag
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
static void WheelHeat_Diag(void)
{
uint16_t NTC_AdcResult;
uint16_t WheelHeatFeedbackAdcResult;
uint8_t State;
if(WheelHeat_Struct.ucIsControlByDcm > 0u)
{
State = WheelHeat_Struct.ucDcmControlState;
}
else
{
State = WheelHeat_Struct.ucEcuControlState;
}
WheelHeatFeedbackAdcResult = adc_get_voltage_value(ADC_LOGIC_CHANNEL_SNS);
NTC_AdcResult = adc_get_voltage_value(1);
if(NTC_AdcResult >= TEMP_SENSOR_OPEN_ADC_RESULT)
{
WheelHeat_Struct.ucTempSensorFalutTimer ++;
if(WheelHeat_Struct.ucTempSensorFalutTimer >= WHEEL_HEAT_OPEN_SHORT_DETECT_2S)
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
dem_set_test_result(DTC_SWH_NTC_OPEN_INDEX,DTC_TEST_STATE_FAILED);
}
}
else if(NTC_AdcResult <= TEMP_SENSOR_SHORT_ADC_RESULT)
{
WheelHeat_Struct.ucTempSensorFalutTimer ++;
if(WheelHeat_Struct.ucTempSensorFalutTimer >= WHEEL_HEAT_OPEN_SHORT_DETECT_2S)
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
dem_set_test_result(DTC_SWH_NTC_SHORT_INDEX,DTC_TEST_STATE_FAILED);
}
}
else
{
WheelHeat_Struct.ucTempSensorFalutTimer = 0;
dem_set_test_result(DTC_SWH_NTC_OPEN_INDEX,DTC_TEST_STATE_PASSED);
dem_set_test_result(DTC_SWH_NTC_SHORT_INDEX,DTC_TEST_STATE_PASSED);
}
if (State > WHEEL_HEAT_STATE_OFF)
{
if(WheelHeatFeedbackAdcResult >= WHEEL_HEAT_SHORT_ADC_RESULT)
{
WheelHeat_Struct.u16OverCurrentFalutTimer ++;
if(WheelHeat_Struct.u16OverCurrentFalutTimer >= WHEEL_HEAT_OPEN_SHORT_DETECT_10S)
{
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.u16OverCurrentFlag = HEAT_DIAG_ENABLE;
dem_set_test_result(DTC_HEAT_OVERCURRENT_INDEX,DTC_TEST_STATE_FAILED);
WheelHeat_Struct.u16OverCurrentFalutTimer=0;
}
}
else
{
if(WheelHeat_Struct.u16OverCurrentFlag == HEAT_DIAG_ENABLE)
{
dem_set_test_result(DTC_HEAT_OVERCURRENT_INDEX,DTC_TEST_STATE_PASSED);
}
WheelHeat_Struct.u16OverCurrentFlag = HEAT_DIAG_DISABLE;
WheelHeat_Struct.u16OverCurrentFalutTimer = 0;
}
}
else
{
if(WheelHeat_Struct.u16OverCurrentFlag == HEAT_DIAG_ENABLE)
{
dem_set_test_result(DTC_HEAT_OVERCURRENT_INDEX,DTC_TEST_STATE_PASSED);
}
WheelHeat_Struct.u16OverCurrentFalutTimer = 0;
WheelHeat_Struct.u16OverCurrentFlag = HEAT_DIAG_DISABLE;
}
if((State == WHEEL_HEAT_STATE_OFF ) && (WheelHeat_Struct.ucHeatPowerOnFlag ==HEAT_DIAG_DISABLE))
{
if(WheelHeatFeedbackAdcResult >= HEAT_CURRENT)
{
WheelHeat_Struct.ucHeatWireShortTime++;
if(WheelHeat_Struct.ucHeatWireShortTime>=WHEEL_HEAT_WIRE_ERROR_3S)
{
WheelHeat_Struct.ucHeatWireShortFlag = HEAT_DIAG_ENABLE;
dem_set_test_result(DTC_SWH_STRIP_SHORT_INDEX,DTC_TEST_STATE_FAILED);
WheelHeat_Struct.ucHeatWireShortTime=0;
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
}
}
if(WheelHeatFeedbackAdcResult<= HEAT_CURRENT)
{
if(WheelHeat_Struct.ucHeatWireShortFlag == HEAT_DIAG_ENABLE)
{
dem_set_test_result(DTC_SWH_STRIP_SHORT_INDEX,DTC_TEST_STATE_PASSED);
WheelHeat_Struct.ucHeatWireShortFlag = HEAT_DIAG_DISABLE;
}
WheelHeat_Struct.ucHeatWireShortTime = 0;
}
}
if(State > WHEEL_HEAT_STATE_OFF)
{
if(WheelHeat_Struct.ucHeatWireOpenFlag == HEAT_DIAG_ENABLE)
{
if(WheelHeatFeedbackAdcResult>= HEAT_CURRENT)
{
dem_set_test_result(DTC_SWH_STRIP_OPEN_INDEX,DTC_TEST_STATE_PASSED);
WheelHeat_Struct.ucHeatWireOpenFlag = HEAT_DIAG_DISABLE;
}
}
}
}
void WheelHeat_Wire_Short_Check_PowerOn(void) //开机自检
{
uint8_t PowerGear;
uint16_t WheelHeatFeedbackAdcResult;
can_app_receive_signal(COM_RXSIGBCM1_POWER_GEAR,&PowerGear);
WheelHeatFeedbackAdcResult = adc_get_voltage_value(ADC_LOGIC_CHANNEL_SNS);
if(PowerGear != POWER_GEAR_ON )
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 0);
WheelHeat_Struct.ucHeatDigaTime=0;
}
else
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 300);
WheelHeat_Struct.ucHeatWireOpenTime++;
if(WheelHeatFeedbackAdcResult<= HEAT_CURRENT)
{
WheelHeat_Struct.ucHeatDigaTime++;
if(WheelHeat_Struct.ucHeatDigaTime>WHEEL_HEAT_WIRE_ERROR_2S)
{
dem_set_test_result(DTC_SWH_STRIP_OPEN_INDEX,DTC_TEST_STATE_FAILED);
WheelHeat_Struct.ucHeatWireOpenFlag = HEAT_DIAG_ENABLE;
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucHeatDigaTime=0;
}
}
if(WheelHeat_Struct.ucHeatWireOpenTime >= WHEEL_HEAT_WIRE_ERROR_3S)
{
pwm_set_duty(PWM_BASE_ID_GPTM0, 1, 0);
WheelHeat_Struct.ucHeatPowerOnFlag = HEAT_DIAG_DISABLE;
WheelHeat_Struct.ucHeatWireOpenTime = 0;
WheelHeat_Struct.ucHeatDigaTime=0;
}
}
}
void WheelHeat_Wire_Short_Check_Open(void) //打开加热检测
{
uint16_t NTC_AdcResult;
uint8_t heat_gear;
uint16_t WheelHeatFeedbackAdcResult;
WheelHeatFeedbackAdcResult = adc_get_voltage_value(ADC_LOGIC_CHANNEL_SNS);
NTC_AdcResult = adc_get_voltage_value(1);
heat_gear = WheelHeat_Struct.ucHeatGear;
if((WheelHeat_Struct.ucEcuControlState > WHEEL_HEAT_STATE_OFF) && (NTC_AdcResult>HEAT_LEVEL_NTC_TAB[heat_gear]))
{
if(WheelHeatFeedbackAdcResult<= HEAT_CURRENT)
{
WheelHeat_Struct.ucHeatDigaTimeOpen++;
if(WheelHeat_Struct.ucHeatDigaTimeOpen>WHEEL_HEAT_WIRE_ERROR_2S)
{
dem_set_test_result(DTC_SWH_STRIP_OPEN_INDEX,DTC_TEST_STATE_FAILED);
WheelHeat_Struct.ucHeatWireOpenFlag = HEAT_DIAG_ENABLE;
WheelHeat_Struct.ucDcmControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucEcuControlState = WHEEL_HEAT_STATE_OFF;
WheelHeat_Struct.ucHeatDigaTimeOpen=0;
}
}
else
{
WheelHeat_Struct.ucHeatDigaTimeOpen=0;
}
}
else
{
WheelHeat_Struct.ucHeatDigaTimeOpen=0;
}
}
/*****************************************************************************
|Prototype : WheelHeat_GetNtcState
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
uint8_t WheelHeat_GetNtcState(void)
{
return WheelHeat_Struct.usDigNtcState;
}
/*****************************************************************************
|Prototype : WheelHeat_GetHeatOverCurrent
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
uint8_t WheelHeat_GetHeatOverCurrent(void)
{
return WheelHeat_Struct.usDigOverCurrent;
}
/*****************************************************************************
|Prototype : WheelHeat_MainFunction
|Called by :
|Preconditions :
|Input parameters :
|Output parameters :
|Return value :
|Description :
*****************************************************************************/
void WheelHeat_MainFunction(void)
{
WheelHeat_EventProcess();
WheelHeat_Handle();
// WheelHeat_RunTime();
WheelHeat_OffGearDelay();
WheelHeat_Diag();
WheelHeat_CanTxProcess();
WheelHeat_Wire_Short_Check_Open();
}