#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include <math.h>
#define N 50 //检测谐波的次数
#define T 256 //输入电流的周期
#define M 10 //总长
#define u 0.009 //学习率
#define pi 3.1415926
//sin和cos值的表
double sinx[T+1]={0, 0.02454123, 0.04906767, 0.07356456, 0.09801714, 0.1224107, 0.1467305, 0.1709619, 0.1950903, 0.2191012, 0.2429802, 0.2667128, 0.2902847, 0.3136817, 0.3368899, 0.359895, 0.3826834, 0.4052413, 0.4275551, 0.4496113, 0.4713967, 0.4928982, 0.5141027, 0.5349976, 0.5555702, 0.5758082, 0.5956993, 0.6152316, 0.6343933, 0.6531728, 0.671559, 0.6895405, 0.7071068, 0.7242471, 0.7409511, 0.7572088, 0.7730105, 0.7883464, 0.8032075, 0.8175848, 0.8314696, 0.8448536, 0.8577286, 0.870087, 0.8819213, 0.8932243, 0.9039893, 0.9142098, 0.9238795, 0.9329928, 0.9415441, 0.9495282, 0.9569403, 0.9637761, 0.9700313, 0.9757021, 0.9807853, 0.9852776, 0.9891765, 0.9924795, 0.9951847, 0.9972905, 0.9987955, 0.9996988, 1.0, 0.9996988, 0.9987955, 0.9972905, 0.9951847, 0.9924795, 0.9891765, 0.9852776, 0.9807853, 0.9757021, 0.9700313, 0.9637761, 0.9569403, 0.9495282, 0.9415441, 0.9329928, 0.9238795, 0.9142098, 0.9039893, 0.8932243, 0.8819213, 0.870087, 0.8577286, 0.8448536, 0.8314696, 0.8175848, 0.8032075, 0.7883464, 0.7730105, 0.7572088, 0.7409511, 0.7242471, 0.7071068, 0.6895405, 0.671559, 0.6531728, 0.6343933, 0.6152316, 0.5956993, 0.5758082, 0.5555702, 0.5349976, 0.5141027, 0.4928982, 0.4713967, 0.4496113, 0.4275551, 0.4052413, 0.3826834, 0.359895, 0.3368899, 0.3136817, 0.2902847, 0.2667128, 0.2429802, 0.2191012, 0.1950903, 0.1709619, 0.1467305, 0.1224107, 0.09801714, 0.07356456, 0.04906767, 0.02454123, 0, -0.02454123, -0.04906767,
-0.07356456, -0.09801714, -0.1224107, -0.1467305, -0.1709619, -0.1950903, -0.2191012, -0.2429802, -0.2667128, -0.2902847, -0.3136817, -0.3368899, -0.359895, -0.3826834, -0.4052413, -0.4275551, -0.4496113, -0.4713967, -0.4928982, -0.5141027, -0.5349976, -0.5555702, -0.5758082, -0.5956993, -0.6152316, -0.6343933, -0.6531728, -0.671559, -0.6895405, -0.7071068, -0.7242471, -0.7409511, -0.7572088, -0.7730105, -0.7883464, -0.8032075, -0.8175848, -0.8314696, -0.8448536, -0.8577286, -0.870087, -0.8819213, -0.8932243, -0.9039893, -0.9142098, -0.9238795, -0.9329928, -0.9415441, -0.9495282, -0.9569403, -0.9637761, -0.9700313, -0.9757021, -0.9807853, -0.9852776, -0.9891765, -0.9924795, -0.9951847, -0.9972905, -0.9987955, -0.9996988, -1.0, -0.9996988, -0.9987955, -0.9972905, -0.9951847, -0.9924795, -0.9891765, -0.9852776, -0.9807853, -0.9757021, -0.9700313, -0.9637761, -0.9569403, -0.9495282, -0.9415441, -0.9329928, -0.9238795, -0.9142098, -0.9039893, -0.8932243, -0.8819213, -0.870087, -0.8577286, -0.8448536, -0.8314696, -0.8175848, -0.8032075, -0.7883464, -0.7730105, -0.7572088, -0.7409511, -0.7242471, -0.7071068, -0.6895405, -0.671559, -0.6531728, -0.6343933, -0.6152316, -0.5956993, -0.5758082, -0.5555702, -0.5349976, -0.5141027, -0.4928982, -0.4713967, -0.4496113, -0.4275551, -0.4052413, -0.3826834, -0.359895, -0.3368899, -0.3136817, -0.2902847, -0.2667128, -0.2429802, -0.2191012, -0.1950903, -0.1709619, -0.1467305, -0.1224107, -0.09801714, -0.07356456, -0.04906767, -0.02454123, 0};
double cosx[T+1]={1.0, 0.9996988, 0.9987955, 0.9972905, 0.9951847, 0.9924795, 0.9891765, 0.9852776, 0.9807853, 0.9757021, 0.9700313, 0.9637761, 0.9569403, 0.9495282, 0.9415441, 0.9329928, 0.9238795, 0.9142098, 0.9039893, 0.8932243, 0.8819213, 0.870087, 0.8577286, 0.8448536, 0.8314696, 0.8175848, 0.8032075, 0.7883464, 0.7730105, 0.7572088, 0.7409511, 0.7242471, 0.7071068, 0.6895405, 0.671559, 0.6531728, 0.6343933, 0.6152316, 0.5956993, 0.5758082, 0.5555702, 0.5349976, 0.5141027, 0.4928982, 0.4713967, 0.4496113, 0.4275551, 0.4052413, 0.3826834, 0.359895, 0.3368899, 0.3136817, 0.2902847, 0.2667128, 0.2429802, 0.2191012, 0.1950903, 0.1709619, 0.1467305, 0.1224107, 0.09801714, 0.07356456, 0.04906767, 0.02454123,0, -0.02454123, -0.04906767, -0.07356456, -0.09801714, -0.1224107, -0.1467305, -0.1709619, -0.1950903, -0.2191012, -0.2429802, -0.2667128, -0.2902847, -0.3136817, -0.3368899, -0.359895, -0.3826834, -0.4052413, -0.4275551, -0.4496113, -0.4713967, -0.4928982, -0.5141027, -0.5349976, -0.5555702, -0.5758082, -0.5956993,
-0.6152316, -0.6343933, -0.6531728, -0.671559, -0.6895405, -0.7071068, -0.7242471, -0.7409511, -0.7572088, -0.7730105, -0.7883464, -0.8032075, -0.8175848, -0.8314696, -0.8448536, -0.8577286, -0.870087, -0.8819213, -0.8932243, -0.9039893, -0.9142098, -0.9238795, -0.9329928, -0.9415441, -0.9495282, -0.9569403, -0.9637761, -0.9700313, -0.9757021, -0.9807853, -0.9852776, -0.9891765, -0.9924795, -0.9951847, -0.9972905, -0.9987955, -0.9996988, -1.0, -0.9996988, -0.9987955, -0.9972905, -0.9951847, -0.9924795, -0.9891765, -0.9852776, -0.9807853, -0.9757021, -0.9700313, -0.9637761, -0.9569403, -0.9495282, -0.9415441, -0.9329928, -0.9238795, -0.9142098, -0.9039893, -0.8932243, -0.8819213, -0.870087, -0.8577286, -0.8448536, -0.8314696, -0.8175848, -0.8032075, -0.7883464, -0.7730105, -0.7572088, -0.7409511, -0.7242471, -0.7071068, -0.6895405, -0.671559, -0.6531728, -0.6343933, -0.6152316, -0.5956993, -0.5758082, -0.5555702, -0.5349976, -0.5141027, -0.4928982, -0.4713967, -0.4496113, -0.4275551, -0.4052413, -0.3826834, -0.359895, -0.3368899, -0.3136817, -0.2902847, -0.2667128, -0.2429802, -0.2191012, -0.1950903, -0.1709619, -0.1467305, -0.1224107, -0.09801714, -0.07356456, -0.04906767, -0.02454123, 0, 0.02454123, 0.04906767, 0.07356456, 0.09801714, 0.1224107, 0.1467305, 0.1709619, 0.1950903, 0.2191012, 0.2429802, 0.2667128, 0.2902847, 0.3136817, 0.3368899, 0.359895, 0.3826834, 0.4052413, 0.4275551, 0.4496113, 0.4713967, 0.4928982, 0.5141027, 0.5349976, 0.5555702, 0.5758082, 0.5956993, 0.6152316, 0.6343933, 0.6531728, 0.671559, 0.6895405, 0.7071068, 0.7242471, 0.7409511, 0.7572088, 0.7730105, 0.7883464, 0.8032075, 0.8175848, 0.8314696, 0.8448536, 0.8577286, 0.870087, 0.8819213, 0.8932243, 0.9039893, 0.9142098, 0.9238795, 0.9329928, 0.9415441, 0.9495282, 0.9569403, 0.9637761, 0.9700313, 0.9757021, 0.9807853, 0.9852776, 0.9891765, 0.9924795, 0.9951847, 0.9972905, 0.9987955, 0.9996988, 1.0};
float I_sum=0; //电流和
float I_ave=0; //单个周期内的直流分量
int ADnum=0; //迭代次数
float r=0;
float I_input,U_input; //实际输入电流,实际输入电压
float I_rms=0,IR=0; //电流有效值
float U_rms=0,UR=0; //电压有效值
float A1,A2; //相角
float P,Q; //有功功率和无功功率
//电流各次谐波正玄和余玄权值
float Ws[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
float Wc[N]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
float Ws2,Wc2; //电压权值
float Ei=0,Eu=0; //理论值与实际值误差
float w[N]; //电流1~50次谐波含量幅值
float thd; //电流总谐波畸变率
int k[N],ki; //偏移量
//**************计算电流谐波迭代修改各次谐波权值************************************************************************************
void ANN_I(float a,int t)
{
int i;
float e;
float It=0; //理论电流
for(i=0;i<50;i++)
k[i]=((i+1)*t)%T;
//*******(1)去直流分量
I_sum=I_sum+a;
ADnum++;
if(ADnum>=T)
{
I_ave=I_sum/T; //一个周期内直流分量的值
I_sum=0;
ADnum=0;
}
a=a-I_ave;
//******(2)计算理论值与实际值误差
for(i=0;i<N;i++)
It=It+Ws[i]*sinx[k[i]]+Wc[i]*cosx[k[i]];
e=a-It;
//******(3)修改权值
for(i=0;i<N;i++)
{
Ws[i]=Ws[i]+u*e*sinx[k[i]];
Wc[i]=Wc[i]+u*e*cosx[k[i]];
}
}
//**************计算电压权值******************************************************************************************
void ANN_U(float a,int t)
{
float e;
float It=0;
//******(1)计算理论值与实际值误差
ki=t%T;
It=Ws2*sinx[ki]+Wc2*cosx[ki];
e=a-It;
//******(2)根据误差修改权值
Ws2=Ws2+u*e*sinx[ki];
Wc2=Wc2+u*e*cosx[ki];
}
//**************计算有功功率和无功功率*********************************************************************************
void Power()
{
P=(Wc[0]*Wc2+Ws[0]*Ws2)/2;
Q=(Wc2*Ws[0]-Wc[0]*Ws2)/2
评论0