ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于STC89C51的DIY RLC测试仪:原理、电路与固件实现

基于STC89C51的DIY RLC测试仪:原理、电路与固件实现 1. 项目定位为什么要自己造一台RLC测试仪1.1 从实际需求说起你可能也有这种经历从元件盒里翻出一把电阻电容型号都磨没了凭颜色环和丝印猜了个大概焊上去才发现不对或者收了一块二手板卡怀疑某个电感开路了万用表却只能告诉你“通还是不通”。这个时候一台能直接读出电阻、电容、电感数值的RLC测试仪就是干活效率的关键。但一看某宝正规点的LCR手持表动辄三五百起步功能更强的台式电桥更是四位数起跳业余玩家实在有点下不去手。我自己的选择就是“从零造轮子”用一颗老掉牙的STC89C51单片机加几个常见运放、三极管做一台能测电阻、电容、电感的RLC测试仪。整机零件成本控制在40块以内测量精度对付日常维修、元件筛选绰绰有余顺手还完成了PCB布线练习。这篇文章我就把完整的设计思路、电路计算、PCB布局经验和固件写法全部摊开讲尤其适合刚学完51单片机、想做一个真正能拿来用的“毕业设计级”项目的朋友。1.2 为什么还要用STC89C51老芯片的优势恰恰是门槛低很多人会问现在STM32遍地都是Arduino更是十几行代码就能驱动LCD为什么非要用STC89C51就我自己的体验来说答案不是“情怀”而是三个非常实际的理由。第一STC89C51是大多数人学习单片机的起点寄存器配置、中断系统、定时器结构都相对简单。用熟悉的芯片做项目可以把精力集中在“测量电路如何搭”而不是“芯片怎么用”上一次只解决一个麻烦。第二这颗芯片在完全不需要ADC的情况下就能完成RLC测量只要用定时器配合外部计数功能把物理量变成频率剩下的就是数学换算。第三STC89C51的下载电路极其朴素一颗USB转TTL模块加上冷启动就能烧程序不需要调试器这对预算紧张的学生党非常友好。当然也要承认它的局限没有内置ADC、主频只有12MHz、IO驱动能力弱。但也正是这些“局限”逼着你把一个测量项目拆分出更本质的电路手段反而能学到比“调库”更多的东西。1.3 技术路线核心把电阻电容电感全部换算成频率自制的低成本RLC测试仪最核心的思路不是“测电压算阻抗”而是把待测元件的参数转换成频率信号再用单片机数频率。为什么这么做因为STC89C51最擅长的就是计时和计数而且频率测量不受单片机供电电压波动、ADC参考电压精度的影响只要振荡电路稳定、基准元件准确结果就很可靠。具体到三种元件测量方法各有侧重电阻和已知精密电容组成RC振荡器振荡频率随电阻变化电容和已知精密电阻组成RC振荡器振荡频率随电容变化电感和已知精密电容组成LC振荡器振荡频率随电感变化。整个过程没有用到一颗ADC芯片核心元件就是一个NE555定时器加一个LC振荡器成本低到离谱但原理上非常自洽。这个方法不是什么野路子很多老式数字电桥和简易LCR表内部也是类似的“变换电路”思想只是实现方式更讲究。1.4 成本清单与效果预期先列一下这台机器的核心成本都是我在深水宝和本地电子市场实际问到的价格不同渠道会有几块钱浮动但整体控制在40元以内是没什么压力的。项目型号/规格参考价格主控STC89C52RC兼容515元振荡芯片NE555P1元比较器LM3931元显示LCD1602液晶8元继电器HRS2H-S-DC5V双刀双掷3元精密基准电阻1%金属膜电阻若干3元精密基准电容CBB电容10nF/100nF3元其他三极管、按键、座子、排针等5元PCB打样5片装 10cm×8cm10元总的投入大概40元左右做出来的实际效果我会在后面给出实测对照表。这里先给个结论电阻测量在几欧到几兆欧范围内能稳到3%以内电容在几十皮法到几十微法范围内也能做到5%以内电感误差稍大典型场景下10%以内没问题。这个水平确实比不了几百块的专用LCR表但用来判断“这个元件是不是坏了”“大概的容量还在不在”完全没有问题。2. 硬件电路方案设计与关键参数计算2.1 系统总体架构从测试端口到LCD显示要经过哪几级整个系统的信号链路可以分成四个模块。首先是“待测元件接入模块”测试端子用香蕉插座或夹子引出通过双刀双掷继电器切换测量模式接着是“频率变换模块”分成NE555构成的RC振荡器和三极管构成的LC振荡器两路分别把阻容感变成方波信号然后是“整形与保护模块”LC振荡器的输出波形比较“软”需要经过LM393比较器整形同时加上钳位二极管保护单片机引脚最后是“主控与显示模块”STC89C51用定时器测频计算后在LCD1602上显示结果。这里有一个容易被新手忽略的点NE555本身输出的是比较标准的方法可以直接进单片机但LC振荡器输出的是近似正弦波直接接到51单片机的引脚上可能会造成多次触发、计数不准所以必须用比较器或施密特触发器整形。我做的是用LM393上拉电阻选4.7kΩ信号边沿依然很陡。如果需要更强的抗干扰能力换成74HC14施密特反相器会更稳。单片机IO资源分配也要提前规划好。LCD1602我用的4位模式需要RS、RW、E、D4到D7共7个引脚三个按键用P1口继电器控制用P2口频率信号从P3.4T0外部计数输入进测周期模式则用P3.2INT0外部中断。整体算下来IO完全不紧张后续加蜂鸣器、LED背光控制都有余量。2.2 STC89C51最小系统设计要点STC89C51最小系统看起来简单但细节决定成败。晶振我用12MHz的因为机器周期正好是1微秒定时器计算非常直观。晶振两端的负载电容选20pF到33pF都可以我用22pF要注意这两个电容要尽量靠近晶振引脚否则容易产生波形畸变导致定时不准。复位电路采用经典的上电自动复位10μF电解电容从VCC接到RST引脚再并联一个10kΩ电阻到GND。EA引脚必须接VCC否则单片机默认从外部ROM执行程序永远跑不起来。这是新手特别容易踩的一个坑我见过不少人焊好板子没反应最后发现是EA脚悬空了。关于下载电路STC单片机的典型用法是USB转TTL模块的TXD接单片机P3.0RXD接单片机P3.1下载时先给ISP软件点“下载/编程”然后给板子冷启动断电再上电。但如果直接把USB转TTL模块挂在串口上下载完会影响后续单片机的运行吗我的做法是下载完之后把排线拔掉或者加一个单刀开关断开TXD/RXD最省心。另外USB转TTL模块的TXD和RXD要交叉连接这个我一开始就接反过一次排查了半小时。最小系统的电源部分同样不能偷懒。整板用12V适配器供电经过LM7805稳压到5V。7805输入端和输出端都要加电解电容——输入用100μF/25V输出用10μF/16V另外再并联0.1μF瓷片电容滤高频。7805虽然便宜且好买但输入输出压差大时发热明显建议加一个小的散热片。如果你手头只有9V电源也能工作但压差小一些7805会更凉快。2.3 测量前级NE555为核心的RC振荡电路设计与公式推导NE555接成无稳态多谐振荡器是RC测量的经典结构。电路接法是VCC经过电阻RA接到DISCH引脚同时DISCH引脚再经过电阻RB接到THRES和TRIGTHRES和TRIG连接后接到电容C电容另一端接地。输出OUT引脚输出方波。振荡周期公式是T 0.693 × (RA 2RB) × C对应频率f 1.44 / ((RA 2RB) × C)这个公式里的系数1.44来自充放电时间常数的数学推导我用实际示波器验证过NE555在5V供电下和理论值偏差小于2%完全可以直接用来反推元件参数。测量电阻时把RA固定为一个已知的精密参考电阻R_std比如1kΩRB换成待测电阻RxC用精密CBB电容C_std比如10nF。则f 1.44 / ((R_std 2Rx) × C_std)反解出Rx (1.44 / (f × C_std) - R_std) / 2注意这个公式里为什么RA也要参与计算而不是直接用1.44/(2RxC)。因为NE555的充电回路经过了RA和RB两个电阻RB只负责放电所以RA哪怕只有1kΩ也会在测量小电阻时引入明显误差。想要减小影响RA可以取100Ω这一档但RA太小会拉高震荡频率、增大NE555输出管的压降影响。实际折中下来我选了1kΩ作为固定参考电阻测的电阻范围大约从10Ω到2MΩ。测量电容时RA和RB都用已知精密电阻比如RA10kΩRB10kΩC用待测电容Cx则f 1.44 / ((10k 20k) × Cx) 1.44 / (30k × Cx)反解CxCx 1.44 / (30000 × f)这个方案测电容非常直观频率越高电容越小。为了兼顾不同容量的电容我准备了两组标准电阻测量小电容低于1μF用RARB10kΩ测量大电容1μF到1000μF用RARB1kΩ通过继电器切换。为什么大电容要降低电阻因为同样容量下电阻越小振荡频率越高避开超低频导致的测量时间过长和电解电容漏电影响。2.4 电感测量LC振荡器的实现与频率公式电感不能直接和RC振荡器挂在一起因为电感的感抗随频率变化不像电阻那样简单。我采用的方案是经典的三极管共基极LC振荡器结构简单起振容易。电路大致是NPN高频三极管我用的S9018便宜且特征频率足够发射极通过电阻偏置集电极接LC并联谐振回路反馈信号从发射极通过电容耦合回到基极。振荡频率由LC并联回路决定f 1 / (2π√(Lx × C_std))其中C_std是谐振电容。已知C_std和实测频率f反推电感Lx 1 / (4π² × f² × C_std)测量电感的关键是谐振电容的选择。我设置了两个档位测小电感1μH到1mH用10nF的CBB电容测大电感1mH到1H用100nF的CBB电容。为什么这么分因为频率太高时三极管的结电容、PCB走线的分布电容会叠加到谐振回路上误差变大频率太低时线圈电阻和磁芯损耗会拉低Q值起振都可能出问题。用10nF测1μH的电感谐振频率大约在1.6MHz已经接近STC89C51外部计数输入上限12M晶振下约为500kHz所以这个频率还要经过分频或者改用测周期方案。我实际测下来建议把谐振频率控制在200kHz以下比较安全如果测更小的电感可以在后面加一级74HC4040分频标题上说的“可控范围”基本就是这样权衡出来的。LC振荡器还有一个天然问题三极管的结电容会影响频率导致测量结果存在一个固定的系统偏差。解决办法是校准用一段短路线代替待测电感测出此时的残余频率反算出“残余电感”然后从所有测量结果中扣除。这个过程在固件里实现后面我会专门讲。2.5 模式切换与量程切换继电器还是模拟开关刚开始设计时我想用CD4066模拟开关来切换测量模式毕竟体积小、无机械触点。但仔细算了一下CD4066的导通电阻大约5Ω到20Ω温度变化还会漂移这个阻值叠加在待测元件上测低值电阻和电感时误差明显。而且模拟开关的通道间串扰在LC振荡器高频信号下也不容忽视。所以最终用双刀双掷继电器专门用来切换“RC振荡器”和“LC振荡器”两路信号通路。继电器选的是5V线圈的HRS2H-S-DC5V封装小、驱动电流约40mA单片机IO口直接驱动不够需要加S8050三极管放大最经典的NPN低边驱动单片机引脚经1kΩ电阻接三极管基极集电极接继电器线圈一端线圈另一端接VCC发射极接GND。特别提醒继电器线圈两端必须反向并联一颗1N4148续流二极管否则断电瞬间的反向电动势能冲到几十伏轻则干扰单片机复位重则击穿三极管。这个细节我已经在不止一块板上吃过亏了。量程切换暂时用“手动按键”方式没有做成全自动原因有两点一是自动量程需要多组基准电阻电容并联进振荡电路布线复杂度和继电器数量都要翻倍二是手动按键本来也可以当作“学习单片机人机交互”的一部分。但为了使用方便我在显示部分做了自适应单位换算不管测到的是几欧还是几兆欧都能自动显示成kΩ或MΩ这一点体验已经比较接近真正的LCR表了。3. PCB布线设计与实践心得3.1 布局分区数字地与模拟地应该怎么处理PCB布局是这次项目里我花时间最多的地方。很多人做单片机小项目习惯性先把板子画得满满当当最后走线一团乱麻。做带振荡电路的板子即使频率不高也要养成“分区布板”的习惯。我把整块板划分成三个区域左上角是电源和继电器驱动中间是STC89C51和LCD1602插针右下角是振荡电路和测试端子。数字地和模拟地一定要分开铺铜然后在电源入口处“单点汇合”。为什么因为LCD1602和继电器的开关电流会产生地弹噪声如果模拟振荡电路的地和数字地共用一条粗线那么继电器动作瞬间的电流波动会直接窜到NE555的阈值引脚上表现为测量值跳变。我实测过没有分地之前继电器每次切换都会导致频率跳动几十赫兹分开之后这个问题几乎消失。地线处理上我用了双面敷铜底层整片铺数字地顶层在振荡电路区域单独铺一块模拟地铜皮两者通过一个0Ω电阻在7805输出电容附近连起来。0Ω电阻在这里的作用不是省成本而是为了在调试时可以用刀子割断它方便单独测量各路电流非常实用。如果你没有0Ω电阻用一颗磁珠也可以但不要把数字地和模拟地直接大面积相连。3.2 关键走线与元件位置基准电容、晶振、下载口怎么摆基准电容的位置可能直接影响整机精度。CBB电容本身误差可以做到1%但如果走线太长电容引脚处的寄生电容可能有几皮法对于10nF级别的基准电容来说影响尚可但如果你用1nF的低档位几皮法的分布电容就是不可忽略的误差源。所以我的布局原则是基准电容和NE555的THRES、TRIG、DISCH引脚距离尽量短走线尽量粗短不在这些网络的走线上打过孔避免寄生参数叠加。晶振放在STC89C51的XTAL1和XTAL2旁边负载电容直接贴着晶振外壳放晶振下方不要走其他信号线。下载口我放在板子边缘外侧方便接USB转TTL模块但不和LCD1602的信号线平行长距离并走因为下载瞬间的数据信号虽然只在下载时出现但如果布线太差可能引起单片机复位不稳。NE555的5脚控制电压脚必须接一颗0.01μF瓷片电容到地这个电容的作用是滤除内部比较器参考电压上的噪波。如果不接或离得太远输出方波的频率会变得不稳定尤其是继电器切换瞬间频率会“抖”一下。同样重要但容易被忽略的是NE555的4脚复位脚必须直接接VCC并且最好也加一个小电容去耦。我见过有人嫌麻烦把4脚悬空结果板子经常莫名不振就是这个原因。为了方便调试我还在板子上预留了四个测试点5V电源、GND、NE555输出、LC振荡输出。用排针引出来就行成本几毛钱但调试的时候示波器探头和万用表表笔可以直接夹住不用费劲找焊点。3.3 继电器驱动与电源退耦小细节里的大坑继电器驱动这部分电气原理图画出来很简单但布板时要注意两点驱动三极管的基极电阻要靠近单片机引脚避免长走线引入干扰导致单片机复位时继电器误动作继电器本体不要放在晶振或NE555旁边因为继电器线圈吸合瞬间会产生磁场从空间上干扰附近的模拟电路。我的布局是把继电器放在板子正中偏右的位置上面是LCD下面是电源离振荡区域至少2厘米以上。电源退耦不能只靠7805输出端的大电容。每个芯片的电源引脚旁边都要放一颗0.1μF的瓷片电容而且必须离电源引脚尽量近走线先过电容再到引脚。NE555在工作时内部输出级翻转会产生较大的电流尖峰如果退耦不到位这个尖峰会在电源线上形成噪声进而调制振荡频率。实测中我给NE555加了退耦电容之后100kHz左右的频率读数波动从原来几十赫兹降到个位数赫兹。3.4 实际打样与焊接注意事项PCB我用的是嘉立创5块钱5片的打样服务双面1.6mm厚常规FR4完全够用。下单时注意选择喷锡工艺而不是沉金价格更便宜而且焊接更容易。拿到板子后先不要急着把元件全焊上去我先焊电源部分7805、电容、电源插座然后上电测5V是否正常、纹波大不大。确认电源没问题后再焊单片机最小系统烧一个流水灯程序验证晶振和复位。最后焊振荡电路和继电器驱动分模块调试可以大大缩小问题排查范围。焊接顺序还有一个讲究先焊矮的小元件电阻、电容、三极管再焊高一点的芯片插座和继电器最后焊LCD排针和测试端子。NE555我建议直接焊在板上而不是用插座因为插座会增加引脚间的寄生电容而且NE555底座比较容易虚焊。STC89C51则反过来建议用插座方便烧录失败或芯片损坏时更换毕竟单片机是整板最贵的元件之一。整体布局图我画的时候参考了立创EDA的元件库大家想直接照抄布局的话也可以去立创开源广场搜“STC89C51 RLC测试仪”很多现成的工程文件可以下载参考。你只需要对照我上面说的“分区布板、短走线、单点接地”三个核心原则检查一遍基本就能避免大多数问题。4. 固件开发频率测量与RLC计算实现4.1 频率测量原理闸门计数法为什么要比边沿中断法靠谱STC89C51测量频率的方法很多常用的有两种一种是外部中断测量信号相邻上升沿之间的时间反推出频率另一种是固定闸门时间用计数器累计信号脉冲数。我最后选择的是第二种“闸门计数法”。原因在于中断法的致命缺陷任何CPU响应中断都需要时间89C51在12MHz晶振下中断响应延迟大概需要几个机器周期也就是几微秒。如果被测信号是1kHz周期1ms几个微秒的误差可以忽略但如果信号是100kHz周期10μs中断延迟造成的误差可能达到百分之几十完全不可用。而计数法用的是16位计数器T0它工作在计数器模式时每个下降沿自动加1不需要CPU介入只要信号频率不超过单片机计数上限就不会丢脉冲。闸门时间的选择也有讲究。我默认用的闸门是200ms也就是0.2秒计得脉冲数乘以5就是频率。200ms的好处是刷新速度够快显示不会感觉到卡顿同时对于1kHz以上的信号计数误差±1个脉冲对应的相对误差只有0.5%以内。如果测到低频信号低于1kHz我会自动把闸门时间延长到1秒来保证计数总量牺牲一点刷新率换精度。这个“动态闸门”逻辑在代码里实现起来并不复杂。4.2 核心代码T0计数、T1定时的实现先交代一下资源分配T0作为外部脉冲计数器工作在模式116位计数T1作为定时器工作在模式1定时50ms通过软件变量累积到200ms或1s作为闸门。核心代码如下#include REG52.H unsigned int t1_count 0; // 50ms中断累加 unsigned long gate_ticks 200; // 默认200ms闸门单位10ms unsigned long pulse_total 0; // 闸门内的总脉冲数 unsigned int measure_ready 0; // 测量完成标志 void Timer1_Init(void) { TMOD 0x51; // T1定时器方式1T0计数器方式1 TH1 0x3C; // 50ms初值机器周期1us TL1 0xB0; // 65536-50000155360x3CB0 ET1 1; EA 1; TR1 1; } void Timer1_ISR(void) interrupt 3 { TH1 0x3C; TL1 0xB0; t1_count; if(t1_count gate_ticks) // 闸门时间到 { TR0 0; // 停止T0计数 pulse_total (TH0 8) | TL0; TH0 0; TL0 0; TR0 1; // 立即开始下一轮计数 t1_count 0; measure_ready 1; } } unsigned long Get_Frequency(void) { unsigned long freq; // gate_ticks单位为10ms所以频率 脉冲数 * 1000 / gate_ticks freq pulse_total * 1000UL / gate_ticks; return freq; // 输出单位Hz }这里有一个细节直接把TH0和TL0拼起来的时候因为TR0在闸门到的那一瞬间已经被停止了所以读取到的计数不会发生“读取过程中又加一”的问题。如果你用的是更长闸门且允许T0溢出还要在T0中断里累计溢出次数最终计数值等于“溢出次数×65536当前值”。我目前200ms闸门在最高500kHz输入下最多计10万个脉冲16位计数器还扛得住所以没有开T0溢出中断。以后如果加高频档位分频就得用上这个扩展方案了。4.3 被测值计算公式的工程化修正与单位换算频率测出来之后就轮到数学换算。这里我把三种模式的计算公式统一封装成一个函数用浮点运算。STC89C51没有硬件浮点单元但一秒才更新几次测量结果浮点运算那点时间完全无所谓用float反而让公式写起来清晰不易错。#define PI 3.14159265f // 基准元件参数根据实际焊接选用的元件修改 #define R_REF_1K 1000.0f // 1kΩ 参考电阻 #define C_STD_10N 10.0e-9f // 10nF CBB电容 #define C_STD_100N 100.0e-9f // 100nF CBB电容 #define R_STD_10K 10000.0f // 10kΩ 参考电阻 float Calc_R(float f) { // f 1.44 / ((R_ref 2*Rx) * C_std) // Rx (1.44 / (f * C_std) - R_ref) / 2 return (1.44f / (f * C_STD_10N) - R_REF_1K) * 0.5f; } float Calc_C(float f) { // f 1.44 / ((R_A 2*R_B) * Cx) // Cx 1.44 / ((R_A 2*R_B) * f) return 1.44f / ((R_STD_10K 2.0f * R_STD_10K) * f); } float Calc_L(float f) { // f 1 / (2*pi*sqrt(Lx*C_std)) // Lx 1 / (4*pi^2 * f^2 * C_std) return 1.0f / (4.0f * PI * PI * f * f * C_STD_100N); }算出来的电阻单位是欧姆电容单位是法拉电感单位是亨利。直接显示的话用户看到“0.0000015”这种数字肯定头大所以显示部分要做自适应单位换算电阻从小到大依次是Ω、kΩ、MΩ电容是pF、nF、μF电感是μH、mH、H。判断逻辑也不复杂用一串简单的if/else判断科学计数法的数量级即可。这个展示习惯非常重要因为换了单位之后读数看起来就像一个真正仪器的样子了。需要特别提醒的是上面的公式假设NE555供电稳定、基准电容无损耗这在毫秒级的充放电周期内大体成立但当待测电容是电解电容时情况会有所不同。电解电容的ESR等效串联电阻较高会改变充放电时间常数导致测量值偏大或者偏小。我的处理是在测量大容量电解电容时用1kHz以上的振荡频率去测减少ESR在充放电过程中的影响。这是经验性的修正严格来说不如真正的交流电桥准确但对付筛选电容足够了。4.4 量程自适应与显示逻辑量程自适应分两层第一层是硬件层通过继电器切换基准电阻和基准电容第二层是软件层根据测到的频率判断当前测量是否落在合理区间。比如测量电容如果选用RARB10kΩ这一档测到1μF电容时频率大约是48Hz测到1000μF时频率只有0.048Hz这个刷新速度完全无法接受而且电解电容漏电也会让低频振荡不稳定。所以固件里的逻辑是先用大电阻档测一次如果计算出的电容值大于1μF则自动切换到小电阻档1kΩ重新测一次。如果计算值小于100pF则提示“测量值超出本档精度范围”建议改用10nF档位。这个分层逻辑写完以后实际体验会好很多你只需要把电容插上按下测量键几秒钟后读数就是最终结果。LCD1602的显示内容我设计成两行第一行显示模式和单位比如“R: 4.712 kΩ”第二行显示频率和校准状态比如“f105.3kHz”或者“CAL:ON”。这样调试的时候一眼就能看到原始频率方便判断是前端电路的问题还是软件换算的问题。4.5 校准功能短接清零、开路校准、已知标准件校准校准是自制仪表最容易被忽略却又最重要的一步。我在这台机器里加了三个校准模式长按“校准键”进入短按“模式键”切换校准项。第一项是“开路校准”即测试夹子什么都不接此时测到的信号源是电路自身的分布电容和噪声记录下来作为底噪在测量小电容的时候自动扣除。第二项是“短接校准”把测试夹子两头短接此时测到的电阻/电感残值记录下来在测量小电阻和小电感时扣除。第三项是“标准件校准”接入一个高精度已知阻值的电阻或电容整机反推出当前基准元件的实际值把基准值误差修正掉。CBB电容买回来标称1%通过标准件校准后实际等效基准精度可以提升到0.5%左右。具体在固件里校准值保存在STC单片机内部EEPROM中掉电不丢失。STC89C51内部有1K的EEPROM用IAP口读写代码不超过30行。读取的时候加一个简单的校验和防止写入时断电导致数据损坏。这一步虽然对“能跑”来说不是必须但对“好用”来说非常关键用了一个月之后你会感谢当时存下来的校准值。5. 调试、标定与常见问题5.1 通电前检查清单用三分钟省三小时每次焊接完或改动电路后我都习惯先做一轮静态检查再上电否则一出问题就要怀疑全板排查效率极低。我总结了一个三分钟检查清单分享给你用万用表蜂鸣档检查VCC和GND是否短路这是最优先的一步电源短路会烧7805甚至单片机检查继电器线圈是否并联了续流二极管二极管方向不能反否则上电就短路检查LM393的输出上拉电阻是否装好这颗电阻漏焊会导致输出信号浮空单片机读到一堆乱码检查LCD1602的VO对比度引脚是否经过电位器接到地不接地或者悬空1602上电就是要么全黑要么全白最后再确认一次NE555的4脚复位接了VCC5脚控制接了0.01μF电容到地。这些东西单独看都是小事但任何一个出问题都会让后续调试陷入“看起来哪里都不对”的泥潭。我自己就吃过一次亏NE555的4脚忘记接VCC上电后整个测量没反应示波器一测输出脚完全无波形还以为是芯片本身坏了换了好几颗才发现是复位脚悬空导致的。5.2 测量结果偏大、偏小、不稳定的可能性分析如果所有硬件检查都正常但测量结果仍然不对可以从现象反推原因。读数整体偏大而且测什么元件都偏大先怀疑基准电容实际值比标称值小。CBB电容虽然精度好但有些商家标称10nF实际只有9nF这个误差会线性反映到结果里。解决办法就是用精密电容表或标准电阻反推把实际电容值写成常量烧进程序。读数偏小且无规律尤其测小电容时明显通常是被测夹子引线分布电容干扰。如果测试线太长两根夹子之间就有几皮法的电容和小电容并联后相当于把待测电容“加大”了计算出来自然偏小。这个通过开路校准能消除一大半但最好的办法是尽量缩短测试线长度我最终用的是10cm的短硅胶线加鳄鱼夹。读数上下跳动主要看供电和继电器。先拿示波器看5V电源纹波如果纹波超过50mV检查7805的输入电压是否过低或者负载过重。再看继电器切换时读数是否突然跳变如果跳变多半是继电器动作时的电流冲击通过地线干扰了振荡电路这时需要加强退耦或者调整程序的测量时序让继电器切换后延时100ms再开始测频等系统稳定下来再读数。5.3 不同量程下的误差来源与实测对照表我把自己这台机器实测的数据整理成了一个表格被测元件是用专业LCR表标定过的自制机测出来的结果如下测量对象标准值自制机实测相对误差金属膜电阻A100Ω102Ω2.0%金属膜电阻B10kΩ10.08kΩ0.8%金属膜电阻C1MΩ0.987MΩ-1.3%CBB电容A10nF10.12nF1.2%CBB电容B100nF98.4nF-1.6%电解电容A10μF10.6μF6.0%色环电感A100μH112μH12%色环电感B1mH1.06mH6.0%从这个表能看出几个规律中等阻值的电阻测量最准因为充放电时间适中计数误差占比小电解电容误差偏大因为ESR和容量公差本身叠加无法完全用公式消除电感误差相对最大主要是三极管结电容和分布电容的贡献需要通过校准扣除。整体来说这台的定位就是“工具级”而不是“仪器级”说人话就是能信但别拿它和四位半台式电桥较真。如果你想让电阻档再准一点可以考虑在NE555的电路上做开尔文四线连接但四线会增加继电器的数量对于入门项目来说性价比不高。我更推荐的做法是保持两线但每次测量前都习惯性做一次短接清零这和台式LCR表的使用习惯是相通的。5.4 做完这台机器后的几点体会与后续扩展方向如果你问我要不要真的去做这样一个“轮子”我的回答是做而且值得做。不是因为40块钱成本比买成品省多少而是因为在整个设计过程中你会被迫去理解RC振荡器的频率公式怎么推导、继电器驱动为什么要加续流二极管、PCB为什么要把数字地和模拟地分开。这些东西刷100遍教程都不如亲手焊一块板、踩一次坑记得牢。之后如果你想继续升级方向其实很明确把NE555换成DDS信号源加上正交解调就能测实部和虚部做出真正意义上的数字电桥给前端加模拟开关做全自动量程显示部分升级成OLED或者带触摸的彩屏再加上一个外壳喷漆打标就是一台很有模有样的桌面工具了。这个方向留给大家自己去折腾折腾的过程本身就是这台仪器最值钱的部分。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进