From 074f077809f40f41998097f8a426a06556900aff Mon Sep 17 00:00:00 2001 From: cfif Date: Mon, 4 May 2026 17:36:43 +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=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20V2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AdcTasks.c | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 153 insertions(+), 3 deletions(-) diff --git a/AdcTasks.c b/AdcTasks.c index 1b83b61..8931dbb 100644 --- a/AdcTasks.c +++ b/AdcTasks.c @@ -29,6 +29,69 @@ void Adc_0_Init(tAdcTask *env, osPriorityNormal); } +void BTS5180_120(tAdcTask *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_SIGN, "%s: Error !!! (adc = %d)", desc, adc_value) + } else { + // Преобразование в напряжение + float U = (float) adc_value * 5.0f / 4095.0f; + float I = U / 1200; // Ток диагностики R = 1200 + float Iout = I * kILIS; // Ток устройства + LoggerFormatInfo(LOGGER, LOG_SIGN, + "%s: U = %f I = %f Iout = %f", + desc, U, I, Iout) + } + +} + +void VN7008AJ(tAdcTask *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_SIGN, "%s: Error !!! (adc = %d)", desc, adc_value) + } else { + + // 2. Преобразование в напряжение + float vsense = (float) adc_value * 5.0f / 4095.0f; + + // 3. Вычисление тока + float Isense = vsense / RSENSE; + float Iout = Isense * K_TYPICAL; + + LoggerFormatInfo(LOGGER, LOG_SIGN, + "%s: U = %f I = %f Iout = %f", + desc, vsense, Isense, Iout) + } + +} + +void ANALOG_SENSOR(tAdcTask *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_SIGN, "%s: Error !!! (adc = %d)", desc, adc_value) + } else { + // Преобразование в напряжение + float U = (float) adc_value * 5.0f / 4095.0f; + + LoggerFormatInfo(LOGGER, LOG_SIGN, "%s: U = %f (adc = %d)", desc, U, adc_value) + } + +} + static _Noreturn void Adc0_Thread(tAdcTask *env) { @@ -86,8 +149,8 @@ static _Noreturn void Adc0_Thread(tAdcTask *env) { rtDW.ADC_Data_Model.Pressure_DIAG = pData[23]; rtDW.ADC_Data_Model.Reserve_Sensor_Duct_Temp_2 = pData[28]; - //rtDW.ADC_Data_Model.Sensor_PT_rHVAC_P = pData[29]; - //rtDW.ADC_Data_Model.Sensor_A_T_reserve = pData[30]; + rtDW.ADC_Data_Model.Sensor_PT_rHVAC_P = pData[29]; + rtDW.ADC_Data_Model.Sensor_A_T_reserve = pData[30]; if (env->ADC0_BTS5120_2EKA_Channel == 0) { env->ADC0_BTS5120_2EKA_Channel = 1; @@ -122,6 +185,66 @@ static _Noreturn void Adc0_Thread(tAdcTask *env) { } + /* +//////////////////////////////////////----DEBUG----//////////////////////////////////////////////////////////////////// + BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV1", + rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV1); + BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV2", + rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV2); + + BTS5180_120(env, "BTS5180_2EKA_ShutOFFValveFront", rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveFront); + BTS5180_120(env, "BTS5180_2EKA_ShutOFFValveRear", rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveRear); + + BTS5180_120(env, "BTS5180_2EKA_TwoWayValve", rtDW.ADC_Data_Model.BTS5180_2EKA_TwoWayValve); + BTS5180_120(env, "BTS5180_2EKA_ReservePowerSupply", + rtDW.ADC_Data_Model.BTS5180_2EKA_ReservePowerSupply); + + BTS5180_120(env, "BTS5180_2EKA_FrontIncarMotor", rtDW.ADC_Data_Model.BTS5180_2EKA_FrontIncarMotor); + BTS5180_120(env, "BTS5180_2EKA_RearIncarMotor", rtDW.ADC_Data_Model.BTS5180_2EKA_RearIncarMotor); + + BTS5180_120(env, "BTS5180_2EKA_ChannelPTCPower1", rtDW.ADC_Data_Model.BTS5180_2EKA_ChannelPTCPower1); + BTS5180_120(env, "BTS5180_2EKA_ChannelPTCPower2", rtDW.ADC_Data_Model.BTS5180_2EKA_ChannelPTCPower2); + + + ANALOG_SENSOR(env, "Sensor_Ambient_Temp", rtDW.ADC_Data_Model.Sensor_Ambient_Temp); + ANALOG_SENSOR(env, "Sensor_AC_Pressure", rtDW.ADC_Data_Model.Sensor_AC_Pressure); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_FL", rtDW.ADC_Data_Model.Sensor_Incar_Temp_FL); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_RL", rtDW.ADC_Data_Model.Sensor_Incar_Temp_RL); + ANALOG_SENSOR(env, "Sensor_Rear_Evap_Temp", rtDW.ADC_Data_Model.Sensor_Rear_Evap_Temp); + ANALOG_SENSOR(env, "Sensor_Evap_Temp", rtDW.ADC_Data_Model.Sensor_Evap_Temp); + ANALOG_SENSOR(env, "Sensor_Rear_Duct1", rtDW.ADC_Data_Model.Sensor_Rear_Duct1); + ANALOG_SENSOR(env, "Sensor_Rear_Duct2", rtDW.ADC_Data_Model.Sensor_Rear_Duct2); + ANALOG_SENSOR(env, "Sensor_Front_Duct1", rtDW.ADC_Data_Model.Sensor_Front_Duct1); + ANALOG_SENSOR(env, "Sensor_Front_Duct2", rtDW.ADC_Data_Model.Sensor_Front_Duct2); + ANALOG_SENSOR(env, "Sensor_Front_Duct3", rtDW.ADC_Data_Model.Sensor_Front_Duct3); + ANALOG_SENSOR(env, "Sensor_Front_Duct4", rtDW.ADC_Data_Model.Sensor_Front_Duct4); + ANALOG_SENSOR(env, "Sensor_Rear_Duct3", rtDW.ADC_Data_Model.Sensor_Rear_Duct3); + ANALOG_SENSOR(env, "Sensor_Rear_Duct4", rtDW.ADC_Data_Model.Sensor_Rear_Duct4); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_FR", rtDW.ADC_Data_Model.Sensor_Incar_Temp_FR); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_RR", rtDW.ADC_Data_Model.Sensor_Incar_Temp_RR); + ANALOG_SENSOR(env, "Sensor_Rear_Duct5", rtDW.ADC_Data_Model.Sensor_Rear_Duct5); + ANALOG_SENSOR(env, "Sensor_Rear_Duct6", rtDW.ADC_Data_Model.Sensor_Rear_Duct6); + ANALOG_SENSOR(env, "Reserve_Sensor_Duct_Temp_1", rtDW.ADC_Data_Model.Reserve_Sensor_Duct_Temp_1); + ANALOG_SENSOR(env, "Sensor_Front_Duct5", rtDW.ADC_Data_Model.Sensor_Front_Duct5); + ANALOG_SENSOR(env, "Sensor_Front_Duct6", rtDW.ADC_Data_Model.Sensor_Front_Duct6); + + + ANALOG_SENSOR(env, "Pressure_DIAG", rtDW.ADC_Data_Model.Pressure_DIAG); + + ANALOG_SENSOR(env, "Sensor_PT_rHVAC_P", rtDW.ADC_Data_Model.Sensor_PT_rHVAC_P); + ANALOG_SENSOR(env, "Sensor_A_T_reserve", rtDW.ADC_Data_Model.Sensor_A_T_reserve); +//////////////////////////////////////----DEBUG----//////////////////////////////////////////////////////////////////// +*/ + + + + + + + + + + osMutexRelease(env->modelTaskAccess); } else { @@ -199,9 +322,36 @@ static _Noreturn void Adc1_Thread(tAdcTask *env) { rtDW.ADC_Data_Model.Sensor_HVBchiller_T = pData[12]; rtDW.ADC_Data_Model.Sensor_PT_P_reserve = pData[13]; rtDW.ADC_Data_Model.Sensor_PT_T_reserve = pData[14]; - rtDW.ADC_Data_Model.Sensor_B_T_reserve = pData[15]; + rtDW.ADC_Data_Model.Sensor_B_T_reserve = pData[15]; + +/* +//////////////////////////////////////----DEBUG----//////////////////////////////////////////////////////////////////// + ANALOG_SENSOR(env, "PT_F_HVAC_VCC_DIAG", rtDW.ADC_Data_Model.PT_F_HVAC_VCC_DIAG); + ANALOG_SENSOR(env, "PT_HVBchiller_VCC_DIAG", rtDW.ADC_Data_Model.PT_HVBchiller_VCC_DIAG); + ANALOG_SENSOR(env, "PT_R_HVAC_VCC_DIAG", rtDW.ADC_Data_Model.PT_R_HVAC_VCC_DIAG); + + + ANALOG_SENSOR(env, "Sensor_PT_fHVAC_P", rtDW.ADC_Data_Model.Sensor_PT_fHVAC_P); + ANALOG_SENSOR(env, "Sensor_PT_rHVAC_T", rtDW.ADC_Data_Model.Sensor_PT_rHVAC_T); + ANALOG_SENSOR(env, "Sensor_HVBchiller_P", rtDW.ADC_Data_Model.Sensor_HVBchiller_P); + ANALOG_SENSOR(env, "Sensor_HVBchiller_T", rtDW.ADC_Data_Model.Sensor_HVBchiller_T); + ANALOG_SENSOR(env, "Sensor_PT_P_reserve", rtDW.ADC_Data_Model.Sensor_PT_P_reserve); + ANALOG_SENSOR(env, "Sensor_PT_T_reserve", rtDW.ADC_Data_Model.Sensor_PT_T_reserve); + ANALOG_SENSOR(env, "Sensor_B_T_reserve", rtDW.ADC_Data_Model.Sensor_B_T_reserve); + + + ANALOG_SENSOR(env, "VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB", rtDW.ADC_Data_Model.VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB); + ANALOG_SENSOR(env, "VN7008AJ_DIAG_RearLINActuatorPowerDriverC", rtDW.ADC_Data_Model.VN7008AJ_DIAG_RearLINActuatorPowerDriverC); + + VN7008AJ(env, "VN7008AJ_FrontLINActuatorPowerDriverAB", + rtDW.ADC_Data_Model.VN7008AJ_FrontLINActuatorPowerDriverAB); + VN7008AJ(env, "VN7008AJ_RearLINActuatorPowerDriverC", + rtDW.ADC_Data_Model.VN7008AJ_RearLINActuatorPowerDriverC); +//////////////////////////////////////----DEBUG----//////////////////////////////////////////////////////////////////// +*/ + osMutexRelease(env->modelTaskAccess); } else { LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error Adc1_Thread");