#include "inductance.h"
#include <math.h>
uint16 LNow[10];
float LNor[10];
uint16 LNowinit[10] = {1300,1200,1500,1200,1300,1300,1500,1300,3700,3700};
uint16 LNORMAX[10] = {2980,2000,2000,2980,3350,1500,1500,3350,3700,3700};
uint16 ELC[ELC_GROUP][ELC_NUM];
//偏差
int32 ELC_Center_14 = 0;
int32 ELC_Center_23 = 0;
int32 ELC_Center_58 = 0;
int32 ELC_Center0 = 0;
int32 ELC_Center1 = 0;
int32 ELC_Center = 0;
int32 ELC_CenterRepair = 0;
int32 ELC_Center_Last = 0;
//电感和
uint16 ELC_Sum_14 = 0;
uint16 ELC_Sum_23 = 0;
uint16 ELC_Sum_58 = 0;
uint16 ELC_Sum_1234 = 0;
uint16 ElC_Sum_146=0;
//电感差
int16 ELC_Err_14 = 0;
int16 ELC_Err_23 = 0;
int16 ELC_Err_58 = 0;
//权重系数
float K1=0.8f;
float K2=0;
float K3=0.1f;
float K4=0.1f;
//电感保护
uint8 ELC_PROTECT_FLAG=0;
//电感处理
void Inductor_deal(void)
{
uint16 L_sum[ELC_NUM] = {0,0,0,0,0,0,0,0,0,0,};
int8 i = 0,k = 0;
uint16 ELC_max[ELC_NUM] = {4095,4095,4095,4095,4095,4095,4095,4095,4095,4095};
uint16 ELC_min[ELC_NUM] = {0,0,0,0,0,0,0,0,0,0,};
//读取ADC
for(i = 0;i < ELC_GROUP ;i ++)
{
ELC[i][0] = adc_once(ADC1,ADC_12BIT);
ELC[i][1] = adc_once(ADC2,ADC_12BIT);
ELC[i][2] = adc_once(ADC3,ADC_12BIT);
ELC[i][3] = adc_once(ADC4,ADC_12BIT);
ELC[i][4] = adc_once(ADC5,ADC_12BIT);
ELC[i][5] = adc_once(ADC6,ADC_12BIT);
ELC[i][6] = adc_once(ADC7,ADC_12BIT);
ELC[i][7] = adc_once(ADC8,ADC_12BIT);
ELC[i][8] = adc_once(ADC9,ADC_12BIT);
ELC[i][9] = adc_once(ADC10,ADC_12BIT);
}
//挑出最大最小值
for(k = 0; k < ELC_NUM ; k++)
{
for(i = 0; i < ELC_GROUP; i++)
{
if(ELC[i][k] >= ELC_min[k])
{
ELC_min[k]=ELC[i][k];
}
if(ELC[i][k] <= ELC_max[k])
{
ELC_max[k]=ELC[i][k];
}
L_sum[k] += ELC[i][k];
}
}
//第一次归一化
if(Fork.state == Fork_begin)
{
for(i = 0;i < ELC_NUM;i ++)
{
LNow[i] = ((L_sum[i]-ELC_max[i]-ELC_min[i])/ (ELC_GROUP-2));
LNow[i] = LNow[i]+1;
}
}
else
{
for(i = 0;i < ELC_NUM;i ++)
{
LNow[i] = 2.2*(L_sum[i]-ELC_max[i]-ELC_min[i])/ (ELC_GROUP-2);
LNow[i] = LNow[i]+1;
}
}
//第二次归一化
for(i = 0;i < ELC_NUM;i++)
{
LNor[i] = LNow[i];
LNor[i] = LNor[i]*100/LNORMAX[i];
}
//电磁保护
if(max_ab(LNow[0],LNow[3])<= 20&&max_ab(LNow[1],LNow[2])<= 20&&max_ab(LNow[4],LNow[7])<= 500&&LNow[6]<40)
ELC_PROTECT_FLAG = 'T';
else
ELC_PROTECT_FLAG = 'F';
//电感值差
ELC_Err_14 = LNor[3] - LNor[0];
ELC_Err_23 = LNor[2] - LNor[1];
ELC_Err_58 = LNor[7] - LNor[4];
//电感值和
ELC_Sum_14 = LNor[0] + LNor[3];
ELC_Sum_58 = LNor[4] + LNor[7];
ELC_Sum_23 = LNor[1] + LNor[2];
ELC_Sum_1234= ELC_Sum_14 + ELC_Sum_23;
//差比和处理
// ELC_Center_14=(int16)((float)1000*(sqrt(LNor[3])-sqrt(LNor[0]))/(LNor[3]+ LNor[0]));
// ELC_Center_23=(int16)((float)1000*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
// ELC_Center_58=(int16)((float)1000*(sqrt(LNor[7])-sqrt(LNor[4]))/(LNor[7]+ LNor[4]));
// ELC_Center_14=(int16)((float)1400*(LNor[3]+LNor[2]-(LNor[0]+LNor[1]))/(LNor[3]+LNor[5]+ LNor[0]+LNor[1]+ LNor[2]));
// ELC_Center_23=(int16)((float)1000*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
// ELC_Center_58=(int16)((float)1400*(sqrt(LNor[7])-sqrt(LNor[4]))/(LNor[7]+LNor[6]+LNor[4]));
// ELC_Center_23=(int16)((float)100*(LNor[2]-LNor[1])/(LNor[2]+ LNor[1]));
// ELC_Center_14=(int32)((float)900*(LNor[3]-LNor[0])/(LNor[3]*LNor[0]));
// ELC_Center_23=(int32)((float)700*(LNor[2]-LNor[1])/(LNor[2]*LNor[1]));
// ELC_Center_58=(int32)((float)800*(LNor[7]-LNor[4])/(LNor[7]*LNor[4]));
ELC_Center_14=(int32)((float)2000*(sqrt(LNor[3])-sqrt(LNor[0]))/(LNor[3]+1.5*LNor[5]+ LNor[0]));
ELC_Center_23=(int32)((float)1500*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
ELC_Center_58=(int32)((float)1800*(sqrt(LNor[7])-sqrt(LNor[4]))/(LNor[7]+LNor[6]+LNor[4]));
//系数修正
K2=(float)myabs(8.5f*(limit_ab(ELC_Center_14,-100.0f,100.0f)/1000.0f));
K1=(float)(1.30f-K2);
// ELC_Center1=(int32)((float)120*(0.4*(LNor[3]-LNor[0])+1.2*(LNor[2]-LNor[1]))/(0.4*(LNor[3]+ LNor[0])+LNor[5]+1.0f*myabs(LNor[2]-LNor[1])));
// ELC_Center1=(int32)((float)1650*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+ K2*(sqrt(LNor[2])-sqrt(LNor[1])))/(0.4*(LNor[3]+ LNor[0])+1.5*LNor[5]+0.8f*myabs(LNor[2]-LNor[1])));
// ELC_Center1=(int32)((float)1650*(0.4*(sqrt(LNor[3])-sqrt(LNor[0]))+(sqrt(LNor[2])-sqrt(LNor[1])))/(0.4*(LNor[3]+ LNor[0])+1.5*LNor[5]+0.8f*myabs(LNor[2]-LNor[1])));
// ELC_Center0= (int32)((float)1650*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*(LNor[3]+ LNor[0])+1.5*LNor[5]+(K2+0.2)*myabs(LNor[2]-LNor[1])));
// ELC_Center0= (int32)((float)1650*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*(LNor[3]+ LNor[0])+1.5*LNor[5]+(K2+0.2)*myabs(LNor[2]-LNor[1])));
// ELC_Center1= (int32)((float)2300*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*sqrt((LNor[3]*LNor[0]))+1.5*LNor[5]+(K2+0.2)*(LNor[1]+LNor[2])));
ELC_Center0= (int32)((float)2200*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*sqrt((LNor[3]*LNor[0]))+1.5*LNor[5]+(K2+0.2)*(LNor[1]+LNor[2])));
K3=(float)myabs(5.5f*(limit_ab(ELC_Center0,-100.0f,100.0f)/1000.0f));
K4=1.0-K3;
ELC_Center1= K4*ELC_Center0+K3*ELC_Center_23;
// Elc_boundary_deal();
// ELC_Center1=ELC_Center0;
/*特殊元素,处理*/
if(Cross.FindFlag == 'T')
{
if(Cross.state==Crossin)
{
ELC_Center1= K4*ELC_Center0+(K3+0.2)*ELC_Center_23;
}
else if(Cross.state==Crosson)
{
ELC_Center1= K4*ELC_Center0+0.4*ELC_Center_58;
}
}
if(Fork.Dir == 'L'&&Fork.state == Fork_middle){ELC_Center1=0.6*ELC_Center_58+0.4*ELC_Center_14;}
if(max_ab(LNow[0],LNow[3])>=150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
{
if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
}
}
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])>=80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_14))
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
{
if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
}
}
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
ELC_Center1=(int16)((float)(2.0*ELC_Center_58));}
else
ELC_Center1 = ELC_Center_Last;
// if(myabs(ELC_Center_23)>myabs(ELC_Center_14))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));}
// else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
// else
// {
// if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
// }
}
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])<150)
{
ELC_Center1 = ELC_Center_Last;
}
ELC_Center=KalmanFilter(&KFP_ELCCenter,ELC_Center1);
ELC_Center_Last = ELC_Center;
}
void Elc_boundary_deal(void)
{
//14正常23正常58正常
if(max_ab(LNow[0],LNow[3])>=150&&max_ab(LNow[1],LNow[2])>=80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
ELC_Center0 =(int16)((float)(K1*ELC_Center_14)+(float)((K2+0.0)*ELC_Center_23));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0&&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
{ELC_Center0=(int16)((float)(K1*ELC_Center_14)+(float)((K2+0.0)*ELC_Center_23));}
}
//14正常23不正常58正常
else if(max_ab(LNow[0],LNow[3])>=150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
ELC_Center0=(int16)((float)(1.0*ELC_Center_58));}
else
{
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));
}
}
//14不正常23正常58正常
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])>=80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0){//都同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else if( ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if( ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
{
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));
}
}
//14不正常23不正常58正常
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.2*ELC_Center_14)+(float)(0.1*ELC_Center_23));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
ELC_Center0=(int16)((float)(1.0*ELC_Center_58)+(float)(0.0f*ELC_Center_14)+(float)(0.0f*ELC_Center_23));
}
//14不正常23不正常58不正常
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])<150 )//14不正常23不正常58不正常
{
ELC_Center0= ELC_Center_Last;
}
}
//#include "inductance.h"
//#include <math.h>
//uint16 LNow[10];
//float LNor[10];
//uint16 LNom[10];
//uint16 LNowinit[10] = {1300,1200,1500,1200,1300,1300,1500,1300,3700,3700};
//uint16 LNORMAX[10] = {2980,2000,2000,2980,3350,1500,1500,3350,3700,3700};
//uint16 ELC[ELC_GROUP][ELC_NUM];
偏差
//int32 ELC_Center_14 = 0;
//int32 ELC_Center_23 = 0;
//int32 ELC_Center_58 = 0;
//int32 ELC_Center0 = 0;
//int32 ELC_Center1 = 0;
//int32 ELC_Center = 0;
//int32 ELC_CenterRepair = 0;
//int32 ELC_Center_Last = 0;
电感和
//uint16 ELC_Sum_14 = 0;
//uint16 ELC_Sum_23 = 0;
//uint16 ELC_Sum_58 = 0;
//uint16 ELC_Sum_1234 = 0;
//uint16 ElC_Sum_146=0;
//uint16 Fork_Sum_1234=0;
电感差
//int16 ELC_Err_14 = 0;
//int16 ELC_Err_23 = 0;
//int16 ELC_Err_58 = 0;
权重系数
//float K1=0.8f;
//float K2=0;
//float K3=0.1f;
//float K4=0.1f;
电感保护
//uint8 ELC_PROTECT_FLAG=0;
电感处理
//void Inductor_deal(void)
//{
// uint16 L_sum[ELC_NUM] = {0,0,0,0,0,0,0,0,0,0,};
// int8 i = 0,k = 0;
// uint16 ELC_max[ELC_NUM] = {4095,4095,4095,4095,4095,4095,4095,4095,4095,4095};
// uint16 ELC_min[ELC_NUM] = {0,0,0,0,0,0,0,0,0,0,};
// //读取ADC
// for(i = 0;i < ELC_GROUP ;i ++)
// {
// ELC[i][0] = adc_once(ADC1,ADC_12BIT);
// ELC[i][1] = adc_once(ADC2,ADC_12BIT);
// ELC[i][2] = adc_once(ADC3,ADC_12BIT);
// ELC[i][3] = adc_once(ADC4,ADC_12BIT);
// ELC[i][4] = adc_once(ADC5,ADC_12BIT);
// ELC[i][5] = adc_once(ADC6,ADC_12BIT);
// ELC[i][6] = adc_once(ADC7,ADC_12BIT);
// ELC[i][7] = adc_once(ADC8,ADC_12BIT);
// ELC[i][8] = adc_once(ADC9,ADC_12BIT);
// ELC[i][9] = adc_once(ADC10,ADC_12BIT);
// }
// //挑出最大最小值
// for(k = 0; k < ELC_NUM ; k++)
// {
// for(i = 0; i < ELC_GROUP; i++)
// {
// if(ELC[i][k] >= ELC_min[k])
// {
// ELC_min[k]=ELC[i][k];
// }
// if(ELC[i][k] <= ELC_max[k])
// {
// ELC_max[k]=ELC[i][k];
// }
// L_sum[k] += ELC[i][k];
// }
// }
// //第一次归一化
// if(Fork.state == Fork_begin)
// {
// for(i = 0;i < ELC_NUM;i ++)
// {
// LNow[i] = ((L_sum[i]-ELC_max[i]-ELC_min[i])/ (ELC_GROUP-2));
// LNow[i] = LNow[i]+1;
// }
// }
// else
// {
// for(i = 0;i < ELC_NUM;i ++)
// {
// LNom[i] = (L_sum[i]-ELC_max[i]-ELC_min[i])/ (ELC_GROUP-2);
// LNow[i] = 2.2*LNom[i];
// LNow[i] = LNow[i]+1;
// }
// }
// //第二次归一化
// for(i = 0;i < ELC_NUM;i++)
// {
// LNor[i] = LNow[i];
// LNor[i] = LNor[i]*100/LNORMAX[i];
// }
// //电磁保护
// if(max_ab(LNow[0],LNow[3])<= 50&&max_ab(LNow[1],LNow[2])<= 50&&max_ab(LNow[4],LNow[7])<= 500&&LNow[6]<40)
// ELC_PROTECT_FLAG = 'T';
// else
// ELC_PROTECT_FLAG = 'F';
电感值差
// ELC_Err_14 = LNor[3] - LNor[0];
// ELC_Err_23 = LNor[2] - LNor[1];
// ELC_Err_58 = LNor[7] - LNor[4];
电感值和
// ELC_Sum_14 = LNor[0] + LNor[3];
// ELC_Sum_58 = LNor[4] + LNor[7];
// ELC_Sum_23 = LNor[1] + LNor[2];
// ELC_Sum_1234= ELC_Sum_14 + ELC_Sum_23;
// Fork_Sum_1234= LNom[0] + LNom[1]+LNom[2] + LNom[3];
差比和处理
ELC_Center_14=(int16)((float)1000*(sqrt(LNor[3])-sqrt(LNor[0]))/(LNor[3]+ LNor[0]));
ELC_Center_23=(int16)((float)1000*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
ELC_Center_58=(int16)((float)1000*(sqrt(LNor[7])-sqrt(LNor[4]))/(LNor[7]+ LNor[4]));
ELC_Center_14=(int16)((float)1400*(LNor[3]+LNor[2]-(LNor[0]+LNor[1]))/(LNor[3]+LNor[5]+ LNor[0]+LNor[1]+ LNor[2]));
ELC_Center_23=(int16)((float)1000*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
ELC_Center_58=(int16)((float)1400*(sqrt(LNor[7])-sqrt(LNor[4]))/(LNor[7]+LNor[6]+LNor[4]));
ELC_Center_23=(int16)((float)100*(LNor[2]-LNor[1])/(LNor[2]+ LNor[1]));
ELC_Center_14=(int32)((float)900*(LNor[3]-LNor[0])/(LNor[3]*LNor[0]));
ELC_Center_23=(int32)((float)700*(LNor[2]-LNor[1])/(LNor[2]*LNor[1]));
ELC_Center_58=(int32)((float)800*(LNor[7]-LNor[4])/(LNor[7]*LNor[4]));
ELC_Center_14=(int32)((float)2000*(sqrt(LNor[3])-sqrt(LNor[0]))/(LNor[3]+1.5*LNor[5]+ LNor[0]));
ELC_Center_23=(int32)((float)1500*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
// ELC_Center_14=(int32)((float)1400*(sqrt(LNor[3])-sqrt(LNor[0]))/(LNor[3]+LNor[5]+ LNor[0]));
// ELC_Center_23=(int32)((float)1000*(sqrt(LNor[2])-sqrt(LNor[1]))/(LNor[2]+ LNor[1]));
// ELC_Center_58=(int32)((float)1800*(sqrt(LNor[7])-sqrt(LNor[4]))/(LNor[7]+LNor[4]));
系数修正
// K2=(float)myabs(6.5f*(limit_ab(ELC_Center_14,-100.0f,100.0f)/1000.0f));
// K1=(float)(1.30f-K2);
ELC_Center1=(int32)((float)120*(0.4*(LNor[3]-LNor[0])+1.2*(LNor[2]-LNor[1]))/(0.4*(LNor[3]+ LNor[0])+LNor[5]+1.0f*myabs(LNor[2]-LNor[1])));
ELC_Center1=(int32)((float)1650*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+ K2*(sqrt(LNor[2])-sqrt(LNor[1])))/(0.4*(LNor[3]+ LNor[0])+1.5*LNor[5]+0.8f*myabs(LNor[2]-LNor[1])));
ELC_Center1=(int32)((float)1650*(0.4*(sqrt(LNor[3])-sqrt(LNor[0]))+(sqrt(LNor[2])-sqrt(LNor[1])))/(0.4*(LNor[3]+ LNor[0])+1.5*LNor[5]+0.8f*myabs(LNor[2]-LNor[1])));
ELC_Center0= (int32)((float)1650*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*(LNor[3]+ LNor[0])+1.5*LNor[5]+(K2+0.2)*myabs(LNor[2]-LNor[1])));
ELC_Center0= (int32)((float)1650*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*(LNor[3]+ LNor[0])+1.5*LNor[5]+(K2+0.2)*myabs(LNor[2]-LNor[1])));
ELC_Center1= (int32)((float)2300*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*sqrt((LNor[3]*LNor[0]))+1.5*LNor[5]+(K2+0.2)*(LNor[1]+LNor[2])));
ELC_Center0= (int32)((float)2200*(K1*(sqrt(LNor[3])-sqrt(LNor[0]))+(K2+0.2f)*(sqrt(LNor[2])-sqrt(LNor[1])))/(K1*sqrt((LNor[3]*LNor[0]))+1.5*LNor[5]+(K2+0.2)*(LNor[1]+LNor[2])));
K3=(float)myabs(5.5f*(limit_ab(ELC_Center0,-100.0f,100.0f)/1000.0f));
K4=1.0-K3;
ELC_Center1= K4*ELC_Center0+K3*ELC_Center_23;
// Elc_boundary_deal();
ELC_Center0=ELC_Center_58;
// ELC_Center1=ELC_Center0;
///*特殊元素,处理*/
// if(Cross.FindFlag == 'T')
// {
// if(Cross.state==Crossin)
// {
// ELC_Center1=0.6*ELC_Center0;
// }
// else if(Cross.state==Crosson)
// {
// ELC_Center1= ELC_Center0;
// }
// }
if(Fork.Dir == 'L'&&Fork.state == Fork_middle){ELC_Center1=0.6*ELC_Center_58+0.4*ELC_Center_14;}
if(max_ab(LNow[0],LNow[3])>=150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
{
if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
}
}
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])>=80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_14))
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));}
else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_58));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
else
{
if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
else
ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
}
}
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
{
if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
ELC_Center1=(int16)((float)(2.0*ELC_Center_58));}
else
ELC_Center1 = ELC_Center_Last;
// if(myabs(ELC_Center_23)>myabs(ELC_Center_14))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));}
// else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
// else
// {
// if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
// ELC_Center1=(int16)((float)(1.2*ELC_Center_14)+(float)(0.3*ELC_Center_23));
// else
// ELC_Center1=(int16)((float)(1.2*ELC_Center_23)+(float)(0.3*ELC_Center_14));
// }
}
else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])<150)
{
ELC_Center1 = ELC_Center_Last;
}
// ELC_Center=KalmanFilter(&KFP_ELCCenter,ELC_Center1);
// ELC_Center_Last = ELC_Center;
//}
//
//
//void Elc_boundary_deal(void)
//{
// //14正常23正常58正常
// if(max_ab(LNow[0],LNow[3])>=150&&max_ab(LNow[1],LNow[2])>=80&&max_ab(LNow[4],LNow[7])>=150)
// {
// if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
// ELC_Center0 =(int16)((float)(K1*ELC_Center_14)+(float)(K2*ELC_Center_23));}
// else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0&&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
//
// else
// {ELC_Center0=(int16)((float)(K1*ELC_Center_14)+(float)(K2*ELC_Center_23));}
// }
// //14正常23不正常58正常
// else if(max_ab(LNow[0],LNow[3])>=150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
// {
// if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
//
// else
// {
// if(myabs(ELC_Center_14)>myabs(ELC_Center_23))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_23));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_14));
// }
// }
// //14不正常23正常58正常
// else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])>=80&&max_ab(LNow[4],LNow[7])>=150)
// {
// if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0){//都同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
// else if( ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if( ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
// else
// {
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));
// }
// }
// //14不正常23不正常58正常
// else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])>=150)
// {
// if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23>=0 ){//都同号
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.2*ELC_Center_14)+(float)(0.1*ELC_Center_23));}
// else if(ELC_Center_14*ELC_Center_58>=0&&ELC_Center_23*ELC_Center_58<0 &&ELC_Center_14*ELC_Center_23<=0){//23异, 14,58同号
// if(myabs(ELC_Center_14)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_14)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_14));}
// else if(ELC_Center_14*ELC_Center_58<0&&ELC_Center_23*ELC_Center_58>=0 &&ELC_Center_14*ELC_Center_23<=0){//14异, 23,58同号
// if(myabs(ELC_Center_23)>myabs(ELC_Center_58))
// ELC_Center0=(int16)((float)(0.7*ELC_Center_23)+(float)(0.3*ELC_Center_58));
// else
// ELC_Center0=(int16)((float)(0.7*ELC_Center_58)+(float)(0.3*ELC_Center_23));}
// else
// ELC_Center0= ELC_Center_Last;
// }
// //14不正常23不正常58不正常
// else if(max_ab(LNow[0],LNow[3])<150&&max_ab(LNow[1],LNow[2])<80&&max_ab(LNow[4],LNow[7])<150 )//14不正常23不正常58不正常
// {
// ELC_Center0= ELC_Center_Last;
// }
//}
//
//
//
//
// 仿照这种格式给我改一下你之前生成的代码,函数名不要起的太复杂
最新发布