ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数模转换电路DAC架构选型与R-2R手搭实测避坑

数模转换电路DAC架构选型与R-2R手搭实测避坑 刚入行那会儿我以为数模转换电路就是把一串数字丢给芯片、然后在输出端量到对应电压这么简单。直到我拿着万用表盯着自己用一堆电阻搭出来的8位数模转换电路发现理论值19.53mV一格的台阶实测有的格子只有15mV、有的却跳到23mV那一刻才明白把数变成拟跟把数算出来是完全两回事。数模转换电路真正难的地方不在公式而在于你怎么让参考电压稳如磐石、让每一位的权重分毫不差、让输出在负载和温度面前不变形。这篇东西就是把我这些年从手搭电阻网络到选集成DAC芯片再到调精密闭环给定这一路踩过的坑按先懂原理、再选架构、最后落地实测的顺序完整讲一遍。不管你是刚学模电的学生还是需要在项目里加一路模拟输出的工程师看完应该都能直接上手。1. 数字引脚为什么模拟得不准先摸清DAC的物理内核1.1 数字输出的本质是开关不是电压源很多人第一次玩这个都是拿单片机的几个IO口接电阻想拼出一个模拟电压。思路没错但结果往往很差原因在于我们脑子里默认IO输出高电平就是精确的3.3V、低电平就是精确的0V。实际上一个通用IO口的输出高电平本质是内部一个PMOS把引脚拉到接近VDD的电位这个MOS管有导通电阻几十欧姆很正常输出低电平时则是NMOS把引脚拉到接近GND这个导通电阻又是另一个值可能只有十几欧。也就是说你的1和0根本不是一对对称的理想电压源而是两个内阻不同的开关。这件事在纯数字电路里无所谓反正后面接的是逻辑门认的是阈值。可一旦你把它们当模拟权重用问题就来了高电平那一位的实际贡献比你想的要小一点点低电平那一位要拉走的电流又比你想的难一点。两者叠加输出的非线性就出现了。所以数模转换电路的第一课不是背公式而是承认数字侧不干净后面所有的设计动作都是为了把这个不干净隔离开。理解了这点你就能明白为什么几乎所有正经的数模转换方案数字侧和模拟侧之间都要加一级缓冲或锁存。缓冲器的任务不是放大而是给每一位提供一个阻抗一致、对称的驱动源。1.2 三种把数字变成模拟的底层动作抛开具体电路把数字转成模拟电压物理上只有三类动作在反复出现认清了它们你再看任何DAC架构都不会晕。第一种是加权求和。每一位二进制数代表一个权重最高位权重最大最低位最小把它们按权重叠加起来就得到总量。权电阻网络和R-2R网络走的就是这条路。它的核心难点是权重必须精确成比例1:2:4:8……这个比例一旦偏了输出就歪了。第二种是分压选择。用一串等值电阻把参考电压分成2^N份输入码就是选中哪个分压节点。电阻串DAC就是这么干的。它的好处是天然单调绝不会出现码变大、输出反而变小的荒唐事。第三种是积分或时间平均。不去直接构造权重而是让一位输出在高、低之间快速切换用占空比或脉冲密度去代表数值再用滤波把高频滤掉留下平均值。PWM加RC滤波、以及ΣΔ调制都属于这一类。它用时间换了精度代价是速度慢。这三类动作基本覆盖了你能见到的所有数模转换电路。选架构的过程本质上就是在精度、速度、成本、复杂度这四个维度上做取舍。2. 五种主流架构的取舍逻辑别一上来就纠结型号2.1 权电阻网络最直观也最不适合动手搭权电阻方案最好理解N位数就放N个电阻阻值依次是R、2R、4R……每个电阻串一个开关开关由对应的数据位控制一端接参考电压另一端全部并到运放的求和节点。因为运放虚地流过每个电阻的电流等于VREF除以该电阻阻值各路电流在求和节点相加输出电压就正比于数字码。它的问题也恰恰出在这个成比例上。当位数到8位以上最高位电阻和最低位电阻差了128倍甚至更多。比如最低位用1MΩ那最高位只要7.8kΩ。可芯片工艺里做1MΩ和做7.8kΩ的电阻是用完全不同的材料和几何形状两者的温度系数、匹配精度都对不上。结果就是低位几乎不随温度变高位飘得厉害整个网络的线性度控制不住。所以权电阻在分立器件时代就已被淘汰只在教科书里作为原理演示存在。你在面包板上真去搭它只会得到一个高低位权重严重失配的失败品。2.2 R-2R梯形网络性价比之王前提是驱动对称R-2R网络是分立搭建里最值得推荐的一种。它只用两种阻值——R和2R无论多少位都如此。结构上是一个不断对折的梯形每一位通过一个开关决定是接参考电压还是接地从末端往输出方向看每一位的等效权重天然就是二进制比例。R-2R最漂亮的一点是从这个网络任何位置看进去输出阻抗恒定等于R。这意味着输出端的RC时间常数不随码值变化建立时间稳定这一点对动态应用极其关键。相比之下权电阻网络的输出阻抗会随码值大幅波动建立时间忽快忽慢。但它有个硬性前提就是我前面说的驱动对称。R-2R的每一位开关理想情况是接到一个低阻的、高电平电压等于VREF、低电平电压等于0V的源上。如果你直接用单片机IO去驱动开关位就会遇到高电平内阻和低电平内阻不一致的问题这个不对称直接转化为INL积分非线性和DNL微分非线性误差。所以正确做法是IO口先过一级缓冲芯片比如74LVC245这类带方向控制的缓冲器或者在每一位后面加一个CMOS模拟开关如CD4051系列的多路开关思路或专用的模拟开关让真正的开关动作发生在阻抗对称的器件上。分立搭8位R-2R用0.1%精度的金属膜电阻配合缓冲器是能做出一路能用的模拟输出的。这条路径最大的价值是让你彻底看懂权重是怎么被电路表达的。想练手这是首选。2.3 电阻串分压单调性的终极保证电阻串也叫Kelvin分压器把2^N个等值电阻串起来从每个中间抽头拉一根线到开关矩阵输入码直接决定哪一根抽头连到输出。因为电阻是串联的第k个抽头的电位一定高于第k-1个所以它天生单调不存在任何跳变反转的可能。这个特性在精密控制里价值极高。比如你需要一个绝对单调的给定信号去驱动一个闭环系统任何非单调的跳变都可能引发自激振荡这时候电阻串就是安全牌。它的代价是位数一高需要的电阻和开关数量指数级增长。8位要256个电阻、256个开关12位就是4096个面积和功耗都受不了。所以集成芯片里电阻串多用在8到10位的通用DAC或者配合分段结构用在高位校准上。2.4 电流舵与温度计码高速场景的唯一答案当转换速率要上到几十兆甚至上百兆采样前面那些基于电压的网络全靠边站取而代之的是电流舵结构。它直接让一组精心匹配的电流源做加减通过电流在输出电阻上产生电压。速度快的根本原因是电流源节点是低阻的寄生电容充放电快不像电压型网络要跨越整个摆幅。电流舵最关键的配套技术是温度计码。我们想一个问题二进制码从0111变到1000所有位都翻转。如果各位的开关速度有微小差异中间会短暂出现1111或0000的中间态输出上就冒出一个尖峰这叫毛刺Glitch。位数越高、摆幅越大毛刺越致命。温度计码的做法是把N位二进制先转成2^N-1个等权控制位任何相邻码之间的转换只会让其中一位开关变化。这样理论上就彻底消除了多位置同时翻转带来的毛刺。代价是译码逻辑庞大12位需要4095个控制线所以高速DAC芯片里通常采用高位温度计码、低位二进制的分段混合方案兼顾速度和面积。2.5 ΣΔ与PWM用时间换精度的稳妥路线如果你的需求是慢但要准那ΣΔ和PWM值得认真考虑。PWM的思路最朴素让IO输出一个占空比可调的方波后面接RC低通滤波滤波后的直流分量正比于占空比。它的分辨率取决于定时器的位数很多MCU的定时器能做到16位甚至更高理论上意味着远超16位DAC的分辨率。但它有个绕不开的代价纹波和建立速度的矛盾。滤波越强纹波越小但输出跟随占空比变化的响应越慢。如果你需要快速更新设定值就受限于滤波器的时间常数。另一个隐藏问题是PWM方波的边沿含有大量高频谐波这些谐波一旦通过空间辐射或地线耦合窜到别的模拟电路里就会变成干扰源。ΣΔ比PWM精密得多。它用一位比较器高速过采样把量化噪声整形推到高频段再用数字滤波器把高频噪声滤掉留在带内的噪声极小。这就是为什么音频DAC几乎清一色用ΣΔ——它能在便宜的CMOS工艺上做到20位以上的有效精度。缺点同样是速度ΣΔ的输出速率远低于它的采样时钟适合音频、精密直流这类低带宽场景。下表把五种架构的核心特征对照一下。架构分辨率潜力速度单调性分立可搭性典型场景权电阻低中差差原理演示R-2R梯形中中较好好练手、中速通用电阻串中低极好一般精密给定、单调控制电流舵温度计码高极高好不可高速波形、通信ΣΔ/PWM高低好好PWM音频、慢速精密3. 选器件前先把这本账算清LSB、建立时间、SNR与非线性3.1 LSB你手里这把尺子的最小刻度LSB最低有效位是所有参数里最该先算的。它等于参考电压除以总码数LSB VREF / 2^N。这个数字决定了你能分辨的最小电压变化也决定了后面所有误差的容忍度。举几个常被引用的例子。8位、参考5VLSB 5/256 ≈ 19.53mV。12位、参考4.096VLSB 1.000mV整。16位、参考4.096VLSB ≈ 62.5µV。看出来了没4.096V之所以成为精密DAC的标配参考电压就是因为它是2^12的整数分之一算LSB时能整除工程师在设计校准时省心。这个细节很多新手根本没意识到随手抓个3.3V或者5V的VREF就上结果每算一次刻度都要按计算器。算清LSB之后你就能反过来判断器件选型了。假设你要控制一个0到5V输出的系统精度需求是±1mV那8位DAC的LSB就有19.53mV根本不够至少得12位而且还得保证非线性误差小于1个LSB否则光分辨率达标、精度照样崩。这一步做在前面能省下后面大量的返工。3.2 理论信噪比量化噪声给你的天花板即使你的DAC完美无缺量化这个动作本身也会引入误差——把一个连续量切成有限个台阶误差不可避免。理想情况下量化噪声的有效值约为LSB除以根号12。由此可以推导出一条经典结论理想N位DAC的信噪比 SNR 6.02N 1.76 dB。代进去算8位约50dB12位约74dB16位约98dB。这个公式的价值在于它告诉你任何想通过软件平均把8位变成16位的想法在原理上就有上限——平均能压低随机噪声但压不掉量化台阶本身带来的失真量化误差是确定性的、跟信号相关的不是随机的。想提精度要么换更高位数的DAC要么走过采样加噪声整形的ΣΔ路线靠算法骗出来的位数本质上都是在用更高的采样率换带内信噪比。3.3 建立时间、压摆率与更新率三者互相咬合建立时间是指从数字码变化到模拟输出稳定在某个误差带内通常是±0.5LSB或±1LSB所需要的时间。它由两部分决定输出网络的RC时间常数和运放的压摆率。先说RC这部分。假设你用R-2R网络输出等效阻抗10kΩ后面接的运放输入电容加上走线寄生约20pF那时间常数τ 10k × 20pF 200ns。要从满摆幅稳定到±0.5LSB需要经过大约 N×ln2 个时间常数12位约需8.3τ也就是1.66µs。这意味着你的更新率理论上限只有600kHz左右实际还要留裕量大概做到300到500kHz比较稳。再说压摆率。如果运放的压摆率不够大信号跳变时输出会先以恒定斜率爬坡爬到接近目标才转入指数收敛。假设运放压摆率1V/µs你要跳5V光爬坡就要5µs这比RC部分慢得多就成了瓶颈。所以选运放时压摆率要按最大电压跳变 / 期望建立时间去倒推。这一步很多人图省事随手抓个通用运放就上结果波形在大台阶处明显变形。提示建立时间和更新率是一对约束。先把LSB和所需精度确定再反推能接受的最大建立时间最后才去挑运放和输出网络。顺序错了选出来的器件要么浪费要么不够。3.4 INL与DNL精度真正的敌人分辨率是能分多少格精度是每格准不准这两件事必须分开看。DNL微分非线性描述的是相邻两个码之间实际台阶与理想1个LSB的偏差DNL超过±1LSB就可能出现非单调——码值增大、输出反而减小这是致命缺陷。INL积分非线性描述的是整条传输曲线相对理想直线的最大偏差它决定了绝对精度。对于分立搭建的R-2RDNL主要由电阻匹配精度决定。想要DNL控制在±0.5LSB以内高位电阻的相对误差得压到0.1%甚至更低所以0.1%的金属膜电阻是底线配置1%的碳膜电阻直接会导致大台阶跳变。对于集成DAC芯片手册里会直接给出INL/DNL的最大值比如±1LSB、±2LSB选型时按你的精度预算去卡就行这是分立方案享受不到的便利。4. 用R-2R手搭一个8位DAC从选料到跑通的完整链路4.1 电阻选型0.1%只是起点温漂更值得盯手搭R-2R第一件事是买电阻。市面上的电阻按精度分档1%、0.5%、0.1%、0.05%都有。对8位DAC我建议至少上0.1%的金属膜。为什么不选1%的碳膜因为8位的权重比例跨度是128倍高位电阻的误差会直接放大成输出的台阶跳变1%误差足以让DNL冲到±2LSB以上波形肉眼可见地歪。但比初始精度更容易被忽略的是温度系数。0.1%的电阻可能标注25ppm/°C或50ppm/°C普通厚膜电阻常有100ppm/°C。这意味着温度变化10°C电阻值就漂了0.1%刚好把初始精度的努力全抵消掉。如果你做的设备要在宽温环境下工作务必选低温漂电阻并且成套购买、同一批次让它们的温漂方向一致、相互抵消。同一批次这点很重要——不同批次的电阻即使标称温漂相同实际漂移方向也可能相反那就无法抵消了。另外R和2R两种阻值要成对挑。具体做法是先买足够多的R用高精度万用表筛出误差最小的若干只再买2R筛选标准是让每只2R尽量等于2倍的那些R的平均值。这套筛选流程很笨但对分立方案来说是压住INL最有效的办法。4.2 驱动级为什么不能把IO直接接到电阻网络前面反复强调的驱动对称问题在这里必须落实。正确做法是用一级缓冲把IO和电阻网络隔开。常见选择有两种一种是八路缓冲器如74LVC245它的输出高低电平内阻相对对称且驱动能力强另一种是模拟开关如CD4066或更好的专用开关由IO控制开关的导通与断开开关的导通电阻对所有位基本一致对称性更好。关键点在于无论用哪种都要保证同一位的高、低两个状态对应的驱动阻抗尽量相等且不同位之间的一致性尽量好。这一级选好了R-2R的INL能立刻改善一大截。我最早搭的时候为了省事直接把IO接到电阻上结果INL在几十个LSB的量级改成缓冲器后一下降到个位数LSB。这个对比比看十篇论文都直观。4.3 输出缓冲运放的选型逻辑R-2R网络的输出本身是高阻的而且会随码值轻微变化绝对不能让负载直接挂在上面。必须加一级运放做缓冲。推荐用电压跟随器接法把网络的输出接到运放同相端运放输出端反馈回反相端。选运放看三个指标输入偏置电流、压摆率、是否轨到轨。输入偏置电流越小越好因为它会流过电阻网络产生额外误差推荐低偏置型如OPA333、MCP6002这类或者输入偏置在pA级的CMOS运放。压摆率按前面说的倒推8位5V应用如果希望建立时间做到2µs以内压摆率至少要有5V/2µs 2.5V/µs的余量。是否轨到轨看你的输出范围如果希望输出能接近0V和VREF就必须选轨到轨输出型否则底部和顶部两个码区会被压缩掉。还有一点少有人提运放的输出能力要和负载匹配。如果你的负载是几百欧姆的低阻比如驱动一个ADC输入或奇怪的前端普通运放会因输出电流不够而失真需要选输出电流大的型号。拿万用表测没问题、接上真实负载就崩这个坑太常见了。4.4 参考电压与供电别拿随手一个LDO凑合参考电压的稳定性直接决定输出的绝对精度这是整个DAC精度链的源头。用普通LDO输出当VREF它的噪声和温漂都会原封不动搬到输出上。正经做法是用专用基准芯片比如标称几ppm/°C温漂、低噪的型号。算一笔账你就知道为什么了。一个10ppm/°C的基准温度变化40°C漂移就是400ppm换算到12位1/4096 244ppm每LSB就是超过1.5个LSB的误差。也就是说你辛辛苦苦把DAC本身的非线性压到±0.5LSB结果基准一飘精度还不如不努力。所以在精密场合基准芯片的选型优先级甚至高于DAC本身。供电方面模拟部分和数字部分最好分开供电至少要在电源入口加电感或磁珠做简单隔离再各自用去耦电容。别小看这一步数字电路的开关噪声顺着电源线爬进模拟侧是数值对了但输出噪声大这类怪病的常见元凶。4.5 完整实现要点清单把上面串起来一个能用的8位R-2R DAC大致是这条链路单片机IO → 缓冲器 → R-2R电阻网络 → 参考电压源 → 运放跟随器 → 输出。这里列一下动手时最容易漏的点。参考电压必须用专用基准不能直接取LDO输出缓冲器的电源去耦电容要紧贴其电源引脚R-2R网络所有电阻的公共节点要尽量做星型汇合避免共用走线引入压降运放反相端反馈线要短且远离数字信号输出端如果接长线串一个小电阻几十欧能抑制振铃按这个链路搭出来8位DAC做到DNL在±1LSB以内是现实的。第一次做建议先搭4位把逻辑和权重吃透再扩展到8位这样排查问题时范围小得多。5. 实测阶段最容易翻车的五个现象与排查链路5.1 台阶波不平从DNL定位到具体哪一位失配症状很典型让DAC从0扫到255理论上应该是一条直的台阶阶梯但实测某些台阶特别矮、某些特别高。这不是整体偏移那么简单而是DNL超标说明某一位的权重错了。排查顺序是这样的。先确认是不是某一位单独的问题如果台阶的异常总是出现在某个二进制位的翻转处比如每16个码跳一次说明是第4位的问题每128个码跳一次是最高位的问题那基本就是那一位对应的电阻或驱动出了问题。找到可疑位之后用万用表量大电阻的实际阻值和它应有的比例对照。如果电阻没问题那就查这一位的驱动——是不是这个IO的驱动能力弱、或者它的高电平明显低于其他位。我遇到过一次就是某个IO口被复用成了别的功能驱动能力被削弱导致最高位贡献不足整条曲线在这一段明显塌陷。还有一个隐蔽原因共用走线。如果两位电阻的电流共用了一段走线这段走线的电阻会在两个码之间产生耦合误差形成固定模式的失真。改成每个节点单独引线到星型汇合点问题往往消失。5.2 毛刺Glitch进位瞬间冒出来的尖峰用示波器看跳变瞬间你会发现某些码的切换处冒出一个又尖又窄的脉冲。尤其是二进制码进位时0111到1000这种多位同时翻转毛刺最凶。原因就是前文说的各位开关不可能完全同时动作中间态短暂出现输出瞬间偏到错误值。对分立方案处理手段有限能做的就是让各位的驱动路径尽量等长、延迟一致或者改用带锁存的缓冲器让所有位在同一时刻更新。对集成方案直接选带温度计码译码或内部去毛刺结构的型号问题从源头解决。还有一个软件层面的技巧如果你不需要所有位同时更新可以先把数据准备好再用一个统一的更新信号触发所有位同时输出这本质上是双缓冲的思想。5.3 输出随温度漂先分清是DAC漂还是基准漂设备跑一会儿输出慢慢偏了。这时候要做的第一件事是只有基准在动还是DAC也在动。方法很简单用一个独立的、已知稳定的外部基准供电再用外部基准给DAC当参考看输出是否稳定。如果稳了问题在基准如果还漂问题在DAC或电阻网络。基准漂移是最常见的。普通基准温漂几十ppm/°C在长时间运行后积累成可观的偏移。换低温漂基准是正解。如果是电阻网络漂就需要换成同批次、低温漂的电阻。还有一个容易漏的运放的失调电压随温度漂。虽然跟随器接法本身不放大失调但失调电压直接叠在输出上低失调运放µV级失调在这类场合优势明显。5.4 数值对了但噪声大从地线和供电找输出数值看起来对但用示波器一看上面叠着一层高频毛刺。这类问题几乎都出在接地和供电。排查顺序先看地线是不是数字地和模拟地混在一起共用了回流路径。数字电路的大电流开关会在地线上产生瞬间电压差这个压差叠到模拟参考端就变成了输出噪声。正确的做法是数字地和模拟地分开布局只在靠近电源入口的一个点连起来也就是所谓的单点接地。其次看去耦每个芯片的电源引脚旁边是否都有0.1µF陶瓷电容且引脚到电容的走线尽可能短。很多噪声问题就是去耦电容离芯片太远、引线电感太大造成的。最后查是否有开关电源在附近工作必要时给模拟部分加屏蔽或用线性电源。5.5 换负载就变输出缓冲的驱动能力不足空载测得好好的一接负载电压就掉或者波形变形。这几乎可以断定是缓冲运放的输出能力不够或者负载阻抗太低。跟随器的输出阻抗虽然低但不是零负载电流流过这个输出阻抗会产生压降。如果负载是几百欧姆压降可能就有几十毫伏直接吃掉好几个LSB。解决办法是换大输出电流的运放或者在输出级再加一级功率缓冲比如用功率晶体管做射极跟随。另一个思路是提高负载阻抗加一个输入阻抗高的下级电路让DAC的负担轻下来。这个坑在给后续电路提供基准的场景里特别常见值得一开始就把它当成硬约束考虑进设计。6. 参考电压、接地与布局决定成品率的三件小事6.1 参考电压不是给它一个电压这么简单很多新手把参考电压理解成一个可以随便给的输入其实它对整个系统是标尺级别的存在。它的绝对精度决定输出的绝对精度它的噪声决定输出的噪声底它的温漂决定系统的长期稳定性。任何参考端的扰动都会按比例完整地复制到输出上。选参考芯片时重点盯三个参数初始精度比如±0.1%、温漂ppm/°C、输出噪声µVpp或nV/√Hz。精密场合优先选温漂小、噪声低的。另外参考芯片的负载能力也要看如果它要同时给多个器件提供参考总负载电流会拉低它的输出必要时加一级缓冲。还有一点参考引脚旁边几乎一定需要一个去耦电容而且这个电容要靠近引脚容值按手册推荐来常见0.1µF陶瓷加1到10µF的组合。这个电容的作用是给参考源提供一个就近的电荷池避免芯片内部开关动作瞬间抽走电流造成参考电压抖动。6.2 模拟地与数字地单点相连不是口号模拟和数字部分共存时地线是最容易出事的地方。数字电路的电流是脉冲式的切换瞬间电流大、变化快如果它和模拟电路共用地线这段地线上的电压降就会叠加到模拟参考上。正确的布局是把模拟地平面和数字地平面分开铺最后只在电源入口或ADC/DAC芯片下方一个点用短而宽的连接连起来让数字电流的回流被困在自己的平面内。具体到DAC芯片它的AGND和DGND引脚之间通常建议在芯片下方就近连接而不是拉长线去远处连这样能把地噪声的影响降到最低。这个细节在数据手册里往往一笔带过但实际操作中差别很大。6.3 输出走线与去耦短、直、远离开关噪声DAC输出到运放输入的这段走线是整条精度链里最脆弱的环节之一。它阻抗高、信号的幅度又小非常容易被邻近的数字信号线耦合进噪声。原则就一句话尽量的短尽量的直两边用地包起来绝对不要和时钟线、PWM线平行走。去耦电容的位置不用再多说了每个电源引脚旁边0.1µF先过电容再进引脚短到几乎没有引线长度。如果空间允许在电解或钽电容的旁边再并一个小的陶瓷电容覆盖不同频率段的噪声。整套动作做下来你会发现在同样电路、同样器件的前提下输出噪声可能相差好几倍。7. 把DAC真正用起来波形发生、精密偏置与闭环给定7.1 波形发生DDS思路下DAC的选择用DAC产生任意波形是它最直观的应用。思路是预先算好一个周期的波形采样点存在表里然后按一定速率依次送到DAC输出端加低通滤波平滑阶梯。这个结构其实就是DDS直接数字频率合成的雏形。选型上要产生音频这种低速波形8到12位就够重点看低噪声要产生几十kHz以上的波形就得看建立时间和更新率选择建立时间短、能配合高速接口的型号。滤波截止频率一般设在更新率的1/3到1/5既能把阶梯的高频成分滤掉又不损失有用信号。滤波器的阶数越高波形越干净但相位失真和成本也上去了通常二到四阶够用。一个容易忽略点波形表里的数据要按DAC的实际满量程来归一化别直接抄网上的正弦表那些表的幅值范围可能和你的输出不匹配会导致波形被削顶或者幅值用不满。自己按LSB算一遍最靠谱。7.2 精密偏置与可编程电流源很多传感器、激光器、模拟前端都需要一个可以软件调节的偏置电压。DAC在这里的任务是把数字控制字转成一个稳定的偏置接在需要的地方。这类应用重点是稳定和低噪声速度反而不重要所以选用低噪声、低温漂的DAC配上优质基准和低失调运放。如果要输出的是电流而不是电压可以在DAC输出后接一级V-I转换。思路是让DAC的电压输出驱动一个运放的输入端运放通过一个采样电阻把电流反馈回来使采样电阻上的压降等于DAC输出于是流过负载的电流就正比于DAC的设定值。这个结构的好处是电流只由DAC输出和采样电阻决定和负载大小无关非常适合驱动需要恒流的器件。做V-I转换时要注意运放的共模范围和输出摆幅尤其是负载是接在电源轨附近的时候运放可能进入非线性区需要选共模范围包含电源轨的型号。7.3 闭环控制里的给定值在闭环控制里DAC常常扮演给定信号发生器的角色控制器根据误差去调节DAC输出进而驱动执行器。这类场景对DAC的单调性要求很高因为一旦出现非单调跳变控制回路可能误判方向来回振荡。这时候电阻串架构或者带单调性保证的型号就是优先项。另一个要点是更新的时序。控制器算完新的输出值后应该用一次原子性的写操作把数据送到DAC避免中间态被输出。如果DAC有双缓冲或锁存更新引脚务必用上。还有就是更新率要和控制周期匹配更新太慢会限制带宽更新太快而每次改动的量很小反而放大了噪声的影响需要根据控制对象的动态特性去折中。7.4 软件端几个实用细节硬件调好之后软件上的几个细节能进一步提升实际效果。第一是校准DAC的增益和失调误差可以软件补偿就是测出零码输出和满码输出用两点的线性拟合去算出修正系数之后每个设定值都过一遍修正。这一招能把积分的增益和偏移误差大幅压下去对没有内部校准的分立方案尤其有效。第二是平滑处理当你需要从当前值变到新值时直接跳变可能引起负载侧的冲击。可以考虑在软件里做斜坡过渡让输出在若干毫秒内渐进到位这在不希望突变的应用里很关键。第三是数值范围保护写入的码值要严格限制在0到2^N-1之间越界会回绕成完全相反的输出这种错误在调试时极难找。用一个简单的边界检查就能规避。第四是误差预算表把基准误差、DAC非线性、运放失调、电阻匹配误差各自量化换算成LSB列成一张表加起来看总误差有没有超预算。这张表会让你清楚地知道每个环节的贡献从而知道该在哪里投入成本。手搭R-2R这件事我前后做过三版。第一版直接用IO驱动曲线歪得离谱第二版加了缓冲器、换了0.1%电阻好了一大截但运放选了个压摆率不够的大台阶处拖尾明显第三版把基准换成低漂移的、运放换成轨到轨低失调的、再把地做单点连接输出才终于像个样子。回头总结真正拉开差距的从来不是那位数多的芯片而是基准稳不稳、驱动对不对、地干不干净这几件基础事。手搭一遍最大的收获不是省了买芯片的钱而是以后挑选集成DAC时一眼就能看出规格书里哪些参数是重点、哪些误差会在你的应用里被放大。这个判断力光看标准答案练不出来。
返回列表