电阻应变式电子秤设计:从应变片到ADC的完整链路与调试实战
发布时间:2026/10/22 7:39:05 锦皓数字建站

简介这是一份电气自动化技术专业的毕业设计文档以电阻应变式传感器为核心设计量程1000克、误差±5克、分辨率0.1克的简易电子秤并配合PLC控制传送带和分离机完成自动分拣。文档从毕业设计任务书开始完整呈现目录、摘要、绪论与正文涵盖传感器与模拟/数字电路基础、重量显示电路设计、顺序功能图、PLC外部接线图、I/O地址分配、梯形图设计及程序分析等核心内容任务书还明确要求绘制外部接线图、编制软件并撰写2000字以上论文。包内仅有1份docx文档压缩包约110KB结构层次分明便于直接参考。目前已有167人下载学习。文档后附PLC原理、传感器与检测技术等参考文献并列出从资料收集、方案设计、仿真调试到论文撰写的进度安排。对于正在完成电子秤或PLC控制系统类课程设计、毕业设计的同学既能作为整体结构模板和任务书参考也可借鉴外部接线、梯形图编程与论文章节编排的思路实用价值较高。1. 这个毕业设计到底在做什么从一段电压到一克重量第一次拿到“基于电阻应变式传感器电子秤毕业设计”这个题目时很多人会把它想成“写个程序读ADC然后显示重量”真正做完才发现难点根本不在代码而在一根细如发丝的金属丝上——电阻应变片。它能把微小的形变变成电阻变化再通过电桥变成电压信号但这路信号只有毫伏甚至微伏级别噪声稍大一点称出来的重量就像在跳舞。这个课题真正的价值是让你完整走一遍“物理量→电信号→数字化→算法补偿”的传感器系统链路它不只是做一个秤而是在做一个精密的测量系统。这篇笔记我会从应变片的选型与电桥结构讲起一路落到放大电路、ADC采集、标定和滤波算法最后单独讲我调试时踩过的那些坑——包括标定完第一天准、第二天就偏的玄学现象。适合正在做类似课程设计或入门传感器应用的同学如果你已经有工程经验可以直接跳到第4章看标定策略或者第5章看排查思路这些内容同样适用于工业称重模块的调试。2. 电阻应变式称重传感器从选型模型到灵敏度计算2.1 应变片工作原理为什么金属丝能称重电子秤能把重量变成电信号核心是电阻应变片。它的原理并不复杂金属导体在受力拉长时截面积变小、电阻增大受压缩短时电阻减小。这个相对变化率与应变成正比比例系数就是应变片的灵敏系数K通常K≈2.0。一个典型的做法是把应变片粘贴在弹性体比如悬臂梁或柱式结构上弹性体受力变形时应变片跟着变形电阻发生变化。这里的关键在于电阻的相对变化率ΔR/R K × ε而应变ε本身很小——满量程时大约只有几百到一两千微应变με也就是10⁻³量级。假设一片120Ω的应变片应变达到1000μεΔR只有0.24Ω相对变化率0.2%。这么小的变化量直接用万用表是测不出来的。你需要把它放进电桥里把电阻变化转换成电压变化再经过高增益放大器才能到ADC的采样范围。2.2 电桥结构选择半桥和全桥的差异最常见的电路是惠斯通电桥。它由四个电阻组成两个分压支路当四个桥臂电阻相等时输出电压为零任何一个桥臂发生变化电桥失去平衡输出电压ΔV VEX × K × ε / 4这是单臂工作时的公式。做完这个题目的人都会有一个共识能上全桥就上全桥。全桥的四个桥臂都用应变片两个受拉、两个受压输出灵敏度是单臂的四倍同时通过差分结构抵消了温度对每个应变片的影响——温度变化时四个片同时变化电桥依然平衡。半桥方案用两个应变片加两个精密电阻灵敏度减半但胜在成本低、结构简单。在实际选型时我会给你一个参考量程50kg以下的台秤用单梁铝制悬臂梁传感器加全桥应变片就够了100kg以上建议用柱式或S型传感器安装受力更均匀。电桥输出电压预估值供桥电压5V、全桥、K2.0加载比例应变εμεΔV全桥mV10% 满量程1000.550% 满量程5002.5100% 满量程10005.0可以看到满量程输出只有5mV这已经是比较理想的情况了。如果你用的是2mV/V的灵敏度规格市面上很常见在5V供桥下满量程只有10mV——这个数值决定了你后面放大器的增益档位和ADC的分辨率需求。2.3 传感器选型时看哪些参数量程、灵敏度、非线性拿到一张传感器规格书我一般只看五个参数额定载荷量程、灵敏度mV/V、非线性、滞后、蠕变。对做毕业设计来说非线性0.02%和0.05%的差别在日常称重中基本感知不到但蠕变指标直接影响测量的长期稳定性——你放一个物体上去读数会在几十秒内缓慢变化这就是蠕变。量程的选择有个经验法则让日常最大称重量控制在传感器额定载荷的70%以内。比如你的秤要称5kg的东西选10kg量程的传感器而不是5kg满量程这样弹性体工作在接近线性的区段而且意外过载时不容易直接损伤应变片。过载能力通常是额定载荷的120%超过这个值弹性体可能产生永久形变应变片基材也可能开裂这时候传感器就报废了。3. 把微伏信号变成可用的数字量放大电路与ADC采集3.1 仪表放大器为什么不能用普通运放直接放大电桥输出的差分信号虽然干净但幅度只有毫伏级且叠加在2.5V左右的共模电压上半桥时尤其明显。普通单端运放把这两个都放大了共模电压一放大ADC就饱和了。正确做法是用仪表放大器它只放大两个输入端的差值对共模信号是1:1通过的。常见方案有三种分立仪表放大器用三个运放搭适合教学演示、专用仪表放大器芯片以及称重专用ADC内置的PGA可编程增益放大器。做毕设图省事的话我建议直接选一个带PGA的24位ADC比如常见的HX711、AD7190这类把差模信号先放大128倍再接ADC内部这样外部电路能省掉一大半。选放大倍数时思路是这样倒推的假设传感器满量程输出10mVADC差分输入范围是±20mV那增益选2倍就够。但如果你的ADC输入范围只有±5mV就要放大到4倍左右。放大倍数不是越大越好——增益大噪声也大等效到输入的噪声会被放大同样的倍数。3.2 24位ADC配置速率与有效分辨率的取舍称重常用的24位Δ-Σ ADC关键参数不是采样率而是有效分辨率。Δ-Σ ADC通过过采样和数字滤波把量化噪声推到高频段然后再滤掉但输出速率越高滤波器带宽越宽有效位数越低。我常用的一个配置组合是这样的输出速率10SPS每秒10次转换增益1285V供电这时有效分辨率大约20位。如果追求平滑读数把速率降到5SPS如果只是做动态称重可以放到30SPS。一个很容易忽略的地方是AD转换结果更新是异步的你在主循环里读数据寄存器时要确认数据是否已更新。很多AD芯片都有数据准备好引脚或者状态寄存器位。还有不要在主循环里用delay凑时间等数据常见做法是用外部中断触发读取。3.3 最小硬件系统传感器、ADC、单片机接线与配置代码下面是一个最小可运行的参考电路描述和初始化代码以某常见称重ADC为例实际电路需要按照你手头芯片的数据手册核实引脚// ADC初始化与读取示意代码引脚定义按实际板子修改 // SCK - PA5, DOUT - PA4 // 传感器输出 S - ADC通道正输入S- - ADC通道负输入 void ADC_Init(void) { GPIO_InitTypeDef gpio; gpio.Mode GPIO_MODE_OUTPUT_PP; gpio.Pin GPIO_PIN_5; HAL_GPIO_Init(GPIOA, gpio); // SCK为推挽输出 gpio.Mode GPIO_MODE_INPUT; gpio.Pull GPIO_PULLUP; gpio.Pin GPIO_PIN_4; HAL_GPIO_Init(GPIOA, gpio); // DOUT为上拉输入 } uint32_t ADC_ReadValue(void) { uint32_t raw 0; while (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) GPIO_PIN_SET); // 等待DOUT拉低表示数据就绪 for (int i 0; i 24; i) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); raw 1; if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) GPIO_PIN_SET) { raw | 1; // 在SCK上升沿读取DOUT } HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); } return raw; // 24位有符号数高位为符号位 }这段代码做了三件事初始化引脚、等待数据就绪、在时钟脉冲触发下移位读入24位数据。这里的重要参数是等待DOUT拉低的循环——它保证了数据不是上一次的旧值。另外ADC芯片上电后需要至少几百毫秒稳定时间不要在初始化后立即读第一个数据建议丢弃前几次的转换结果。4. 从原始码值到稳定重量标定策略与滤波算法4.1 两点标定为什么能只用两个点读出来的ADC原始值是一个无量纲整数要变成克数得做一次线性映射。电子秤的量程内传感器的输出与载荷接近线性所以两点标定就够记录零点读数再记录一个已知重量的读数然后用直线方程算出每个重量对应的码值。标定的核心是“放砝码的位置要固定”。同一个砝码放在秤台中间和边缘读数会不一样这是因为秤台受力点不同导致弹性体形变模式略有差异。做毕设时最容易忽略这个在桌上标定完拿起来一称就偏了往往就是标定时被秤台自重和支撑条件影响了。我一般会先把秤放在最终的使用平面上通电预热5分钟以上再开始标定。4.2 滑动平均与限幅滤波的组合策略电子秤最烦的问题是读数跳动。重量没变最后一位数字在跳这来源于两个噪声源传感器本身的低频噪声以及ADC量化噪声。单纯拉高采样率没用因为噪声是宽带叠加的单纯增加软件平均次数响应又变慢了放上东西要等两三秒读数才稳定。工程上常用组合滤波先限幅剔除突变值再做滑动平均。限幅判断当前值跟上一次有效值之差是否超过阈值比如超过50g就直接丢弃这样能防止按键操作或机械振动带来的尖峰干扰。滑动平均的窗口大小我一般取816个点窗口越大越平滑但响应越慢最后还要做一个“稳定判断”——读数连续N次变化小于给定阈值才认为重量稳定。4.3 带标定参数存储的完整称重代码// 称重滤波与标定示意实现 // 用数组保存滑动窗口标定参数存到非易失存储器中 #define FILTER_WINDOW 10 // 滑动平均窗口 #define LIMIT_THRESHOLD_RAW 50000 // 限幅阈值按实际码值调整 #define STABLE_COUNT 5 // 连续5次波动小于阈值则判定稳定 static int32_t g_filterBuf[FILTER_WINDOW]; static uint8_t g_bufIndex 0; static int32_t g_lastValidRaw 0; int32_t Filter_AddSample(int32_t raw) { if (abs(raw - g_lastValidRaw) LIMIT_THRESHOLD_RAW) { return g_lastValidRaw; // 突变值丢弃维持上次有效值 } g_lastValidRaw raw; g_filterBuf[g_bufIndex] raw; g_bufIndex (g_bufIndex 1) % FILTER_WINDOW; int64_t sum 0; for (int i 0; i FILTER_WINDOW; i) { sum g_filterBuf[i]; } return (int32_t)(sum / FILTER_WINDOW); } float Weight_ConvertRaw(int32_t filteredRaw) { // weight (raw - zeroPoint) * scale unitOffset // scale 标准砝码重量 / (标准砝码码值 - 零点码值) float weight ((float)(filteredRaw - g_calibZero) * g_calibScale); return weight; }这个实现的逻辑是限幅保护滑动平均不被尖峰污染滑动平均压掉随机噪声最后再用标定参数做线性映射。g_calibZero和g_calibScale在标定流程中写入最后存到Flash里每次上电读取——不要每次上电都重新标定那说明你的系统零点漂移太大本质上是硬件问题而不是软件问题。5. 硬件与调试中的五个经典坑现象、原因、对策5.1 上电读数持续漂移半小时都停不下来现象通电后不放任何东西显示值从0慢慢往上飘几分钟后又回落似乎没有规律。原因排除了砝码干扰后基本上就是应变片自发热。应变片通过粘贴胶与弹性体接触电流流过应变片产生焦耳热弹性体受热膨胀产生一个附加应变。这个漂移方向和时间常数与结构热容相关看起来像随机游走。解决第一是降低供桥电压5V改成3V发热功率直接降为36%第二是标定前预热让系统达到热平衡再操作。我自己调试时会开机预热15分钟再标定标定结束后再观察10分钟零点确认在合理范围内再交付代码。另外如果漂移呈周期性往复检查环境里是否有空调风吹到秤台。5.2 读数跳变数字最后一位疯狂跳动现象放上重物后读数基本正确但最低位的数字无规律跳变有时一次跳十几个字。原因通常是接地问题。开关电源的纹波通过地线耦合进ADC参考电压或者传感器的屏蔽线没有接地。另一个嫌疑是单片机数字翻动时通过电源线串扰到模拟电路。解决把模拟地数字地单点相连ADC电源加RC滤波传感器屏蔽层在ADC端单点接地。排查时可以用一颗锂电池临时给传感器独立供电如果读数立刻稳定就说明干扰从供电路径进来电源问题实锤。还有一个隐蔽坑不要把ADC的时钟线和数据线跟大电流的继电器驱动线走在一起哪怕平行5cm都会串扰。5.3 标定完第一天准第二天开机偏了现象当晚标定好放一晚后第二天开机空秤显示-20g或者35g。原因这个现象最迷惑人往往是零点漂移和弹性体蠕变恢复叠加的结果。传感器受压一整晚弹性体和应变片粘接层发生缓慢的应力释放零点码值已经明显偏离昨天的标定值。解决开机后做个自动零点校正——空秤条件下连续采集几次读数取平均作为新的零点然后更新标定零点参数。这个逻辑要做到位判断秤台确实为空然后连续采样N次取中位数。不要只采一次就当零点那会被外部振动带到沟里去。5.4 称重读数线性但偏差越来越大超过3%了现象小量程准大量程偏差越来越大或者反过来用小砝码标定后称大物体明显偏低。原因传感器实际输出不是绝对线性的应变片在弹性体上的粘贴位置偏移会造成非线性。两点标定只在两个点完全准确中间段会有残余误差这个误差在满量程的0.02%0.5%之间对毕设来说可以忽略但如果偏差大到3%就要怀疑传感器安装偏心或者限位螺丝没有松开。解决检查弹性体固定螺丝是否拧紧、是否有跟秤台干涉的地方。S型传感器两端连接件夹角偏了也会改变受力方向导致同样的重量产生不同的应变。排除机械问题后仍然觉得精度不够就做三点标定零点中点满量程用分段线性插值。5.5 放大器输出饱和读数顶到最大值不动现象量程内加载正常稍微增加重量读数直接跳满但实际重量远没到满量程。原因放大倍数设置过大或者电桥电源电压过高导致满量程输出超过ADC输入范围。还有一种情况是仪表放大器的参考端没有接基准电压输出范围被限制在很窄的区间内。解决用万用表实测电桥输出和放大输出按ADC满量程重新计算增益。计算过程假设传感器灵敏度2mV/V、供桥5V、满量程输出10mVADC差分量程±20mV那么增益20/102倍。如果你把这个当128倍用那肯定顶满。这里值得多说一句称重ADC的PGA增益取值范围固定如果你的传感器信号过强导致超量程优先降低供桥电压或改小PGA增益而不是在软件里缩放。6. 把精度再推进一步分段标定与角差修正的现场做法如果你不满足于“能称重”想让这台秤的误差控制在更小范围最值得做的是分段标定。前面说的两点标定假设整个量程线性但实际传感器在小载荷段和大载荷段的灵敏度略有差别——弹性体在小形变时应变片粘贴胶层的剪切变形占主导响应斜率偏软大形变时金属弹性体本身成为主导斜率又有所不同。用0、1/3量程、2/3量程、满量程四个砝码点做分段线性插值每个区间独立计算scale能修掉大部分残余非线性误差。具体做法是把标定数据表存在一个数组中查询时先定位区间再线性映射运算量极小。另一个容易被忽视的点是角差修正。同一个物体放在秤台的四角读数不同这是因为秤台受力点偏离中心时弹性体承受的不只是垂直力还有附加弯矩。如果秤体结构是四角支撑但传感器只有一个这个现象会特别明显。修正办法是给每角施加等重砝码记录四角读数偏差然后在软件里做平面补偿通过当前读数和大致角位置做一个修正系数。对毕设来说这个修正需要配合秤体结构设计不必追求极致但知道这个问题的存在能帮你在答辩时讲清局限。我最想留给你的一个习惯是每次修改完硬件或者结构件重新做一次完整标定不要沿用旧参数。曾经有一次我换了传感器的连接螺丝称重数据在量程中段出现了一个拐点排查半天发现是旧标定参数与新机械条件下受力曲线不匹配重新标定后立即恢复正常。这类问题在传感器调试里非常常见——你改的每一个机械细节都会通过弹性体形变反映到读数上。希望这篇笔记能帮你少走几趟弯路。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。