From a319f6477af58f60d824aa0675ba1a63538ec41e Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 9 Feb 2026 15:55:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MainModesArbiter.c | 141 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 4 deletions(-) diff --git a/MainModesArbiter.c b/MainModesArbiter.c index 82cf807..94d3e19 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -40,28 +40,161 @@ void Mma_Init( //uint8_t dataR[1024 * 2]; +void BTS5180_120(tMma *env, char *desc, uint16_t adc_value) { + float kILIS = 550.0f; + + float ERROR_THRESHOLD_V = 4.9f; + uint16_t ERROR_THRESHOLD_CODE = (uint16_t) (ERROR_THRESHOLD_V * 4095.0f / 5.0f); + + if (adc_value >= ERROR_THRESHOLD_CODE) { + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "%s: Ошибка !!!", desc) + } else { + // Преобразование в напряжение + float U = (float) adc_value * 5.0f / 4095.0f; + float I = U / 1200; // Ток диагностики R = 1200 + float Iout = I * kILIS; // Ток устройства + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, + "%s: Напряжение = %f Ток диагностики = %f Выходной = %f", + desc, U, I, Iout) + } + +} + +void VN7008AJ(tMma *env, char *desc, uint16_t adc_value) { + + float RSENSE = 2490.0f; // Сопротивление датчика, Ом (На схеме) + float K_TYPICAL = 5890.0f; // Типичный коэффициент из даташита на микросхему + + float ERROR_THRESHOLD_V = 4.9f; + uint16_t ERROR_THRESHOLD_CODE = (uint16_t) (ERROR_THRESHOLD_V * 4095.0f / 5.0f); + + // 1. Проверка на ошибку + if (adc_value >= ERROR_THRESHOLD_CODE) { + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "%s: Ошибка !!!", desc) + } else { + + // 2. Преобразование в напряжение + float vsense = (float) adc_value * 5.0f / 4095.0f; + + // 3. Вычисление тока + float Isense = vsense / RSENSE; + float Iout = Isense * K_TYPICAL; + + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, + "%s: Напряжение = %f Ток диагностики = %f Выходной = %f", + desc, vsense, Isense, Iout) + } + +} + +void ANALOG_SENSOR(tMma *env, char *desc, uint16_t adc_value) { + float ERROR_THRESHOLD_V = 4.9f; + uint16_t ERROR_THRESHOLD_CODE = (uint16_t) (ERROR_THRESHOLD_V * 4095.0f / 5.0f); + + // 1. Проверка на ошибку + if (adc_value >= ERROR_THRESHOLD_CODE) { + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "%s: Ошибка !!!", desc) + } else { + // Преобразование в напряжение + float U = (float) adc_value * 5.0f / 4095.0f; + + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "%s: Напряжение = %f", desc, U) + } + +} + void LoadDataInFromModel(tMma *env) { int16_t temp1 = 0; float temp2 = 0; if (osMutexAcquire(env->adcTask0.access, 1000) == osOK) { - temp1 = get_temperature_fast(env->adcTask0.ADC_Data.Sensor_Ambient_Temp); - temp2 = get_temperature_from_adc(env->adcTask0.ADC_Data.Sensor_Ambient_Temp, ALG_STEINHART); if (env->adcTask0.ADC_isUpdate) { env->adcTask0.ADC_isUpdate = false; - env->rtDW.controllerDataIncarInput.InIncarFL = env->adcTask0.ADC_Data.Sensor_Ambient_Temp; + + + temp1 = get_temperature_fast(env->adcTask0.ADC0_Data.Sensor_Ambient_Temp); + temp2 = get_temperature_from_adc(env->adcTask0.ADC0_Data.Sensor_Ambient_Temp, ALG_STEINHART); + env->rtDW.controllerDataIncarInput.InIncarFL = env->adcTask0.ADC0_Data.Sensor_Ambient_Temp; + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "Temp1 = %d; Temp2 = %d;", temp1, (int16_t) (temp2 * 10.0f)) + + // R1 = 91000 R2 = 20000 ((5 * (91000 + 20000)) / 20000 = 27.75 В) + float U_IGN_CHECK = ((float) env->adcTask0.ADC0_Data.IGN_ANS * 27.75f) / 4095.0f; + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "U_IGN_CHECK = %f", U_IGN_CHECK) + + + BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV1", + env->adcTask0.ADC0_Data.BTS5120_2EKA_ShutoffValvePowerTXV1); + BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV2", + env->adcTask0.ADC0_Data.BTS5120_2EKA_ShutoffValvePowerTXV2); + + BTS5180_120(env, "BTS5180_2EKA_ShutOFFValveFront", env->adcTask0.ADC0_Data.BTS5180_2EKA_ShutOFFValveFront); + BTS5180_120(env, "BTS5180_2EKA_ShutOFFValveRear", env->adcTask0.ADC0_Data.BTS5180_2EKA_ShutOFFValveRear); + + BTS5180_120(env, "BTS5180_2EKA_TwoWayValve", env->adcTask0.ADC0_Data.BTS5180_2EKA_TwoWayValve); + BTS5180_120(env, "BTS5180_2EKA_ReservePowerSupply", + env->adcTask0.ADC0_Data.BTS5180_2EKA_ReservePowerSupply); + + BTS5180_120(env, "BTS5180_2EKA_FrontIncarMotor", env->adcTask0.ADC0_Data.BTS5180_2EKA_FrontIncarMotor); + BTS5180_120(env, "BTS5180_2EKA_RearIncarMotor", env->adcTask0.ADC0_Data.BTS5180_2EKA_RearIncarMotor); + + BTS5180_120(env, "BTS5180_2EKA_ChannelPTCPower1", env->adcTask0.ADC0_Data.BTS5180_2EKA_ChannelPTCPower1); + BTS5180_120(env, "BTS5180_2EKA_ChannelPTCPower2", env->adcTask0.ADC0_Data.BTS5180_2EKA_ChannelPTCPower2); + + ANALOG_SENSOR(env, "Sensor_Ambient_Temp", env->adcTask0.ADC0_Data.Sensor_Ambient_Temp); + ANALOG_SENSOR(env, "Sensor_AC_Pressure", env->adcTask0.ADC0_Data.Sensor_AC_Pressure); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_FL", env->adcTask0.ADC0_Data.Sensor_Incar_Temp_FL); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_RL", env->adcTask0.ADC0_Data.Sensor_Incar_Temp_RL); + ANALOG_SENSOR(env, "Sensor_Rear_Evap_Temp", env->adcTask0.ADC0_Data.Sensor_Rear_Evap_Temp); + ANALOG_SENSOR(env, "Sensor_Evap_Temp", env->adcTask0.ADC0_Data.Sensor_Evap_Temp); + ANALOG_SENSOR(env, "Sensor_Rear_Duct1", env->adcTask0.ADC0_Data.Sensor_Rear_Duct1); + ANALOG_SENSOR(env, "Sensor_Rear_Duct2", env->adcTask0.ADC0_Data.Sensor_Rear_Duct2); + ANALOG_SENSOR(env, "Sensor_Front_Duct1", env->adcTask0.ADC0_Data.Sensor_Front_Duct1); + ANALOG_SENSOR(env, "Sensor_Front_Duct2", env->adcTask0.ADC0_Data.Sensor_Front_Duct2); + ANALOG_SENSOR(env, "Sensor_Front_Duct3", env->adcTask0.ADC0_Data.Sensor_Front_Duct3); + ANALOG_SENSOR(env, "Sensor_Front_Duct4", env->adcTask0.ADC0_Data.Sensor_Front_Duct4); + ANALOG_SENSOR(env, "Sensor_Rear_Duct3", env->adcTask0.ADC0_Data.Sensor_Rear_Duct3); + ANALOG_SENSOR(env, "Sensor_Rear_Duct4", env->adcTask0.ADC0_Data.Sensor_Rear_Duct4); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_FR", env->adcTask0.ADC0_Data.Sensor_Incar_Temp_FR); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_RR", env->adcTask0.ADC0_Data.Sensor_Incar_Temp_RR); + ANALOG_SENSOR(env, "Sensor_Rear_Duct5", env->adcTask0.ADC0_Data.Sensor_Rear_Duct5); + ANALOG_SENSOR(env, "Sensor_Rear_Duct6", env->adcTask0.ADC0_Data.Sensor_Rear_Duct6); + ANALOG_SENSOR(env, "Reserve_Sensor_Duct_Temp_1", env->adcTask0.ADC0_Data.Reserve_Sensor_Duct_Temp_1); + ANALOG_SENSOR(env, "Sensor_Front_Duct5", env->adcTask0.ADC0_Data.Sensor_Front_Duct5); + ANALOG_SENSOR(env, "Sensor_Front_Duct6", env->adcTask0.ADC0_Data.Sensor_Front_Duct6); + ANALOG_SENSOR(env, "Pressure_DIAG", env->adcTask0.ADC0_Data.Pressure_DIAG); + ANALOG_SENSOR(env, "Reserve_Sensor_Duct_Temp_2", env->adcTask0.ADC0_Data.Reserve_Sensor_Duct_Temp_2); + } osMutexRelease(env->adcTask0.access); - LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "Temp1 = %d; Temp2 = %d;", temp1, (int16_t)(temp2 * 10.0f)) } if (osMutexAcquire(env->adcTask1.access, 1000) == osOK) { if (env->adcTask1.ADC_isUpdate) { env->adcTask1.ADC_isUpdate = false; + + // R1 = 91000 R2 = 16000 ((5 * (91000 + 16000)) / 16000 = 33.4375 В) + float U_PBATT_CHECK = ((float) env->adcTask1.ADC1_Data.PBATT_CHECK * 33.4375f) / 4095.0f; + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "U_PBATT_CHECK = %f", U_PBATT_CHECK) + + // R1 = 30000 R2 = 12000 ((5 * (30000 + 12000)) / 12000 = 17.5 В) + float U_VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB = + ((float) env->adcTask0.ADC0_Data.VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB * 17.5f) / 4095.0f; + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "U_VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB = %f", + U_VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB) + + // R1 = 30000 R2 = 12000 ((5 * (30000 + 12000)) / 12000 = 17.5 В) + float U_VN7008AJ_DIAG_RearLINActuatorPowerDriverC = + ((float) env->adcTask0.ADC0_Data.VN7008AJ_DIAG_RearLINActuatorPowerDriverC * 17.5f) / 4095.0f; + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "U_VN7008AJ_DIAG_RearLINActuatorPowerDriverC = %f", + U_VN7008AJ_DIAG_RearLINActuatorPowerDriverC) + + VN7008AJ(env, "VN7008AJ_FrontLINActuatorPowerDriverAB", env->adcTask1.ADC1_Data.VN7008AJ_FrontLINActuatorPowerDriverAB); + VN7008AJ(env, "VN7008AJ_RearLINActuatorPowerDriverC", env->adcTask1.ADC1_Data.VN7008AJ_RearLINActuatorPowerDriverC); + } //temp2 = get_temperature_fast(env->adcTask1.ADC_Data[0], fast_lookup_KST45, 512);