资讯动态

基于AD5293与PIC24FV32KA304的可编程电阻校准台设计实战

发布时间:2026/9/12 1:14:37 来源:尧图企业网站定制
前阵子给一条压力变送器产线做标定台要在上位机和被测仪表之间插入一个能自动切换、可复现的“假传感器”把原来那排波段开关和手拧电位器全换掉。最后定下来的方案是 AD5293BRUZ-20-RL7 这颗可编程电阻配上一片 PIC24FV32KA304 做主控中间走 SPI模块端再单独做了电气隔离。这套组合不复杂但把校准、工业控制和自动化测试里最常遇到的“可编程电阻怎么选、怎么接、怎么标”三个问题都串起来了。这篇文章就把我从选型到产线跑通的完整过程写出来给正在做同类设备的兄弟一个可直接抄作业的参考。1. 校准时为什么要用可编程电阻1.1 校准的本质给被测设备一个“已知标准”不管你是做压力变送器、温度采集模块、外部 ADC 校准还是触摸屏四点校准原理都一样被测设备需要一个已知的输入量然后我们看它输出对不对。电阻类输入是特别常见的一类很多仪表直接用电桥、分压电阻或恒流源加电阻来模拟传感器。标定时你手里的标准电阻必须稳定、可复现而且不能因为反复插拔而改变阻值。比较典型的场景有这么几个。外部 ADC 做三点校准时需要分别在零位、中间值、满量程附近给三个精密电阻电阻触摸屏四点校准法里要在屏幕四角给出已知的物理坐标和对应的模拟电压分流器零漂校准时要用精密电阻配合微电流源把零点漂移测出来。这些场景的共同点都是“电阻值要换”而且换得越频繁人工操作越不靠谱。我这次做的是压力变送器产线校准台。变送器后级仪表需要模拟传感器在零压力、满量程和几个中间点的电阻变化以前是用精密电阻箱一组一组手动切换。问题很直接一条产线一天要测几百台操作员手速再快也难免拨错挡位而且电阻箱内部接触电阻会随使用次数变化。用 AD5293BRUZ-20-RL7 之后电阻由 MCU 通过 SPI 写入换挡时间从秒级降到毫秒级阻值还能原地重复几百次。1.2 机械电位器在校准设备里的三个“坑”有人在方案评审时问我既然只是调电阻为什么不直接买几个高精度机械电位器装在面板上我以前的设备确实这么干过但机械电位器在产线校准场景下有几个很麻烦的问题。第一个是重复性差。手拧电位器每次停留位置都不完全一样哪怕画了刻度线人的手一抖就是几十欧姆的偏差。对精度要求不高的调试可以忍对产线标定完全不能忍。第二个是温湿度漂移。机械电位器的碳膜或金属膜受温度影响较大而且湿度大的时候触点氧化会造成接触电阻跳动。放在空调房里还能勉强用放到车间现场就经常出现“上午校准完下午又偏了”的现象。第三个是自动化困难。产线要走半自动或全自动流程手拧电位器没法被机器直接控制只能靠人去看、去转。别小看这个切换动作哪怕每个工位多花 10 秒一天下来就是浪费几个小时。可编程电阻把这三个问题都解决了。数字电位器的游标位置由内部开关网络决定同样代码对应同样近似阻值不依赖手感阻值变化由数据字控制单片机或上位机一句命令就能切换整条流程可以脱离人工直接嵌入产线软件。当然数字电位器也有自己的局限比如端到端公差、游标导通电阻、温度系数等这些在选型时必须想清楚。我后面会详细讲。2. 选型思路AD5293BRUZ-20-RL7 到底强在哪2.1 型号后缀拆开看信息量很大很多新手拿到 AD5293BRUZ-20-RL7 这种型号会懵其实 ADI 的命名规则拆开看非常直白。AD5293 是器件系列和功能编号后面跟着的 B 表示温度等级对应工业级范围RUZ 是封装代码这里是 TSSOP中间的数字 20 表示 20 kΩ最后的 RL7 代表盘装适合贴片机生产。所以这颗料翻译过来就是AD5293 系列、工业级、20kΩ、TSSOP 封装、7 英寸卷带包装。AD5293 系列是单通道、10 位、1024 步进的数字电位器。20kΩ 版本在全阻值范围内一共 1024 个游标位置每一步对应的理论阻值变化量是 20000Ω / 1023 ≈ 19.55Ω。这里要注意有些资料会写成 1024 个位置对应 1023 个间隔因为游标从一端到另一端要经历 1023 次跳变。这个步进分辨率对于大多数校准应用是够用的但如果你需要连续无级调节就应该去看数字电位器的 DNL 和 INL而不是只看多少位。AD5293 系列宣传的 1% 端到端电阻公差在校准行业里是很有价值的。普通数字电位器很多是 20% 甚至 30% 的公差只能用在音量控制这种不在乎绝对阻值的地方。AD5293 的 1% 意味着你不需要每次都做全范围校准很多线性区间可以直接按代码推算出大致阻值。当然1% 仍然是相对值真正要做标准源时还是得用高精度万用表实测并建表。2.2 为什么是 SPI 而不是 I2C 或 PWM这颗器件的控制接口是 SPI我在选型时特意避开了 I2C 版本。原因有三个。第一I2C 是开漏结构需要外部上拉而且在工业现场线缆一长就容易出问题地址冲突、总线挂死都是麻烦。第二I2C 的速度上限一般不如 SPI校准设备经常要连续切换多个电阻点总线越快越好。第三SPI 是全双工读回数据很方便。AD5293 这类器件通常有读寄存器能力可以确认上一次写入是否正确这个特性在自动测试系统里非常实用。用 SPI 时主控端只需要占用三根信号线加一根片选SCLK、DIN、DOUT、CS。PIC24FV32KA304 的 SPI 模块硬件上直接支持这些信号固件里配置一下就能用不像 PWM 调电阻还需要外接滤波器和三极管精度和稳定度都差一大截。2.3 工业应用更看重温度系数和供电范围只看分辨率和公差还不够工业校准设备经常放在车间或户外温度变化很常见。这时候要关心数字电位器的温度系数。AD5293 这类工业级器件在数据手册里给出的电阻温度系数通常在 35ppm/°C 左右意思是环境温度每变化 1°C阻值大约变化百万分之三十五。对 20kΩ 来说就是每摄氏度变化 0.7Ω 左右。如果只做单点校准这个漂移可以忽略但如果你的标定台要维持 0.1% 以内的精度就要考虑把设备放在恒温环境或者在软件里做温度补偿。供电范围也决定了一颗数字电位器能不能直接放进模拟回路。AD5293 可以工作在比较宽的单电源或双电源条件下实际能用的电压范围以数据手册为准。很多工业控制回路里习惯用 ±15V 供电或者用 24V 单电源再分压选型时一定要确认数字电位器的模拟电源引脚能不能承受。别买回来才发现只能 5V 供电最后还得加一堆电平转换和电源调理得不偿失。3. 主控选择PIC24FV32KA304 够不够用3.1 一颗“够用就好”的低功耗 MCU主控我选了 PIC24FV32KA304。这颗 MCU 不是跑复杂算法的那种但在这种设备里它反而非常合适。它的优势是低功耗、外设集成度够、引脚数量足够而且工作在 3.3V 逻辑配合 AD5293 的逻辑接口很方便。你可能会有疑问不就是发几个 SPI 命令吗随便一个 8 位单片机都能干为什么选 PIC24F我的理由是它留了足够的扩展余地。产线标定台除了控制可编程电阻还要通讯、显示状态、保存校准参数、读取外部 ADC 数据甚至跑一个简单的状态机。PIC24FV32KA304 的 32KB Flash 看起来不大但放一个完整的上位机协议栈和标定流程绰绰有余如果只用一个 8 位 MCUFlash 和 RAM 会比较紧张后面加功能时很痛苦。另外这颗 MCU 的模拟外设也不错。校准台有时候需要采集标准源的实际电压或电流直接用一个片内 ADC 做辅助监测就够了省掉一路外部 ADC。它的 eXtreme Low Power 特性在这个设备里不是重点但长期通电的产线设备功耗低一点电源和散热压力也小。3.2 硬件连线一张表说清PIC24FV32KA304 与 AD5293 的连接不复杂我把引脚规划列在这张表里方便你参考。PIC24FV32KA304 引脚AD5293 引脚/信号说明VDD/VSSVDD/VSS3.3V 和地注意模拟地和数字地单点连接RB2普通GPIOCS片选低有效SCK1SCLKSPI 时钟SDO1DIN单片机发送数据给数字电位器SDI1DOUT数字电位器回读数据给单片机RB3预留RDY/其他状态脚可选用于忙状态检测实际焊接时每颗芯片的电源引脚旁边都放一个 100nF 陶瓷电容AD5293 的模拟电源引脚还可以再加一颗 10μF 钽电容或电解电容。单片机与数字电位器之间的信号线尽量短如果必须隔着连接器走线串一个几十欧姆的电阻可以抑制振铃。4. 硬件设计里几个容易翻车的地方4.1 输出端不是简单接根线就行数字电位器的输出端看起来像一个普通可调电阻但实际使用时有几个“隐藏参数”。第一个是游标导通电阻就是游标到内部开关节点之间的等效电阻。它虽然不大但会叠加在目标阻值上。第二个是端到端电阻的公差AD5293 是 1%但 1% 对 20kΩ 来说就是 200Ω 的绝对误差。如果你的被测设备输入阻抗很高比如后级是仪表放大器或 ADC那游标导通电阻的影响可以忽略。但如果输出要驱动一个低阻抗负载比如几十欧姆的回路直接用数字电位器就会因为负载电流过大产生额外的导通电阻变化电阻值根本稳不住。这种情况需要加一级运放缓冲或者把数字电位器放在反馈回路里让它只提供参考电压而不是直接驱动负载。我用一个生活类比的思路给新手解释数字电位器像一个有内部摩擦力的旋钮你轻轻摸它没事但使劲压它转动位置会偏。低阻抗负载就是那只“使劲压它”的手。4.2 电源、地线和 SPI 噪声处理工业标定设备里最大的敌人不是芯片不够好而是噪声。数字电位器本质上是一个由 MOS 开关网络构成的电阻分压器对电源纹波和地弹特别敏感。如果 VDD 上有高频噪声游标输出上就会被耦合出同样的噪声。所以电源要做两级滤波核心芯片的电源引脚旁边放 100nF电源入口放一个 10μF 和一个小电感组成简单的 π 型滤波。地线规划也很重要。模拟信号相关的地和数字接口的地最好是单点连接不要让 SPI 的大电流回流路径穿过模拟参考点。如果 PCB 空间紧张至少也要保证 AD5293 的模拟电源引脚和 MCU 的数字电源引脚各自有独立的去耦电容地脚然后汇聚到电源入口一点。SPI 线在工业现场如果超过 20cm我就不建议裸跑了。优先用数字隔离器把 MCU 和 AD5293 隔开比如常见 SPI 隔离芯片隔离后的信号到数字电位器仍然保持相同的极性。这样既不牺牲时序又能把设备端和被校准端的地彻底分开。校准仪表时最怕的就是两个设备地环流地环流带来的误差有时候比芯片本身的误差还大。4.3 上电默认状态必须可控这是很多人第一次用数字电位器时忽略的坑。单片机还没初始化、SPI 还没配置的时候AD5293 的输出是什么状态有的器件默认在中点有的默认是某个固定代码有的甚至保持最后一次写入值。如果你的被测设备在上电瞬间就采样了电阻值而这个默认值不对校准流程就从第一步就错了。我在这个项目里做了一个很简单的处理PIC24FV32KA304 上电后第一件事就是往 AD5293 写一个确定的初始代码让电阻输出到一个固定安全值然后再允许上位机开始校准流程。如果客户要求更严格我会在硬件上增加一个复位监控芯片让 MCU 复位期间把 CS 拉高禁止任何误写等系统稳定后再释放。4.4 负载电流和散热要按余量算数字电位器的游标端允许通过的电流是有限制的。如果你用它做分压电流一般很小不会有问题。但如果把它当作可变电阻串在功率回路里可能瞬间就超过额定电流轻则阻值漂移重则烧内部开关。选型时要用最坏情况算一遍最大电压除以最小阻值得到的电流不能超过数据手册给的最大游标电流。如果确实需要低阻值或大电流别硬用数字电位器。更合理的方案是“数字电位器运放/V/I变换”结构让数字电位器只做设置点真正的功率路径交给晶体管或运放去承担。这样虽然多几个器件但可靠性高得多。5. 固件实现从写游标到完整标定流程5.1 SPI 写游标函数封装我把 AD5293 的游标写操作封装成一个函数统一入口。核心代码思路是先把要写入的 10 位游标值拼成命令帧然后通过 PIC24 的 SPI 模块发送最后操作片选引脚完成锁存。// 数字电位器写游标 // code: 0~1023对应 A/B 两端之间的 1024 个位置 void dpot_write(uint16_t code) { uint16_t frame; uint8_t hi, lo; if (code 1023) code 1023; // 命令帧高位是写操作命令低 10 位是游标值 // 实际命令值以器件数据手册为准MPLAB 工程里用宏定义 frame (DPOT_WRITE_CMD 10) | code; hi (uint8_t)(frame 8); lo (uint8_t)(frame 0xFF); CS_IO 0; // 拉低片选开始传输 __delay_us(1); // CS 建立时间 SPI1_ExchangeByte(hi); // 先发高 8 位 SPI1_ExchangeByte(lo); // 再发低 8 位 __delay_us(1); // 让数据在时钟后稳定 CS_IO 1; // 拉高片选命令锁存 __delay_us(1); // 锁存时间 }SPI 模式我一开始是按 Mode 0 调的也就是时钟空闲为低、数据在上升沿采样。但不同批次和不同版本的手册可能给出不同时序参考所以上板调试时先用逻辑分析仪抓一下 DOUT 和 SCLK 的波形确认采样沿对不对。不要凭经验硬猜。5.2 从“写数值”到“写电阻”的两步标定AD5293 写入的是数字代码不是直接写“我要 5000Ω”。代码和实际阻值之间的关系虽然理论上接近线性但因为端到端公差、游标导通电阻和内部开关的非线性直接用理论公式换算容易产生误差。所以正式使用前要给每颗料做一次两点或三点标定。第一步把游标分别写到 0、1023 和 512用高精度万用表实测三个位置的电阻记录下来。第二步用 0 和 1023 两点求一条线性斜率得到代码到阻值的初步映射。第三步把 512 这个点跟线性映射预测的值比较得到中点的非线性偏差。如果这个偏差不大就用三点分段线性插值去补偿如果偏差仍然不符合要求就把整个量程切成 16 段每一段单独保存斜率和偏移。我这里放一个实际做过的小表格说明校准参数怎么被记录和使用校准点目标代码实测电阻理论电阻偏差零点062.3Ω0Ω62.3Ω中点51210085Ω10000Ω85Ω满点102319937Ω20000Ω-63Ω三点拟合---±25Ω实际使用中我会把这三个点存到 MCU 的 Flash 或外部 EEPROM每次开机后读出来做一次线性插值。这样即使换了一颗新的 AD5293只要重新跑一遍标定流程误差就能被补偿到系统允许的范围内。5.3 产线自动化流程里怎么嵌入“三点校准”产线标定台不会只调一个电阻点它需要跑一整套流程。我写的固件状态机大致是这么几步上位机通过串口发来“设置目标电阻 5.000kΩ”MCU 根据当前标定参数反算代码调用 dpot_write然后等待 10ms 让输出稳定再通知上位机“可以读取被测仪表输出”上位机读完后继续发下一个目标点最后把全过程结果生成报表存到服务器。这里要注意的是“等待稳定时间”。数字电位器的游标从一个位置切到另一个位置时内部开关网络和输出电容需要时间充放电尤其是驱动容性负载时。理论上看数字电位器的建立时间是微秒级但接上外部滤波电容和长线缆后整个回路稳定可能需要几毫秒甚至几十毫秒。我习惯把这个时间做成可配置参数默认给 20ms宁长勿短。三点校准的过程和正常流程基本一样只是目标电阻点选择在量程的低、中、高附近。比如 20kΩ 的数字电位器我会选 2kΩ、10kΩ、18kΩ 三点分别代表小信号、中信号和大信号。三点校准比两点校正在中间段更准因为很多非线性不是单纯的斜率和偏移而是中间弯曲的。触摸屏四点校准、外部 ADC 三点校准本质都是用多个已知点去拟合一个映射思路完全相同。6. 常见问题与排查技巧实录6.1 输出值一直不变或乱跳我调试时第一个遇到的问题就是写命令后游标不动。检查了半天发现是 CS 信号没有按照 SPI 时序拉低拉高。很多数字电位器要求 CS 低电平时数据逐位移入高电平时锁存如果片选信号在上电后被其他初始化代码误拉高后面的命令就全部无效。排查方法很简单用逻辑分析仪同时抓 CS、SCLK、DIN 三根线看命令帧的位序和片选时序对不对。如果逻辑分析仪上没有波形就先查 MCU 的 SPI 模块有没有使能、引脚复用寄存器有没有配置对。输出值乱跳一般不是通信问题而是电源或地线问题。我用一个 100nF 电容直接并联在 AD5293 的 VDD 和 GND 引脚上现象立刻消失。如果还跳就在输出端加一个 RC 滤波比如 1kΩ 串 100nF 到地但要注意这个滤波器会影响建立时间。6.2 实测电阻和理论值总差一个固定值这个现象通常是游标导通电阻造成的。代码 0 对应的不是“两个端子直通”而是内部还有一个很小的等效电阻。解决方法是把游标导通电阻当作一个系统偏移量来做软件补偿不需要改硬件。还有一种情况是万用表的测试电流太大。有些 DMM 在低阻档会输出 1mA 或更大的测试电流数字电位器内部开关在这种电流下会有一定的导通压降换算成电阻就是额外偏差。测 20kΩ 这种阻值建议用高阻档或四线制减少接触电阻和引线电阻的影响。6.3 批量生产时第一台正常第二台就跑偏如果每一颗 AD5293 都用同一套线性参数批次之间因为端到端公差不同出现偏差是完全正常的。1% 公差意味着同一订单里的 20kΩ 器件实际端到端阻值可能是 19.8kΩ 到 20.2kΩ换算成电阻步进就差了几十欧姆。生产时不能把标定参数写在固件里写死必须在设备出厂前用标准电阻源跑一遍“自动标定 - 保存参数 - 锁定”的流程。另外如果你用的数字电位器带非易失存储还要小心上一台产品的残留配置。我每次在新设备初始化时都会强制写一个固定初始代码而不是依赖芯片默认值。这样可以保证同一批产品的初始状态完全一致。6.4 高速 SPI 在长线上不稳定SPI 时钟越高信号边沿越陡在长线上越容易产生振铃和串扰。如果你只是为了写一个游标值根本不需要追求高速。我实际项目中把 SPI 时钟压到 1MHz命令帧 16bit一条完整命令耗时不到 20μs对校准设备来说完全够快。如果必须在更高速率下工作就要从硬件上解决缩短走线、加串联电阻、保证地线连续、必要时用差分隔离方案。软件上另外加一个简单的校验回读每次写入后再读寄存器确认这样即使偶尔被干扰也能及时发现并重发。7. 最后再分享一个经验这块板子在产线跑了一个月后我复盘时最大的体会是数字电位器本身不神秘但把它用好的关键在于“接受它的不完美然后用系统手段去补偿”。它的公差比精密电阻箱差但它能自动切换它的游标导通电阻不是零但你可以软件扣掉它的温漂不是零但你可以把它放进恒温箱或做温度查表。后面如果再扩展我会在这个基础上加一路外部高精度 ADC把 AD5293 的实际输出电压实时采回来做闭环校准。这样不仅能补偿数字电位器自身的误差还能把后级信号调理电路的温度漂移一起拉回来。对产线标定这种“多测一台是一台”的场景哪怕省下 0.1% 的误差都是值得的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价