本帖最后由 电子月 于 2019-6-6 17:21 编辑
利用PWM IP核实现节奏灯
为什么要做这个节奏灯呢? 一是因为在大一刚接触单片机的时候,学校电子设计比赛有道题目就是节奏灯。那时候没基础,刚刚自学了C语言,能够跑起流水灯,根本不知道什么是FFT,想着设计电路来实现幅频变换,搞了一阵子也没搞出来。后来这个东西就一直放着,直到现在才算画了一个句号,也是弥补一个小小的遗憾,或许我当初坚持把这个东西做出来,在专业方面可能会有更好地积累,所以,在实现目标的路上,一定不能知难而退,急流勇进才能收获更多! 第二个原因是想证实一下之前用OLED显示频谱是否耗时太久,从而导致Line Out的输出品质很差。 具体实现就不多说了,在设计实现之前已经做了充足的准备,一是搭建了音频处理的硬件平台,二是软件实现FFT算法,三是利用Vivado HLS设计了PWM IP核,有了这些工作,节奏灯就水到渠成了。 效果演示: 手头没有音箱,声音通过耳机输出,音量较小。 经过实际测试发现,如果采用led进行显示,Line Out输出的音频质量还是可以接受的。从而可以判断出如果使用OLED进行显示,那么整个设计的瓶颈就在于OLED显示耗时过长(其实可以对各部分耗时进行时间测量,也可以得到同样的结论)。接下来,尝试开发OLED的驱动程序,减少软件操作OLED的工作量,从而减轻软件负担,实现音频的流畅播放。或者采用VGA显示器显示,显示时间不长,而且显示内容更加多,色彩也更为丰富。此外,对音频进行采样时的时间间隔如何充分利用,或者说采样和显示如何更好地配合,也是需要进一步考虑和测试的。 这几天学习Vivado HLS时发现Vivado是自带FFT IP核的,而且可以通过c programming的方式在HLS中设计算法时进行调用。前期规划的把软件fft算法转换为IP核的思路就没有必要再实现了。倒是可以在HLS中完成FFT运算以及后续的数据处理工作。HLS集成了很多有价值的c函数库,例如FIR滤波、FFT运算、图像处理函数库、流数据处理函数库等等,如果能够合理利用HLS函数库,设计算法一定能够达到事半功倍的效果。 版权声明: 本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。
|