資源簡介
用DFT算法和查表的方法實現電力系統各種參數的分析
代碼片段和文件信息
#include?“DSP28_Device.h“
#if(ADC)
extern?Uint16 volatile test_wordtest_byte;
extern?STATUS volatile Flags;
extern?Uint16 volatile adbuf[6][ADC_PR+ADC_OFFSET]adcbcntClrTimer;
extern?Uint16 volatile avarage_pr_cnt; //周期個數計數器
extern?Uint16 volatile TdCntTdCntATdCntBTdCntCBdCntBdCntABdCntBBdCntC;//投切延時計數器返回延時計數器
extern?int32 volatile VirtVal[7]papbpcqaqbqcthdi0sasbsc;//存放最終計算結果VirtVal緩沖區0單元到6單元分別是uaubuciaibici0
extern?Uint16 volatile UCoefUaCoefUbCoefUcCoefIaCoefIbCoefIcCoef; //Ua、Ub、Uc、Ia、Ib、Ic六個模擬輸入通道的系數
extern?Uint16 volatile UaaUbbUcc;
extern?float volatile IaaIbbIcc;
extern?float volatile AdrMax[7]AdrMin[7];
extern?float volatile paspbspcsqasqbsqcs;
extern?float volatile UaSumUbSumUcSumIaSumIbSumIcSumI0Sum;
extern?float volatile PaSumPbSumPcSumQaSumQbSumQcSumSaSumSbSumScSum;
extern?float volatile cosacosbcoscsaasbbscc; //存放功率因數
extern?float volatile UaBuf[AVARAGE_PR_NUM]UbBuf[AVARAGE_PR_NUM]UcBuf[AVARAGE_PR_NUM];
extern?float volatile IaBuf[AVARAGE_PR_NUM]IbBuf[AVARAGE_PR_NUM]IcBuf[AVARAGE_PR_NUM];
extern?float volatile PaBuf[AVARAGE_PR_NUM]PbBuf[AVARAGE_PR_NUM]PcBuf[AVARAGE_PR_NUM];
extern?float volatile QaBuf[AVARAGE_PR_NUM]QbBuf[AVARAGE_PR_NUM]QcBuf[AVARAGE_PR_NUM];
extern?float volatile SaBuf[AVARAGE_PR_NUM]SbBuf[AVARAGE_PR_NUM]ScBuf[AVARAGE_PR_NUM];
extern?Uint16 volatile inpwpwidctuhuli00; //存放設置的參數:口令、地址、變比、電壓上限、電壓下限
extern?Uint16 volatile thducosskkbdtd; //電壓諧波畸變率上限、補償的功率因數上限、投入門限系數、投切延時
extern?OUTPORT volatile outpin[OUTNUM];
extern?Uint16 volatile EquAEquBEquCEquT;
extern?Uint16 volatile singlecapsrnumtogthercaptrnum;
extern?SSTEP volatile sstep;
extern?TSTEP? volatile tstep;
extern?Uint16 volatile frequenceFreCntPerVal;
extern?Uint16 volatile FreBuf[AVARAGE_PERIOD];
extern?float volatile harm_cos_tab[ADC_PR+ADC_OFFSET];
extern?float volatile harm_sin_tab[ADC_PR+ADC_OFFSET];
extern?Uint16 volatile harmsca[6][HARM_TIME]; //分別存放6相的諧波總加及3~HARM_TIME次諧波分量比例
extern?Uint16 volatile HSS[6][HARM_TIME];
extern?Uint16 volatile HarSca[6][HARM_TIME];
extern?Uint16 volatile MaxHarm[6][HARM_TIME];
#if(MMI)
Uint32?Taxis(Uint16?*BufUint16?AverageTime) //將Buf內的數據去掉一個最大的和一個最小的
{
Uint32?Temp;
Uint16?CntReg;
if(AverageTime>=4) //只有數據個數較多時才去掉最大值和最小值再求平均
{
Reg=0;
for(Cnt=1;Cnt {
if(*(Buf+Reg)<*(Buf+Cnt))Reg=Cnt;
}
Temp=*(Buf+Reg);
for(Cnt=Reg;Cnt {
*(Buf+Cnt)=*(Buf+Cnt+1);
}
*(Buf+AverageTime-1)=Temp; //最大值放在最后一個單元
Reg=0;
for(Cnt=1;Cnt {
if(*(Buf+Reg)>*(Buf+Cnt))Reg=Cnt;
}
Temp=*(Buf+Reg);
for(Cnt=Reg;Cnt {
*(Buf+Cnt)=*(Buf+Cnt+1);
}
*(Buf+AverageTime-2)=Temp; //最小值放在最后第二個單元
Temp=0;
for(Cnt=0;Cnt
- 上一篇:模擬電子技術課程設計實驗報告.doc
- 下一篇:對信號作雙譜分析
評論
共有 條評論