991 lines
31 KiB
C
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();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|