ARTICLE DETAIL

资讯详情

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

HX711、CS1237、TM7707对比:24位ADC选型指南

HX711、CS1237、TM7707对比:24位ADC选型指南 做传感器采集、称重这行HX711、CS1237、TM7707大概是国产24位ADC里出镜率最高的三个名字。最近朋友做拉力计把三颗芯片的模块各买一块测了一圈后问我参数表看起来都接近为什么实际表现不一样这个问题很有代表性。我这次就顺着这个问题把三颗芯片从内部架构、关键参数、应用场景到常见坑完整梳理一遍给正在选型的你一份可以直接抄作业的参考。先说结论这三颗芯片虽然都标称24位但设计思路完全不同。HX711是典型的专用型芯片为电子秤场景而生CS1237是通用单通道方案可配置性能更好TM7707则是面向工业仪表的双通道SPI方案。选错不是因为参数不够而是没搞清楚自己的约束条件。1. 三颗24位芯片放在一起时选型为什么反而变难了1.1 24位只是标称分辨率不是你能用到的精度很多新手第一次看这三颗芯片的数据手册都会觉得震惊三颗都是24位ADC价格差不多封装又能对得上项目需求那随便选一颗不就行了这是选型中最大的误区。24位这个数字说的是ADC内部调制器的原始分辨率而不是最终送到你单片机里的有效数据精度。Δ-Σ ADC是把高速的1位码流经过数字滤波器抽值最终得到24位结果。但噪声永远存在尤其是热噪声、参考电压噪声、电源纹波、PCB布局引入的干扰叠加在一起之后低位的bit基本都在跳。我用一个直观例子说明一颗量程为2mV/V的称重传感器5V激励下满量程输出才10mV。如果ADC参考电压是5V24位对应的理论最小步进大约是0.3μV。看着很吓人对不对但实际测下来没有任何一颗芯片能在这种条件下稳定分辨到0.3μV。真正决定你能分辨多小信号的是有效分辨率或者噪声有效位数这个数通常远低于24位。1.2 先看一个最容易误导人的参数有效分辨率工程上判断一颗ADC能用不能用先看噪声表再看有效位数。所谓有效位数大致可以理解成信号满量程除以噪声之后还能剩下多少位是可信的。三颗芯片在典型工况下的表现大概是这样的HX711在10SPS、增益128、称重传感器场景下工程上普遍认为有效位数能做到20位左右。对一台家用电子秤来说这已经完全够用。CS1237因为在低速率下有更低噪声表现配合合适PGA和外部参考实际有效位数往往比HX711更好接近甚至超过21位的场景并不少见。TM7707的优势不在某一档位跑得特别高而在于双通道差分输入、可编程增益和校准功能叠加后整个系统的长期稳定性和可重复性更好。所以选型的第一步不是比谁标称位数高而是把需求翻译成关键约束你要多快的采样率接受多少噪声功耗上限多少通道数几个接口用什么把这些写清楚再回来比芯片答案会清晰很多。2. 从内部架构看三颗芯片的真实差异极简、可配置、多通道2.1 HX711为电子秤而生的极简派HX711是一颗把专用两个字写进基因的芯片。它内部不只是ADC还集成了稳压源、时钟振荡器、差分放大器。也就是说一颗HX711加一颗单片机再加一个称重传感器就能组成完整的电子秤硬件链路。它的数据接口只有两根线PD_SCK和DOUT。没有SPI寄存器没有配置命令增益和输出速率靠PD_SCK脉冲数来选择。具体行为是这样的转换完成后DOUT拉低单片机给PD_SCK送24个脉冲读出24位数据之后再送1个脉冲保持A通道增益128送2个脉冲切换A通道增益64送3个脉冲切换到B通道增益32。输出速率则固定为10SPS或80SPS两档。这种设计的优点是极好上手一个GPIO模拟时序就能通吃相关资料也铺天盖地。缺点是几乎没有灵活性参考电压固定在AVDD没有校准功能不能外接基准速率也只有两档。一旦项目需要适应多种传感器量程或做工业级长期漂移控制HX711就会显得力不从心。2.2 CS1237可配置性更强的进阶选手CS1237和HX711外观相似、管脚功能相似但设计思路完全不同。它是一颗真正意义上的通用单通道Δ-Σ ADC通过片内寄存器对外提供可配置能力。首先是PGA增益CS1237支持1、2、4、8、16、32、64、128共8档比HX711灵活得多。输出速率也更多10SPS、40SPS、640SPS、1280SPS覆盖了从高精度慢采样到快速动态采集的需求。其次是参考电压CS1237支持外部参考VAREF这意味着你可以放弃参考电压和电源电压绑定的限制接一颗低温漂基准芯片来提升整体精度。这是HX711做不到的。还有一个容易被忽略的功能CS1237内置温度传感器。对于需要做温度补偿的称重设备、电池供电的便携仪表来说这个功能很实用省掉了一颗外部NTC和一路ADC通道。接口方面CS1237是CS、SCLK、DOUT三线结构兼容SPI时序比HX711的两线自定义协议更规范。开发时需要写寄存器但配置项也就那么几个字节比TM7707简单很多。2.3 TM7707双通道工业仪表的主力TM7707是这三颗芯片里复杂度最高、也最接近工业级ADC定位的一颗。它最大的特点是双通道全差分输入加上可编程PGA 1到128倍配合标准SPI接口可以很方便地在一根SPI总线上挂多颗芯片适合做多通道采集模块。TM7707在参考电压上做得更彻底提供独立的REF和REF-引脚。你可以自由选择精密基准源也可以根据传感器桥路的实际情况调整参考电压幅值使用场景比前两颗宽很多。这颗芯片最值钱的其实是校准功能。它支持自校准和系统校准可以在上电时或者定期运行时修正芯片本身的失调和增益误差。对工业变送器这类需要长期稳定运行、不能频繁人工校准的设备来说这个能力非常关键。当然代价也有寄存器多、通信协议复杂必须先向通信寄存器写入命令字才能继续操作配置寄存器或数据寄存器。新手第一次用TM7707大概率会卡在时序上。3. 参数对比的正确打开方式这几个数字才是决定成败的关键3.1 核心参数速查表下面这张表把我认为最重要的选型参数放在一起可以快速横向判断。个别参数因芯片批次和封装不同会有差异建议最终以你手里的最新手册为准。对比项HX711CS1237TM7707输入通道A/B两路差分输入A用于称重B辅助1路差分输入2路全差分输入PGA增益A通道64/128B通道321/2/4/8/16/32/64/1281/2/4/8/16/32/64/128输出速率10/80 SPS固定两档10/40/640/1280 SPS可配置多档可编程参考电压内部以AVDD为参考可外部接入VAREF独立REF/REF-数据接口两线PD_SCK/DOUT三线SPI兼容标准SPI寄存器命令字访问片内校准无无支持自校准/系统校准内置温度传感器无有无片上稳压输出有无无典型应用电子秤、人体秤、珠宝秤低功耗便携仪表、传感器调理工业采集、双通道变送器3.2 参数背后的工程含义别把数字看死表格只是第一步真正选型时要理解每个参数背后的工程代价。输出速率和有效位数是跷跷板。任何Δ-Σ ADC速率越高数字滤波器带宽越宽噪底就越高有效位数越低。HX711的80SPS档位噪底明显比10SPS高这是正常现象。如果你的称重对象是静态的老老实实用10SPS别为了响应更快牺牲精度。PGA增益不是越大越好。高增益能把小信号放大但同时也会放大噪声和失调。CS1237和TM7707虽然支持128倍增益但实际使用时如果传感器满量程输出已经有20mV增益放在64甚至32就够了硬上128很容易让输出饱和数据反而没法用。参考电压决定了你能测多准。HX711用AVDD做参考AVDD上的电源纹波会直接变成测量误差。CS1237和TM7707使用外部参考时基准芯片的噪声和温漂指标就接管了系统的长期精度。高性能基准IC的温漂可以做到3ppm/°C甚至更低这比PCB布局上任何优化都更影响长期稳定性。接口差异影响MCU资源。HX711只要两个GPIOCS1237要三个GPIOTM7707走标准SPI总线。如果你MCU的SPI外设本来就空着TM7707能减轻GPIO压力如果你只想用GPIO模拟快速验证HX711和CS1237反而更友好。4. 三种典型应用场景的选型与电路设计思路4.1 厨房秤、珠宝秤、小量程称重直接选HX711如果你只是做一台量程1kg到3kg的厨房秤、珠宝秤或者简单的应变式压力传感器HX711就是最优解没必要往上追。原因是这类产品核心诉求是BOM成本低、方案成熟、开发周期短。HX711单芯片就解决了稳压、放大、ADC、数字接口四件事外围只需要几个去耦电容和一个晶振相关的最小系统。官方手册里甚至直接给了传感器供电和信号接入的参考电路照着画板基本不会翻车。电路上要注意的是传感器激励电压走线要干净。VSUP到传感器之间建议加磁珠或RC滤波AVDD去耦电容尽量靠近芯片管脚。10SPS速率下PD_SCK和DOUT都是低速信号但PCB上仍然要远离大电流开关节点避免脉冲干扰耦合进模拟输入。也提醒一点很多现成HX711模块上传感器接口没有做完整的差分滤波和ESD保护。做产品时要在传感器端加TVS管和共模电感不然生产运输和用户使用过程中很容易打坏输入级。4.2 便携拉力计、VR眼镜力反馈、多量程传感器仪表CS1237更合适当你的产品是电池供电或者需要应对多档量程或者想给传感器信号做温度补偿时CS1237的灵活性就体现出来了。比如一台便携拉力计满量程可能是5kg、50kg、500kg三档对应不同传感器或同一个传感器不同灵敏度。用HX711时增益只有64和128切换范围和匹配度都有限用CS1237则可以软件配置增益和速率一套硬件适应多个量程还能在低功耗模式下把整机待机电流压得很低。具体实现时我建议外部参考电压选择一颗低温漂基准不要直接短接VAREF到AVDD。这样做的好处是电源电压波动不会直接变成测量误差电池从4.2V掉到3.3V的过程中称重数据也能保持稳定。配置寄存器要注意一个细节写入配置后不要立刻去读数据等DOUT拉低表示一次转换完成后再操作。有些朋友一上电就开始读拿到的是旧数据或者半截数据最后以为是芯片坏了其实是时序没给够。4.3 工业变送器、双通道数据采集、PLC模拟量输入模块TM7707是正经选项把场景换成工业环境事情就变了。现场温度变化大、传感器走线长、信号可能叠加共模干扰、设备需要长期稳定运行这时候TM7707的双通道差分输入和校准功能就非常有用。双通道意味着一个模块可以同时采集两路线性信号比如一路接压力变送器输出一路接PT100温度信号共用同一个MCU和SPI总线。差分输入配合合适的输入RC滤波对现场共模噪声有天然的抑制能力。校准功能在工业场景几乎是刚需。传感器老化、放大器温漂、ADC本身增益误差都会让输出偏离初始标定值。TM7707的系统校准可以在每次开机时对标准源或已知信号做一次校准把大部分误差修正掉。单靠芯片自身精度硬扛反而容易在季度计量时被卡住。TM7707的参考电压设计要重视。REF和REF-不只是一个引脚电平而是ADC转换的基准。外部基准源要远离MOS管、继电器等开关干扰源基准输出电压要稳定在传感器输出范围之上留出足够裕量。电源端建议用低噪声LDO单独供电不要直接拿开关电源的5V去怼。4.4 一条简单的选型决策逻辑我习惯用约束条件做决策而不是比参数。把这几个问题过一遍答案就出来了只有一路称重信号、成本敏感、速率要求不高HX711足够。需要可调增益/速率、低功耗、外接基准或者想要温度传感器选CS1237。两路以上差分输入、要挂SPI总线、需要校准功能、面向工业场景选TM7707。如果处在灰色地带比如可能要两路也可能只做一路那就优先考虑TM7707双通道可以降级成单通道用但反过来不行。5. 落板之前必须避开的实操坑参考电压、电源与时序5.1 参考电压与比率式测量理解这层关系能少走很多弯路HX711一直被批评精度一般但很大一部分问题不是芯片本身造成的而是有人把它当成高精度绝对测量来用。HX711的参考电压就是AVDD也就是说它天然是比率式测量传感器激励由AVDD提供ADC参考也是AVDD供电波动理论上可以相互抵消。这种设计对电源噪声的容忍度比想象中高但也有前提AVDD上的高频噪声和传感器激励走线上的压降如果不一致抵消就不完全。这也是为什么HX711仍然强调电源去耦的原因。CS1237和TM7707外接基准后系统变成了非比率式测量。这时候传感器激励源和ADC参考是两套东西激励源漂移不会自动抵消必须保证传感器激励电压稳定否则输出数据会跟着供电漂。所以选外部基准时同时也要把传感器激励源做成低噪声、低温漂不能只盯ADC的参数。5.2 电源与PCB布局高精度ADC有一半性能死在供电上这类24位Δ-Σ ADC对电源噪声极其敏感尤其是数字电源和模拟电源混在一起时。我自己调试CS1237时遇到过一个问题数据在低四位反复跳怎么加软件滤波都不见好。最后用示波器量AVDD发现开关电源的纹波有50mV左右直接耦合进了参考端。后来加了一级LC滤波跳码立刻消失了。PCB上几个关键做法分享下模拟电源和数字电源从源头分开中间用磁珠或0欧电阻连接。ADC旁边的AVDD去耦电容用4.7uF加0.1uF组合参考电压引脚单独加10uF钽电容。AGND和DGND在ADC下方单点汇合不要形成大面积缝隙或者环路。传感器信号走差分线尽量短且对称每个输入引脚对地加10nF到100nF的滤波电容。工业场景下信号入口要预留TVS管和RC滤波的位置防止雷击和静电打坏芯片。另外温度也是一只隐形的手。大规模生产时回流焊后的残余应力会让ADC失调电压发生变化因此要求高的产品会在生产后做一次温度循环老化再重新校准。这个细节在消费类产品里容易被忽略但工业变送器项目最好提前考虑。5.3 三颗芯片各自的数据读取时序坑HX711小心SCK长时间拉高导致的复位HX711的PD_SCK有一个隐藏特性如果高电平持续时间超过60微秒芯片会进入复位状态。很多人在初始化时想用软件复位拉高SCK等一会儿结果发现芯片没反应其实就是这个原因。正常读数据时SCK高电平脉冲控制在1微秒左右就够。读出24位数据后如果想要保持A通道增益128再给一个脉冲就行。实际代码可以这样写/* gain: 1A通道增益128, 2A通道增益64, 3B通道增益32 */ static uint32_t hx711_read(uint8_t gain) { uint32_t value 0; /* 等待DOUT拉低表示一次转换完成 */ while (HX711_DOUT_READ()); /* 读取24位数据高位在前 */ for (uint8_t i 0; i 24; i) { HX711_SCK_WRITE(1); delay_us(1); value (value 1) | HX711_DOUT_READ(); HX711_SCK_WRITE(0); delay_us(1); } /* 补充脉冲选择下一轮通道/增益 */ for (uint8_t i 0; i gain; i) { HX711_SCK_WRITE(1); delay_us(1); HX711_SCK_WRITE(0); delay_us(1); } return value; }拿到24位原始数据后注意它是二进制补码格式。如果最高位是1说明是负数要在代码里做符号扩展否则转化成int会出错。CS1237写配置后别急着读数据CS1237的DOUT引脚兼作数据就绪标志转换完成后自动拉低。初始化时先写配置寄存器然后等待DOUT变低再读数据。容易踩的坑是CS为低时SCLK和DOUT的时序必须严格按手册来CS拉高后如果再次拉低芯片会认为是新一轮命令可能破坏当前转换结果。所以我习惯把所有读写操作封装成函数统一管理CS的状态避免在主循环里随手拉CS。TM7707命令字是绕不开的门槛TM7707比前两颗复杂所有寄存器访问都要先发通信寄存器命令字。正确流程是上电等待稳定发通信命令选择要操作的寄存器再写配置或读数据。如果驱动代码写得乱经常会出现怎么读都是同一个值或者寄存器写不进去的问题。我的建议是封装几个基础函数tm7707_write_reg(cmd, data)先发通信命令字再发数据。tm7707_read_reg(cmd)先发通信命令字再读数据。tm7707_wait_ready()轮询DRDY引脚。任何批量读写都基于这三个函数不允许在主流程里直接操作SPI。这样即使通信协议复杂调试起来也只是查函数内部逻辑的问题。上电后第一次读取的数据建议直接丢弃前几次转换结果会因为电源建立和数字滤波器初始化而不稳定。很多把新芯片读数异常误判成质量问题实际上只是少了这个暖机步骤。最后说点个人的选型习惯。我一般不会只看手册参数就定芯片而是把信号链分成传感器、模拟调理、ADC、MCU四段先把最容易出错的ADC读取时序跑通再测噪声。HX711和CS1237都有低价模块拿开发板测半天就能对有效位数有个感性认识TM7707则建议仔细读一遍寄存器说明再动手。先验证后画板能省掉很多改版的痛苦。如果你现在正卡在这三颗芯片的选择上我的建议是对照自己最大的约束——成本、功耗还是通道数——去选而不是纠结哪颗参数更好。毕竟把一颗芯片吃透带来的收益远比参数表上几个数字的差别更值得投入。
返回列表