【HC32F448测评】+ADC采样+FFT分析
[复制链接]
第九篇:ADC采样+FFT分析
接上一篇的配置,上一篇已经配置好DSP库了,接下来测试利用ADC采集模拟数据进行傅里叶分析。
首先参考例程对ADC进行配置,ADC的参数相对简单,需要注意的是它的时钟,它有两个时钟,包含转换时钟PCLK2,数字接口时钟PCLK4。转换时钟PCLK2有三个时钟源,包括系统时钟、PLLHQ、PLLHR,如果采用系统时钟,最高主频为50MHz,如果采用PLLHQ、PLLHR可以通过PLL倍频到60MHz,PCLK4与PCLK2一样,也有三个时钟源,这里为了方便,均采用系统时钟,PCLK2=50MHz,PCLK4=100MHz
ADC有好几种扫描模式,单次扫描、连续扫描、缓冲扫描等,这里我们选择连续扫描模式:stcAdcInit.u16ScanMode=ADC_MD_SEQA_CONT;
同时触发源选择软件触发:
ADC_Start(CM_ADC1);
然后循环运行以下程序:查询状态位,然后清零,读取数据。
while(ADC_GetStatus(ADC_UNIT, ADC_EOC_FLAG) != SET);
ADC_ClearStatus(ADC_UNIT, ADC_EOC_FLAG);
ADC_DATA[ADCnum]=ADC_UNIT->DR10;
因为目前做不到实时分析,所以只能当数据满1024时,再进行FFT分析。输入一个1KHz方波,下图是ADC测得的波形
然后对该数据进行FFT分析,取前64个数据进行作图,可以发现有多个频率的信号,除了1KHz的基波,还有3KHz的3次谐波,5KHz的5次谐波等,这符合方波的特性:由多个频率的正弦波叠加而成。
下图是虚拟示波器测出来的波形及FFT分析的结果,基本一致。
上述是我目前能做到的效果,由于还没有解决下面提到的问题,还没办法实现更加实用的FFT效果:
1、没有通过DMA传输ADC数据的问题,因为没有解决相关问题,用DMA还不太熟,无法一次性转移如1024个ADC数据。
2、开启ADC的转换完成中断(ADC_INT_EOCA)后发现会卡死,会导致开发板上面的按键无法使用,主要原因可能是中断冲突,HC32的中断是很强大,但理解起来对我而言还是很吃力的,后续有机会要去研究一下。
3、发现同时开启定时器输出PWM波和FFT会死机,不知道为什么,还有一点,感觉FFT不太稳定,跟其他多个外设一起开会有问题,有机会也要研究一下。
4、因为波形都是通过串口输出数据,然后Excel画图,要更加直观的话需要显示在LCD上或者实时传输到上位机,上位机实时画线,这个要求更高,因为就类似于示波器了,要花更多的时间。
|