|

楼主 |
发表于 2020-6-11 13:12:05
|
显示全部楼层
- void DSP_Process(void)
- {
- u16 i=0,a=0;
- //初始化scfft结构体,设定FFT相关参数
- arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);
- float GLYS_A=0,GLYS_B=0,GLYS_C=0;
- float PowerA=0,PowerB=0,PowerC=0;
- if(Conv_flag)//DMA有准备好的数据了
- {
- a=DMA_GetCurrentMemoryTarget(DMA2_Stream0);
- if(a == DMA_Memory_0)
- {
- ADC_ConvertedValueptr = uAD_Buff_B;
- }
- else
- {
- ADC_ConvertedValueptr = uAD_Buff_A;
- }
- for(i=0;i<FFT_LENGTH;i++)
- {
- ADC_Three_V[0][i]=ADC_ConvertedValueptr[i*6];
- ADC_Three_V[1][i]=ADC_ConvertedValueptr[1+i*6];
- ADC_Three_V[2][i]=ADC_ConvertedValueptr[2+i*6];
- True_Three_V[0][i]=(VDDA_VAL*(ADC_Three_V[0][i]-VOLTAGE_Zero-Voltage_A_Devi))/4096/R2*R1;
- True_Three_V[1][i]=(VDDA_VAL*(ADC_Three_V[1][i]-VOLTAGE_Zero-Voltage_B_Devi))/4096/R2*R1;
- True_Three_V[2][i]=(VDDA_VAL*(ADC_Three_V[2][i]-VOLTAGE_Zero-Voltage_C_Devi))/4096/R2*R1;
- fft_inputbuf_V[0][2*i]=True_Three_V[0][i]; //实部
- fft_inputbuf_V[0][2*i+1]=0;//虚部全部为0
- fft_inputbuf_V[1][2*i]=True_Three_V[1][i]; //实部
- fft_inputbuf_V[1][2*i+1]=0;//虚部全部为0
- fft_inputbuf_V[2][2*i]=True_Three_V[2][i]; //实部
- fft_inputbuf_V[2][2*i+1]=0;//虚部全部为0
- ADC_Three_I[0][i]=ADC_ConvertedValueptr[3+i*6];
- ADC_Three_I[1][i]=ADC_ConvertedValueptr[4+i*6];
- ADC_Three_I[2][i]=ADC_ConvertedValueptr[5+i*6];
- True_Three_I[0][i]=(VDDA_VAL*(ADC_Three_I[0][i]-VOLTAGE_Zero-Current_A_Devi))/4096/R3*3000;
- True_Three_I[1][i]=(VDDA_VAL*(ADC_Three_I[1][i]-VOLTAGE_Zero-Current_B_Devi))/4096/R3*3000;
- True_Three_I[2][i]=(VDDA_VAL*(ADC_Three_I[2][i]-VOLTAGE_Zero-Current_C_Devi))/4096/R3*3000;
- fft_inputbuf_I[0][2*i]=True_Three_I[0][i]; //实部
- fft_inputbuf_I[0][2*i+1]=0;//虚部全部为0
- fft_inputbuf_I[1][2*i]=True_Three_I[1][i]; //实部
- fft_inputbuf_I[1][2*i+1]=0;//虚部全部为0
- fft_inputbuf_I[2][2*i]=True_Three_I[2][i]; //实部
- fft_inputbuf_I[2][2*i+1]=0;//虚部全部为0
- }
- //电压电流有效值
- arm_rms_f32(True_Three_V[0],FFT_LENGTH,&VARms);
- arm_rms_f32(True_Three_V[1],FFT_LENGTH,&VBRms);
- arm_rms_f32(True_Three_V[2],FFT_LENGTH,&VCRms);
- arm_rms_f32(True_Three_I[0],FFT_LENGTH,&IARms);
- arm_rms_f32(True_Three_I[1],FFT_LENGTH,&IBRms);
- arm_rms_f32(True_Three_I[2],FFT_LENGTH,&ICRms);
- //电压数据FFT计算(基4)
- arm_cfft_radix4_f32(&scfft,fft_inputbuf_V[0]);
- arm_cfft_radix4_f32(&scfft,fft_inputbuf_V[1]);
- arm_cfft_radix4_f32(&scfft,fft_inputbuf_V[2]);
- //电流数据FFT计算(基4)
- arm_cfft_radix4_f32(&scfft,fft_inputbuf_I[0]);
- arm_cfft_radix4_f32(&scfft,fft_inputbuf_I[1]);
- arm_cfft_radix4_f32(&scfft,fft_inputbuf_I[2]);
- // MaxVA=(float)(sqrt(fft_inputbuf_V[0][2]*fft_inputbuf_V[0][2]+fft_inputbuf_V[0][3]*fft_inputbuf_V[0][3]))/128;
- //角度
- jiaodu_VA=JiaoDu_Process(fft_inputbuf_V[0]);
- if(jiaodu_VA<0)
- jiaodu_VA+=360.0;
- jiaodu_VB=JiaoDu_Process(fft_inputbuf_V[1]);
- if(jiaodu_VB<0)
- jiaodu_VB+=360.0;
- jiaodu_VC=JiaoDu_Process(fft_inputbuf_V[2]);
- if(jiaodu_VC<0)
- jiaodu_VC+=360.0;
- jiaodu_IA=JiaoDu_Process(fft_inputbuf_I[0]);
- jiaodu_IB=JiaoDu_Process(fft_inputbuf_I[1]);
- jiaodu_IC=JiaoDu_Process(fft_inputbuf_I[2]);
-
- //功率因素
- GLYS_A=Factor_Process(fft_inputbuf_V[0],fft_inputbuf_I[0]);
- GLYS_B=Factor_Process(fft_inputbuf_V[1],fft_inputbuf_I[1]);
- GLYS_C=Factor_Process(fft_inputbuf_V[2],fft_inputbuf_I[2]);
-
-
- PowerA=VARms*IARms*GLYS_A;
- PowerB=VARms*IARms*GLYS_B;
- PowerC=VARms*IARms*GLYS_C;
-
- Tol_Power=PowerA+PowerB+PowerC;
- Tol_QPower=VARms*IARms+VARms*IARms+VARms*IARms;
- Tol_Factor=(GLYS_A+GLYS_B+GLYS_C)/3;
- Conv_flag=0;
- }
- }
- float Factor_Process(float *fft_Data_V,float *fft_Data_I)
- {
- float Real_V,Imaginary_V,hudu_V,Real_C,Imaginary_C,hudu_C,GLYS;
- Real_V = fft_Data_V[2]; //timeout3=15
- Imaginary_V = fft_Data_V[3];
- hudu_V = atan2(Imaginary_V , Real_V);
- Real_C = fft_Data_I[2];
- Imaginary_C = fft_Data_I[3];
- hudu_C = atan2(Imaginary_C , Real_C);
- GLYS=cos(hudu_V-hudu_C); //功率因素
- return GLYS;
- }
- float JiaoDu_Process(float *fft_Data)
- {
- float Real,Imaginary,hudu,jiaodu;
- Real = fft_Data[2]; //timeout3=15
- Imaginary = fft_Data[3];
- hudu = atan2(Imaginary , Real);
- jiaodu = (float)(hudu* 180 / Pi);
- return jiaodu;
- }
复制代码
|
|