285 lines
10 KiB
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();
|
|
|
|
|
|
|
|
}
|
|
//////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////
|
|
|
|
|
|
|