1、基于STM32的FFT傅里叶变换/* (C) COPYRIGHT 2010 STMicroelectronics * File Name : ADCompute.c* Author :* Version : V1.0* Date : 10/08/2007* Description : AD_Compute program body* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORD
2、ER FOR THEM TO SAVE TIME.* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING* INFORMATION CONTAINED HEREIN IN CONNECTION WITH
3、 THEIR PRODUCTS.*/* Includes -*/#include stm32f10x.h#include main.h#include stm32f10x_usart.h#include stm32f10x_lib.h #include stm32f10x_map.h #include platform_config.h#include stm32f10x_nvic.h#include stm32f10x_adc.h#include stm32f10x_dma.h#include extern.h#include #include #define plus1 0#define
4、plus2 1#define plus3 2/#define BufferSize 200#define ADC1 (ADC_TypeDef *) ADC1_BASE)#define DMA1_Channel6 (DMA_Channel_TypeDef *) DMA1_Channel6_BASE)/u8 ch_flag3=0,0,0 ;/u8 plus_state3=0,0,0;volatile unsigned short int Current_L; / 剩余电流volatile unsigned short int ADC_ValueData224;/volatile unsigned
5、short int ADC_ValueDataTAB7=0,0,0,0,0,0,0;volatile unsigned short int Angle_Value_Data7=0,0,0,0,0,0,0;volatile signed long int zhengxuDateTab367; volatile signed long int fuxuDateTab367;/unsigned short int ADC_Value7=0,0,0,0,0,0,0;/标识/u8 prun,ddj_run,qda,qdc5,Trip,Trip2,Alarm,RLP_oweI,RLP_oweP,RLP_o
6、weUA,RLP_oweUT;/变量/vs32 recval316,e40; vs32 ss0,ss1,ss2,ss3,ss4,ss5,ss6,ss7,ss8,ss9,ss10,ss11,ss12,ss13,ss14,ss15,ss16,ss17,ss18,ss19,ss20,ss21,sss_r,sss_x, ss_dxa,ss_dxb,ss_dxc,ss_bphave,ss_bpha,ss_bphb,ss_bphc,ss_bphmax;vu8 pro1,pro2,pro3,pro4,pro5,pro6,pro7,pro8,pro9,pro10,pro11,pro12,pro13,pro14
7、,pro15,settFLASH_PAGE_SIZE;vu32 e_im,e_105im,e_3im,e_6im,e_25im,e_1375im,pn,un;u32 est_t,st_t,tfdl2,rtfdl2;vu8 chn,set_num,M_num;float Ttirp,t_rgz;const signed short int x_Num = 0, 347, 684, 1000, 1285, 1532, 1732, 1879, 1969, 2000, 1969, 1879, 1732, 1532, 1285, 1000, 684, 347,-0,-347,-684,-1000,-12
8、85,-1532,-1732,-1879,-1969,-2000,-1969,-1879,-1732,-1532,-1285,-1000,-684,-347 ;/vs16 resist_temper4;unsigned short int SampleData(volatile unsigned short int ADCDataTab, unsigned short int nChannel); /const signed short int y_Num = 2000, 1969, 1879, 1732, 1532, 1285, 1000, 684, 347, 0,-347,-684,-10
9、00,-1285,-1532,-1732,-1879,-1969,-2000,-1969,-1879,-1732,-1532,-1285,-1000,-684,-347,-0, 347, 684, 1000, 1285, 1532, 1732, 1879, 1969 ;/float CH_ComputeTab107; float UI_Parent7; /unsigned short int Signal_Data7=0,0,0,0,0,0,0;/unsigned int IA1_Value = 0;/void Voltage_Calculate(void);void Signal_Conve
10、rsion(void);void SIG_Distribute(void);float Differencevalue(float number); / 绝对值double _squarert(double number); / 开方struct Ctrl_Flag CtrlState;struct Meterage_Parameter phaseA,phaseB,phaseC; / 定义测量参数 /* Function Name : ADC_Configuration* Description : This function handles ADC_Configuration* Input
11、: None* Output : None* Return : None*/void ADC_Configuration(void) ADC_InitTypeDef ADC_InitStructure; /* ADC1 Configuration -*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /独立工作模式 ADC_InitStructure.ADC_ScanConvMode = ENABLE; /扫描方式 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; /连续转换 ADC_I
12、nitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /外部触发禁止 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 7; /用于转换的通道数 ADC_Init(ADC1, &ADC_InitStructure); /* ADC1 regular channel8 configuration */ / 规则模式通道配置 ADC_RegularChannelConfig( AD
13、C1 , ADC_Channel_0, 4, ADC_SampleTime_239Cycles5); / Ia ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 5, ADC_SampleTime_239Cycles5); / Ib ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 6, ADC_SampleTime_239Cycles5); / Ic ADC_RegularChannelConfig(ADC1 , ADC_Channel_3, 1, ADC_SampleTime_239Cycles5); /
14、Ua ADC_RegularChannelConfig( ADC1, ADC_Channel_4, 2, ADC_SampleTime_239Cycles5); / Ub ADC_RegularChannelConfig( ADC1, ADC_Channel_5, 3, ADC_SampleTime_239Cycles5); / Uc ADC_RegularChannelConfig( ADC1, ADC_Channel_6, 7, ADC_SampleTime_239Cycles5); / Il /* Configure high and low analog watchdog thresh
15、olds */ /ADC_AnalogWatchdogThresholdsConfig(ADC1, 0x0B00, 0x0300); /* Configure channel8 as the single analog watchdog guarded channel */ /ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_8); /* Enable analog watchdog on one regular channel */ /ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_S
16、ingleRegEnable); /* Enable AWD interupt */ /ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); / AD 中断 /* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 reset calibaration register */ ADC_ResetCalibration(ADC1); / 下面是ADC自动校准,开机后需执行一次,保证精度 /* Check the end of ADC1 reset calibration register */ while(ADC_G
17、etResetCalibrationStatus(ADC1); /* Start ADC1 calibaration */ ADC_StartCalibration(ADC1); /* Check the end of ADC1 calibration */ while(ADC_GetCalibrationStatus(ADC1); /DMA_Cmd(DMA1_Channel1, ENABLE); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConvCmd(ADC1, ENABLE); /* Enable ADC1 DMA 使能A
18、DC1 DMA*/ ADC_DMACmd(ADC1, ENABLE); /* Function Name : SampleData * Description : Sample the ADC converted value of one channel * Input : Address of the ADCDataTab, Number of the Channel * Output : SampleData * Return : SampleData */ unsigned short int SampleData(volatile unsigned short int ADCDataT
19、ab, unsigned short int nChannel) auto float Value=0; for(ss10=0;ss10(DATALEN-5);ss10+) Value += (unsigned short int)(*(ADCDataTab+nChannel+ss10*TDCONLEN); return (unsigned short int)(Value/(DATALEN-5); /* Function Name : Voltage_Conversion * Description : average the ADC converted value of one chann
20、el * Input : Address of the ADCDataTab, Number of the Channel * Output : Average value * Return : Average value * */void Voltage_Conversion(void) volatile signed short int AdcValueTmp=0; ss12 = 0; for(ss12=0;ss12=(DATALEN-1) ss13 = 0; CtrlState.ADCompute_Flag = 1; /* Function Name : xinhaoConversion
21、* Description : None* Input : None* Output : None* Return : None*/void xinhaoConversion(void)/信号转换 auto unsigned char xubu=0,shibu=0; /虚部和实部变量 auto unsigned long int TotalTemp=0; / 总变量 auto signed long int TotalSTemp=0,TotalLTemp=0; / 总分量 if(CtrlState.ADCompute_Flag) CtrlState.ADCompute_Flag = 0; fo
22、r(shibu=0;shibu(TDCONLEN-1);shibu+) TotalSTemp = 0; TotalLTemp = 0; TotalTemp = 0; for(xubu=0;xubu=1) RLP_oweUT = 0; CtrlState.ADCAverage_Flag = 1; /* Function Name : Signal_Conversion* Description : None* Input : None* Output : None* Return : None*/void Signal_Conversion(void) xinhaoConversion(); SIG_Distribute(); /* Function Name : SIG_Distribute* Description : None* Input : float data* Output : unsigned int data* Return : None*/void SIG_Distribute(void) auto unsigned char iii=0,jjj=0; auto double average=0; if(CtrlState.ADCAverage_Flag)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1