[任性DIY]简易音频信 源

玩模拟电路的都需要个音频信 源吧?(只晚射频电路的除外,避免抬杠

) 就算没有专门的信 源,电脑声卡、MP3甚至手机都可以拿来顶替一下。我也经常是用连在电脑上的DAC来获得音频信 的,我也DIY了模拟的低失真信 源,不过那只有单个频点。好,先看我今天做出来的信 源效果图:

呃,这是什么鬼玩意儿? 信 源?

别着急,先看这个:

妥妥的正弦波,这次对了吧。没错,这就是我的信 源出来的。

下面这个呢,看起来好象波形失真了……

其实不是,这只是个巧合,示波器现在是当X-Y显示器用的,再来几个就明白了:

如果X,Y输入同频正弦,相位差90度,示波器X,Y增益相当的话,画出来就是一个圆了。

好,效果图看完了,信 源长啥样?

这东西其实并不大,因为用了单片机,而且可以3.2V电池直供电使用。输出两路音频正弦信 ,频率1Hz~23999Hz, 1Hz步进可调。频率很准的,因为是晶振决定。

MCU就是ST的Cortex-m0: STM32F051

不过我这次把MCU给“超频”用了,晶振是49.152MHz, 超过了规格最大48MHz一点。原因是为了采样频率在48000Hz上。那么我用什么来产生模拟信 呢?单片机自带了DAC,这个可以用,但是精度差了点。我另外用了一片音频的Sigma-Delta DAC: Cirrus Logic的CS4344:

就是直插电容旁边的小芯片了,音频专用哦,用在信 源上正合适。这个DAC也很便宜,最高支持192kHz的采样频率,不过我这里只用到48kHz. 通过I2S接口把PCM编码送过去,就出来模拟信 了,因为STM32F051已经有I2S接口了,所以用起来很方便。

线路挺简单的,我多引了些I/O到插针位上,方便以后做其它应用。CS4344的I2S信 MCLK, BCK, LRCK, DATA连到MCU上,作为slave设备。CS4344的模拟输出就按照手册上的简单接法输出了,没有加滤波电路,实际上高频噪声影响还是有的。PCB版图:我惯用的Eagle软件出图。

原来想用一块1602 LCD做显示,几个按钮做控制。后来觉得1602模块本身体积更大,弄出来又不小巧了,一时也没选定盒子。于是我就决定用串口控制吧,设置好了以后可以拔下来,整个更小巧。所以软件上就是更新波形数据,和接收串口命令的干活…… 一个在DMA的中断里面,一个在串口接收中断里面。

    正弦函数我并没有在程序中计算,而是存了一个表,用查表法。一方面是ROM刚好够用,另一方面是对Cortex-M0的浮点库不熟悉就没有此时尝试。采样频率是48000Hz, 如果要输出1Hz的信 ,那么一个周期需要48000个样本,根据对称性,只需要存储1/4的正弦就够了。一个样本用24-bit足够,16-bit也差不多(截尾会有一些谐波),我任性地直接用了32-bit整型。计算1Hz的整数倍就很简单,相当于查表时每次跳N个就行了。

    最后再强调一下使用CS4344等Sigma-Delta DAC相对于MCU片上DAC的优点:一个是量化精度比较高,谐波失真也低不少。二是独立于MCU,减少了干扰。三是降低了数据处理量,因为DAC带有8倍的上采样,硬件给你完成了插值。(不然,在48k采样率下,直接用零阶保持出来一个20k的信 是什么样子?)

    请点击阅读原文查看程序及代码

    欢迎参加>>>任性DIY,在这等你来!

    欢迎微博@EEWORLD

    与更多行业内 友进行交流请登陆EEWORLD论坛。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2016年5月23日
    下一篇 2016年5月23日

    相关推荐