使用STM32采集正弦波的幅值

采集信号:采集的是400HZ正弦信号,由于单片机采集范围是0-3.3V,将输入信号进行偏执,偏置1.5V,

采集方法:使用定时器10u出发一次,正弦信号一个周期2.5ms,一个周期采集250次

信号处理:采集信号计算每个周期最大值与最小值差值,采集100个周期,再取平均值,处理后上传结果与输入信号基本符合。

设计中遇见问题

1.采集的最大值与最小值相同,计算结果为0,最终发现当通道采样时间为最小值ADC_SAMPLETIME_3CYCLES时才可以采集到各个采样点数值。

定时器配置

系统周期为72M,定时器中断10us触发一次

回调函数中使能定时器标志位

标志位使能后,打开ADC采集,并取最大值和最小值,同时记录采集次数,共采集270次,完成一次采集需要2.7ms,输入信号周期为2.5ms,因此2.7ms的采集不会出现漏采问题确保2.7ms的采集时间内有一个完整的周期。

 将采集100个周期的差值取均值,然后通过串口上传到上位机

 解析数据后,输入信号与反馈信号基本吻合。

 

 ADC1的时钟频率为32M,2分频后为16M,完成一次采集需要3个时钟周期,完成ADC一次采集所需时间小于1us。

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32采集正弦波的幅值

发表回复