如果你玩过电子DIY,肯定遇到过需要测量电感、电容或电阻值的情况。专业LCR电桥价格昂贵,而万用表又测不了电感。这次我们用Arduino UNO加一块不到10元的LCD1602屏,就能做个三合一测量工具。我实测下来,测量常见元件完全够用,特别适合学生党和小型工作室。
核心硬件清单:
注意:测量电容时建议使用1%精度的金属膜电阻,电感测量部分对100nF电容的稳定性要求较高
硬件连接其实特别简单,先把LCD1602的I2C模块插好,SDA接A4,SCL接A5。电阻分压电路用10kΩ和1MΩ组成测量网络,电感测量部分需要把100nF电容与待测电感构成LC振荡回路。我第一次做的时候在面包板上花了15分钟就搭好了,比想象中容易得多。
电感测量是最有意思的部分。我们利用LC电路的谐振特性,通过Arduino产生脉冲激励后,用pulseIn()函数捕获振荡周期。具体公式是:
arduino复制inductancia = 1./(capacitancia*frecuencia*frecuencia*4*3.1415*3.1415)
这里有个坑要注意:代码中用的参考电容值是1.021nF(0.000001021),这个值需要根据你实际用的电容校准。我测试时发现用普通瓷片电容会有5%左右的误差,换成CBB电容后精度提升到2%以内。
电容测量采用经典的RC充放电原理。通过1MΩ电阻给待测电容充电,用中断捕获电压达到VCC/2的时间点:
arduino复制RC = -T/log((Vref-VCC)/(V0-VCC));
C = RC/R;
实际使用时发现个小技巧:在放电引脚加个100ms的延迟能显著提高稳定性。有次测量100pF以下的小电容时数据跳变严重,后来在放电回路里串了个10k电阻就好多了。
电阻测量采用最简单的分压原理,但代码里做了8次采样取平均的处理:
arduino复制for(int i=0; i<=7; i++){
Resistor_1[i] = analogRead(R_1);
ResArreglo_1 = ResArreglo_1 + Resistor_1[i];
}
vR_1 = (ResArreglo_1/8.0);
实测发现测量10kΩ以下电阻时精度可达1%,但超过1MΩ后误差会增大到5%。如果经常测大电阻,可以把R2换成10MΩ并修改代码中的Res_2值。
主循环通过检测A3/A4引脚状态来切换测量模式:
arduino复制void leerpines(){
pin_1 = digitalRead(PIN_1);
pin_2 = digitalRead(PIN_2);
}
这个设计很巧妙,用两个IO口实现了三模式切换。我在原型机上加了三个轻触开关,通过不同组合选择模式,比跳线帽更方便。
中断服务函数是电容测量的关键:
arduino复制void stop(){
t_alto = micros();
}
注意这里用了外部中断3(对应D2引脚),因为D0/D1被LCD占用了。有次我把中断引脚接错导致电容模式完全失灵,排查了半天才发现这个问题。
原版代码用的是并行LCD,我改成了更省线的I2C版本:
arduino复制#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
这里有个常见坑点:I2C地址可能是0x27或0x3F,用扫描工具确认下更稳妥。另外建议在setup()里加个lcd.backlight(),否则可能遇到不显示背光的情况。
准备几个已知值的电感(如100uH、1mH),修改代码中的参考电容值:
arduino复制capacitancia = 0.000001021; // 校准这个值
我用信号发生器配合示波器实测发现,普通瓷片电容的温度系数会导致测量值漂移约0.5%/℃,换成NP0材质的电容后改善明显。
代码中内置了40pF的误差补偿:
arduino复制float error_correccion = 40.;
这个值需要根据你的电路分布电容调整。简单方法是用已知电容测量后反推,我建议从10pF开始测试,每次增减5pF观察结果。
要测量更大阻值电阻时,可以:
实测发现超过10MΩ后噪声明显增大,这时可以增加采样次数到16次,虽然速度变慢但稳定性更好。
问题1:电感模式显示"INSERTAR IND"
问题2:电容测量值偏大
问题3:LCD显示乱码
有次我的设备突然所有模式都失灵,最后发现是面包板接触不良。建议重要项目还是焊个PCB,我用嘉立创免费打样做了个带香蕉插座的版本,稳定性提升很多。
方案1:增加自动量程
通过继电器切换不同分压电阻,代码需增加量程判断逻辑。我在第二版中加入了CD4051模拟开关,实现了1Ω-10MΩ的全自动测量。
方案2:添加ESR测量
需要增加1kHz方波发生电路,通过测量交流阻抗来计算ESR。这个功能对检测劣质电容特别有用。
方案3:数据记录功能
加上SD卡模块,把测量数据保存为CSV格式。我用这个功能批量测试过100个电容的老化特性,比手动记录高效多了。
最后分享个实用技巧:给Arduino供电最好用线性电源,开关电源的噪声会影响小信号测量。我在实验室对比过,用18650电池供电时测量重复性比USB供电好30%以上。