HX711称重传感器实战:从STM32接线到校准排障全指南

发布时间:2026/8/31 15:36:59
HX711称重传感器实战:从STM32接线到校准排障全指南 简介本资源是一套面向嵌入式开发者与电子爱好者的基础称重系统开发代码包聚焦HX711高精度称重芯片的驱动实现与传感器数据采集解决初学者在单片机平台上对接称重模块时常见的通信异常、校准困难及去皮功能实现等实际问题。压缩包共3个文件2个C源文件、1个头文件总大小仅4KB结构精简HX711.c封装了底层时序驱动与AD值读取逻辑HX711.h定义寄存器操作宏与函数接口main.c提供典型测试流程含10kg传感器初始化、零点校准、去皮计算及重量换算示例便于快速集成到STM32/51/Arduino等平台。目前已有3570人学习下载代码注释清晰、变量命名规范完整覆盖信号采集→滤波→校准→单位转换→去皮处理的全流程是理解称重传感器数字接口原理与工程落地的实用入门参考。 如果你买过电子秤配件或者自己折腾过基于称重传感器的项目大概率绕不开一颗叫HX711的芯片。这颗专门为桥式传感器设计的24位ADC几乎统治了从厨用秤到工业料斗秤的入门级市场。我第一次用STM32接称重传感器做料斗秤时还觉得这么便宜的芯片肯定精度一般结果实测下来发现它确实能打但也确实有不少文档里不会写的坑。这篇就把我从硬件接线、软件时序、标定校准到实际排障的完整经验整理出来顺带把很多人常搜的HX710到底和HX711什么关系说清楚。看完这篇你应该能明白HX711和称重传感器是怎么组成一套可靠称重系统的也能直接照着我给的步骤把代码和电路跑通。无论你是第一次接触称重芯片的嵌入式新手还是想在新项目里换掉老ADC的工程师都值得花十分钟把这篇看完。1. 为什么几乎所有电子秤项目都绕不开HX711这颗芯片1.1 HX711解决的核心痛点把毫伏级差分信号变成干净的数字量称重传感器的本质是惠斯通电桥。电桥在受力时四个应变片电阻发生变化输出一对差分电压信号。这个信号有多小呢常见传感器灵敏度在1mV/V到2mV/V左右如果你用5V激励满量程输出也就5mV到10mV。这个量级的信号直接接普通MCU的ADC根本没法用必须经过高精度放大器放大之后才能采样。而HX711做的事情就是把“精密放大”和“高精度ADC”打包到了一颗芯片里。它内部集成了低噪声可编程增益放大器PGA增益最高可以到128倍可以把5mV级别的信号放大成MCU能轻松处理的电压范围然后直接输出24位数字量。你想想如果用分立方案你得自己选仪表放大器、配增益电阻、设计抗混叠滤波、再配一个高精度差分ADC外围一大片调试起来更是折磨。HX711把这些全集成进去外围只需要几个电容电阻最多再加一颗晶振都省了——它用内部RC振荡器。所以与其说HX711是一颗ADC不如说它是“称重前端解决方案”。这也是它能在那么多项目里被选中的根本原因它把模拟链路里最容易翻车的部分用一颗便宜到几乎可以忽略成本的芯片替你扛了。1.2 同样是24位ADC为什么HX711打不过市面上的24位ADC其实不少比如ADS1232、CS1232、TI的ADS1220但它们要么贵要么外围电路要求高要么软件驱动复杂。HX711的厉害之处在于它把复杂的东西全藏起来了。举几个细节你就明白。第一它内置了稳压电路可以直接给传感器电桥供电省掉一路LDO。第二它的数字接口只有两根线DOUT和PD_SCK一个数据输出一个时钟控制随便哪个MCU都能用GPIO模拟时序不需要SPI外设不需要配置寄存器拉电平就是读。第三它的数据输出速率支持10Hz和80Hz两档对于称重这种慢变信号10Hz已经足够抗噪声表现也更好。另外不得不提的是价格。批量采购单价几毛钱到一块多钱这个价位下还能保证24位无失码等效精度做到20位左右确实没什么对手。这也是为什么那些量产电子秤方案里从几十块的厨房秤到几百块的精密秤你都能看到HX711的身影。它可能不是性能最强的但绝对是性价比最离谱的。2. 硬件接线从传感器到芯片到MCU的完整链路2.1 称重传感器怎么选搞清楚量程、灵敏度与激励电压在接线之前先花一分钟把传感器选对。称重传感器的核心参数有三个量程、灵敏度、激励电压。量程好理解就是你最大要称多重。但这里有个大家容易忽略的点传感器最好在20%到80%量程区间工作长期满量程甚至超载会加速应变片的蠕变影响寿命和重复性。所以如果你要称最大5kg的东西选10kg量程的传感器比选5kg的更稳。灵敏度通常是1mV/V或2mV/V表示每伏激励电压下满量程输出多少毫伏。比如灵敏度2mV/V激励5V满量程输出就是10mV。这个值决定了HX711的PGA增益怎么设置也决定了系统的分辨率极限。激励电压方面HX711的模拟电源AVDD通常可以接到2.6V到5.5V实际模块上很多直接用5V或3.3V给传感器供电。需要注意的是传感器的输出信号是相对激励电压的比例信号激励越稳定输出越可靠。如果激励源纹波大ADC读数的噪声也会明显变大。2.2 传感器与HX711的接线颜色对照大多数称重传感器出线是四根红色接正激励E黑色接负激励E-绿色接正信号S白色接负信号S-。HX711模块上对应的丝印一般是VCC、GND、DT、SCK其中传感器端接VCC和GNDDT和SCK接MCU。需要注意不同厂家的传感器颜色定义偶尔有差异。我遇到过红色和绿色定义互换的接线之前最好用万用表量一下激励两端一般电阻较大信号两端电阻稍小电桥的输入输出阻抗可以帮你判断哪对是激励、哪对是信号。如果使用五线制传感器多出来的一根一般是屏蔽线接大地或者接HX711模块的AGND不要悬空否则长线传输时容易引入共模噪声。2.3 电源与去耦影响精度的隐藏因素HX711模块对电源还算宽容但想拿到理想的噪声指标供电质量不能太随便。我的建议是传感器激励和HX711模拟部分尽量用线性稳压供电别直接用MCU板载的DC-DC输出开关噪声对24位ADC的影响是实打实的。在HX711的电源引脚附近放一颗10uF和一颗0.1uF陶瓷电容并联去耦离芯片越近越好。如果模块上没集成稳压而你的传感器灵敏度是2mV/V建议用5V供电这样满量程差分信号10mV配合PGA增益128ADC输入范围能吃得比较满分辨率最好。信号线尽量短使用屏蔽双绞线绞合可以抑制共模干扰。传感器远离电机、继电器这类感性负载如果实在避不开加屏蔽挡板或者换位置。我自己第一次做的时候为了偷懒直接把传感器接到了开发板的3.3V上结果读数的峰峰值波动折算成重量有0.3g左右后来换成独立5V线性稳压供电噪声直接降到0.05g以内。电源对24位ADC的影响真的不能小看。3. 软件读取DOUT/PD_SCK时序、完整代码与数据换算3.1 HX711的握手时序到底是怎么回事HX711的数据接口不复杂但时序细节必须搞清楚。芯片在上电并完成一次转换后会把DOUT拉低表示“数据准备好了”。MCU看到DOUT为低就发送时钟脉冲来读取数据。每发一个PD_SCK脉冲DOUT上就移出1位数据先发的是最高位MSB。连续发24个脉冲就能读完整整一个24位转换结果。读完之后再补一个第25个脉冲会触发芯片开始下一次转换同时DOUT重新变高。这就是一次完整的读取周期。这里有个容易犯迷糊的点每次上电后HX711的第一次转换结果是不稳定的建议先丢弃前几次读数。另外如果DOUT一直不拉低大概率是芯片没正常工作先查电源再查PD_SCK线是否接对。3.2 一份可以直接抄的HX711读取代码下面用Arduino风格的代码演示核心读取逻辑换成STM32或者ESP32也就是把GPIO操作替换成对应的HAL或寄存器操作。const int PD_SCK 2; const int DOUT 3; long readHX711() { // 等待DOUT被拉低表示转换完成 while (digitalRead(DOUT) HIGH); long raw 0; for (int i 0; i 24; i) { digitalWrite(PD_SCK, HIGH); raw (raw 1) | digitalRead(DOUT); digitalWrite(PD_SCK, LOW); } // 第25个脉冲为下一次转换做准备 digitalWrite(PD_SCK, HIGH); digitalWrite(PD_SCK, LOW); // 24位数据转换成有符号整数 if (raw 0x800000) { raw | ~0xFFFFFF; } return raw; }这段代码是HX711软件驱动的骨架。需要注意第25个脉冲的位置有些资料为了简化会漏掉它但漏掉之后芯片不会自动开始下一次转换导致下一次读数永远是旧数据。另外如果你的MCU速度特别快两次PD_SCK脉冲之间建议加一点延时我一般用noDelay或者简单空循环等几微秒避免时序太紧导致数据错位。3.3 从原始值到重量说的是比例因子而不是“分辨率”HX711输出的24位原始值本身没有任何物理意义必须通过校准把它映射成重量。最简单的方式就是线性映射重量 (当前读数 - 零点读数) / 比例因子这里的比例因子scale表示“每单位重量对应的ADC读数增量”。比如你用1kg标准砝码测得读数增量为100000那么比例因子就是100000之后任何读数的差值除以100000就是重量kg。很多新手会纠结“24位ADC分辨率是不是就是精度”这是个重大的理解误区。24位只是ADC输出的位数最终的称重分辨率还取决于传感器量程、灵敏度、PGA增益、供电噪声和机械结构。一块满量程5kg、输出10mV的传感器经128倍放大后只有1.28V的摆幅分配到24位ADC上理论分辨率极高但实际噪声会把有效分辨率拉到20位甚至更低。所以别去看“24位”这个数字要用实测噪声来评估你的系统到底能分辨到多少克。4. 校准与标定让重量读数真正可信4.1 零点校准和两点校准把电路跑通、能读到稳定原始值之后第一件事就是校准。我校准的顺序固定是这样让设备上电预热5到10分钟让芯片和传感器温度稳定。空载状态下连续采样100次取平均记为offset。放上标准砝码比如1kg采样100次取平均读数记为w1。比例因子 scale (w1 - offset) / 砝码重量。之后每次读重量先读原始值减去offset再除以scale即可。注意offset和scale不是一次校准一劳永逸的。传感器本身的蠕变、环境温度变化、秤台的机械形变都会让这两个参数飘移。实验室精密秤要每天校准工业秤也要定期用标准砝码校验。如果你做的是批量产品最好在出厂前做一次自动化两点校准并把校准参数存到非易失存储里。4.2 多点线性校正把非线性误差压下去两点校准假设重量和读数完全是线性关系但实际传感器在低量程和高量程区都存在一定非线性。当你的应用需要全量程精度时建议做多点校准。具体做法准备5个重量点例如满量程的0%、25%、50%、75%、100%每个点采样取平均得到一组(weight, raw)数据然后用最小二乘法拟合成一条直线raw k * weight b或者更实用的是直接拟合重量关于读数的逆函数方便后续换算。拟合得到的k和b就替代了上面的scale和offset。我用Excel或者Python的numpy都能算几行代码搞定。拟合完记得验证一下中间点的误差比如你校准了0kg、2.5kg、5kg、7.5kg、10kg那就额外放一个3kg砝码看看读数偏移多少误差通常能压到0.1%以内。4.3 校准时的几个容易忽略的细节给个清单都是我踩过的坑砝码要放在传感器受力中心点也就是秤台的几何中心。放偏了会产生额外的力矩导致读数和实际值不匹配。每次校准要等读数稳定后再采样别刚放上去就读取传感器受力瞬间有振荡过程。冷启动和热启动的零点不一样校准前要先跑几分钟预热程序。如果秤体结构是可拆卸的比如料斗和传感器分开拆装之后必须重新校准因为机械路径变了受力分布也会变。这些细节单看都不起眼但组合在一起往往就是“校准完之后读数裸飘”的真正原因。5. 实测中的坑漂移、噪声、机械共振与滤波策略5.1 上电漂移和长时间漂移HX711读完数之后很多人第一个发现的现象是就算秤台上什么都不放读数也在慢慢变化。这不是芯片坏了大概率是以下几种原因之一。第一种刚上电时芯片模拟电路还没稳定内部参考电压和PGA偏置都在慢慢稳定。这个一般几分钟内会收敛。第二种传感器受压后弹性体和应变片存在蠕变现象长时间负重后即使卸载零点也会回不到原位。这个叫滞后和蠕变是传感器材质决定的校准可以缓解一部分但无法完全消除。第三种温度漂移。HX711的模拟增益和传感器灵敏度都随温度变化温度变了读数就飘。所以环境温度变化大的场合要么隔一段时间自动校准一次零位要么做温度补偿。我实际用下来最有效的办法是软件加一个“零点跟踪”机制当读到的重量在一个很小的阈值范围内持续一定时间后自动把offset缓慢更新到当前的读数。电子秤产品几乎都有这个功能不然卖出去第二天用户就会发现空秤不回零。5.2 数据滤波不是所有噪声都能靠硬件消除硬件做好去耦和屏蔽噪声会小很多但不可能为零。这时候就要在软件层面对采样值做处理。我常用的滤波组合是先做一个N点中值滤波把偶发的脉冲干扰剔掉再做滑动平均或一阶低通把高频抖动平滑掉。一阶低通的形式很简单filtered filtered * alpha raw * (1 - alpha);alpha取0.7到0.9之间。alpha越大滤波越平滑但响应越慢。如果你既要响应快又要平滑可以试试自适应滤波读数变化大时减小alpha读数稳定时增大alpha。动态称重的场景下这招特别有用。但也要提醒一句滤波会引入滞后。如果你把alpha设成0.95那么放上一个砝码之后显示值可能要两三秒才能稳定到最终值。对需要快速大量称重的场景这是一种变相的精度损失。我的原则是能满足实际显示的平滑度前提下滤波强度尽量小。5.3 机械共振软件怎么调都压不掉的那条正弦波有一个坑我花了两天才排查出来读数显示为一条低频正弦波周期大概几百毫秒幅度刚好在称重分辨率边缘。一开始以为是电源干扰换电源、换传感器、加屏蔽都没用。后来才意识到这是秤台的机械共振。秤台本身是一个弹簧质量系统给台面一个激励之后它会按照固有频率来回震荡这个震荡通过传感器被HX711忠实地采了进来。频率通常从几赫兹到几十赫兹正好落在ADC带宽范围内。解决思路有几个。结构层面增加秤台的阻尼比如在台面下加橡胶垫或者改变支撑方式让振荡衰减得更快。软件层面如果共振频率比较固定可以做一个简单的高通或陷波滤波专门抑制这个频率。最粗暴的办法是把HX711的输出速率从80Hz降到10Hz让采样带宽更窄高频共振分量会被自身响应滤掉一部分。不过10Hz模式下对共振依然采得到最好还是从机械上解决。5.4 EMC干扰不是玄学是真实存在的最后一个常见坑是EMC干扰。我接过一个案例设备一靠近变频器读数就开始乱跳。HX711本身是低功耗高精度ADC对强电磁环境很敏感。变频器、继电器、直流电机启动瞬间会在电源和信号线上耦合出很大的瞬态干扰。处理办法从源头开始传感器线用屏蔽层接地的双绞线HX711电源入口加磁珠加TVSMCU和传感器之间用光耦或者其他方式做电气隔离PCB布局上模拟地和高频数字地分开单点汇接。我做过的可靠方案里电源进线端串联一颗几百欧姆的磁珠TVS管对地效果提升非常明显。如果你的产品要过认证ESD和EFT测试基本绕不开这几个点提前把它们设计进去比事后打补丁省事得多。6. HX710不是简单升级版两者的定位与选型对比6.1 HX710和HX711的核心差异很多人看到HX710这个型号会下意识觉得这是HX711的升级款实际上完全不是这么回事。这是两颗定位不同的芯片只是在命名上容易让人混淆。HX710也是一颗24位高精度ADC但它是为气压传感器、低压压力传感器这类应用设计的典型场景是电子气压计、高度计、液位检测。它内部集成了低噪声放大器和专用的参考电压外围器件比HX711还少封装更小功耗也更低。而HX711专为桥式称重传感器设计带有通道A和通道B其中通道A支持增益128/64可调通道B固定增益32。如果拿去做气压传感器HX711反而没有HX710方便因为HX710针对单端小信号做了优化。反过来如果拿HX710去接称重电桥虽然能读出差分信号但它的增益配置和参考电压设计并不是为电桥优化的实际效果通常不如HX711。6.2 怎么选才不后悔我的选型逻辑很简单只要你的核心应用是“应变片电桥重量测量”无脑选HX711。它方案成熟参考代码多抗干扰的经验也丰富直接抄作业最稳。如果你做的是气压、液位、流量这类基于压阻式传感器的小信号测量且量程相对固定可以了解HX710。它更省电外围更少适合电池供电的便携设备。如果你需要更高的精度指标或者要接多路传感器那就得把目光放到更高端的ADC方案上去了。这些都是后话。顺带提一句网上不少卖家把HX710描述成“HX711的替代品”这种说法不准确。设计的时候还是得先看芯片手册的需求定义别被营销词带偏。6.3 最后分享一个使用习惯我每次用HX711都会在PCB上预留一个可以切换RATE引脚电平的电阻位方便在10Hz和80Hz两档之间切换实测对比。虽然最终量产版本基本都固定10Hz但调试阶段这个开关能帮你快速判断噪声是不是来自采样带宽过宽省了不少试错时间。另一个习惯是每次校准完我会把生成的offset和scale打印出来连同传感器量程、激励电压、PGA增益一起记录到测试报告里。这样万一后续换批次传感器或者改版PCB可以快速对比参数变化定位是芯片批次差异还是硬件改动引入的问题。别小看这个习惯批量产品调试时它能帮你省下大量排查时间。本文还有配套的精品资源点击获取