在环境监测领域,无论是对水质还是气体的质量进行监测,都需要通过一些特性的变化来判断。
任何测量都离不开信号的产生以及信号的采集,集成化的芯片虽然功能强大,但也有其局限性:
- 首先,它只是针对某种应用领域而设计,比较专用,通用性相对比较弱
- 其次,调试起来相对比较困难,有很多内部的寄存器、参数,需要花费大量的时间阅读数据手册、了解其内部的工作原理才行,一旦PCB设计的部分漏掉某些环节,可能调试的工作量会加倍,无法在指定的时间内完成项目设定的任务
对于一个硬件比较熟悉,而软件基本不会的硬件工程师来讲,我更倾向于在FPGA里面解决问题,至少能够看到测试以及解析出来的数据,搭配软件会涉及到其它人的工作量,这部分可以留在以后尝试。。。
所以这次活动,我打算自己设计一个通用性更强的监测平台:
- 使用美信公司的模拟前端芯片MAX19713,它具有双路的10bits/45Msps的高速DAC,双路10bits、45Msps的高速ADC,以及多路低速的DAC和ADC,可以说无论从功能还是性能来讲,它都是一款非常理想的模拟前端芯片,之所以采用双路的信号发生通道和双路的信号接收通道是为了获取更多的信息,比如信号经过被测信号以后相位发生的变化;
- 在信号的接收端,我计划采用两颗颗ADI的差分运算放大器LTC6362,每一个接收通道用一个LTC6362来将单端信号编程MAX19713接收的差分信号;
- 在信号的发射端,使用集成了双运放的高速运算放大器ADA4807-2,每个通道一个运放,能够提供驱动能力
- 数字部分采用了Lattice的一款性价比极高的FPGA - ICE40UP5K,这颗FPGA的运行频率最高位48MHz,但内部有丰富的逻辑资源、存储资源以及乘法器,可以用于对采集的信号做数字信号处理,后期使用的灵活性比较大,当然低成本也是其中的一个优势。
系统的构成见下图:
功能构成框图
计划做成的板子的物理尺寸,模拟信号的输入和输出使用RF连接器,以方便测试以及和其它模拟链路进行连接
正面图
背面图
这个终端采用了通用性非常强的SPI接口,可以连接任意处理器、控制器。比如STM32、LPC单片机、树莓派Pico等,在这里我打算跟树莓派的CM4模块连接,充分利用树莓派CM4的处理能力 - 本质上它就是一款小电脑,linux生态系统有非常成熟的开源的数据处理软件,也可以自己通过Python编程来做各种应用:
计划未来采用的一个基于树莓派CM4的处理平台,中间的部分位我要设计的板卡,右侧为CM4模块的插座,背面是一块4.3寸的触摸显示屏,以及2个按键和一个光电旋转编码器。
此模块也可以用于无线通信中,由于MAX19713内部有双通道发射/接收,可以用于正交调制和解调,搭配RF变频电路即可构成软件定义无线电的数据传输系统。
参见如下技术文章:
实际拿到的板子及测试:
开始测试:
1 测试信号产生/DAC通道
编写一个DDS信号发生器,10bit分辨率/45Msps,在板上我放置了一个16MHz的时钟,在FPGA内部经过PLL倍频后的到48MHz的主时钟,这也是Lattice的这颗FPGA的最高频率,略超过MAX19713的工作频率,不过实测,MAX19713工作在48MHz是没有问题的,下面的图片就是该板产生的2MHz的正弦波信号,可以看出波形是非常漂亮的。
通过FPGA编程DDS生成的正弦波,通过DAC通道在示波器上看到的波形
2 测试信号接收/ADC通道
我采用了最简单的方式,通过ADC采集模拟信号,在FPGA内部缓冲一下后再经过DAC变换回来,对比被采集的信号的频率和幅度。
被采集的信号有ADI的ADALM2000口袋仪器产生,由于板上用的是RF连接器,为测试方便,特别在RF连接器上焊接了间距2.54的2个插针,一个接收通道和一个发射通道分别焊接了插针,跟ADALM2000进行连接。
板上的ADC采集2MHz/1Vpp的正弦波信号,FPGA再将采集到的波形数据通过DAC输出,在示波器上显示的2MHz的正弦信号
从示波器上的波形上看,不如DDS信号发生器直接生成的波形漂亮,这是因为经过了ADC的数字采样以及DAC的数字恢复,在DAC后面没有加低通滤波器进行波形的平滑导致。
双通道ADC和双通道DAC都进行了测试,通过这种环路测试,从硬件的角度没有任何问题了。
未来就可以充分发挥FPGA内部的逻辑和DSP功能对采集到的信号做进一步的处理,并将处理后的信号通过SPI总线传输到CM4模块中。