#ifndef STRUCTURES_H #define STRUCTURES_H #include #include #include #include struct CylinderState { unsigned long lastSparkTime; bool isInjecting; uint8_t pin; float advance; float detonationLevel; }; struct EngineError { bool detonationError; bool temperatureError; bool mapError; bool lambdaError; bool throttleError; uint8_t errorCode; }; struct EngineData { float rpm; float map; float temp; float lambda; float detonationLevel1; float detonationLevel2; float combinedDetonationLevel; }; struct ThrottleConfig { float minPosition; float maxPosition; float idlePosition; float speedPulseRatio; float ignitionMap[16][16]; }; struct ThrottleLearnData { float idlePositions[16]; uint16_t idleSamples[16]; float detonationHistory1[10]; float detonationHistory2[10]; int detonationHistoryIndex1; int detonationHistoryIndex2; }; struct ThrottleDiagnostics { bool isCalibrated; bool isStuck; bool isOverloaded; float current; float voltage; float detonationCorrection; }; struct IgnitionMap { float advance[16][16]; float rpmAxis[16]; float loadAxis[16]; float detonationMap[16][16]; float lambdaMap[16][16]; }; struct LearningData { float advanceCorrections[16][16]; uint32_t samples[16][16]; float detonationHistory[100]; uint8_t detonationIndex; }; struct EngineConfig { float idleRPM; float idleRPMCold; float warmupTemp; float maxRPM; float minRPM; float maxAdvance; float minAdvance; float maxInjection; float minInjection; float detonationThreshold; float learningRate; float maxDetonationCorrection; }; // Структура для хранения конфигурации struct ConfigData { uint8_t version; // Базовые таблицы float fuelTable[16][16]; // Базовая таблица топливоподачи float ignitionTable[16][16]; // Базовая таблица УОЗ // Таблицы обучения float fuelLearning[16][16]; // Таблица коррекции топливоподачи float ignitionLearning[16][16]; // Таблица коррекции УОЗ // Константы впрыска float injectionTimeMin; float injectionTimeMax; float injectionPressure; float injectorFlow; float injectorDeadtime; float injectorVoltage; float injectorCorrection; float startInjectionTime; float startRpmThreshold; // Лямбда float lambdaTarget; float lambdaCorrectionMin; float lambdaCorrectionMax; float lambdaCorrectionStep; // Холостой ход float idleRpmMin; float idleRpmMax; float idleAdvanceMin; float idleAdvanceMax; float idleAdvanceStep; float idleAdvanceInterval; float idleTargetRpm; // Целевые обороты ХХ float idleKp; // Коэффициент P для ПИД float idleKi; // Коэффициент I для ПИД float idleKd; // Коэффициент D для ПИД // Коррекции bool tempCorrectionEnabled; bool lambdaCorrectionEnabled; bool idleAdvanceLearningEnabled; bool throttleAdaptationEnabled; bool hotEngineCorrectionEnabled; bool accelPumpEnabled; // Зажигание String ignitionType; int coilCount; float sparkDuration; float maxAdvance; float minAdvance; float mechanicalAdvance; float dwellTime; // Температура float coldStartTemp; float hotEngineTemp; uint32_t checksum; }; // Настройки РХХ struct IdleSettings { float targetRPM; float valveMinPosition; float valveMaxPosition; float rpmTolerance; float kp; float ki; float kd; }; // Системные настройки struct SystemSettings { uint32_t version; IdleSettings idle; float minAdvance; float maxAdvance; float injectionTimeMin; float injectionTimeMax; float idleRpmMin; float idleRpmMax; }; // Данные обучения struct LearningData2 { float fuelCorrections[16][16]; float ignitionCorrections[16][16]; uint32_t cellHits[16][16]; uint32_t version; }; #endif