idle 상태와 generating 상태 기능 수정

This commit is contained in:
2026-04-15 09:51:49 +09:00
parent ecb0c5477d
commit 65e4a102c6
7 changed files with 291 additions and 347 deletions

120
Oper.c
View File

@@ -10,7 +10,6 @@
#define ENGINE_OPERATION_SPEED (2400U)
#define ENGINE_DIFF_SPEED (400U) // 2800 - 2400
// IDLE_SEQ_MOD
#define RPM_RAMP_END (2400U)
#define TIME_RAMP_UP (TIME_1SEC * 3UL) // 3초
@@ -37,6 +36,7 @@ static void CProcessApuStateGenerating(void);
static void CProcessApuStateCooldown(void);
static void CProcessApuStateStopping(void);
static void CProcessApuStateTransition(void); // 비상/시동/정지 전이 판별용
static void CExecuteApuState(Uint16 uiState);
static void CSetEngineActualRpm(Uint16 Rpm);
static float32 CGetGcuLoadPower(void);
static Uint16 CDynamicRpmControl(void);
@@ -270,49 +270,53 @@ void CApuOperProcedure(void)
CSetAuxCtrlPin(IDX_CS_FUEL_PUMP, FuelPumpSig);
}
// 각 상태별 동작 수행
switch (GeneralOperValue.uiApuState)
CExecuteApuState(GeneralOperValue.uiApuState);
}
}
static void CExecuteApuState(Uint16 uiState)
{
switch (uiState)
{
case (Uint16)IDX_APU_OPER_READY:
{
case (Uint16)IDX_APU_OPER_READY:
{
CProcessApuStateReady();
break;
}
case (Uint16)IDX_APU_OPER_PREHEAT:
{
CProcessApuStatePreheat();
break;
}
case (Uint16)IDX_APU_OPER_CRANKING:
{
CProcessApuStateCranking();
break;
}
case (Uint16)IDX_APU_OPER_RETRY_CRANKING:
{
CProcessApuStateRetryCranking();
break;
}
case (Uint16)IDX_APU_OPER_ENGINE_IDLE:
{
CProcessApuStateEngineIdle();
break;
}
case (Uint16)IDX_APU_OPER_GENERATING:
{
CProcessApuStateGenerating();
break;
}
case (Uint16)IDX_APU_OPER_COOLDOWN:
{
CProcessApuStateCooldown();
break;
}
default:
{
CProcessApuStateStopping();
break;
}
CProcessApuStateReady();
break;
}
case (Uint16)IDX_APU_OPER_PREHEAT:
{
CProcessApuStatePreheat();
break;
}
case (Uint16)IDX_APU_OPER_CRANKING:
{
CProcessApuStateCranking();
break;
}
case (Uint16)IDX_APU_OPER_RETRY_CRANKING:
{
CProcessApuStateRetryCranking();
break;
}
case (Uint16)IDX_APU_OPER_ENGINE_IDLE:
{
CProcessApuStateEngineIdle();
break;
}
case (Uint16)IDX_APU_OPER_GENERATING:
{
CProcessApuStateGenerating();
break;
}
case (Uint16)IDX_APU_OPER_COOLDOWN:
{
CProcessApuStateCooldown();
break;
}
default:
{
CProcessApuStateStopping();
break;
}
}
}
@@ -362,10 +366,6 @@ static void CInitialStandby(void)
GeneralOperValue.uiEmergency = 0U;
GeneralOperValue.ulRampStartClock = 0UL;
GeneralOperValue.uiRampComplete = 0U;
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1U; // GPIO_FAULT_CMD
}
@@ -387,10 +387,6 @@ static void CEmergencyStop(void)
GeneralOperValue.uiEmergency = 1U;
GeneralOperValue.ulRampStartClock = 0UL;
GeneralOperValue.uiRampComplete = 0U;
GpioDataRegs.GPBSET.bit.GPIO55 = 1U; //GPIO_FAULT_CMD
}
@@ -446,12 +442,7 @@ void CSetEcuCommand(Uint16 Command)
// [ECU_OPER_CMD_START]
GeneralOperValue.EcuCommand.EngineStart = 1U;
GeneralOperValue.EcuCommand.EngineStop = 0U;
#if 0 // RPM 테스트
CSetEngineActualRpm(Rx400.SetRPM.PCAN_RPM);
#else
//CSetEngineActualRpm(2400U);
CSetEngineActualRpm(1500U); // Target Idle
#endif
CSetEngineActualRpm(1200U);
}
}
@@ -460,21 +451,8 @@ int16 CGetEngCoolantTemperature(void)
return (int16) Rx321.CoolantTemperature - 40; // 온도 오프셋 -40도
}
void CDebugModeProcedure(void)
void CMaintenanceProcedure(void)
{
if (GeneralOperValue.Maintenance.ManualCranking == 1U)
{
if (GeneralOperValue.uiFaultOccured == 0U)
{
// 알람이 없을 경우만 동작 하도록 함.
CSetGcuCommand((Uint16)IDX_GCU_CMD_CRANKING);
}
}
else
{
CSetGcuCommand((Uint16)IDX_GCU_CMD_STOP);
}
if (GeneralOperValue.Maintenance.LampTest == 1U)
{
CLedControl(0U, 1U);