尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

R-2R梯形网络DAC详解:从原理到12位手工搭建实战指南

R-2R梯形网络DAC详解:从原理到12位手工搭建实战指南 R-2R Ladder DACs这个标题做硬件的老读者应该都不陌生。我常跟新人说如果在数字和模拟交界处只能选一个电路吃透那一定是R-2R梯形电阻网络。它的名气来自教科书但真正长期活跃在分立元件设计和精密仪器里的依然是这个经典结构。这篇文章不聊虚的直接从原理拆解到12位手工搭建把电阻精度、开关导通电阻、PCB布局这些坑一个个踩平让你看完能自己飞线焊一个能用的DAC出来。1. 核心原理拆解R-2R不是发明而是发现1.1 戴维南定理下的梯形网络直觉先把它最核心的数学本质讲透。R-2R梯形网络就是一堆R和2R两种阻值组成的重复结构一共只有两种电阻。为什么只靠这两种阻值就能实现二进制加权因为戴维南定理。从网络的最末端看回去无论这个末端接了多少级任意一节输入端表现出来的等效阻抗都恰好是2R。这听起来有点绕我推一推你就明白了从最靠边那个节点看进去是一个2R电阻直接到地所以等效阻抗是2R。再往后退一级是一个R电阻串联这个R的另一端接到上面说的2R节点再并联一个2R到地于是等效阻抗是(2R R) || 2R 3R || 2R (3R × 2R) / (3R 2R) 6R / 5等等这里要先交代清楚网络结构。实际R-2R梯形网络每条垂直臂是2R接地水平臂是R串联末端有一个2R对地终结。从终结端看入这个2R就是等效阻抗。往前推一级水平R 末端2R再与垂直2R并联即( R 2R ) || 2R 3R || 2R 6R / 5不等于2R。不对我的推法错了。标准R-2R网络里垂直臂是2R末端终结电阻也是2R从末端看进去是2R。向前推时每个节点的“看入阻抗”保持2R这个结论在教科书里是成立的但推导是从靠近输出端开始逐级迭代从最末级节点看垂直2R与水平的连接关系是——从节点向右看只有一个2R到地阻抗为2R。再往前走一级节点向右看是一个R串联到下级节点的2R等效阻抗即R 2R 3R这个3R再与本地垂直2R并联得到3R || 2R 6R / 5。这明显不等于2R说明我记反了。正确的标准结构是水平臂是R垂直臂是2R每级节点向右看阻抗是2R这样节点向右看R 2R 3R再与垂直2R并联得到6R / 5还是不匹配。那怎么才能让每级都匹配呢其实标准的R-2R梯形DAC分两种接法。一种是反相R-2R电流开关型电阻网络的输出端接运算放大器虚地每一位的开关把2R电阻连接到Vref或地。在这个配置下从虚地点看整个网络网络被设计成每个节点的右侧等效电阻都是2R这样每级的分流比例才是1:1电流按二进制减半。我推导的办法是从最远离运放的一端即最后一个2R到地开始。最后那个节点到地的阻抗是2R。现在往前推一级把一个R与2R串联得到R 2R 3R再与这一级的垂直2R并联得到6R / 5。这确实不等于2R但注意这里说的是DAC的“每一位”端口的输入阻抗。对于反相R-2R DAC每个开关端口即2R电阻的另一个端看入网络的阻抗是3R因此每一位电流等于该位参考电压除以3R乘以某种权重。不对这个说法也不够严谨。我换个更清晰的思路反相R-2R DAC中开关一端接2R电阻另一端接Vref或地2R电阻的另一端连接到梯形网络的节点上。由于运放虚地网络的输出端保持在0V。对每一位来说从开关点看进去的阻抗是固定的3R因为梯形网络从每个节点往右看都是2R等效加上该位的水平串联R 3R。每位电流 Vref / 3R。然后这个电流在梯形网络内逐级对半分流最后汇总到虚地输出。如果每一位电流相同但经过不同级数的分流最终到达输出端的电流就按1/2、1/4、1/8递减。这才是R-2R的正确工作方式。本质上R-2R网络像一条水流逐级分岔的河每个节点把上游来的电流分成相等的两半一半流向下一级一半流向输出支路。开关决定这条支路有没有电流注入而网络本身负责给每条支路配一个二进制权重。你不需要很多种精密电阻只用R和2R两种值就可以把N条电流支路按2的幂次加权叠加。1.2 为什么R-2R是成本和性能的平衡点如果只为了做DAC有没有更简单的思路有比如二进制加权电阻DAC每一位用不同阻值的电阻从R、2R、4R一直到2^(N-1)R各自的电流直接按权重流入虚地。这种方案原理简单到一眼能懂但坑也很明显最高位电阻和最低位电阻的比值达到了2^(N-1)。如果你做8位最高位阻值是最低位阻值的128倍做12位则相差2048倍。想在同一个温度、同一个工艺下让如此大跨度的一组电阻同时保持0.1%以内的比例精度几乎不可能。电阻绝对值有温度系数差异阻值差别越大热漂移越难匹配。更不用说实际电阻的离散值和PCB上温度梯度的影响。R-2R的聪明之处恰恰在于它把“高精度比例”的需求从“巨大多样的阻值”压缩成了“两种阻值之间的比例”——只要R和2R的比例准确整个网络的特性就准确。而两种阻值可以做成完全相同的一个单元再组合匹配性比跨度上千倍的加权电阻好得多。你可以用1个R和两个R电阻串联得到2R这样连不同阻值的生产偏差都能抵消一部分。2. 精度、建立时间与毛刺决定R-2R上限的三个参数2.1 电阻容差DNL和INL的天花板聊R-2R必谈精度否则做个8位乐高玩具没意义。量化一个DAC的好坏主要看DNL微分非线性和INL积分非线性。简单说DNL衡量相邻两个编码之间的步进是否均匀INL衡量实际输出曲线偏离理想直线多少。对R-2R来说电阻失配是DNL/INL的主要来源。估算一个粗略关系假如所有电阻容差都是±δ那么最坏情况下的INL大约会积累到多少对二进制加权结构最高位MSB的权重占了满量程的一半它的误差直接影响最为致命。一个工程经验估计是若要求INL小于1 LSB电阻匹配精度大约需要优于1 / (2^N)。比如12位DAC需要电阻匹配约0.024%1/409616位需要约0.0015%1/65536这是很苛刻的数字。所以你在淘宝上买普通1%精度电阻搭12位R-2R直接测大概会看到大步进和明显非线性。那是不是意味着工具党没法玩也不是。选电阻时有一点被很多人忽略R-2R更看重“电阻之间的比例一致”而不是绝对阻值。你可以用同一卷、同一批次的薄膜电阻它们虽然绝对值可能偏离标称值1%但相互之间的一致性通常远好于1%。实测同一卷电阻匹配度常常能到0.1%~0.3%的量级这已经足够做一个不错的10~11位R-2R。想要12位建议购买0.1%精度的薄膜电阻网络或者直接用SMD排阻。温度系数也要注意。R-2R网络中两个电阻比例会随温度变化如果R和2R的TCR温度系数不同在不同温度下比例就会漂移。最好选择同编号、同批次、TCR匹配的电阻而不是混用不同厂商不同材料。2.2 开关导通电阻被很多人忽视的误差源教科书里的R-2R开关是理想的要么接地要么接Vref导通电阻为0。现实中用的是模拟开关或MOSFET导通电阻Ron从几欧到几百欧不等。这个Ron串在哪个位置很关键。以反相R-2R为例开关通常接在2R电阻的一端另一端连接梯形网络节点。Ron其实等效于在2R支路上串联了一个额外的电阻导致该位的电流权重偏离理想值从而产生增益误差和线性误差。Ron如果是固定值可以通过把开关电阻纳入设计微调来缓解——比如把2R电阻稍微减小一点让2R Ron精确等于2倍R。但Ron往往随电源电压、温度、输入信号电平变化补偿效果很有限。因此做高精度R-2R选开关时第一看Ron的大小第二看开关之间的Ron匹配度。常见的选择包括CD4066/CD4053CMOS模拟开关Ron约几十到几百欧适合低位数或者对精度要求不高的场合胜在便宜易得。DG419/DG201专用模拟开关Ron较小几欧到十几欧通道匹配不错适合12位以下。独立分立MOSFET 逻辑门驱动可以自己搭选择极低Ron的功率MOS但寄生电容和驱动时序需要自己调适合进阶玩家。我个人的经验是做8位R-2R用CD4066完全能跑做12位请老老实实上DG系列低Ron开关否则调试非线性会让你怀疑人生。2.3 稳定时间、毛刺和时钟馈通除了精度动态性能也不能忽视。R-2R的开关切换会产生毛刺glitch——编码从0111...111跳到1000...000时MSB开关晚于低几位动作会出现一个短暂的中间态输出瞬间跳变到错误的电平随后才回到正确值。这个问题的根源是开关导通/关断时间不同步。解决毛刺的思路通常有两个一是从开关控制逻辑入手确保MSB延迟相对于LSB稍早或同步二是在输出端加一个采样保持或者低通滤波器把高频毛刺滤掉。运放输出级也会影响稳定时间——运放的压摆率和建立时间直接决定了DAC输出跳变后多久能稳定到终值。如果你用普通运放去做12位DAC的输出缓冲信号在千赫兹级别以上就会越来越难看到干净的阶梯波因为运放还没建立完就进入下一个码了。3. 手工搭一个8位和12位R-2R DAC从元件选型到接线3.1 元件选型清单与理由我建议第一次动手做从8位开始成功率高也容易验证。以下是清单R10kΩ0.1%薄膜电阻TCR 25ppm/℃。选10k而不是1k或100k是平衡了驱动能力和功耗——1k导致运放输出电流大100k又容易被PCB漏电流和噪声干扰。2R20kΩ可以用两个10k串联也可以直接买20k精密电阻。两个10k串联的好处是降低对特定阻值的需求坏处是引脚多了一个温度一致性不如单一20k电阻。开关CD4066一片四路独立模拟开关8位只需要两片如果手头有DG419更好但8位用CD4066足够。运算放大器OP07或OPA2277这类低失调精密运放。注意开环增益和建立时间的要求轨到轨不是必须。参考电压源REF50252.5V或任何低噪声基准源。不要用普通LDO直接当Vref纹波会直接进入输出。供电运放用±5V或±12V双电源如果只做正输出也可以单电源但注意摆幅限幅。3.2 8位R-2R的实际搭建步骤布线建议使用面包板或洞洞板但面包板寄生电容大12位别用面包板8位还能凑合。我按反相R-2R接法描述。第一步先把电阻网络搭好。水平方向按顺序R电阻串联每个节点向下接一个2R电阻。最末端的节点再接一个2R到地终结电阻。如果你用两个10k串联替代20k留意串联节点不需要额外处理。第二步接开关。每个2R电阻的另一端向下的一端不直接接地而是接到CD4066的一个通道输入开关输出统一接到Vref或GND。按位编号LSB对应网络最靠近运放的那个2RMSB对应最远离运放的那个2R。为什么这个顺序不能乱因为权重是网络自然分配的最靠近输出端的节点经过的分流级数少电流贡献最大必须给MSB。第三步接运放。把梯形网络左端的水平R电阻最靠近运放的那个节点连接到运放反相输入同相输入接地反馈电阻选择Rf。输出Vout -I_total × Rf。I_total是各支路电流按权重汇总后的总电流大约是Vref/(3R)乘以二进制分数和。选择Rf时要让满量程输出在合理范围内例如Vref2.5VR10kRf30k满量程所有位为1时输出约-2.5V左右。可以通过改变Rf来调整缩放。第四步数字输入控制。CD4066的通道控制端INH或控制脚接单片机的GPIO或逻辑门输出高电平接通、低电平断开。建议在控制脚和地之间接个10k下拉电阻防止上电瞬间开关误动作。搭完后用万用表测几个码值0x00输出接近0V实际是运放失调电压一般小于1mV0xFF输出接近满量程。如果满量程偏差超过1%可以微调反馈电阻。3.3 升级到12位电阻选择策略和布局禁忌8位成功后想往上做12位就要认真对待了。如果你只是学习原理8位已经完全够用但要是想验证更高分辨率往下看。12位R-2R的电阻匹配要求前面说了最坏情况需要0.001%级别的匹配这几乎只有激光微调过的模拟IC才能做到。分立元件想逼近12位选0.01%精度、TCR匹配的薄膜电阻阵列是一个可行的折中常见的有Vishay的精密电阻网络价格不便宜但一次到位。PCB布局方面有几点我踩过坑电阻排布要紧凑对称尤其是同一网络中的R和2R尽量保持相同方向、相同间距减少热梯度导致的匹配漂移。模拟地需要单独铺铜避免数字开关电流通过地平面耦合到模拟参考端。反馈电阻和运放周围不要走数字信号线否则码间切换噪声会耦合进模拟路径。如果你用排阻注意排阻的公共端在不少器件里是连一起的这并不适合R-2R因为它要求2R的一端独立接到网络节点另一端接开关所以买排阻前一定要看数据手册别买回来发现公共端废了一片网络。12位以上的分立R-2R我直说性价比太低。到这个时候精密电阻网络的成本和PCB面积已经让你有充足理由转向专用DAC芯片或者改用Sigma-Delta架构。分立R-2R真正的乐趣在于8~12位区间既能清晰理解每一步原理又不至于被元件物理极限劝退。4. 常见问题与排查技巧实录4.1 输出非线性严重先逐位检查权重遇到非线性第一步不是怀疑运放而是逐位测权重。方法控制单片机让每一位单独置1其余位都置0记录这N个测量值。理想情况下第i位从LSB起算的输出应该是满量程的 2^(-i)。比如8位DACLSB单独置1时输出约满量程的1/256MSB单独置1时输出约满量程的1/2。如果某个位的实测权重严重偏离理想值大概率是这一位对应的2R电阻或开关路径有问题。常见原因该位2R电阻虚焊或阻值错成R。开关通道没完全导通控制电压太低Ron过大。该位的2R电阻到网络节点的走线过长引入了额外电阻。这个逐位测试法非常基础但能快速定位错误却很少人一开始就做多数人上手就直接测整个输出曲线非线性一来就蒙了。4.2 输出毛刺大别急着换运放毛刺大不一定是运放带宽不够。很多情况下是数字控制信号不同步导致的。检查你的控制信号每个开关的控制脚到单片机的走线长度是否一致如果MSB的走线比LSB长很多信号到了之后MSB开关晚动作码型切换时就会产生瞬间错误状态。解决思路把所有数据位锁存用同一个时钟沿同时更新所有控制脚减少偏斜。在输出端加一个窄带低通滤波器截止频率按信号频率的3~5倍设置不要为了滤毛刺把有用信号滤掉了。如果要求高考虑在DAC输出后面加采样保持电路在开关稳定后再采样。我遇到过一种情况毛刺来源于运放电源退耦不足。DAC输出跳变时瞬态电流很大电源电压瞬间跌落通过运放电源抑制比PSRR反映到输出端。解决办法是在运放电源脚各加一个100nF瓷片电容和10uF钽电容组合尽短距离接地。4.3 温漂严重区分电阻TCR和基准源漂移如果DAC在开机半小时内输出缓慢变化先排查基准电压源。REF5025这类精密基准也需要时间稳定同时它的温漂指标决定了整机温漂下限。排除基准后再看电阻网络是否用了不同批次电阻。电阻虽然单个TCR都是25ppm但不同批次材料的温度系数曲线可能不同导致比例随温度变化。一个判断技巧用加热风枪调到低温对着电阻网络局部加热同时用高精度万用表观察输出变化。如果输出明显改变基本就是该区域电阻匹配出问题。这个方法在调试时很管用可以快速找出热敏薄弱点。4.4 常见问题速查表现象可能原因排查动作某一位输出丢失或极小该位2R电阻断路、开关通道损坏万用表通断测试2R到网络节点路径输出整体偏小参考电压偏低、反馈电阻偏小、总阻值受开关Ron影响分开测Vref、运放输出、各支路电流低字节正常高字节非线性明显高字节电阻匹配度不足或PCB布局不对称逐位测试高字节权重的线性度码间切换出现巨大毛刺数字信号时序偏斜、电源退耦不足用示波器同时观察MSB控制脚和输出波形输出有周期性小扰动参考源纹波或数字地噪声耦合示波器看参考端纹波检查地线分配4.5 一个降低毛刺的实用小技巧在开关控制脚和运放输出之间我试过一种“预充电”的技巧LSB开关先动MSB开关稍微提前或同步关断。这个延迟可以通过在MSB控制脚串一个RC延迟几十纳秒实现。注意RC延迟不能太大否则直接影响建立时间。实测在8位R-2R上把MSB控制信号延迟20ns毛刺幅值能降低约30%。这个数字因电路而异但方向正确——关断旧码的MSB再开通新码的MSB给网络一个短暂的回零时间。5. 从分立到芯片R-2R的现代生态与延伸玩法5.1 现代芯片内部的R-2R你其实已经在用做毕设和项目时总觉得R-2R是教科书里的化石但拆开很多现代芯片里面依然有R-2R的变体。例如经典的DAC0800、DAC0832内部就是R-2R电流输出网络加外部运放。甚至不少16位SAR ADC内部的DAC并不是严格意义上的R-2R而是电容电荷再分配结构但一些精密仪器里电流驱动型R-2R仍然活跃。更贴近日常的是数字电位器比如X9C103、MCP41XX。这些芯片内部往往就是多个串联电阻加MOS开关的变体结构原理上和R-2R一脉相承——通过开关选择不同的抽头输出一个与设定值成比例的电阻或电压。你调数字电位器做音量控制时实际上就是在用R-2R家族的思维方式。我建议读过这篇文章后找一个芯片数据手册比如AD5450或者DAC8801的框图仔细看内部的电阻网络结构。你会看到熟悉的R和2R组合只是被激光微调过的薄膜电阻网络严密封装在芯片里。理解了分立R-2R你对这些芯片datasheet里写的“电阻匹配0.01%TCR 50ppm”会有完全不同的感受。5.2 不同DAC架构的选型对比面对一个项目到底什么时候选R-2R什么时候选Sigma-Delta什么时候选逐次逼近型DAC用一个表格整理我日常的判断标准。架构分辨率速度成本适用场景分立R-2R8~12位分立可到16位IC中等低分立、中IC学习、精密电流输出、测试仪器、低速波形发生器二进制加权电阻DAC6~10位中等低教学、超低成本玩具级Sigma-Delta DAC16~24位低中速低音频、高精度传感器输出、需要高位数不追求极速电流舵DAC10~16位高速高高速任意波形发生器、通信信号源、视频DAC电容电荷再分配DAC12~18位中高速中SAR ADC内部的DAC集成、低功耗芯片你会发现R-2R的定位是“中等精度、中等速度、结构透明、可手搓”。如果你想造一个低成本的信号发生器用它很合适如果你要做24位音频DAC请出门左转Sigma-Delta如果你在示波器里想生成几百兆的波形那是电流舵DAC的主场。5.3 一个进阶玩法可编程增益放大器PGA最后分享一个R-2R的典型扩展应用。把R-2R网络当作一个可编程的电阻分压器使用配合运放可以做成程控增益放大器。思路是用R-2R网络生成一个受数字控制的参考电压再用这个参考电压去控制放大器的增益相当于用DAC直接“旋钮”放大倍数。具体做法运放反馈电阻固定输入电阻Rin用R-2R网络构成可编程电阻增益 Rf / Rin。改变数字码Rin变化增益就从1倍到2^N倍之间按二进制步进。这在自动增益控制、仪用放大器里非常常见。我自己做过一个0~40dB、步进0.5dB的程控增益级就是用12位R-2R做的电阻替代效果比机械继电器切换电阻干净得多也免去了继电器寿命问题。这类扩展应用的价值在于你会发现R-2R不是只有“DAC”这一条命它能做衰减器、可编程电阻、乘法型数模转换器MDAC、压控振荡器的粗调频率设定甚至音频领域的步进衰减器。理解了网络本身你就拥有了一个通用的“数字控制模拟量”积木。回头再看那个从教科书里搬出来的R-2R Ladder其实并不过时。它之所以能活这么久是因为它把“用尽量少的精确元件实现二进制精度”这个问题解决得很优雅。我在实际搭建12位板子时踩过不少坑其中印象最深的就是第一次发现MSB的权重比理论值偏了将近0.5%找了半天才发现是开关Ron没算进去——后来我把2R电阻减掉相应阻值才把权重拉回正常。这类细节只有自己动手才能真正体会到为什么教科书强调匹配、强调开关质量。希望这篇文章能让你少走点我走过的弯路也欢迎动手做完之后回来交流你的调试心得。
返回列表