From a96c4a8a1f78afebadb2c612e3511e3fa2ab217a Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 6 May 2026 13:14:17 +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 | 124 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 82 insertions(+), 42 deletions(-) diff --git a/AdcTasks.c b/AdcTasks.c index 3c85133..7b370f0 100644 --- a/AdcTasks.c +++ b/AdcTasks.c @@ -6,6 +6,8 @@ #include #include "memory.h" #include "HVAC_model.h" +#include "ADC_Temp.h" +#include "ADC_Temp_Fast.h" #define LOG_SIGN "ADC" #define LOGGER env->logger @@ -32,10 +34,12 @@ void Adc_0_Init(tAdcTask *env, 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); + float ERROR_THRESHOLD_HIGH_V = 4.9f; + float ERROR_THRESHOLD_LOW_V = 0.1f; + uint16_t ERROR_THRESHOLD_HIGH_CODE = (uint16_t) (ERROR_THRESHOLD_HIGH_V * 4095.0f / 5.0f); +// uint16_t ERROR_THRESHOLD_LOW_CODE = (uint16_t) (ERROR_THRESHOLD_LOW_V * 4095.0f / 5.0f); - if (adc_value >= ERROR_THRESHOLD_CODE) { + if (adc_value >= ERROR_THRESHOLD_HIGH_CODE /*|| adc_value <= ERROR_THRESHOLD_LOW_CODE*/) { LoggerFormatInfo(LOGGER, LOG_SIGN, "%s: Error !!! (adc = %d)", desc, adc_value) } else { // Преобразование в напряжение @@ -54,11 +58,13 @@ 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); + float ERROR_THRESHOLD_HIGH_V = 4.9f; + float ERROR_THRESHOLD_LOW_V = 0.1f; + uint16_t ERROR_THRESHOLD_HIGH_CODE = (uint16_t) (ERROR_THRESHOLD_HIGH_V * 4095.0f / 5.0f); +// uint16_t ERROR_THRESHOLD_LOW_CODE = (uint16_t) (ERROR_THRESHOLD_LOW_V * 4095.0f / 5.0f); // 1. Проверка на ошибку - if (adc_value >= ERROR_THRESHOLD_CODE) { + if (adc_value >= ERROR_THRESHOLD_HIGH_CODE/* || adc_value <= ERROR_THRESHOLD_LOW_CODE*/) { LoggerFormatInfo(LOGGER, LOG_SIGN, "%s: Error !!! (adc = %d)", desc, adc_value) } else { @@ -76,18 +82,44 @@ void VN7008AJ(tAdcTask *env, char *desc, uint16_t adc_value) { } -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); +void ANALOG_SENSOR(tAdcTask *env, char *desc, uint16_t adc_value, eNtcTable NtcTable, float R) { + float ERROR_THRESHOLD_HIGH_V = 4.9f; + float ERROR_THRESHOLD_LOW_V = 0.1f; + uint16_t ERROR_THRESHOLD_HIGH_CODE = (uint16_t) (ERROR_THRESHOLD_HIGH_V * 4095.0f / 5.0f); + uint16_t ERROR_THRESHOLD_LOW_CODE = (uint16_t) (ERROR_THRESHOLD_LOW_V * 4095.0f / 5.0f); // 1. Проверка на ошибку - if (adc_value >= ERROR_THRESHOLD_CODE) { + if (adc_value >= ERROR_THRESHOLD_HIGH_CODE || adc_value <= ERROR_THRESHOLD_LOW_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) + float temp = 0; + + switch (NtcTable) { + + case TABLE_NONE: + LoggerFormatInfo(LOGGER, LOG_SIGN, "%s: U = %f (adc = %d)", desc, U, adc_value) + return; + + case TABLE_DUCT: + if (R == 3000) { + temp = get_temperature_by_adc(temperature_table_duct_KST45_table_3000, 1024, adc_value); + } + if (R == 20000) { + temp = get_temperature_by_adc(temperature_table_duct_KST45_table_20000, 1024, adc_value); + } + + break; + case TABLE_INCAR: + break; + case TABLE_AMBIENT: + break; + + } + + LoggerFormatInfo(LOGGER, LOG_SIGN, "%s: U = %f (adc = %d) Temp = %f", desc, U, adc_value, temp) } } @@ -185,7 +217,7 @@ static _Noreturn void Adc0_Thread(tAdcTask *env) { } -/* + //////////////////////////////////////----DEBUG----//////////////////////////////////////////////////////////////////// BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV1", rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV1); @@ -206,37 +238,42 @@ static _Noreturn void Adc0_Thread(tAdcTask *env) { 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, "Sensor_Ambient_Temp", rtDW.ADC_Data_Model.Sensor_Ambient_Temp, TABLE_AMBIENT, 20000); + ANALOG_SENSOR(env, "Sensor_AC_Pressure", rtDW.ADC_Data_Model.Sensor_AC_Pressure, TABLE_NONE, 0); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_FL", rtDW.ADC_Data_Model.Sensor_Incar_Temp_FL, TABLE_INCAR, 20000); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_RL", rtDW.ADC_Data_Model.Sensor_Incar_Temp_RL, TABLE_INCAR, 20000); + ANALOG_SENSOR(env, "Sensor_Rear_Evap_Temp", rtDW.ADC_Data_Model.Sensor_Rear_Evap_Temp, TABLE_DUCT, 20000); + ANALOG_SENSOR(env, "Sensor_Evap_Temp", rtDW.ADC_Data_Model.Sensor_Evap_Temp, TABLE_DUCT, 20000); + ANALOG_SENSOR(env, "Sensor_Rear_Duct1", rtDW.ADC_Data_Model.Sensor_Rear_Duct1, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Rear_Duct2", rtDW.ADC_Data_Model.Sensor_Rear_Duct2, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Front_Duct1", rtDW.ADC_Data_Model.Sensor_Front_Duct1, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Front_Duct2", rtDW.ADC_Data_Model.Sensor_Front_Duct2, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Front_Duct3", rtDW.ADC_Data_Model.Sensor_Front_Duct3, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Front_Duct4", rtDW.ADC_Data_Model.Sensor_Front_Duct4, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Rear_Duct3", rtDW.ADC_Data_Model.Sensor_Rear_Duct3, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Rear_Duct4", rtDW.ADC_Data_Model.Sensor_Rear_Duct4, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_FR", rtDW.ADC_Data_Model.Sensor_Incar_Temp_FR, TABLE_INCAR, 20000); + ANALOG_SENSOR(env, "Sensor_Incar_Temp_RR", rtDW.ADC_Data_Model.Sensor_Incar_Temp_RR, TABLE_INCAR, 20000); + ANALOG_SENSOR(env, "Sensor_Rear_Duct5", rtDW.ADC_Data_Model.Sensor_Rear_Duct5, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Rear_Duct6", rtDW.ADC_Data_Model.Sensor_Rear_Duct6, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Reserve_Sensor_Duct_Temp_1", rtDW.ADC_Data_Model.Reserve_Sensor_Duct_Temp_1, TABLE_DUCT, + 20000); + ANALOG_SENSOR(env, "Sensor_Front_Duct5", rtDW.ADC_Data_Model.Sensor_Front_Duct5, TABLE_DUCT, 3000); + ANALOG_SENSOR(env, "Sensor_Front_Duct6", rtDW.ADC_Data_Model.Sensor_Front_Duct6, TABLE_DUCT, 3000); + + ANALOG_SENSOR(env, "Pressure_DIAG", rtDW.ADC_Data_Model.Pressure_DIAG, TABLE_NONE, 0); + + ANALOG_SENSOR(env, "Reserve_Sensor_Duct_Temp_2", rtDW.ADC_Data_Model.Reserve_Sensor_Duct_Temp_2, TABLE_DUCT, + 20000); - 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----//////////////////////////////////////////////////////////////////// -*/ + @@ -326,8 +363,9 @@ static _Noreturn void Adc1_Thread(tAdcTask *env) { rtDW.ADC_Data_Model.Sensor_PT_T_reserve = pData[14]; 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); @@ -340,17 +378,19 @@ static _Noreturn void Adc1_Thread(tAdcTask *env) { 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); + ANALOG_SENSOR(env, "VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB", + rtDW.ADC_Data_Model.VN7008AJ_DIAG_FrontLINActuatorPowerDriverAB, TABLE_NONE, 0); + ANALOG_SENSOR(env, "VN7008AJ_DIAG_RearLINActuatorPowerDriverC", + rtDW.ADC_Data_Model.VN7008AJ_DIAG_RearLINActuatorPowerDriverC, TABLE_NONE, 0); 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 {