Обновление платы на V2

This commit is contained in:
cfif 2026-05-13 17:48:21 +03:00
parent 277fed70c1
commit e6720ca65e
2 changed files with 154 additions and 77 deletions

View File

@ -28,7 +28,6 @@ void Adc_0_Init(tAdc0Task *env,
env->queueRandom = osMessageQueueNew(10, 4, NULL);
ADC_Filter_Init(&env->ADC0_Filter_data.Sensor_Ambient_Temp, MAX_ADC_FILTER_SIZE);
ADC_Filter_Init(&env->ADC0_Filter_data.IGN_ANS, MAX_ADC_FILTER_SIZE);
ADC_Filter_Init(&env->ADC0_Filter_data.Sensor_AC_Pressure, MAX_ADC_FILTER_SIZE);
@ -69,11 +68,6 @@ void Adc_0_Init(tAdc0Task *env,
ADC_Filter_Init(&env->ADC0_Filter_data.BTS5180_2EKA_ChannelPTCPower2, MAX_ADC_FILTER_SIZE);
InitThreadAtrStatic(&env->thread.attr, "Adc0", env->thread.controlBlock, env->thread.stack,
osPriorityNormal);
}
@ -152,10 +146,10 @@ void ANALOG_SENSOR(tAdc0Task *env, char *desc, uint16_t adc_value, eNtcTable Ntc
case TABLE_DUCT:
if (R == 3000) {
temp = get_temperature_by_adc(temperature_table_duct_KST45_table_3000, 4096, adc_value);
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, 4096, adc_value);
temp = lookup_table_get_temp(temperature_table_duct_KST45_table_20000, adc_value);
}
break;
@ -172,26 +166,55 @@ void ANALOG_SENSOR(tAdc0Task *env, char *desc, uint16_t adc_value, eNtcTable Ntc
}
float calculate_ntc_resistance_case_a(uint16_t adc_value,
/**
* Расчет сопротивления NTC для схемы с делителем напряжения
*
* Схема: VCC --- R_series --- NTC --- GND
* АЦП подключен к точке соединения R_series и NTC
*
* @param adc_value - значение АЦП (0..adc_max)
* @param R_series - сопротивление балластного резистора (Ом)
* @param Vcc_mv - напряжение питания делителя (мВ)
* @param Vref_mv - опорное напряжение АЦП (мВ)
* @param adc_max - максимальное значение АЦП (4095 для 12 бит)
* @return - сопротивление NTC (Ом)
*/
float calculate_ntc_resistance(uint16_t adc_value,
float R_series,
float V_ref,
uint16_t adc_max)
{
// Защита от деления на ноль и выхода за пределы
float Vcc_mv,
float Vref_mv,
uint16_t adc_max) {
// Защита от деления на ноль
if (adc_value == 0) {
return 0.0f; // Rntc = 0 (короткое замыкание на GND)
return 0; // Rntc = бесконечность (обрыв) - NTC не подключен
}
if (adc_value >= adc_max) {
return 0.0f; // Rntc стремится к бесконечности (обрыв)
return 0.0f; // Rntc = 0 (короткое замыкание)
}
// Напряжение на NTC, измеренное АЦП
float V_ntc = (float)adc_value / adc_max * V_ref;
// Напряжение на NTC, измеренное АЦП (используем Vref АЦП)
float V_ntc = (float) adc_value / adc_max * Vref_mv;
// Формула: V_ntc / V_ref = Rntc / (Rntc + R_series)
// Rntc = R_series * V_ntc / (V_ref - V_ntc)
float Rntc = R_series * V_ntc / (V_ref - V_ntc);
// Проверка, что V_ntc не превышает Vcc
if (V_ntc > Vcc_mv) {
V_ntc = Vcc_mv; // Ограничиваем физически возможным значением
}
// Напряжение на балластном резисторе
float V_r1 = Vcc_mv - V_ntc;
// Защита от отрицательного напряжения
if (V_r1 <= 0.0f) {
return 0.0f; // Короткое замыкание
}
// Закон Ома: Rntc = R_series * (V_ntc / V_r1)
float Rntc = R_series * (V_ntc / V_r1);
// Ограничиваем разумными пределами (1 Ом ... 10 МОм)
if (Rntc < 1.0f) Rntc = 1.0f;
if (Rntc > 10000000.0f) Rntc = 10000000.0f;
return Rntc;
}
@ -241,7 +264,9 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
rtDW.ADC_Data_Model.Sensor_Front_Duct2 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Front_Duct2,ADC0_data->Sensor_Front_Duct2);
rtDW.ADC_Data_Model.Sensor_Front_Duct3 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Front_Duct3,ADC0_data->Sensor_Front_Duct3);
rtDW.ADC_Data_Model.Sensor_Front_Duct4 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Front_Duct4,ADC0_data->Sensor_Front_Duct4);
rtDW.ADC_Data_Model.Sensor_Rear_Duct3 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Rear_Duct3,ADC0_data->Sensor_Rear_Duct3);
rtDW.ADC_Data_Model.Sensor_Rear_Duct4 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Rear_Duct4,ADC0_data->Sensor_Rear_Duct4);
rtDW.ADC_Data_Model.Sensor_Incar_Temp_FR = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Incar_Temp_FR,ADC0_data->Sensor_Incar_Temp_FR);
rtDW.ADC_Data_Model.Sensor_Incar_Temp_RR = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Incar_Temp_RR,ADC0_data->Sensor_Incar_Temp_RR);
@ -251,10 +276,28 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
rtDW.ADC_Data_Model.Sensor_Front_Duct5 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Front_Duct5,ADC0_data->Sensor_Front_Duct5);
rtDW.ADC_Data_Model.Sensor_Front_Duct6 = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_Front_Duct6,ADC0_data->Sensor_Front_Duct6);
rtDW.ADC_Data_Model.Pressure_DIAG = ADC_Filter_Update(&env->ADC0_Filter_data.Pressure_DIAG,ADC0_data->Pressure_DIAG);
rtDW.ADC_Data_Model.Reserve_Sensor_Duct_Temp_2 = ADC_Filter_Update(&env->ADC0_Filter_data.Reserve_Sensor_Duct_Temp_2, ADC0_data->Reserve_Sensor_Duct_Temp_2);
rtDW.ADC_Data_Model.Reserve_Sensor_Duct_Temp_2 = ADC_Filter_Update(
&env->ADC0_Filter_data.Reserve_Sensor_Duct_Temp_2, ADC0_data->Reserve_Sensor_Duct_Temp_2);
// rtDW.ADC_Data_Model.Sensor_PT_rHVAC_P = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_PT_rHVAC_P, ADC0_data->Sensor_PT_rHVAC_P);
// rtDW.ADC_Data_Model.Sensor_A_T_reserve = ADC_Filter_Update(&env->ADC0_Filter_data.Sensor_A_T_reserve, ADC0_data->Sensor_A_T_reserve);
/*
rtDW.ADC_Data_Model.Sensor_Front_Duct1 = 3071;
rtDW.ADC_Data_Model.Sensor_Front_Duct2 = 3031;
rtDW.ADC_Data_Model.Sensor_Front_Duct3 = 2993;
rtDW.ADC_Data_Model.Sensor_Front_Duct4 = 2952;
rtDW.ADC_Data_Model.Sensor_Front_Duct5 = 2912;
rtDW.ADC_Data_Model.Sensor_Front_Duct6 = 2871;
rtDW.ADC_Data_Model.Sensor_Rear_Duct1 = 2829;
rtDW.ADC_Data_Model.Sensor_Rear_Duct2 = 2787;
rtDW.ADC_Data_Model.Sensor_Rear_Duct3 = 2744;
rtDW.ADC_Data_Model.Sensor_Rear_Duct4 = 2701;
*/
/*
rtDW.ADC_Data_Model.Sensor_Ambient_Temp = pData[0];
rtDW.ADC_Data_Model.IGN_ANS = pData[1];
@ -294,11 +337,18 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_SEL_Diag, true);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver_SEL_Diag, true);
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV1 = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5120_2EKA_ShutoffValvePowerTXV1, ADC0_data->BTS5120_2EKA_ShutoffValvePowerTXV1);
rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveFront = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_ShutOFFValveFront, ADC0_data->BTS5180_2EKA_ShutOFFValveFront);
rtDW.ADC_Data_Model.BTS5180_2EKA_TwoWayValve = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_TwoWayValve, ADC0_data->BTS5180_2EKA_TwoWayValve);
rtDW.ADC_Data_Model.BTS5180_2EKA_FrontIncarMotor = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_FrontIncarMotor, ADC0_data->BTS5180_2EKA_FrontIncarMotor);
rtDW.ADC_Data_Model.BTS5180_2EKA_ChannelPTCPower1 = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_ChannelPTCPower1, ADC0_data->BTS5180_2EKA_ChannelPTCPower1);
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV1 = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5120_2EKA_ShutoffValvePowerTXV1,
ADC0_data->BTS5120_2EKA_ShutoffValvePowerTXV1);
rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveFront = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_ShutOFFValveFront,
ADC0_data->BTS5180_2EKA_ShutOFFValveFront);
rtDW.ADC_Data_Model.BTS5180_2EKA_TwoWayValve = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_TwoWayValve, ADC0_data->BTS5180_2EKA_TwoWayValve);
rtDW.ADC_Data_Model.BTS5180_2EKA_FrontIncarMotor = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_FrontIncarMotor, ADC0_data->BTS5180_2EKA_FrontIncarMotor);
rtDW.ADC_Data_Model.BTS5180_2EKA_ChannelPTCPower1 = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_ChannelPTCPower1, ADC0_data->BTS5180_2EKA_ChannelPTCPower1);
/*
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV1 = pData[22]; //
rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveFront = pData[24]; //
@ -311,15 +361,23 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutSelTXV_SEL_Diag, false);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutSel_SEL_Diag, false);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.TwoWayValve_SEL_Diag,false);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.TwoWayValve_SEL_Diag,
false);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_SEL_Diag, false);
GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver_SEL_Diag, false);
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV2 = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5120_2EKA_ShutoffValvePowerTXV2, ADC0_data->BTS5120_2EKA_ShutoffValvePowerTXV2);
rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveRear = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_ShutOFFValveRear, ADC0_data->BTS5180_2EKA_ShutOFFValveRear);
rtDW.ADC_Data_Model.BTS5180_2EKA_ReservePowerSupply = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_ReservePowerSupply, ADC0_data->BTS5180_2EKA_ReservePowerSupply);
rtDW.ADC_Data_Model.BTS5180_2EKA_RearIncarMotor = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_RearIncarMotor, ADC0_data->BTS5180_2EKA_RearIncarMotor);
rtDW.ADC_Data_Model.BTS5180_2EKA_ChannelPTCPower2 = ADC_Filter_Update(&env->ADC0_Filter_data.BTS5180_2EKA_ChannelPTCPower2, ADC0_data->BTS5180_2EKA_ChannelPTCPower2);
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV2 = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5120_2EKA_ShutoffValvePowerTXV2,
ADC0_data->BTS5120_2EKA_ShutoffValvePowerTXV2);
rtDW.ADC_Data_Model.BTS5180_2EKA_ShutOFFValveRear = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_ShutOFFValveRear, ADC0_data->BTS5180_2EKA_ShutOFFValveRear);
rtDW.ADC_Data_Model.BTS5180_2EKA_ReservePowerSupply = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_ReservePowerSupply,
ADC0_data->BTS5180_2EKA_ReservePowerSupply);
rtDW.ADC_Data_Model.BTS5180_2EKA_RearIncarMotor = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_RearIncarMotor, ADC0_data->BTS5180_2EKA_RearIncarMotor);
rtDW.ADC_Data_Model.BTS5180_2EKA_ChannelPTCPower2 = ADC_Filter_Update(
&env->ADC0_Filter_data.BTS5180_2EKA_ChannelPTCPower2, ADC0_data->BTS5180_2EKA_ChannelPTCPower2);
/*
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV2 = pData[22]; //
@ -330,9 +388,9 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
*/
}
//////////////////////////////////////----DEBUG----////////////////////////////////////////////////////////////////////
/*
//////////////////////////////////////----DEBUG----////////////////////////////////////////////////////////////////////
BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV1",
rtDW.ADC_Data_Model.BTS5120_2EKA_ShutoffValvePowerTXV1);
BTS5180_120(env, "BTS5120_2EKA_ShutoffValvePowerTXV2",
@ -354,31 +412,38 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
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_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 (dbg_Sen_Duct_RL_Fb)", rtDW.ADC_Data_Model.Sensor_Rear_Duct1, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Rear_Duct2 (dbg_Sen_Duct_RR_Fb)", rtDW.ADC_Data_Model.Sensor_Rear_Duct2, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Rear_Duct3 (dbg_Sen_Duct_RL_Side_Fb)", rtDW.ADC_Data_Model.Sensor_Rear_Duct3, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Rear_Duct4 (dbg_Sen_Duct_RR_Side_Fb)", rtDW.ADC_Data_Model.Sensor_Rear_Duct4, TABLE_DUCT, 3000);
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_Duct1 (dbg_Sen_Duct_FL_Upper_Fb)", rtDW.ADC_Data_Model.Sensor_Front_Duct1, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Front_Duct2 (dbg_Sen_Duct_FR_Upper_Fb)", rtDW.ADC_Data_Model.Sensor_Front_Duct2, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Front_Duct3 (dbg_Sen_Duct_FL_Lower_Fb)", rtDW.ADC_Data_Model.Sensor_Front_Duct3, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Front_Duct4 (dbg_Sen_Duct_FR_Lower_Fb)", rtDW.ADC_Data_Model.Sensor_Front_Duct4, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Front_Duct5 (dbg_Sen_Duct_FL_Side_Fb)", rtDW.ADC_Data_Model.Sensor_Front_Duct5, TABLE_DUCT, 3000);
ANALOG_SENSOR(env, "Sensor_Front_Duct6 (dbg_Sen_Duct_FR_Side_Fb)", rtDW.ADC_Data_Model.Sensor_Front_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, "Sensor_Rear_Duct3", rtDW.ADC_Data_Model.Sensor_Rear_Duct3, TABLE_DUCT, 3000);
float Rntc = calculate_ntc_resistance_case_a(rtDW.ADC_Data_Model.Sensor_Front_Duct6,3000,5,4095);
LoggerFormatInfo(LOGGER, LOG_SIGN, "Rntc = %f", Rntc)
// float Rntc = calculate_ntc_resistance(rtDW.ADC_Data_Model.Sensor_Rear_Duct3, 3000, 4.96f, 5, 4095);
// LoggerFormatInfo(LOGGER, LOG_SIGN, "Rntc = %f", Rntc)
/*
@ -411,9 +476,13 @@ static _Noreturn void Adc0_Thread(tAdc0Task *env) {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error Adc0_Thread");
}
++env->step;
if (env->step > MAX_ADC_FILTER_SIZE) {
SystemDelayMs(50);
}
}
}
uint32_t getRandom32(tAdc0Task *env) {
@ -512,17 +581,21 @@ static _Noreturn void Adc1_Thread(tAdc1Task *env) {
//////////////////////////////////////----DEBUG----////////////////////////////////////////////////////////////////////
*/
float V_ref = (float) pData[16] / 4095.0f * 5.0f;
LoggerFormatInfo(LOGGER, LOG_SIGN, "V_ref = %f", V_ref)
// float V_ref = (float) pData[16] / 4095.0f * 5.0f;
// LoggerFormatInfo(LOGGER, LOG_SIGN, "V_ref = %f", V_ref)
osMutexRelease(env->modelTaskAccess);
} else {
LoggerErrorStatic(LOGGER, LOG_SIGN, "Access error Adc1_Thread");
}
++env->step;
if (env->step > MAX_ADC_FILTER_SIZE) {
SystemDelayMs(50);
}
}
}
void Adc_1_StartThread(tAdc1Task *env) {
if (!env->thread.id) {

View File

@ -171,6 +171,8 @@ typedef struct {
tLoggerInterface *logger;
uint32_t step;
struct {
osThreadId_t id;
uint32_t stack[384];
@ -196,6 +198,8 @@ typedef struct {
tLoggerInterface *logger;
uint32_t step;
struct {
osThreadId_t id;
uint32_t stack[384];