树莓派高速ADC采集模块
  • 背景
    • 项目来源 - 52Pi
      • 市面上还没有基于树莓派的高速ADC采集卡/示波器
      • 基于树莓派做一款开源示波器会是一个比较好的平台,DIY示波器是很多硬件工程师都感兴趣的技术点
      • 树莓派HAT的大小能够支持双通道高速示波器
      • 已经有开源的、运行在浏览器里的示波器软件运行在浏览器里
      • 也可以用Python编写示波器的界面
    • 大致需求分析:
      • 功能 - 通用双通道、高速采集的数字示波器
        • 采用2通道、50-100Msps的ADC
          • 模拟带宽限定在20MHz,对于一个原型的HAT够用了
          • 如果实际的场景要求采集更高模拟带宽的信号,可以使用100Msps的ADC,通过FPGA内部的逻辑变换不同的采样时钟相位采集,来达到更高的等效采样,比如FPGA内部的时钟频率能够工作在400MHz,则可以产生2.5ns间隔的相位时钟,达到400Msps的采样,在这种情况下模拟带宽可以到100MHz
          • 但越高的采样率和分辨率,对采样时钟的抖动要求越高,需要非常低抖动的时钟源,并且在布线的时候要高度注意电源的去偶等,否则用了高性能的ADC器件,实现不了高性能。
        • 分辨率?8、10、12、14bit?
          • 分辨率高 - 前面的模拟链路简单,但成本高
          • 分辨率低 - 前面的模拟链路需要处理比较宽的动态范围,ADC的成本低
        • 接口方式?
          • CMOS vs LVDS ?基于器件的价格、封装进行考虑
        • 功耗:
          • 越低越好,与供电电压有关
        • 电压?
          • 3.3V vs 3.3V&1.2V?最好只用3.3V的供电,简化电源的设计,尤其是模拟电压部分
        • 可以选用以下厂商的器件
        • 折中一下,基于性能、价格等因素考虑,可以选用双通道、12bits、125Msps的ADC - ADS4225 @TI http://www.ti.com/product/ADS4225,使用这个器件有很大的灵活性,用同样的封装可以支持4种不同的选择,分不同档次的产品,根据实际的应用场景使用相应的ADC器件。
          • 采样率可以是低速的65Msps,便宜
          • 分辨率可以是14bits的ADS4245
      • 接口方式 - 40Pin的GPIO接口
        • 高速数据传输,只能用其中的SPI接口信号 - 50Mbps?
        • 必须采用FPGA进行缓存,将2* 12bits * 100Msps的数据流存入FPGA内部的SRAM,然后树莓派通过SPI总线读取出来。那么对FPGA的要求是什么?
          • 存储的需求 - 如果内部的BLOCK RAM够用,可以通过将其配置成FIFO、双口SRAM、环形SRAM等用于采集数据的缓存,如果内部的SRAM不够,可以外接一个SRAM芯片
            • RAM的大小取决于需要存储下来的一次采集的采样点的个数,比如16KB的RAM可以存储16K*8/12位/2 ~ 5K个采样点
            • 其实12位的精度是为了实现更宽的动态范围,8bit的显示已经足够了,也就是说FPGA通过SPI总线送到树莓派的用8bit的数据就能满足系统的要求了,可以在FPGA内部根据模拟信号的输入幅度进行动态调整,对输入的12位处理成8位,送出来,在FPGA内的数字动态范围达到2^4 ~ 24dB
            • 12bit ~ 8bit的选取可以在进入到RAM之前,因此16KB的RAM可以存储8K个采样点
          • 接口的要求:
            • 考虑到选取的ADC的接口有并行接口(封装大)、串行LVDS接口(封装小),LVDS还有抗干扰能力强的有点,因此最好FPGA芯片能够支持LVDS接口
          • 速度:100Msps的时钟,现在的FPGA都能搞定
          • 封装 - 4层板要比2层板价贵费用多出很多,且BGA封装的器件加工成本高,调试困难,因此QFP的器件较好
          • 供电 - 如果单一路的3.3V能够搞定,就免去1路低压供电了,但如果ADC需要的低压数字供电与FPGA的内核电压一致,也可以选择带低压供电的FPGA器件
          • FPGA配置的PROM
            • HAT板上上电配置 - 简单,有可能增加EPROM的成本
            • 每次上电由树莓派通过GPIO来配置FPGA - 慢,且开发麻烦
      • 动态范围
        • 最小5mVpp,最大50Vpp - 动态范围为80dB
        • 12bits的ADC能够提供的动态范围为70dB(等效)
          • 模拟链路需要10dB以上的动态范围调节
          • 在探头的输入端需要加一个20dB的衰减,将50Vpp降为5Vpp
          • 后续的模拟电路需要提供20dB ~ 30dB的增益
          • 在模拟链路中还会有LPF,导致信号的衰减,这些因素都要考虑在内
        • 如果采用10bits的ADC,模拟链路需要增加12dB,也就是总体上模拟链路至少要22dB的变化范围
        • 如果采用8bits的ADC,模拟链路需要增加24dB,也就是总体上模拟链路至少需要34dB的变化范围
      • 供电
        • 数字供电 - 3.3V/1.8V或1.2V
        • 模拟链路供电 - +5V/-5V或+3.3V/-3.3V,模拟链路的供电电源需要通过开关变换以后再经过LDO得到
        • 时钟部分 - FPGA内部的锁相环?ADC部分需要单独给时钟供电?看所选器件的数据手册
      • 模拟接口
        • SMA?
        • SMB?
        • BNC?
      • 板卡物理要求
        • 大小
          • HAT标准尺寸
        • 层数
          • 2层 - 成本低,但性能未必能够保证
          • 4层 - 加工成本较高,性能较好
        • 接插件 -
        • 定位孔 -
  • 方案设计
    • 选用PCB工具软件
      • Altium Designer:
      • Eagle:
      • KiCad:
    • 选用器件:
      • FPGA
      • ADC
      • 模拟运放
      • 模拟开关
      • 电源
      • 模拟信号接口
    • 方案框图
    • 指标分配
      • 模拟动态范围
      • 数字动态范围
    • 数据接口协议定义
  • 详细的设计
    • 元器件库
    • 原理图设计
    • PCB设计
    • Gerber文件
    • BOM清单
  • 参考资料