关于STM32AD采集两种不同频率的交流信号(50hz、22hz),平台为stm32L151,用定时器定时触发AD,一个周期采集64个点后,进行FFT变换,但是由于频率不同,所以定时器设置也不同,因为只有一个ADC1,所以会产生覆盖问题,不知道如何为解决,下面是50hz处理程序
/* ADC1 configuration */
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 2;
ADC_Init(ADC1, &ADC_InitStructure);
定时器配置如下、
void TIM2_Iint(uint16_t arr2,uint16_t psc2)
{
// uint16_t arr2=9999;//Tout=((arr+1)*(psc+1))/Tclk,Tclk=32MHZ
//uint16_t psc2=0;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = arr2;//¼ÆÊýÆ÷×°ÔØÖµ
TIM_TimeBaseStructure.TIM_Prescaler = psc2;//·ÖƵϵÊý
TIM_TimeBaseStructure.TIM_ClockDivision = 0;//
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//ÏòÉϼÆÊý
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*
/* TIM IT enable */
TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);
/* TIM2 enable counter */
TIM_Cmd(TIM2, ENABLE);
/* Enable the TIM3 Interrupt */
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//ÔÚÖ÷º¯ÊýÖж¨ÒåÓÅÏȼ¶·Ö×é
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
现在就是不知道怎么处理22hz信号,然后进行fft变换,两路50hz模拟信号。一路22hz交流信号
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>