☰
64路FPGA存储测试数据采集:多路复用、AD9221与NAND时序
2026/11/3 14:28:26 网站建设 项目流程

简介:这份文档面向电子信息、测控技术与仪器及自动化等专业的本科生与初级硬件工程师,对应一份完整的本科毕业设计说明书,围绕以FPGA为核心的数据采集系统展开整体方案设计与论证。资源包仅含1个doc文档(毕业设计说明书),压缩包约526KB,篇幅约48页,结构上覆盖绪论、课题背景与研究现状、系统整体设计方案、硬件电路设计等章节,章节衔接清晰、论述完整。方案具体给出六十四路0~5V模拟信号、八路无源开关量、一路TTL或12V数字脉冲信号的采集需求,并分别讨论电压跟随与多路模拟开关、A/D转换、FPGA中心控制、存储器及并口接口电路的设计取舍,读者可据此梳理数据采集系统的设计流程、器件选型依据与模块划分思路。已有638人学习下载,适合作为课程设计、毕业设计选题与硬件方案撰写的参考范本。

1. 存储测试的倒置逻辑:数据采集系统为什么先存后算

64 路 0~5V 模拟量、8 路无源开关量、1 路 TTL 或 0/12V 脉冲同时压过来时,基于 FPGA 的数据采集系统最先撞上的问题不是“怎么采”,而是“存不下、也对不齐”。多数人对数据采集的印象是采样、显示、实时处理一条龙,可在存储测试场景里顺序是倒过来的:量化后的数据先灌进非易失存储器,任务结束、硬件回收,再回读分析。这个倒置决定了整台设备的骨架——模拟开关、A/D、NAND、FPGA 全都要围着“数据先落地”重新排布。搞懂它,比记住任何一个芯片型号都有用。

2. 64 路模拟通道:一个 A/D 怎么被 64 路信号分时复用

2.1 为什么是“多路开关 + 单 A/D”,而不是每路一套量化器

原文给出的理由是经济性,但成本只是表层。真正值钱的是通道间的一致性。如果 64 路各配一套“跟随器 + 采样保持 + A/D”,就是 64 片 12 位转换器,每一片的基准源、失调、增益都各走各的,事后做 64 路横向比对时,得逐通道标定,标定本身引入的不确定度可能比被测信号还大。

换成“多路开关 + 单 A/D”,所有通道共用同一个基准、同一个量化器、同一个时钟,通道间的系统性误差被压缩成“开关导通电阻 + 漏电流”这一项,标定工作从 64 次降到 1 次。这是省成本之外更有价值的部分:误差同源,就能同向抵消。

代价同样清楚:时间是串行的。1.5MSPS 的吞吐被 64 路瓜分,单通道理论上限 23.4kSPS;再扣掉开关切换时间和建立时间,实际能拿到 8kSPS 上下。这个数字不是拍脑袋来的,2.4 节会把账算清楚——而这笔账决定了后面 NAND 的写入策略。

还有一层不太被提到的代价:通道间串扰。64 路信号挤在几片模拟开关里,断开的通道不是理想开路,它的寄生电容会把邻近通道的快速边沿耦合过来。通道数越多,寄生电容和漏电流越大,这也是原文在选择模拟开关时把“通道数量”列在第一条的原因。

2.2 电压跟随器的电气账:200Ω 导通电阻到底吃掉了多少精度

先算一笔最朴素的账。设传感器输出内阻 Rs = 10kΩ,模拟开关导通电阻 Ron = 200Ω,后级是高阻缓冲器。没有跟随器时,信号从源经过 Ron 送到后级,分压误差近似为:

误差 = Ron / (Rs + Ron) = 200 / 10200 ≈ 1.96%

12 位、5V 满量程下,1 LSB = 5 / 4096 = 1.22mV,相对值 0.0244%。1.96% 相当于80 个 LSB。这个误差是纯电阻性的,还随通道源内阻变化,比噪声难缠得多——噪声可以平均,这个不行。

加了跟随器之后,闭环输出阻抗降到欧姆甚至毫欧量级,误差项里的 Rs 基本消失,只剩 Ron 与后级输入阻抗的分压。原文写“用来稳定输入信号,增加 AD9221 的输入阻抗”,这个因果其实说反了:跟随器提高的不是 A/D 的输入阻抗,而是把信号源的内阻“变低”,让 A/D 的采样电容能在一个采样窗口内充到位。方向搞反了,调试时就容易去查 A/D 的输入结构,而不是去查运放的驱动能力,白白浪费几天。

接下来是三个真正容易翻车的硬约束。

失调电压。LM324 的输入失调典型 2mV、最大 7mV。折算到 1.22mV/LSB,就是 1.6~5.7 个 LSB 的固定直流偏移。这意味着整套系统的直流精度被这颗运放锁死在 10 位上下,A/D 标称的 11.3 位有效位根本发挥不出来。对需要测直流量(比如压力、静应变)的通道,这个偏移必须逐通道标定掉。

压摆率。LM324 典型 0.5V/μs。通道轮询时,如果上一通道是 0V、下一通道是 5V,运放输出要 10μs 才爬到位,而 A/D 的转换周期只有 667ns,两者差一个半数量级。轮询速率一旦提上去,采到的就是“爬坡中途”的值,表现为所有通道读数系统性偏低。

输出摆幅。单电源 5V 供电时,LM324 的输出高电平上限在 Vcc−1.5V 附近,也就是 3.5V 左右。0~5V 的信号进得来、出不去,顶部会被削平。常见的实现思路是给运放单独供更高的电压(比如 ±5V 或单 8V 以上),或者直接换成轨到轨器件——在原理图上只是改个电源网络,但它决定了满量程到底能不能用满。

提示:这三条合起来说明一件事,模拟前端的器件选型不是“能用就行”。它同时给 A/D 的精度和速度封了顶,而且是那种在数字域怎么处理都救不回来的封顶。

2.3 四片 ADG506 拼成 64 路:并接点上的两笔漏账

ADG506 是 16 选 1,A1~A4 四位地址选通道,A6 是使能。64 路需要 4 片:低 4 位地址并联到 4 片的 A1~A4,高 2 位译码出 4 个使能,同一时刻只有一片导通。原文里“当 A6=1 时开始工作,随着 A1~A4 变化 16 个通道轮流采集”描述的正是这个结构。

关键在于:4 片的输出端并接在同一个节点上。关断的片子虽然处于高阻态,但有两笔账会漏过来,量级完全不同。

第一笔是漏电流。ADG506 的低泄漏指标是 20pA 典型值,三片关断加起来 60pA。60pA 落在 200Ω 上产生的压降是 1.2×10⁻⁸ V,连 1 LSB 的万分之一都不到,完全可以忽略。

第二笔是寄生电容的电荷注入与耦合。开关切换瞬间,MOS 沟道里的电荷会从栅极注入到源漏节点,量级在 pC;再叠加关断通道输入端快速边沿通过 Cds 耦合过来的分量。这一笔和漏电流差了六七个数量级,用“漏电流小”来论证并接可行是站不住的。

常见的做法是在并接点之后加一级缓冲器隔离,或者在时序上安排“先断后通”的死区时间。原文图 2.2 的通道框图里画了“缓冲器”,正好对应这一点——缓冲器不是可有可无的装饰,它是把开关节点的电荷冲击和 A/D 的采样电容隔开的那道墙。少了它,通道数一多,串扰就会以“玄学”的方式出现:单独测每一路都对,64 路一起跑就互相污染。

2.4 时序预算:单通道 8kSPS 这个数字是怎么推出来的

现在把上面的所有约束收进一个时间片。从“选中通道”到“A/D 结果可用”,要经过三段:开关导通、模拟建立、A/D 转换。

# 单通道时间预算:从模拟开关选通,到 A/D 结果可以被锁存 t_switch = 200e-9 # ADG506 导通/关断时间,手册量级 200ns tau_op = 0.13e-6 # 跟随器闭环带宽 1.2MHz 对应的时间常数 n_tau = 8.3 # 建立到 1/4096 精度约需 8.3 个时间常数 t_settle = tau_op * n_tau t_adc = 1 / 1.5e6 # AD9221 在 1.5MSPS 下的单次转换周期 t_slot = t_switch + t_settle + t_adc print(f"建立时间 {t_settle*1e6:.2f} us") print(f"单通道时间片 {t_slot*1e6:.2f} us") print(f"一轮 64 通道 {64*t_slot*1e6:.1f} us") print(f"单通道采样率 {1/(64*t_slot):.0f} SPS")

跑出来的结果是:建立时间约 1.08μs,单通道时间片约 1.95μs,一轮 64 通道约 125μs,单通道采样率约 8kSPS。

n_tau取 8.3 不是随手写的:12 位精度要求建立到 1/4096 ≈ 0.0244%,指数建立到 e⁻⁸·³ ≈ 2.5×10⁻⁴ 才够,留了约十倍余量。

这个结果里藏着一个反直觉结论:建立时间占了时间片的 55%,A/D 转换只占 34%,开关切换占 10%。所以换一颗更快的 A/D 对这套系统几乎没有帮助——瓶颈在模拟前端,不在量化器。要提速,得先换运放(提高闭环带宽和压摆率),再谈 A/D。很多人调不通高速采集时第一反应是换 A/D,方向从一开始就错了。

再往下推一步:64 路 × 8kSPS × 2 字节 = 1.0MB/s 的持续数据率。这个数字正好落在 NAND 可持续写入的量级上,第 4 章会接着这个话题往下算。

3. AD9221 的流水线结构:1.5MSPS 下为什么只剩 11.3 位有效位

3.1 分辨率、量化误差、绝对误差,是三件不同的事

分辨率的定义是满量程除以 2^N。5V 量程、12 位,1 LSB = 1.22mV,相对分辨率 0.0244%。注意原文举的例子是 10V 满量程的 12 位 A/D,得出 2.44mV、0.0244%——相对值一样,绝对值差一倍,说明分辨率这个指标必须连同量程一起说才有意义。

量化误差是另一回事。它指的是理想阶梯特性曲线与无限精度直线之间的最大偏差,理论上限 ±1/2 LSB。这是原理性的、无法消除的,只能靠增加位数或缩小量程来压低。

绝对误差则把增益误差、偏移误差、非线性误差和量化误差全包进去了,一般在 ±1/2 LSB 到几个 LSB 之间。

三者最容易被混为一谈的地方是:一个 12 位 A/D 的绝对误差完全可能超过 4 个 LSB,但它依然是 12 位分辨率。分辨率是“能分辨多细”,绝对误差是“量得准不准”,两码事。

真正能衡量“实际有多准”的指标是有效位数 ENOB,它从信纳比反推:

ENOB = (SINAD − 1.76) / 6.02

AD9221 在 1.5MSPS 下的 SINAD 是 70dB,代入得 ENOB ≈ 11.34。这就是原文“1.5Msps 时提供 11.3 位有效位数”的来源。标称 12 位,实际可用 11.3 位,最后那 0.7 位被噪声和失真吃掉了。做误差预算时必须按 11.3 位算——如果按 12 位设计前端增益,最后半位永远是噪声。

3.2 流水线为什么能同时做到“快”和“准”

把几类 A/D 摆在一起看,流水线的位置就很清楚了。

类型速度分辨率功耗典型用途
并行比较(闪烁式)最高低(6~8 位)大高速示波前端
逐次逼近中(≤1MSPS 常见)中高(12~16 位)低通用采集
积分型(双斜)低(百 SPS)高低精密直流测量
Σ-Δ低最高(可达 24 位)中音频、称重
流水线高中高(12~16 位)中通信、视频、高速采集

并行比较是“所有位同时转换”,速度快但位数一上去,精密分压电阻和比较器的数量按 2^N 爆炸,N 位要 2^N 个电阻、2^(N−1) 个比较器,12 位就是 2048 个比较器,功耗和面积都不现实。

逐次逼近是“二分搜索”,一个比较器加一个 D/A,从高位到低位逐位试探,N 位要 N 个时钟周期,所以速度被位数拖住。

流水线走的是第三条路:把 N 位拆成若干级,每级只转换 k 位。第一级量化出高 k 位,把残差(输入减去本级量化结果)乘以 2^k 送给第二级,第二级再量化接下来的 k 位,如此级联。关键是每一级都有自己的采样保持电路,所以第 i 级在处理第 n 个样本时,第 i+1 级可以同时处理第 n−1 个样本——流水线一开,吞吐就等于单级速度,而不是 N 级之和。

每级只做 1.5~3 位,比较器数量线性增长而非指数增长,面积和功耗都受控。这是流水线能同时兼顾速度和分辨率的根本原因。

还有一层是冗余位与数字校正。每级多量一位(1.5 位/级,输出 2 位码但只有 3 个有效状态),级间的比较器即使有 ±1/4 参考的偏差,后级也能通过数字逻辑把误差补回来。原文提到的“每一级的冗余位优化了重叠误差的纠正”,说的就是这个机制。没有冗余位,级间比较器的失调会直接吃掉低位精度。

代价是延迟。流水线 A/D 从采样到数据出现在输出口,中间隔着好几级时钟,这个固定延迟叫 pipeline delay。对连续流式采集不是问题——延迟只是固定偏移,数据对齐一下就行;但对“切通道后立刻读结果”的用法就是坑。这一点在 5.3 节会作为一条具体的踩坑记录展开。

3.3 时钟由 FPGA

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询