matlab_23550/Inu/Src2/main/calc_tempers.c

285 lines
10 KiB
C

/*
* calc_tempers.c
*
* Created on: 4 äåê. 2020 ã.
* Author: star
*/
#include <adc_tools.h>
#include <calc_tempers.h>
#include <CAN_project.h>
#include <edrk_main.h>
#include <params_temper_p.h>
#include "CAN_Setup.h"
#include "IQmathLib.h"
int calc_max_temper_acdrive_bear(void);
int calc_max_temper_acdrive_winding(void);
int calc_max_temper_edrk_u(void);
int calc_max_temper_edrk_water(void);
int calc_max_temper_edrk_air(void);
int calc_min_temper_edrk_air(void);
////////////////////////////////////////////////////////////////////
int calc_max_temper_acdrive_bear(void)
{
int i, max_t=0;
for (i=0;i<edrk.temper_acdrive.bear.max_size;i++)
if (edrk.temper_acdrive.winding.filter_real_int_temper[i]>max_t)
max_t = edrk.temper_acdrive.winding.filter_real_int_temper[i];
return max_t;
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
int calc_max_temper_acdrive_winding(void)
{
int i, max_t=0;
for (i=0;i<edrk.temper_acdrive.winding.max_size;i++)
if (edrk.temper_acdrive.winding.filter_real_int_temper[i]>max_t)
max_t = edrk.temper_acdrive.winding.filter_real_int_temper[i];
return max_t;
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
int calc_max_temper_edrk_u(void)
{
int i, max_t=0;
for (i=0;i<7;i++)
if (edrk.temper_edrk.real_int_temper_u[i]>max_t)
max_t = edrk.temper_edrk.real_int_temper_u[i];
return max_t;
}
////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
int calc_max_temper_edrk_water(void)
{
int i, max_t=0;
for (i=0;i<2;i++)
if (edrk.temper_edrk.real_int_temper_water[i]>max_t)
max_t = edrk.temper_edrk.real_int_temper_water[i];
return max_t;
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
int calc_max_temper_edrk_air(void)
{
int i, max_t=0;
for (i=0;i<4;i++)
if (edrk.temper_edrk.real_int_temper_air[i]>max_t)
max_t = edrk.temper_edrk.real_int_temper_air[i];
return max_t;
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
int calc_min_temper_edrk_air(void)
{
int i, min_t=1000;
for (i=0;i<4;i++)
if (edrk.temper_edrk.real_int_temper_air[i]<min_t)
min_t = edrk.temper_edrk.real_int_temper_air[i];
return min_t;
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// ACP[V]/61.9[Om]/2.0*10000
#define koef_Temper_ENGINE_filter 1600000
#define INDEX_ACDRIVE_WINDING_CAN_UNITES 24
#define INDEX_ACDRIVE_BEAR_CAN_UNITES 30
void calc_temper_acdrive(void)
{
int i;
_iq iqtain,iq_temp;
// Winding
for (i=0;i<edrk.temper_acdrive.winding.max_size;i++)
{
edrk.temper_acdrive.winding.real_temper[i] = Unites[BKSSD_CAN_DEVICE][INDEX_ACDRIVE_WINDING_CAN_UNITES+i]/10.0;
if (Unites[BKSSD_CAN_DEVICE][INDEX_ACDRIVE_WINDING_CAN_UNITES+i]==0)
{
edrk.temper_acdrive.winding.flag_init_filter_temp[i] = 0;
edrk.temper_acdrive.winding.filter_real_int_temper[i] = 0;
edrk.temper_acdrive.winding.real_int_temper[i] = 0;
edrk.temper_acdrive.winding.real_temper[i] = 0;
continue;
}
edrk.temper_acdrive.winding.real_int_temper[i] = edrk.temper_acdrive.winding.real_temper[i]*K_TEMPER_TO_SVU;
iqtain = _IQ(edrk.temper_acdrive.winding.real_temper[i]/100.0);
iq_temp = _IQ(edrk.temper_acdrive.winding.filter_real_temper[i]/100.0);
if (edrk.temper_acdrive.winding.flag_init_filter_temp[i]==0)
{
iq_temp = iqtain;
edrk.temper_acdrive.winding.flag_init_filter_temp[i]=1;
}
// iq_temp_engine[i] = exp_regul_iq(koef_Temper_ENGINE_filter, iq_temp_engine[i], iqtain);
iq_temp += _IQmpy( (iqtain-iq_temp), koef_Temper_ENGINE_filter);
edrk.temper_acdrive.winding.filter_real_temper[i] = _IQtoF(iq_temp)*100.0;
edrk.temper_acdrive.winding.filter_real_int_temper[i] = edrk.temper_acdrive.winding.filter_real_temper[i]*K_TEMPER_TO_SVU;
}
edrk.temper_acdrive.winding.max_real_int_temper = calc_max_temper_acdrive_winding();
// Bearing
for (i=0;i<edrk.temper_acdrive.bear.max_size;i++)
{
edrk.temper_acdrive.bear.real_temper[i] = Unites[BKSSD_CAN_DEVICE][INDEX_ACDRIVE_BEAR_CAN_UNITES+i]/10.0;
if (Unites[BKSSD_CAN_DEVICE][INDEX_ACDRIVE_BEAR_CAN_UNITES+i]==0)
{
edrk.temper_acdrive.bear.flag_init_filter_temp[i] = 0;
edrk.temper_acdrive.bear.filter_real_int_temper[i] = 0;
edrk.temper_acdrive.bear.real_int_temper[i] = 0;
edrk.temper_acdrive.bear.real_temper[i] = 0;
continue;
}
edrk.temper_acdrive.bear.real_int_temper[i] = edrk.temper_acdrive.bear.real_temper[i]*K_TEMPER_TO_SVU;
iqtain = _IQ(edrk.temper_acdrive.bear.real_temper[i]/100.0);
iq_temp = _IQ(edrk.temper_acdrive.bear.filter_real_temper[i]/100.0);
if (edrk.temper_acdrive.bear.flag_init_filter_temp[i]==0)
{
iq_temp = iqtain;
edrk.temper_acdrive.bear.flag_init_filter_temp[i]=1;
}
// iq_temp_engine[i] = exp_regul_iq(koef_Temper_ENGINE_filter, iq_temp_engine[i], iqtain);
iq_temp += _IQmpy( (iqtain-iq_temp), koef_Temper_ENGINE_filter);
edrk.temper_acdrive.bear.filter_real_temper[i] = _IQtoF(iq_temp)*100.0;
edrk.temper_acdrive.bear.filter_real_int_temper[i] = edrk.temper_acdrive.bear.filter_real_temper[i]*K_TEMPER_TO_SVU;
}
edrk.temper_acdrive.bear.max_real_int_temper = calc_max_temper_acdrive_bear();
//////
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
void calc_temper_edrk(void)
{
int i;
////
edrk.temper_edrk.adc_temper_u[0] = ADC_f[1][1];
edrk.temper_edrk.adc_temper_u[1] = ADC_f[1][2];
edrk.temper_edrk.adc_temper_u[2] = ADC_f[1][3];
edrk.temper_edrk.adc_temper_u[3] = ADC_f[1][4];
edrk.temper_edrk.adc_temper_u[4] = ADC_f[1][5];
edrk.temper_edrk.adc_temper_u[5] = ADC_f[1][6];
edrk.temper_edrk.adc_temper_u[6] = ADC_f[1][7];
edrk.temper_edrk.real_temper_u[0] = (_IQtoF(analog.T_U01)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_u[1] = (_IQtoF(analog.T_U02)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_u[2] = (_IQtoF(analog.T_U03)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_u[3] = (_IQtoF(analog.T_U04)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_u[4] = (_IQtoF(analog.T_U05)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_u[5] = (_IQtoF(analog.T_U06)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_u[6] = (_IQtoF(analog.T_U07)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
for (i=0;i<7;i++)
edrk.temper_edrk.real_int_temper_u[i] = edrk.temper_edrk.real_temper_u[i]*K_TEMPER_TO_SVU;
edrk.temper_edrk.max_real_int_temper_u = calc_max_temper_edrk_u();
/////
edrk.temper_edrk.adc_temper_water[0] = ADC_f[1][8];
edrk.temper_edrk.adc_temper_water[1] = ADC_f[1][9];
edrk.temper_edrk.real_temper_water[0] = (_IQtoF(analog.T_Water_internal)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_water[1] = (_IQtoF(analog.T_Water_external)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
for (i=0;i<2;i++)
edrk.temper_edrk.real_int_temper_water[i] = edrk.temper_edrk.real_temper_water[i]*K_TEMPER_TO_SVU;
edrk.temper_edrk.max_real_int_temper_water = calc_max_temper_edrk_water();
//////
edrk.temper_edrk.adc_temper_air[0] = ADC_f[1][10];
edrk.temper_edrk.adc_temper_air[1] = ADC_f[1][11];
edrk.temper_edrk.adc_temper_air[2] = ADC_f[1][12];
edrk.temper_edrk.adc_temper_air[3] = ADC_f[1][13];
edrk.temper_edrk.real_temper_air[0] = (_IQtoF(analog.T_Air_01)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_air[1] = (_IQtoF(analog.T_Air_02)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_air[2] = (_IQtoF(analog.T_Air_03)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
edrk.temper_edrk.real_temper_air[3] = (_IQtoF(analog.T_Air_04)*100.0 - 4.0)/16.0 * NORMA_ACP_TEMPER - DELTA_ACP_TEMPER;
for (i=0;i<4;i++)
edrk.temper_edrk.real_int_temper_air[i] = edrk.temper_edrk.real_temper_air[i]*K_TEMPER_TO_SVU;
edrk.temper_edrk.max_real_int_temper_air = calc_max_temper_edrk_air();
edrk.temper_edrk.min_real_int_temper_air = calc_min_temper_edrk_air();
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////