项目需求
完成对板上音频信号的采集和波形显示,可以通过手机播放音乐或App产生音频信号的方式提供声音信号源,通过板上电路的放大、MCU中ADC的采集以后将波形显示在OLED屏幕上,可以通过板上按键的操作在两个方向(横轴 - 时间;纵轴 - 幅度)来扩展、压缩波形的显示,按键的功能可自行定义;
实现信号发生器的功能,能够产生20KHz以内的正弦波、三角波、方波三种常用波形,通过按键的操作能够实现频率可调、幅度可调;
能够通过Ain管脚测量外部模拟信号(0-3.3V,DC-200KHz),并能够对外部的周期性波形测量其周期和峰峰值
能够对采集到的信号进行FFT变换,并在屏幕上显示其基频及低次谐波的分量
实现的思路
因为我是对stm32是一个完全零基础的的学生,所以首先就是对软件和芯片的学习,通过直播课程先对stm32有一个大概的了解,对IDE、Pro等软件有一个初步的学习,然后是对于原理图 的学习,了解做一个简易示波器需要哪些引脚。初步的学习了解后就要开始上手实践,先是要看一些相关的比如ADC、信号发生器的例程,然后仿照例程自己去实践做一些工程。有了一点基础以后就可以开始做这个项目了。
然后项目实现大概的思路就是:ADC对模拟信号采样、量化->映射到坐标轴上形成波形->显示相关的参数->通过RC低通滤波实现方波、正弦波、三角波的生成->调整采样率占空比等改变波形->FFT变换获得频谱。
整体思路是先做一个一个模块,如ADC、信号发生、数据显示等,然后整合在一起形成想要的项目,最后对项目进行优化调整。
完成的功能及达到的性能
完成的功能为对音频信号进行采集并形成波形,可以在时间上扩展压缩波形
实现信号发生器的功能,能够产生20KHz以内的正弦波、三角波、方波三种常用波形,通过按键的操作能够实现频率可调
能够通过Ain管脚测量外部模拟信号
对采集到的信号进行FFT变换,显示频谱
遇到的主要难题
本次项目遇到的最大的难题就是解决y轴自动缩放功能,我本来使用的是固定的y轴(0-5V),有时候图形看起来很难看,受大佬指点然后就准备做一个自动缩放的y轴,结果不知道为什么,y轴相关的数据全都显示不出来了,这也就是我视频中没有y轴数据的原因,开始是忘记了改设置导致浮点数不能直接printf,更改好设置后,一直报错好像意思是Flash内存不足,然后我尝试使用网上的方法一是通过 sprintf 将浮点数转换成字符串输出,另一种是分解整数和小数部分,分别输出,结果都没能实现,在我想改回固定y轴之前,板子死机无法复位,就导致了现在的版本,板子死机无法复位的问题最终是问了硬禾的老师解决的。
还有一个问题就是因为之前没接触过stm32,对于oled屏幕以及按键使用不知所措,花费了较多的时间学习例程和看别人的做法,然后实在是对FFT理解不够,在FFT花了很多时间也没做出来,后来参考了别人FFT的部分代码才能用。
未来的计划建议
因为时间不足和能力有限,没能在规定时间内完成所有的性能指标要求,我计划在之后有时间的时候尽量将y轴自动缩放完善,然后自己编写出符合要求的FFT。
然后通过这次寒假在家的练习,我从对单片机、嵌入式系统一无所知到现在的初步了解让我对于这方面的内容产生了极大的兴趣,以后我会在课余时间多去接触相关的内容,争取做出更多有意思有用的东西来。
我的建议是我感觉这个项目老师的课程不够详细,两个多小时的课程很多东西都被压缩了,当然也可能是因为我基础太差或者是老师要考虑各方面的因素,我希望以后的课程能够更系统更注重带我们实操一些。
总结
这个项目极大的丰富了我的寒假生活,是我上大学以来为数不多觉得收获蛮大的假期,虽然我没能完成所有的项目需求,但是在这过程中学习到的知识以及对我实践能力的培养让我受益匪浅,硬禾的老师也是很尽心尽力,我板子死机的问题直接拉了个群给我解决,总体而言,通过这次项目我学到了很多东西,我希望以后也能多参加类似的活动来锻炼自己,充实自己的生活。
代码上传
链接:https://pan.baidu.com/s/16VAyH85i_jTID9g2VZNC1A
提取码:jbrj