Engine idle, Generating 시퀀스 수정
This commit is contained in:
48
Oper.c
48
Oper.c
@@ -11,9 +11,7 @@
|
||||
#define ENGINE_DIFF_SPEED (400U) // 2800 - 2400
|
||||
|
||||
// IDLE_SEQ_MOD
|
||||
#define RPM_RAMP_START (1500U)
|
||||
#define RPM_RAMP_END (2400U)
|
||||
#define RPM_RAMP_RANGE (RPM_RAMP_END - RPM_RAMP_START) // 900
|
||||
#define TIME_RAMP_UP (TIME_1SEC * 3UL) // 3초
|
||||
|
||||
#define LED_OFF (0U)
|
||||
@@ -123,40 +121,18 @@ static void CProcessApuStateRetryCranking(void)
|
||||
|
||||
static void CProcessApuStateEngineIdle(void)
|
||||
{
|
||||
#if 0 // '0' - 기존 코드, '1' - IDLE_SEQ_MOD
|
||||
if (((Rx301.State >> 1U) & 0x07U) == (Uint16)IDX_ECU_STAT_OPERATION)
|
||||
{
|
||||
// 보조엔진제어기의 상태가 OPERATION이고 보조엔진의 속도가 2300 RPM 이상 5초 유지 시 발전상태로 전환
|
||||
if (CGetEngineActualRpm() >= (ENGINE_OPERATION_SPEED - 100U)) // 2300 RPM
|
||||
{
|
||||
if (CSoftWaitCountProcedure(SOFTTIMER_WAIT_OPERATION, TIME_5SEC) == (Uint16)TIME_OVER)
|
||||
{
|
||||
GeneralOperValue.uiApuState = (Uint16)IDX_APU_OPER_GENERATING;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CSoftWaitCountClear(SOFTTIMER_WAIT_OPERATION);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (((Rx301.State >> 1U) & 0x07U) == (Uint16)IDX_ECU_STAT_OPERATION)
|
||||
{
|
||||
// ECU OPERATION 확인 즉시 발전 상태로 전환 (RPM Ramp는 CProcessApuStateGenerating에서 수행)
|
||||
GeneralOperValue.ulRampStartClock = 0UL;
|
||||
GeneralOperValue.uiApuState = (Uint16)IDX_APU_OPER_GENERATING;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void CProcessApuStateGenerating(void)
|
||||
{
|
||||
#if 0 // '0' - 기존 코드, '1' - IDLE_SEQ_MOD
|
||||
CSetGcuCommand((Uint16)IDX_GCU_CMD_GENERATING); // 발전 명령 송신
|
||||
GeneralOperValue.uiDynamicRPM = CDynamicRpmControl();
|
||||
CSetEngineActualRpm(GeneralOperValue.uiDynamicRPM); // RPM 가변 제어 시작
|
||||
#else
|
||||
Uint32 ulElapsed;
|
||||
Uint16 uiRampRange;
|
||||
Uint16 uiRampRpm;
|
||||
|
||||
CSetGcuCommand((Uint16)IDX_GCU_CMD_GENERATING);
|
||||
@@ -170,27 +146,29 @@ static void CProcessApuStateGenerating(void)
|
||||
{
|
||||
if (GeneralOperValue.ulRampStartClock == 0UL)
|
||||
{
|
||||
Uint16 uiActual = CGetEngineActualRpm();
|
||||
GeneralOperValue.uiRampStartRpm = (uiActual < RPM_RAMP_END) ? uiActual : RPM_RAMP_END;
|
||||
GeneralOperValue.ulRampStartClock = CGetSoftClock();
|
||||
CSetEngineActualRpm(RPM_RAMP_START);
|
||||
CSetEngineActualRpm(GeneralOperValue.uiRampStartRpm);
|
||||
}
|
||||
else
|
||||
{
|
||||
ulElapsed = (CGetSoftClock() + SYSTEM_10MIN_TIME - GeneralOperValue.ulRampStartClock) % SYSTEM_10MIN_TIME;
|
||||
ulElapsed = (CGetSoftClock() + SYSTEM_10MIN_TIME - GeneralOperValue.ulRampStartClock) % SYSTEM_10MIN_TIME;
|
||||
uiRampRange = RPM_RAMP_END - GeneralOperValue.uiRampStartRpm; // 동적 범위
|
||||
|
||||
if (ulElapsed < TIME_RAMP_UP)
|
||||
{
|
||||
uiRampRpm = (Uint16)(RPM_RAMP_START + (Uint16)(((Uint32)RPM_RAMP_RANGE * ulElapsed) / TIME_RAMP_UP));
|
||||
uiRampRpm = (Uint16)(GeneralOperValue.uiRampStartRpm + (Uint16)(((Uint32)uiRampRange * ulElapsed) / TIME_RAMP_UP));
|
||||
CSetEngineActualRpm(uiRampRpm);
|
||||
}
|
||||
else
|
||||
{
|
||||
GeneralOperValue.uiRampComplete = 1U;
|
||||
GeneralOperValue.uiDynamicRPM = CDynamicRpmControl();
|
||||
GeneralOperValue.uiRampComplete = 1U;
|
||||
GeneralOperValue.uiDynamicRPM = CDynamicRpmControl();
|
||||
CSetEngineActualRpm(GeneralOperValue.uiDynamicRPM);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void CProcessApuStateCooldown(void)
|
||||
@@ -384,9 +362,9 @@ static void CInitialStandby(void)
|
||||
|
||||
GeneralOperValue.uiEmergency = 0U;
|
||||
|
||||
GeneralOperValue.ulRampStartClock = 0UL; // IDLE_SEQ_MOD
|
||||
GeneralOperValue.ulRampStartClock = 0UL;
|
||||
|
||||
GeneralOperValue.uiRampComplete = 0U; // IDLE_SEQ_MOD
|
||||
GeneralOperValue.uiRampComplete = 0U;
|
||||
|
||||
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1U; // GPIO_FAULT_CMD
|
||||
}
|
||||
@@ -409,9 +387,9 @@ static void CEmergencyStop(void)
|
||||
|
||||
GeneralOperValue.uiEmergency = 1U;
|
||||
|
||||
GeneralOperValue.ulRampStartClock = 0UL; // IDLE_SEQ_MOD
|
||||
GeneralOperValue.ulRampStartClock = 0UL;
|
||||
|
||||
GeneralOperValue.uiRampComplete = 0U; // IDLE_SEQ_MOD
|
||||
GeneralOperValue.uiRampComplete = 0U;
|
||||
|
||||
GpioDataRegs.GPBSET.bit.GPIO55 = 1U; //GPIO_FAULT_CMD
|
||||
}
|
||||
|
||||
5
main.h
5
main.h
@@ -211,8 +211,9 @@ typedef struct ClassGeneralOperValue
|
||||
Uint16 uiRetryCrankingCount;
|
||||
Uint16 uiWriteEepromDataStart;
|
||||
Uint32 ulTotalOperationHour;
|
||||
Uint32 ulRampStartClock; // IDLE_SEQ_MOD
|
||||
Uint16 uiRampComplete; // IDLE_SEQ_MOD
|
||||
Uint32 ulRampStartClock;
|
||||
Uint16 uiRampComplete;
|
||||
Uint16 uiRampStartRpm;
|
||||
struct
|
||||
{
|
||||
Uint16 PlayCmd;
|
||||
|
||||
Reference in New Issue
Block a user