首页 / 资讯中心 / 文章详情

AD5689R双通道16位DAC选型、驱动与实战避坑指南

AD5689R双通道16位DAC选型、驱动与实战避坑指南 ★ FEATURED ARTICLE
1. 从一颗芯片说起为什么双通道16位DAC值得单独聊搞嵌入式或者精密仪器开发的朋友对DAC这个品类肯定不陌生。但凡是涉及模拟量输出、波形生成、闭环控制、传感器校准这些场景DAC的选型几乎决定了整个系统的精度天花板。我最近在做一个多通道数据采集与激励的项目需要同时输出两路高精度模拟电压用来驱动后级调理电路选型的时候翻了不少资料最后锁定了AD5689R这颗双通道16位nanoDAC。用下来一段时间觉得有必要把选型思路、硬件设计要点、驱动实现和踩过的坑系统整理一下。AD5689RBCPZ-RL7这个型号拆开看信息量很大。AD5689R是基础型号BCPZ是封装和温度等级代码RL7是包装形式。核心参数就几个关键词双通道、16位分辨率、nanoDAC系列、精密电压输出。它属于ADI的nanoDAC产品线这个系列主打小封装、低功耗、高性价比同时保持了相当不错的精度指标。16位分辨率意味着理论LSB可以做到满量程的1/65536如果满量程是2.5V那1个LSB大约是38微伏这个精度对于大多数工业控制、便携仪器、自动测试设备来说已经非常充裕了。这颗芯片能做什么简单说它可以通过SPI接口接收数字量然后输出对应的模拟电压。双通道意味着你可以独立控制两路输出做差分信号、做双极性输出、做两路独立的设定点控制都很方便。它解决了什么问题在很多需要精密模拟输出的场合用PWM加滤波的方式精度不够、响应慢用分立DAC加运放搭建又太占面积、一致性难保证。AD5689R把两路16位DAC、输出缓冲、基准输入、SPI接口全部集成在一个小封装里省事很多。适合谁来参考如果你在做工业自动化、测试测量、医疗仪器、音频设备或者任何需要精密电压输出的嵌入式项目这颗芯片都值得纳入选型范围。不管你是刚接触DAC的新手还是已经用过其他DAC想换方案的老手下面的内容应该都能帮你少走一些弯路。2. 芯片核心架构与关键参数拆解2.1 内部功能框图与信号链理解AD5689R的内部架构可以分成几个主要部分SPI接口与控制逻辑、输入寄存器、DAC寄存器、16位DAC核心、输出缓冲放大器、基准电压输入电路。数据从SPI进来之后先进入输入寄存器然后再根据命令决定是直接更新DAC寄存器还是等待LDAC触发。这个两级寄存器的设计很关键它允许你先写入数据但不立即输出等所有通道都准备好之后再同步更新这在多通道系统中非常重要。DAC核心采用的是R-2R梯形电阻网络结构这种结构在16位精度下需要很好的电阻匹配。ADI在这颗芯片上用了薄膜电阻工艺温漂和匹配度都控制得不错。输出缓冲放大器可以配置成增益为1或者增益为2的模式这个后面会详细说。基准电压输入是外部提供的这一点很重要因为基准的质量直接决定了输出精度。信号链的路径是数字码值 - SPI - 输入寄存器 - DAC寄存器 - R-2R网络 - 输出缓冲 - VOUT引脚。每一级都有需要注意的地方比如SPI的时序、寄存器的更新方式、基准的噪声和温漂、输出缓冲的负载能力。2.2 分辨率、精度与噪声的关系16位分辨率听起来很高但实际有效精度要看几个指标INL、DNL、偏移误差、增益误差、噪声。AD5689R的INL典型值是正负2个LSBDNL典型值是正负1个LSB这个指标在16位DAC里属于中等偏上。DNL保证单调性对于闭环控制来说很关键如果DNL超过1个LSB可能会出现非单调现象导致控制环路振荡。噪声方面输出噪声密度通常在几十纳伏每根号赫兹的量级具体值跟输出范围有关。实际使用中如果对噪声要求特别高可以在输出端加一级低通滤波。但要注意滤波会牺牲建立时间需要根据你的信号带宽来权衡。还有一个容易忽略的点是量化噪声。16位分辨率下量化噪声的理论值是LSB除以根号12大约0.29个LSB。如果满量程2.5VLSB约38微伏量化噪声约11微伏。这个水平已经很低了实际系统的噪声往往来自基准、电源和PCB布局而不是DAC本身。2.3 双通道的独立性与同步性双通道DAC有两种使用方式独立更新和同步更新。独立更新就是每个通道单独写、单独输出适合两路信号完全独立的情况。同步更新则是先把两个通道的数据都写好然后用LDAC信号同时更新适合需要两路信号严格对齐的场景比如I/Q调制、差分驱动、双轴控制。AD5689R支持这两种模式。通过命令字节可以设置是写输入寄存器还是写DAC寄存器也可以设置LDAC的触发方式。实际用的时候如果两路输出需要相位对齐一定要用同步更新模式。我一开始没注意这个两路输出之间有几十微秒的延迟后来改成同步更新就对齐了。另外两个通道的基准是共用的所以如果两路输出的满量程需要不同就得在输出端做衰减或者放大。这一点在选型的时候要提前想清楚。3. 硬件设计要点与外围电路配置3.1 基准电压源的选择与设计基准电压源是DAC精度的天花板。AD5689R本身不带基准需要外部提供。基准的选择要考虑初始精度、温漂、噪声、长期稳定性这几个维度。初始精度影响绝对输出误差温漂影响全温度范围的误差噪声直接影响输出噪声长期稳定性影响校准周期。常见的基准方案有几种用专用基准芯片比如ADR4525、ADR4412、REF5025这些初始精度可以做到0.05%到0.1%温漂可以做到1到3ppm每摄氏度。也可以用DAC内置的基准输出但AD5689R没有内置基准所以必须外接。还有一种方案是用稳压二极管加运放搭建但精度和温漂通常不如专用芯片。我选的是2.5V基准因为后级电路的处理范围是0到2.5V。基准芯片的输出要加去耦电容通常是一个10微法钽电容并联一个0.1微法陶瓷电容放在靠近基准输出引脚的位置。基准的走线要远离数字信号线最好用地线包围。注意基准的负载调整率也很重要。AD5689R的基准输入电流会随输出码值变化如果基准的输出阻抗不够低会导致输出误差。专用基准芯片的负载调整率通常在毫欧级别问题不大但如果用运放缓冲要注意运放的输出阻抗和带宽。3.2 输出缓冲与负载驱动能力AD5689R的输出缓冲可以驱动一定范围的负载但具体能力要看数据手册。通常nanoDAC系列的输出缓冲可以驱动2千欧并联100皮法的负载输出电流能力在毫安级别。如果负载更重或者需要驱动长电缆就需要外加缓冲器。输出缓冲的配置有两种增益为1和增益为2。增益为1时输出范围等于基准电压增益为2时输出范围是基准电压的两倍。这个通过内部寄存器配置。如果基准是2.5V增益为1时输出0到2.5V增益为2时输出0到5V。但要注意增益为2时输出不能超过电源电压所以如果电源是5V输出到5V附近可能会饱和。输出端建议加一个RC低通滤波截止频率根据信号带宽来定。电阻通常选100欧姆到1千欧姆电容选100皮法到10纳法。电阻太大会影响建立时间电容太大会影响高频响应。我一般用470欧姆加1纳法截止频率大约340千赫兹对大多数控制应用足够了。3.3 电源与去耦策略AD5689R的电源电压范围通常是2.7V到5.5V具体看型号。电源的质量直接影响输出噪声和精度。数字电源和模拟电源最好分开如果只有一个电源至少要用磁珠或者电感隔离然后在芯片附近分别去耦。去耦电容的配置很关键。每个电源引脚都要有0.1微法的陶瓷电容越靠近引脚越好。另外还要有一个10微法的钽电容或者陶瓷电容作为体电容放在芯片附近。如果对噪声要求高可以在电源线上串联一个铁氧体磁珠但要注意磁珠的直流电阻会影响电源电压。地线的处理也很重要。模拟地和数字地要在芯片下方分开然后单点连接。AD5689R的GND引脚是模拟地SPI的GND是数字地两者要在芯片附近汇合。如果用地平面可以在芯片下方做一个分割但不要形成大的环路。提示PCB布局时基准走线和输出走线要尽量短远离SPI时钟线和电源开关节点。如果空间允许可以在基准和输出走线下方铺模拟地减少耦合。4. SPI驱动实现与寄存器操作详解4.1 SPI接口时序与模式配置AD5689R的SPI接口支持标准SPI模式时钟极性CPOL和时钟相位CPHA可以配置。数据手册里通常写的是CPOL等于0、CPHA等于0或者CPOL等于1、CPHA等于1具体要看时序图。我一般用CPOL等于0、CPHA等于0也就是空闲时时钟为低数据在时钟上升沿采样。SPI的时钟频率最高可以到50兆赫兹但实际用的时候要考虑信号完整性和建立时间。如果走线比较长建议降到10兆赫兹以下。数据是24位一帧包括命令字节和两个数据字节。命令字节的高4位是命令低4位是通道地址或者保留位。时序上要注意几个时间参数CS下降沿到SCLK第一个上升沿的建立时间SCLK最后一个下降沿到CS上升沿的保持时间以及CS上升沿到下一个CS下降沿的间隔时间。这些参数在数据手册里都有通常都在纳秒级别只要SPI时钟不太快一般都能满足。4.2 寄存器映射与命令格式AD5689R的寄存器操作通过24位帧实现。高8位是命令字节低16位是数据。命令字节的定义如下前4位是命令码后4位是通道选择。常见的命令包括写输入寄存器、写DAC寄存器、写输入寄存器并更新DAC寄存器、掉电模式、复位等。写输入寄存器但不更新DAC命令码是0x1通道选择0x0到0x3分别对应通道A、通道B、全部通道。写DAC寄存器命令码是0x2。写输入寄存器并更新DAC命令码是0x3。实际用的时候如果不需要同步更新直接用0x3最方便。数据是16位直接对应DAC的码值。0x0000对应输出0V0xFFFF对应输出满量程。如果增益为1满量程等于基准电压如果增益为2满量程等于两倍基准电压。计算输出电压的公式是VOUT等于基准电压乘以码值除以65536再乘以增益。4.3 代码实现与关键函数下面是一个基于STM32的SPI驱动示例用HAL库实现。假设SPI已经初始化好CS引脚用GPIO控制。#define AD5689_CMD_WRITE_INPUT_UPDATE 0x30 #define AD5689_CMD_WRITE_INPUT 0x10 #define AD5689_CMD_WRITE_DAC 0x20 #define AD5689_CMD_POWER_DOWN 0x40 #define AD5689_CMD_RESET 0x50 void AD5689_WriteChannel(uint8_t channel, uint16_t value) { uint8_t txData[3]; uint8_t cmd AD5689_CMD_WRITE_INPUT_UPDATE | (channel 0x0F); txData[0] cmd; txData[1] (value 8) 0xFF; txData[2] value 0xFF; HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi1, txData, 3, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); } void AD5689_WriteBothChannels(uint16_t valueA, uint16_t valueB) { uint8_t txData[3]; txData[0] AD5689_CMD_WRITE_INPUT | 0x01; txData[1] (valueA 8) 0xFF; txData[2] valueA 0xFF; HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi1, txData, 3, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); txData[0] AD5689_CMD_WRITE_INPUT | 0x02; txData[1] (valueB 8) 0xFF; txData[2] valueB 0xFF; HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi1, txData, 3, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); txData[0] AD5689_CMD_WRITE_DAC | 0x03; txData[1] 0x00; txData[2] 0x00; HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi1, txData, 3, 100); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); }这个代码里AD5689_WriteChannel直接写输入寄存器并更新DAC适合独立更新。AD5689_WriteBothChannels先写两个通道的输入寄存器最后发一个写DAC的命令同时更新两个通道实现同步输出。注意SPI传输的时候CS的拉低和拉高要干净不能有毛刺。如果SPI时钟比较快建议用硬件CS不要用GPIO模拟。另外两次写操作之间要留足够的间隔让DAC完成建立。4.4 输出电压计算与校准方法输出电压的计算公式前面提过但实际使用中会有偏移误差和增益误差。偏移误差是码值为0时的输出偏差增益误差是满量程时的输出偏差。这两个误差可以通过两点校准来修正。校准方法是先写码值0测量输出电压记为V0再写码值65535测量输出电压记为VFS。然后实际需要的电压Vtarget对应的码值可以用线性插值计算code等于65535乘以(Vtarget减V0)除以(VFS减V0)。这样可以把偏移和增益误差都补偿掉。如果对精度要求更高可以做多点校准用最小二乘法拟合。但大多数应用两点校准就够了。校准的时候要用高精度的万用表至少6位半否则测量误差会引入校准误差。5. 典型应用场景与实战案例5.1 工业闭环控制中的双通道输出在工业闭环控制中经常需要同时控制两个执行器比如双轴运动平台的两个电机驱动器或者温度控制中的加热和制冷两路。AD5689R的双通道可以分别输出两个控制电压而且同步更新可以保证两路同时生效避免先后顺序导致的控制偏差。我之前做过一个双轴微位移平台的控制两个压电驱动器需要0到2.5V的模拟电压分辨率要求至少14位。用AD5689R16位分辨率绰绰有余同步更新保证了两个轴的位移同时变化避免了耦合误差。实际测试下来两路输出的相位差在微秒级别对控制环路没有影响。这个场景下基准的稳定性很关键。压电驱动器对电压波动很敏感基准的温漂会直接导致位移漂移。我用了2ppm每摄氏度的基准在0到50度范围内输出漂移在几十微伏级别满足要求。5.2 自动测试设备中的精密激励源自动测试设备需要产生精密的激励信号用来测试被测件的响应。AD5689R可以作为激励源的核心产生直流或者低频交流信号。双通道可以同时产生两路激励比如差分激励或者正交激励。做交流激励的时候需要定期更新DAC码值来合成波形。更新率决定了波形的频率上限。SPI的写入速度加上DAC的建立时间通常可以做到几十千赫兹的更新率对应几赫兹到几千赫兹的波形频率。如果频率更高就需要用DMA或者硬件触发来加速更新。我做过一个正弦波激励源用查表法生成波形数据定时器触发SPI传输更新率100千赫兹输出1千赫兹的正弦波THD大约0.1%。这个性能对于大多数测试应用足够了。如果要更低的THD需要外接滤波器或者用更高分辨率的DAC。5.3 便携仪器中的低功耗设计nanoDAC系列的一大优势是低功耗AD5689R的工作电流在微安级别非常适合便携仪器。在电池供电的设备里功耗直接决定了续航时间。AD5689R还有掉电模式可以把功耗降到纳安级别进一步延长电池寿命。掉电模式通过命令字节设置可以设置成1千欧到地、100千欧到地、或者三态输出。1千欧到地适合需要快速恢复的场景100千欧到地适合低功耗待机三态输出适合多路复用。实际用的时候根据后级电路的输入阻抗来选择。我在一个便携式校准器项目里用了AD5689R平时工作在正常模式功耗大约1毫安。待机时进入掉电模式功耗降到几微安。整机用一节锂电池供电续航可以做到几百小时。6. 常见问题排查与避坑经验6.1 输出不正常时的排查思路输出不正常是最常见的问题可能的原因很多。我整理了一个排查流程按顺序检查可以快速定位。现象可能原因排查方法输出始终为0基准没接、SPI没通、芯片没供电测基准电压、测SPI波形、测电源输出始终为满量程基准过高、增益配置错误、码值写错测基准、检查增益寄存器、检查码值输出有跳变SPI干扰、电源噪声、地线环路用示波器看SPI和输出、检查去耦输出噪声大基准噪声、电源噪声、PCB布局差换低噪声基准、加滤波、改布局两路输出不一致通道间串扰、基准负载效应分别测两路、检查基准驱动能力我遇到过一次输出始终为0的情况查了半天发现是SPI的CS引脚接错了接到了另一个GPIO上。还有一次是基准芯片没焊好虚焊导致基准电压为0。这些低级错误其实很常见排查的时候先从最简单的开始。6.2 SPI通信失败的典型原因SPI通信失败通常有几个原因时钟极性相位配置错误、CS时序不对、数据位序不对、时钟太快。AD5689R的SPI是MSB优先如果配置成LSB优先数据就全乱了。时钟极性和相位要看数据手册的时序图不同厂家的定义可能不一样。还有一个容易忽略的点是CS的建立时间和保持时间。如果CS在SCLK还在翻转的时候就拉高数据可能没写进去。建议用示波器同时看CS和SCLK确认时序满足数据手册的要求。如果SPI总线上挂了多个设备要确保其他设备的CS在通信期间是高电平否则会干扰。可以用逻辑分析仪抓SPI波形一目了然。6.3 精度不达标的调试方法精度不达标可能表现为偏移误差大、增益误差大、线性度差、温漂大。偏移和增益误差可以通过校准解决线性度差通常是DAC本身的问题温漂大通常是基准的问题。如果校准后精度还是不够要检查基准的温漂和噪声。基准的初始精度可以校准掉但温漂校准不了除非做温度补偿。如果应用环境温度变化大一定要选低温漂的基准。PCB布局对精度的影响也很大。基准走线如果靠近数字信号线会耦合噪声。输出走线如果太长会引入压降和噪声。地线如果处理不好会形成地环路引入干扰。这些都要在布局阶段注意。提示调试精度的时候先用高精度万用表测直流输出排除交流干扰。如果直流精度没问题再看交流性能。如果直流精度就不行先查基准和校准。6.4 多通道系统中的串扰问题多通道系统中通道间的串扰是一个常见问题。串扰可能来自DAC内部的通道间耦合也可能来自PCB上的走线耦合。AD5689R的两个通道在芯片内部是独立的但共用基准和电源所以基准和电源的波动会影响两个通道。减少串扰的方法基准和电源的去耦要做好每个通道的输出走线要分开避免平行走线。如果对串扰要求特别高可以在输出端加缓冲器把DAC的输出和后级隔离开。我做过一个双通道项目一开始两路输出的串扰在负80分贝左右后来优化了布局和去耦降到了负100分贝以下。对于大多数应用负80分贝已经足够了但如果做精密测量还是要尽量优化。7. 选型对比与替代方案参考7.1 同系列不同型号的差异nanoDAC系列有很多型号AD5689R是双通道16位还有单通道的AD5689、四通道的AD5686等。选型的时候要根据通道数、分辨率、接口类型、封装大小来定。AD5689R的封装是LFCSP4毫米乘4毫米很小适合空间受限的应用。如果不需要16位12位的AD5689R-12或者14位的版本价格更低。如果不需要双通道单通道的版本更便宜。如果SPI速度不够还有并行接口的版本。选型的时候要把需求列清楚不要过度设计。7.2 与其他品牌DAC的对比市面上做精密DAC的厂家不少除了ADI还有TI、Microchip、Maxim等。TI的DAC8563、DAC8552也是双通道16位性能接近价格可能略有差异。Microchip的MCP4728是四通道12位分辨率低一些但通道多。Maxim的MAX5216是单通道16位精度不错。选型的时候不能只看参数还要看供货、价格、开发工具、技术支持。ADI的nanoDAC系列在业界口碑不错资料齐全社区支持好。如果项目周期紧选一个熟悉的方案可以省很多时间。7.3 什么场景不适合用这颗芯片AD5689R虽然好用但也不是万能的。如果需要的输出范围超过基准的两倍或者需要双极性输出就需要额外的电路。如果需要更高的分辨率比如18位、20位就要选更高端的型号。如果需要更快的建立时间比如纳秒级别就要选高速DAC。另外如果系统里已经有其他DAC只是需要增加一两路输出用分立方案可能更灵活。如果对成本极其敏感12位DAC可能就够了没必要上16位。选型的原则是够用就好不要为了参数好看而增加成本。8. 个人实操心得与后续扩展思路这颗芯片我用下来整体感觉是稳定、好用、省心。SPI接口简单寄存器操作不复杂双通道同步更新很实用。精度方面配合一个好的基准16位分辨率可以发挥出来。功耗低适合便携设备。封装小节省PCB面积。踩过的坑主要有几个一是基准的选择不能马虎一开始用了一个便宜的基准温漂大后来换了低温漂的才好。二是SPI的时序要仔细看数据手册不同批次的芯片可能有时序差异。三是PCB布局要重视尤其是基准和输出的走线布局不好精度就上不去。后续如果还要扩展可以考虑几个方向一是用多个AD5689R级联做更多通道的输出系统。二是用DMA加定时器做高速波形生成。三是加温度传感器做温度补偿进一步提高精度。四是把校准数据存在EEPROM里上电自动加载省去每次校准的麻烦。这个芯片的资料很全数据手册写得很详细应用笔记也有不少参考。建议新手先从评估板开始把基本功能跑通再自己画板。评估板的原理图和布局可以作为参考省去很多设计时间。
阅读完成 · 觉得有帮助?
咨询建站