ADM/GW/src/System_Layer/Ignition/Ignition.c
3minbe b38e7ebc8f ver 25.12.29.1
- 코드 구조 변경(레이어 삭제/추가)
  : IG_Layer 삭제
  : Vehicle_System_Mode_Layer 삭제
  : System_Layer 추가
- 코드 구조 변경(통합)
  : System_Check 내 함수 Drive_Mode로 이동
  : System_Layer로 Drive_Mode, Ignition 이동
- DBC 업데이트
  : CAN_DBC_ch1_v41.dbc
  : RC_VCU_Signal2(0x41) 내 RC_ACU_Drive_Mode 신호 추가
2025-12-29 17:58:52 +09:00

189 lines
4.4 KiB
C
Raw Blame History

/*
* Ignition.c
*
* Created on: 2024. 6. 17.
* Author: SUPYO
*/
#include "IG_Layer/Ignition.h"
#include "Global_Variable.h"
uint8_t GV_All_ECU_Ready_Flag_2 = 0;
uint8_t GV_ALL_ECU_Off_Flag_2 = 0;
int Operation_Ready = 0;
int Operation_Ready_2 = 0;
/*=================== Ignition On ===================*/
/*
* Function Name : IG_OnCheck_HV_Status
* Data Type : void
* Description : Checklist / 1. -- / 2. HV Released / 3. EPAM Applied / 4. LDC, BMS Fault Check
* Requirement : 고장 검출 시간 필요, 고장 시 운행 방어 코드 필요.
*/
void IG_OnCheck_HV_Status(void)
{
if(GV_BMS_Fault_Check == 0 && GV_HV_Apply_Check == 0) GV_IG_Process_Status = 2;
}
void HV_ON_FUNC(void)
{
/*Check Fault Status, Contact HV Sys*/
GV_HV_ON_CMD = 1;
/*Check Fault Status, Contact LDC Sys*/
if(GV_HV_Apply_Check == 1)
{
GV_LDC_ACT_CMD = 1;
GV_LDC_TAGT_CMD = 120; // 20240821- 30->40으로 변경, 추후 자율주행 시 180 으로 조정 // 20241010 - 150A 로 조정// 20241024-> 라이다플럭스 인계 120A 로 조정
}
}
void Key_on_Sub_Func1(void)
{
if(GV_CE_ON_CMD == 1)
{
GV_MCU_Init_Status = 1;
GV_Steer_Init_Status = 1;
GV_Brake_Init_Status = 1;
GV_ACU_Init_Status = 1;
}
else
{
GV_MCU_Init_Status = 0;
GV_Steer_Init_Status = 0;
GV_Brake_Init_Status = 0;
GV_ACU_Init_Status = 0;
}
}
/*
* Function Name : Key_on_Sub_Func1
* Data Type : void
* Description : Check the ECU Systems
* Requirement : *
*/
void Key_on_Sub_Func2(void)
{
if(GV_BCM_Init_Status == 1 /*&& GV_BMS_Init_Status == 1*/ && GV_MCU_Init_Status == 1 && GV_Steer_Init_Status == 1 && GV_Brake_Init_Status == 1 && GV_ACU_Init_Status == 1 ) // GV_SOC_STAT_Flag =! 3 <20><> soc 30 % <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
GV_All_ECU_Ready_Flag = 1;
else
GV_All_ECU_Ready_Flag = 0;
if(GV_BCM_Init_Status == 0 /*&& GV_BMS_Init_Status == 0 */&& GV_MCU_Init_Status == 0 && GV_Steer_Init_Status == 0 && GV_Brake_Init_Status == 0 && GV_ACU_Init_Status == 0)
GV_ALL_ECU_Off_Flag = 1;
else
GV_ALL_ECU_Off_Flag = 0;
}
/*
* Function Name : Key_on_Sub_Func3
* Data Type : void
* Description : Final Sub Function / Check ECU Init , HV on, LDC on -> Pass
* Requirement : Operation Ready, EPAM Release, Process Status = Key on Complete 3
*/
void Key_on_Sub_Func3(void)
{
Operation_Ready = 1;
GV_EPAM_CMD = 0; //EPAM Release Cmd
GV_IG_Process_Status = 3;
}
/*
* Function Name : Key_on_Process_Func
* Data Type : void
* Description : ECU Init / Contact HV System / EPAM Release and Process Complete
* Requirement : *
*/
void Key_on_Process_Func(void)
{
Key_on_Sub_Func1();
Key_on_Sub_Func2();
if(GV_All_ECU_Ready_Flag == 1) Key_on_Sub_Func3();
}
/*=================== Ignition Off ===================*/
/* Key off 시 고전압 확인
* Function Name : IG_OffCheck_HV_Status
* Data Type : void
* Description : Checklist / 1. -- / 2. HV Released / 3. EPAM Applied / 4. LDC, BMS Fault Check
* Requirement : *
*/
void IG_OffCheck_HV_Status_2(void)
{
if(GV_HV_Apply_Check == 1 && GV_EPAM_STA == 1) GV_IG_Process_Status = 0;
}
void HV_OFF_FUNC(void)
{
/*Check Fault Status, Contact HV Sys*/
if(GV_LDC_Apply_Check == 0 && GV_HV_ON_CMD == 1)
{
CNT_GV_HV_ON_CMD++;
} // 240522 LDC 전원 드랍확인 후 CNT 진행, 충분한 시간 후 HV OFF
/*Check Fault Status, Contact LDC Sys*/
// LDC
GV_LDC_ACT_CMD = 0;
GV_LDC_TAGT_CMD = 0;
if (CNT_GV_HV_ON_CMD >= 500) //1000ms
{
CNT_GV_HV_ON_CMD = 0;
GV_HV_ON_CMD = 0;
GV_Key_Off_Level = 2;
}
}
void Key_off_Sub_Func1(void)
{
if(GV_BCM_Init_Status == 1 && GV_MCU_Init_Status == 1 && GV_Steer_Init_Status == 1 && GV_Brake_Init_Status == 1 && GV_ACU_Init_Status == 1)
GV_All_ECU_Ready_Flag = 1;
else
GV_All_ECU_Ready_Flag = 0;
// if(GV_BCM_Init_Status == 0 && GV_MCU_Init_Status == 0 && GV_Steer_Init_Status == 0 && GV_Brake_Init_Status == 0 && GV_ACU_Init_Status == 0)
// {
// GV_ALL_ECU_Off_Flag = 1;
// GV_Key_Off_Level = 1;
// }
// else
// GV_ALL_ECU_Off_Flag = 0;
GV_ALL_ECU_Off_Flag = 1;
GV_Key_Off_Level = 1;
}
void Key_off_Sub_Func2(void)
{
HV_OFF_FUNC();
}
void Key_off_Sub_Func3(void)
{
// ldc 드랍
if(GV_can_rx_ldc_v < 5)
{
GV_CE_ON_CMD = 0;
GV_Key_Off_Level = 3;
}
else GV_CE_ON_CMD = 1;
}
void Key_Off_Process_Func(void)
{
Key_off_Sub_Func1();
if(GV_Key_Off_Level == 1) Key_off_Sub_Func2();
else if(GV_Key_Off_Level == 2) Key_off_Sub_Func3();
if(GV_ALL_ECU_Off_Flag == 1 && GV_Key_Off_Level == 3)
{
Operation_Ready = 0;
GV_IG_Process_Status = 1;
}
}