视频地址是:http://v.youku.com/v_show/id_XODM4NTQ5Njcy.html
s
如题,小弟在个大哥的帮助下,做了个3个道的频谱喷泉,想用三个道来显示出高中低音频的;
先给大家介绍下电路.
下面是ADC采集音频信号的电路:
下面是使用的运放(MCP6002):
下面是通过PWM来控制水柱高低的电路:
= = 额,这是实体电路板,第二次焊板,别介意;
代码的实现和代码我整理下,等会发;
做这个频谱喷泉用到的代码和功能其实不多,主要就是定时器的计时和比较输出模式,ADC。
先说ADC。
根据查找的资料,信号的采集需要44.1KHz的频率,所以,我用以下的方法配置ADC及处理采集的数据:
1.设置ADC分频因子为6,即可得到72M/6=12M的频率;(ADC不能超过14M)
2.配置PA0为模拟输入模式;
3.配置ADC独立,单通道,单次转换,软件触发,右对齐;
4.比较重要的一步,利用定时6来控制ADC的采集工作和采集频率。(定时器的预分配为1,自动重载为1633)我设置定时器6的频率为44090HZ(约为44.1KHz),每次中断采集一次,当满64个数据时,失能定时器6,代码如下:
接着是定时器的PWM:
1.为了方便,我直接用3个不同的通用定时器来输出PWM;
2.如同定时6,预分频为1,自动装载为899.
3.配置跟原子哥给的例程一样;
4.占空比的数值跟后面要提到的数据处理有关,稍后再说;
完成上面的,就完成采集和输出的步骤,接着是最重要的一步,数据处理。这个我是用官方DSP库对ADC采集的信号数据做FFT,再将处理好的数值作为定时器输出模式的占空比;代码如下:
1.powerMag()应该是求频域的幅度,NPT为64;
2.在for的循环体中,是为了取的3组连续的3个幅度值的和;
3.i= 50中,i是用来扩大获得的幅度值,再用来改定时器的占空比;
整体的代码就是上面所述的了;
代码包已发;
稍后说下这个缺陷版中还存在的问题和总结。今年才开始接触单片机的,希望各位前辈看完后能指出问题,给些指导;
|