概述
前言:之前,笔者设计并制作了一个简单的FFT音乐频谱,并且分享了制作过程。本文是在原来的基础上做了一些修改。
效果演示:https://www.bilibili.com/video/av47915539/
成品:
制作过程
一、材料准备
配方略微修改,当然味道更佳!
1.STM32F103C8T6核心板一块
2.OLED25664(8080并口驱动)
3.音频采集电路(后文提供原理图)
二、硬件连接
因为市面上的并口驱动的OLED屏幕很少,所以有两个选择,一个是想笔者一样字节飞线改一个,或者按照笔者提供的原理图自己画一个PCB。
三、资料下载
资料显示方式做了一些修改,帧率要比效果演示中的高一些,更加流畅。
https://download.csdn.net/download/mc_li/11079869
/**********************************************************分割线**********************************************************/
详细制作
资料链接:
一、信号采集
这是之前的原理图,贴出来主要想说说这个原理图的问题。
输出端的电容C2,把运放输出的直流偏置个隔断了,导致信号的负半周期,又回到了0点以下,当然这里因为使用的是单电源,所以负半周期的信号,直接就没了,单片机采集不到负电压信号的,之前简单制作忽略了,这里特地说明一下,使用时应去掉C2,直接采集,如果考虑到放置输出接地损坏运放,也可以把C2换成电阻,做输出限流保护,这里因为设计了新的方案就不多说原来的图了。
下面是重新设计的原理图
信号来源:有两个,一个为麦克风(U7),另一个为3.5mm音频座,通过SW_2来切换两个信号来源送入运放端。
直流偏置:由R21和R22分压得到1.65V经过C41滤波后,通过R25耦合到运放正向输入端,提供较为稳定的直流偏置电压。
增益控制:1+((R24+R17)/R16)得到输入信号V_in的增益,直流偏置电压不会增益。其中C30起了关键作用,第一它阻断了放大电路的直流电流,使得正输入端干净的 2.5V 顺利传递到运放的输出端;第二它耦合通过了交变信号,使其完成了放大。
信号滤波:后级是R19、R20、C31、C34构成的二阶压控式低通滤波器,截止频率在5KHz左右。得到的信号AD_IN送入单片机采集。
二、单片机硬件配置
使用STM32CUBEMX快速配置,小手一抖,代码到手。
大致流程,使用定时器去触发ADC转换,这样使得采集的间隔一致,然后固定采集256个点,使用DMA传输,采集完后触发中断,再统一处理数据。
由于篇幅限制这里的定时器和ADC的配置和上一期的分享一模一样,这里就不再赘述,不了解的小伙伴可以去看看上一期的分享哦。这次我们加入了万年历功能,使用到了内部的RTC,所以需要配置一下RTC;
第一步:使能RTC
第二步:配置RTC的时钟来源(外部低速时钟32.768KHz)
OK RTC就配置完成了!
三、FFT处理
FFT还是使用的官方的DSP库,不清楚的请回头看上一期分享。
这里结合大家的建议,我把各个模块做了整合,把每个功能做了区分。还有在中断处理方面的问题,我们在使用单片机中断的时候,一定要注意,尽量不要在中断里面做太多事情。一般情况下建议,在中断里面对标志位处理,在后台系统中根据标志位再去处理繁琐的任务。就是中断不宜久留,呆的时间能短则短,上一次的分享做了个反面教材,不建议大家这么玩。
四、量化显示
显示部分硬件有所改动,从原来的OLED12864更改为25664,驱动方式从SPI变为了8080。软件方面,我写了三个显示效果,后面看大家自己的创意自己添加了。
初衷是想换个大点的屏幕,于是我买了块OLED25664,是SPI驱动方式,没多想强行移植上去,发现刷新率感人。这刷新率低有两个原因,第一个,我是等到DMA传输完成,做了FFT变化等一系列事情后再显示的,这个限制了刷新率。另一个原因就是SPI,这种串行的驱动方式,数据量一大了来确实力不从心,干不过并行的8080方式。我分别对两种方式的速度做了测试,一整屏的填充时间测量。
SPI方式填充一整屏测试结果:
SPI方式填充一整屏的点,所用时间为60349us,换算为帧率大概为1/0.06s = 16fps。这个帧率怕是要眨眼补帧了!
8080方式填充一整屏测试结果:
8080方式填充一整屏的点,所用时间为19704us,换算为帧率1/0.019 = 52fps。这个帧率可以达到丝滑流畅了吧。
附上一张背面图,一时飞线一时爽,一直飞线....,因为买的屏幕是SPI方式的,没办法只有飞线改成8080口的了。
好在飞完了能用!
好了,到此基于STM32F103的FFT音乐频谱就分享完成!能力有限,问题的地方,还请指点!欢迎转载,请注明出处,谢谢大家。
OLED25664版本的github仓库:https://github.com/mcli244/oled_music_fft.git
// 2019/8/7
感谢支持,这里是两个版本的源码和资料,提供给大家学习使用!
链接:https://pan.baidu.com/s/1fP08HS4ZzPXqJA-OjOVSzA
提取码:t0y4
OLED12864版本:https://blog.csdn.net/mc_li/article/details/81364766#commentsedit
最后
以上就是热情荔枝为你收集整理的STM32F103+FFT+OLED25664的音乐频谱制作分享(继续干货)制作过程详细制作的全部内容,希望文章能够帮你解决STM32F103+FFT+OLED25664的音乐频谱制作分享(继续干货)制作过程详细制作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复