• 大小: 0.01M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-04-21
  • 语言: C/C++
  • 标签: FFT  检测  

资源简介

PA4输入进行电流检测 

资源截图

代码片段和文件信息

#include “sys.h“
#include “delay.h“  
#include “usart.h“  
#include “led.h“
#include “key.h“
#include “lcd.h“
#include “timer.h“ 
#include “math.h“ 
#include “arm_math.h“  
#include “adc.h“
#include “string.h“
#include “adc_dma.h“
#include “stdio.h“
#include “exti.h“
//ALIENTEK 探索者STM32F407开发板 实验47_2
//DSP FFT测试实验   -库函数版本
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com  
//广州市星翼电子科技有限公司  
//作者:正点原子 @ALIENTEK


//ADC采样定义
extern u16 adc_buf[4096];
extern u16 flag;
float adc_bufmoni[4096];   //用于保存转换计算后的电压值
float adc_bufmoni1[4096];   //用于保存转换计算后的电压值
struct paixu shuju[4096];
//FFT定义
#define FFT_LENGTH 4096 //FFT长度,默认是1024点FFT
float fft_inputbuf[FFT_LENGTH*2]; //FFT输入数组
float fft_outputbuf[FFT_LENGTH]; //FFT输出数组


float max;
float min;
float sub;
u8 timeout;//定时器溢出次数

u8 DISP[20];
int main(void)

  arm_cfft_radix4_instance_f32 scfft;
  u8 t=0;

u8 buf[50]; 
u16 i; 
 //  int j;

float time;
  float H_1;
float H_i;
 // float maxmin[5];
 // float aver;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168);  //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED 
  LCD_Init();         //初始化LCD接口
  Rheostat_Init();//ADCDMA
  ADCInit_Timer(); //ADCTIMER
  TIM2_Int_Init(6553584-1); //1Mhz计数频率最大计时65ms左右超出
  EXTIX_Init();

POINT_COLOR=RED; 
LCD_ShowString(150151503024“FFT Analysis“);
LCD_ShowString(0402001616“_______________________________________________________________________________________________________________“);

POINT_COLOR=BLACK;//设置字体为蓝色
LCD_ShowString(10802001624“Hrmc“);
LCD_ShowString(100802001624“Frequecy“);
LCD_ShowString(310802001624“Amplitude“); //先在固定位置显示小数点
//LCD_ShowString(350151007024“sinsinsi“);
while(1)

  //将ADC输入数组
for(i=0;i<4096;i++)
{
adc_bufmoni[i] = (float)adc_buf[i]/4096*(float)3.3;
adc_bufmoni1[i] = (float)adc_buf[i]/4096*(float)3.3;
}

delay_ms(150);

               //FFT运算主程序
   
POINT_COLOR=RED; 
LCD_ShowString(107702001624“FFT runtime:“);//显示FFT执行时间
POINT_COLOR=BLUE; //设置字体为蓝色   
  arm_cfft_radix4_init_f32(&scfftFFT_LENGTH01);//初始化scfft结构体,设定FFT相关参
for(i=0;i {

 fft_inputbuf[2*i]=adc_bufmoni[i];
 fft_inputbuf[2*i+1]=0;//虚部全部为0
}

TIM_SetCounter(TIM20);//重设TIM3定时器的计数器值
timeout=0;
arm_cfft_radix4_f32(&scfftfft_inputbuf); //FFT计算(基4)
time=TIM_GetCounter(TIM2)+(u32)timeout*65536;  //计算所用时间
sprintf((char*)buf“%0.3fms\r\n“time/1000);
LCD_ShowString(100+12*8770808024buf); //显示运行时间
arm_cmplx_mag_f32(fft_inputbuffft_outputbufFFT_LENGTH); //把运算结果复数求模得幅值 
//FFT运算主程序结束

//存入结构体

for(i=0;i<2048;i++)
{
shuju[i].num=i;
shuju[i].am=fft_outputbuf[i];

评论

共有 条评论