随笔
我一直想制作一块如Arduino Nano 般大小的FPGA板卡,来测试一些小的HDL代码片段,以及DSP算法。因为只是作原理验证和学习探索只用,没必要把处理的频率定的很高,在音频稍高的范围即可(比如50kHz以内),同时也更希望能把精力花在算法本身而不是外围电路的设计以及通信接口的调试上。因此,我时常回去留意一些性能未必出众,但接口简洁的混合器件上。
在校期间,我曾为EDA实验课程改进过一款配合FPGA开发板实用的DSP拓展版,也就是题图。在该板上就选用了Microchip公司的ADC和DAC,接口简单,效果也不错,于是就想到再把这两颗芯片找来看看:
MCP3201:https://www.microchip.com/en-us/product/MCP3201
MCP4901:https://www.microchip.com/en-us/product/MCP4921
手册在上面的链接里,请大家打开来看。
MCP3201
MCP3201是一款12bit,SPI接口的ADC,采样率最高可达100ksps,可以说未必能达到不少单片机内置ADC的水平,可对于一块小FPGA来说,可是有和无的区别,做一些50kHz以内的信号处理实验,这个参数够用,而且SPI接口也是FPGA上最好写的通信接口之一。
对于很多更高分辨率的ADC,转换时间是很可观的,在主机与它们通信时,通常要等待它们发来转换完成的信号,才能进行数据的读取。这样一来,要想保证均匀的连续采样,要么提前算好转换等待时间并加以适当延长后,作为采样周期去操作,要么全由ADC来主导采样周期,都很繁琐。
而MCP3201的分辨率不高,采样速度不快,通信接口的速度限定也比较慢,因此不需要等待转换完成的信号,直接在通信的前两个时钟周期它就转换完成了。每一次采样,只需要如上图读个16bit就直接完成,非常方便,就如同操作最简单的并口ADC一般。
可见,MCP3201的通信接口是很好设计的,当成一个16bit的移位寄存器读就行了。手册中还给出了分8bit两次读的方法,方便一些单片机使用。
MCP4921
12bit DAC MCP4921,建立时间4.5us,也就是差不多能做到200ksps,同样拥有很简单的通信接口。
美中不足的是没有内置基准,不过VREF脚接有Buffer,使用并联型基准时可以省去外置;Buffer还可以被旁路,没错,这其实是个乘法型DAC,在旁路掉VREF的Buffer和输出的Buffer之后可以作为数字电位器使用。可以说是很灵活了。
通信协议,16个bit配置完全部,很简单。
这款DAC另一个比较有趣的点是手册中给出的应用电路部分。比如上图展示了用两颗DAC分别控制信号幅度和偏置,很适合制作信号源时使用。
这张电路很难得地给出了用两颗DAC组合增加输出分辨率的方法,并给出了比例电阻的计算公式。
这里是作为乘法型DAC的应用,控制反馈环路的增益。
完
这几款ADC、DAC的价格不贵,封装也很小巧,一个FPGA挂上好几颗同步运行,或是作为辅助器件给高速ADDA控制偏置和增益等,岂不美哉。