When the engine speed is high (determination of YES at S100), actual
intake valve phase is calculated based on rotation phase difference
between rotation angles of crankshaft and camshaft, detected by using a
crank angle signal and a cam angle signal, and actual valve timing is
detected therefrom. When the engine speed is low (determination of NO at
S100) and the crank angle signal and cam angle signal are unstable, an
amount of change in camshaft rotation phase by the VVT mechanism in
accordance with the operation amount of actuator detected by a motor
rotation angle signal is calculated successively, and based on an
accumulation of the amount of change, the actual intake valve phase is
calculated, and the actual valve timing is detected.