⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baseai.c

📁 电力系统中的保护装置全部代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#include        "nucleus.h"
#include        "math.h"
#include        "BaseVariable.h"


#define HARMOUSMAX 10            //最大谐波次数
typedef struct                   //每次谐波保存实部,虚部
{
        float   real;
        float   imag;
}HARMOUS;

HARMOUS VIA[HARMOUSMAX],VIB[HARMOUSMAX],VIC[HARMOUSMAX],    //三相测量电流各次谐波
        VUa[HARMOUSMAX],VUb[HARMOUSMAX],VUc[HARMOUSMAX];    //三相测量电压各次谐波
float   VP[HARMOUSMAX],VQ[HARMOUSMAX];                      //各次谐波功率

float   HarmousCoeff[HARMOUSMAX][Sample_Point * 2] =        //各次谐波滤波系数
        {
        {
//基波傅氏滤波系数
//实部
        1.000000000,0.965925826,0.866025404,0.707106781,0.500000000,0.258819045,
        -0.000000000,-0.258819045,-0.500000000,-0.707106781,-0.866025404,-0.965925826,
        -1.000000000,-0.965925826,-0.866025404,-0.707106781,-0.500000000,-0.258819045,
        0.000000000,0.258819045,0.500000000,0.707106781,0.866025404,0.965925826,
//虚部
        0.000000000,-0.258819045,-0.500000000,-0.707106781,-0.866025404,-0.965925826,
        -1.000000000,-0.965925826,-0.866025404,-0.707106781,-0.500000000,-0.258819045,
        0.000000000,0.258819045,0.500000000,0.707106781,0.866025404,0.965925826,
        1.000000000,0.965925826,0.866025404,0.707106781,0.500000000,0.258819045
        },

        {
//2次谐波傅氏滤波系数
//实部
        1.000000000,0.866025404,0.500000000,-0.000000000,-0.500000000,-0.866025404,
        -1.000000000,-0.866025404,-0.500000000,0.000000000,0.500000000,0.866025404,
        1.000000000,0.866025404,0.500000000,-0.000000000,-0.500000000,-0.866025404,
        -1.000000000,-0.866025404,-0.500000000,0.000000000,0.500000000,0.866025404,
//虚部
        0.000000000,-0.500000000,-0.866025404,-1.000000000,-0.866025404,-0.500000000,
        0.000000000,0.500000000,0.866025404,1.000000000,0.866025404,0.500000000,
        -0.000000000,-0.500000000,-0.866025404,-1.000000000,-0.866025404,-0.500000000,
        0.000000000,0.500000000,0.866025404,1.000000000,0.866025404,0.500000000
        },

        {
//3次谐波傅氏滤波系数
//实部
        1.000000000,0.707106781,-0.000000000,-0.707106781,-1.000000000,-0.707106781,
        0.000000000,0.707106781,1.000000000,0.707106781,-0.000000000,-0.707106781,
        -1.000000000,-0.707106781,0.000000000,0.707106781,1.000000000,0.707106781,
        -0.000000000,-0.707106781,-1.000000000,-0.707106781,0.000000000,0.707106781,
//虚部
        0.000000000,-0.707106781,-1.000000000,-0.707106781,0.000000000,0.707106781,
        1.000000000,0.707106781,-0.000000000,-0.707106781,-1.000000000,-0.707106781,
        0.000000000,0.707106781,1.000000000,0.707106781,-0.000000000,-0.707106781,
        -1.000000000,-0.707106781,0.000000000,0.707106781,1.000000000,0.707106781
        },

        {
//  4次谐波傅氏滤波系数
//实部
        1.000000000,0.500000000,-0.500000000,-1.000000000,-0.500000000,0.500000000,
        1.000000000,0.500000000,-0.500000000,-1.000000000,-0.500000000,0.500000000,
        1.000000000,0.500000000,-0.500000000,-1.000000000,-0.500000000,0.500000000,
        1.000000000,0.500000000,-0.500000000,-1.000000000,-0.500000000,0.500000000,
//虚部
        0.000000000,-0.866025404,-0.866025404,0.000000000,0.866025404,0.866025404,
        -0.000000000,-0.866025404,-0.866025404,0.000000000,0.866025404,0.866025404,
        -0.000000000,-0.866025404,-0.866025404,0.000000000,0.866025404,0.866025404,
        -0.000000000,-0.866025404,-0.866025404,0.000000000,0.866025404,0.866025404
        },

        {
//  5次谐波傅氏滤波系数
//实部
        1.000000000,0.258819045,-0.866025404,-0.707106781,0.500000000,0.965925826,
        -0.000000000,-0.965925826,-0.500000000,0.707106781,0.866025404,-0.258819045,
        -1.000000000,-0.258819045,0.866025404,0.707106781,-0.500000000,-0.965925826,
        0.000000000,0.965925826,0.500000000,-0.707106781,-0.866025404,0.258819045,
//虚部
        0.000000000,-0.965925826,-0.500000000,0.707106781,0.866025404,-0.258819045,
        -1.000000000,-0.258819045,0.866025404,0.707106781,-0.500000000,-0.965925826,
        0.000000000,0.965925826,0.500000000,-0.707106781,-0.866025404,0.258819045,
        1.000000000,0.258819045,-0.866025404,-0.707106781,0.500000000,0.965925826
        },

        {
//  6次谐波傅氏滤波系数
//实部
        1.000000000,-0.000000000,-1.000000000,0.000000000,1.000000000,-0.000000000,
        -1.000000000,0.000000000,1.000000000,-0.000000000,-1.000000000,0.000000000,
        1.000000000,-0.000000000,-1.000000000,0.000000000,1.000000000,-0.000000000,
        -1.000000000,0.000000000,1.000000000,-0.000000000,-1.000000000,0.000000000,
//虚部
        0.000000000,-1.000000000,0.000000000,1.000000000,-0.000000000,-1.000000000,
        0.000000000,1.000000000,-0.000000000,-1.000000000,0.000000000,1.000000000,
        -0.000000000,-1.000000000,0.000000000,1.000000000,-0.000000000,-1.000000000,
        0.000000000,1.000000000,-0.000000000,-1.000000000,0.000000000,1.000000000
        },

        {
//  7次谐波傅氏滤波系数
//实部
        1.000000000,-0.258819045,-0.866025404,0.707106781,0.500000000,-0.965925826,
        0.000000000,0.965925826,-0.500000000,-0.707106781,0.866025404,0.258819045,
        -1.000000000,0.258819045,0.866025404,-0.707106781,-0.500000000,0.965925826,
        -0.000000000,-0.965925826,0.500000000,0.707106781,-0.866025404,-0.258819045,
//虚部
        0.000000000,-0.965925826,0.500000000,0.707106781,-0.866025404,-0.258819045,
        1.000000000,-0.258819045,-0.866025404,0.707106781,0.500000000,-0.965925826,
        0.000000000,0.965925826,-0.500000000,-0.707106781,0.866025404,0.258819045,
        -1.000000000,0.258819045,0.866025404,-0.707106781,-0.500000000,0.965925826
        },

        {
//  8次谐波傅氏滤波系数
//实部
        1.000000000,-0.500000000,-0.500000000,1.000000000,-0.500000000,-0.500000000,
        1.000000000,-0.500000000,-0.500000000,1.000000000,-0.500000000,-0.500000000,
        1.000000000,-0.500000000,-0.500000000,1.000000000,-0.500000000,-0.500000000,
        1.000000000,-0.500000000,-0.500000000,1.000000000,-0.500000000,-0.500000000,
//虚部
        0.000000000,-0.866025404,0.866025404,-0.000000000,-0.866025404,0.866025404,
        -0.000000000,-0.866025404,0.866025404,-0.000000000,-0.866025404,0.866025404,
        -0.000000000,-0.866025404,0.866025404,-0.000000000,-0.866025404,0.866025404,
        -0.000000000,-0.866025404,0.866025404,-0.000000000,-0.866025404,0.866025404
        },

        {
//  9次谐波傅氏滤波系数
//实部
        1.000000000,-0.707106781,0.000000000,0.707106781,-1.000000000,0.707106781,
        -0.000000000,-0.707106781,1.000000000,-0.707106781,0.000000000,0.707106781,
        -1.000000000,0.707106781,-0.000000000,-0.707106781,1.000000000,-0.707106781,
        0.000000000,0.707106781,-1.000000000,0.707106781,-0.000000000,-0.707106781,
//虚部
        0.000000000,-0.707106781,1.000000000,-0.707106781,0.000000000,0.707106781,
        -1.000000000,0.707106781,-0.000000000,-0.707106781,1.000000000,-0.707106781,
        0.000000000,0.707106781,-1.000000000,0.707106781,-0.000000000,-0.707106781,
        1.000000000,-0.707106781,0.000000000,0.707106781,-1.000000000,0.707106781
        },

        {
// 10次谐波傅氏滤波系数
//实部
        1.000000000,-0.866025404,0.500000000,-0.000000000,-0.500000000,0.866025404,
        -1.000000000,0.866025404,-0.500000000,0.000000000,0.500000000,-0.866025404,
        1.000000000,-0.866025404,0.500000000,-0.000000000,-0.500000000,0.866025404,
        -1.000000000,0.866025404,-0.500000000,0.000000000,0.500000000,-0.866025404,
//虚部
        0.000000000,-0.500000000,0.866025404,-1.000000000,0.866025404,-0.500000000,
        0.000000000,0.500000000,-0.866025404,1.000000000,-0.866025404,0.500000000,
        -0.000000000,-0.500000000,0.866025404,-1.000000000,0.866025404,-0.500000000,
        0.000000000,0.500000000,-0.866025404,1.000000000,-0.866025404,0.500000000
        }
        };

#pragma    DATA_SECTION(FOURIER1,".FilterCoeff");   //内部RAM中的基波滤波系数,运行速度快
#pragma    DATA_SECTION(FOURIER2,".FilterCoeff");   //内部RAM中的二次谐波滤波系数,运行速度快
#pragma    DATA_SECTION(FOURIER3,".FilterCoeff");   //内部RAM中的三次谐波滤波系数,运行速度快
#pragma    DATA_SECTION(FOURIER5,".FilterCoeff");   //内部RAM中的五次谐波滤波系数,运行速度快

float      FOURIER1[Sample_Point * 2];
float      FOURIER2[Sample_Point * 2];
float      FOURIER3[Sample_Point * 2];
float      FOURIER5[Sample_Point * 2];
float      *pFOURIER1 = FOURIER1;
float      *pFOURIER2 = FOURIER2;
float      *pFOURIER3 = FOURIER3;
float      *pFOURIER5 = FOURIER5;




VOID       Calculate(VOID);
VOID       RemoteMeasure(VOID);
VOID       fei_sqrt(VOID);
VOID       Phase_V_Cal(VOID);
VOID       CHLDEF_Initialize(VOID);
VOID       Delta_I_Initialize(VOID);
VOID       Delta_I_Routine(VOID); 
VOID       CopyFilterCoeff(VOID);
VOID       CopyFOURIER(float *pSRC, float *pDST);
float      fAmendCoeff(UNSIGNED channel);
float      fAmendAngle(UNSIGNED channel);

float      Uab;                                  //Uab基波平方和
float      Ubc;                                  //Ubc基波平方和
float      Uca;                                  //Uca基波平方和
float      samp_f;                               //频率
float      *Sample_Ptr = SampleData[0].value;    //采样指针
UNSIGNED   SampleIndex;                          //采样值数组下标

PRO_CHANNEL     AIChn[CHL_Number];               //模入通道

MEASTRU    measure[MEASURE_NUMBER] =             //遥测量的额定值
{
   {"IA",5,0,"A"},{"IB",5,0,"A"},{"IC",5,0,"A"},{"Uab",100,0,"V"},{"Ubc",100,0,"V"},{"Uca",100,0,"V"},
   {"P",866,0,"W"},{"Q",866,0,"Var"},{"f",2,0,"Hz"},{"3I0r",1,0,"A"},{"3I0m",1,0,"A"},
   {"3U0r",57.7*3,0,"V"},{"3U0m",57.7*3,0,"V"},
   
};

extern VOID     Cal_Harmous(float *sample, float *coeff, HARMOUS *result, float fcoeff, float fcos, float fsin);
extern float    MeasurePhraseValue(UNSIGNED channel,UNSIGNED index,float coef);
extern float    MeasureLineValue(UNSIGNED channel1,UNSIGNED channel2,UNSIGNED index,float coef1,float coef2);
extern VOID     MeasurePQ2(UNSIGNED isampleindex,float*,float*,float,float,float,float,float);

/***********************************************************************************/
/*      自动调整采样频率                                                           */ 
/***********************************************************************************/
VOID   CopyFOURIER(float *pSRC, float *pDST)
{
    register UNSIGNED i;
    register float    *pSRC1 = pSRC, *pDST1 = pDST;

    for(i = 0; i < sizeof(FOURIER1); i++) *pDST1++ = *pSRC1++;
}

VOID   CopyFilterCoeff(VOID)
{
    CopyFOURIER(HarmousCoeff[0],pFOURIER1);      //基波滤波系数拷贝至内部RAM
    CopyFOURIER(HarmousCoeff[1],pFOURIER2);      //二次谐波滤波系数拷贝至内部RAM
    CopyFOURIER(HarmousCoeff[2],pFOURIER3);      //三次谐波滤波系数拷贝至内部RAM
    CopyFOURIER(HarmousCoeff[4],pFOURIER5);      //五次谐波滤波系数拷贝至内部RAM
}


/***********************************************************************************/
/*      自动调整采样频率                                                               */ 
/***********************************************************************************/
#define FreqModifyNumber        22
typedef struct
{
        float   frequency;
        float   sample_interval;
        float   coeff;
}FREQSTRU;

FREQSTRU        FreqCtrl[FreqModifyNumber] =
        {
        {45,10e6/(Sample_Point*45),45/3.1415926536},{45.5,10e6/(Sample_Point*45.5),45.5/3.1415926536},     //0
        {46,10e6/(Sample_Point*46),46/3.1415926536},{46.5,10e6/(Sample_Point*46.5),46.5/3.1415926536},     //1
        {47,10e6/(Sample_Point*47),47/3.1415926536},{47.5,10e6/(Sample_Point*47.5),47.5/3.1415926536},     //2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -