Engine idle, Generating 시퀀스 수정
This commit is contained in:
42
Oper.c
42
Oper.c
@@ -11,9 +11,7 @@
|
|||||||
#define ENGINE_DIFF_SPEED (400U) // 2800 - 2400
|
#define ENGINE_DIFF_SPEED (400U) // 2800 - 2400
|
||||||
|
|
||||||
// IDLE_SEQ_MOD
|
// IDLE_SEQ_MOD
|
||||||
#define RPM_RAMP_START (1500U)
|
|
||||||
#define RPM_RAMP_END (2400U)
|
#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 TIME_RAMP_UP (TIME_1SEC * 3UL) // 3초
|
||||||
|
|
||||||
#define LED_OFF (0U)
|
#define LED_OFF (0U)
|
||||||
@@ -123,40 +121,18 @@ static void CProcessApuStateRetryCranking(void)
|
|||||||
|
|
||||||
static void CProcessApuStateEngineIdle(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)
|
if (((Rx301.State >> 1U) & 0x07U) == (Uint16)IDX_ECU_STAT_OPERATION)
|
||||||
{
|
{
|
||||||
// ECU OPERATION 확인 즉시 발전 상태로 전환 (RPM Ramp는 CProcessApuStateGenerating에서 수행)
|
// ECU OPERATION 확인 즉시 발전 상태로 전환 (RPM Ramp는 CProcessApuStateGenerating에서 수행)
|
||||||
GeneralOperValue.ulRampStartClock = 0UL;
|
GeneralOperValue.ulRampStartClock = 0UL;
|
||||||
GeneralOperValue.uiApuState = (Uint16)IDX_APU_OPER_GENERATING;
|
GeneralOperValue.uiApuState = (Uint16)IDX_APU_OPER_GENERATING;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CProcessApuStateGenerating(void)
|
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;
|
Uint32 ulElapsed;
|
||||||
|
Uint16 uiRampRange;
|
||||||
Uint16 uiRampRpm;
|
Uint16 uiRampRpm;
|
||||||
|
|
||||||
CSetGcuCommand((Uint16)IDX_GCU_CMD_GENERATING);
|
CSetGcuCommand((Uint16)IDX_GCU_CMD_GENERATING);
|
||||||
@@ -170,16 +146,19 @@ static void CProcessApuStateGenerating(void)
|
|||||||
{
|
{
|
||||||
if (GeneralOperValue.ulRampStartClock == 0UL)
|
if (GeneralOperValue.ulRampStartClock == 0UL)
|
||||||
{
|
{
|
||||||
|
Uint16 uiActual = CGetEngineActualRpm();
|
||||||
|
GeneralOperValue.uiRampStartRpm = (uiActual < RPM_RAMP_END) ? uiActual : RPM_RAMP_END;
|
||||||
GeneralOperValue.ulRampStartClock = CGetSoftClock();
|
GeneralOperValue.ulRampStartClock = CGetSoftClock();
|
||||||
CSetEngineActualRpm(RPM_RAMP_START);
|
CSetEngineActualRpm(GeneralOperValue.uiRampStartRpm);
|
||||||
}
|
}
|
||||||
else
|
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)
|
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);
|
CSetEngineActualRpm(uiRampRpm);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -190,7 +169,6 @@ static void CProcessApuStateGenerating(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CProcessApuStateCooldown(void)
|
static void CProcessApuStateCooldown(void)
|
||||||
@@ -384,9 +362,9 @@ static void CInitialStandby(void)
|
|||||||
|
|
||||||
GeneralOperValue.uiEmergency = 0U;
|
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
|
GpioDataRegs.GPBCLEAR.bit.GPIO55 = 1U; // GPIO_FAULT_CMD
|
||||||
}
|
}
|
||||||
@@ -409,9 +387,9 @@ static void CEmergencyStop(void)
|
|||||||
|
|
||||||
GeneralOperValue.uiEmergency = 1U;
|
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
|
GpioDataRegs.GPBSET.bit.GPIO55 = 1U; //GPIO_FAULT_CMD
|
||||||
}
|
}
|
||||||
|
|||||||
5
main.h
5
main.h
@@ -211,8 +211,9 @@ typedef struct ClassGeneralOperValue
|
|||||||
Uint16 uiRetryCrankingCount;
|
Uint16 uiRetryCrankingCount;
|
||||||
Uint16 uiWriteEepromDataStart;
|
Uint16 uiWriteEepromDataStart;
|
||||||
Uint32 ulTotalOperationHour;
|
Uint32 ulTotalOperationHour;
|
||||||
Uint32 ulRampStartClock; // IDLE_SEQ_MOD
|
Uint32 ulRampStartClock;
|
||||||
Uint16 uiRampComplete; // IDLE_SEQ_MOD
|
Uint16 uiRampComplete;
|
||||||
|
Uint16 uiRampStartRpm;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
Uint16 PlayCmd;
|
Uint16 PlayCmd;
|
||||||
|
|||||||
Reference in New Issue
Block a user