低价电阻箱-阻值测试

    技术2024-03-20  93

      本文讨论电阻箱和拨码电阻器的精度问题,为今后的实验做好数据的准备。

    ■ 电阻箱


    使用 TB上的电阻箱 便于进行电子实验。但是这种低价位电阻箱的误差需要在使用过程中进行考虑。本文对于该电阻的,使用数字万用表初步测量,校验一下实际的电阻箱的误差。

    ▲ 价格小于100的教学电阻箱

    拆开电阻箱内部,可以看到

    ▲ 低价电阻箱0~99999Ω

    ◎ 电阻箱的型号:

    下面表格给出了不同型号雨潺潺显示组织的大小:

     

    01测量电阻箱各档电阻


    1.电阻箱的电阻

    电阻箱1的测量结果: C1C2C3C4C5C6C7C8C90.941.061.171.251.351.451.551.651.731.852.853.854.865.836.837.838.829.8210.8420.7730.7440.7250.6060.6070.5380.5190.47100.26199.89299.19398.77499.99599.49699.09798.40897.97994.431991.602989.803989.204979.505973.006970.607969.008968.0010067.0020102.0030127.0040145.0049917.0060008.0070078.0080048.0090042.00 电阻箱2测量结果 C1C2C3C4C5C6C7C8C91.001.101.221.321.401.491.601.711.791.912.903.924.915.896.907.898.909.8810.9120.8630.8340.8450.7360.7370.6980.6690.66100.31199.92299.36399.23499.30598.73698.36797.81897.69998.841997.702997.603996.305003.306000.907000.507999.808998.3010016.0020041.0030078.0040097.0049919.0059937.0069991.0079971.0090023.01 电阻箱3 测量结果 R1R2R3R4R5R6R7R8R90.8090001.3110001.4500001.4510001.4570001.4550001.4500001.4550001.4520001.7920002.8040003.8250004.8480005.9410006.9320007.9690008.9720009.98300010.63800020.47400130.28599940.06800151.72600261.49700271.33599981.15899790.91899998.237000196.059998294.980011391.170013509.670013607.140015704.950012803.760010900.0399781001.8999022005.3001713009.5000004001.8002935065.8994146066.5000007069.7998058074.0996099066.299805 电阻箱4 测量结果 R1R2R3R4R5R6R7R8R91.972.903.895.395.866.838.138.839.8111.1020.9431.9142.2750.8361.2671.2082.4390.43101.88201.35301.04404.93500.49600.60698.44798.06897.53998.211996.302994.703992.104974.305971.706969.807968.308965.00 #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # METERREC.PY -- by Dr. ZhuoQing 2020-07-06 # # Note: #============================================================ from headm import * import os from tsmodule.tsstm32 import * from tsmodule.tsvisa import * #------------------------------------------------------------ def tspclickaction(func1=None, func2=None): def f1(): tspmsg('msg \a') def f2(): printf('\a') if func1 == None: func1 = f1 if func2 == None: func2 = f2 #-------------------------------------------------------- codeflag = 0 while True: if codeflag == 0: time.sleep(.5) else: time.sleep(.2) key = tspread() if key[7]+key[8]+key[9] != 0: return if key[2] != 0 and codeflag == 0: if key[3] != 0: return func1() codeflag = 1 continue if key[3] != 0 and codeflag == 0: if key[2] != 0: return func2() codeflag = 1 continue codeflag = 0 #------------------------------------------------------------ windowtitle = tspgetwindowtitle() findflag = 0 meterfile = r'D:\zhuoqing\window\cb\MyResearch\Test\TestAD5344\M8BL_BAS\M8BL_BAS.exe' for wt in windowtitle: if wt.find('MEGA8 DOWLOAD PROGERAM') >= 0: findflag = 1 break if findflag == 0: os.system(meterfile) time.sleep(.5) tspbeep(1200, 200) #------------------------------------------------------------ meterid = 0 decimalnum = -1 if len(sys.argv) > 1: meterid = int(sys.argv[1]) if len(sys.argv) > 2: decimalnum = int(sys.argv[2]) if meterid > 3: dm3068open() def ff1(): global decimalnum dn = decimalnum if dn == 0: if meterid < 4: meter = meterval() tspmsg('%d '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%d '%val) elif meterid == 5: val = dm3068vac() tspmsg('%d '%val) elif meterid == 6: val = dm3068res() tspmsg('%d '%val) else: val = dm3068vdc() tspmsg('%d '%val) elif dn == 1: if meterid < 4: meter = meterval() tspmsg('%3.1f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%3.1f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%3.1f '%val) elif meterid == 6: val = dm3068res() tspmsg('%3.1f '%val) else: val = dm3068vdc() tspmsg('%3.1f '%val) elif dn == 2: if meterid < 4: meter = meterval() tspmsg('%4.2f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%4.2f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%4.2f '%val) elif meterid == 6: val = dm3068res() tspmsg('%4.2f '%val) else: val = dm3068vdc() tspmsg('%4.2f '%val) elif dn == 3: if meterid < 4: meter = meterval() tspmsg('%5.3f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%5.3f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%5.3f '%val) elif meterid == 6: val = dm3068res() tspmsg('%5.3f '%val) else: val = dm3068vdc() tspmsg('%5.3f '%val) elif dn == 4: if meterid < 4: meter = meterval() tspmsg('%6.4f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%6.4f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%6.4f '%val) elif meterid == 6: val = dm3068res() tspmsg('%6.4f '%val) else: val = dm3068vdc() tspmsg('%6.4f '%val) elif dn == 5: if meterid < 4: meter = meterval() tspmsg('%7.5 '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%7.5f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%7.5f '%val) elif meterid == 6: val = dm3068res() tspmsg('%7.5f '%val) else: val = dm3068vdc() tspmsg('%7.5f '%val) elif dn == 6: if meterid < 4: meter = meterval() tspmsg('%8.6f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%8.6f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%8.6f '%val) elif meterid == 6: val = dm3068res() tspmsg('%8.6f '%val) else: val = dm3068vdc() tspmsg('%8.6f '%val) elif dn == 7: if meterid < 4: meter = meterval() tspmsg('%9.7f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%9.7f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%9.7f '%val) elif meterid == 6: val = dm3068res() tspmsg('%9.7f '%val) else: val = dm3068vdc() tspmsg('%9.7f '%val) elif dn == 8: if meterid < 4: meter = meterval() tspmsg('%10.8f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%10.8f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%10.8f '%val) elif meterid == 6: val = dm3068res() tspmsg('%10.8f '%val) else: val = dm3068vdc() tspmsg('%10.8f '%val) else: if meterid < 4: meter = meterval() tspmsg('%f '%meter[meterid]) else: if meterid == 4: val = dm3068vdc() tspmsg('%f '%val) elif meterid == 5: val = dm3068vac() tspmsg('%f '%val) elif meterid == 6: val = dm3068res() tspmsg('%f '%val) else: val = dm3068vdc() tspmsg('%f '%val) tspbeep(2000, 200) #------------------------------------------------------------ time.sleep(.5) tspbeep(1000, 500) tspclr() #------------------------------------------------------------ tspclickaction(ff1) tspmsgcopy() tspbeep(500, 200) #------------------------------------------------------------ # END OF FILE : METERREC.PY #============================================================

    2.拨码电阻

    ▲ 拨码电阻器

    拨码电阻器1 R1R2R3R4R5R6R7R8R939980.0020093.0013374.009987.007991.406671.705718.505031.204469.10403340.00199470.00133270.02100900.0080412.0066801.0057292.0049837.0044350.004026599.751996000.001334900.001011900.00808410.00670470.00575380.00502790.00447109.97 拨码电阻2 R1R2R3R4R5R6R7R8R939805.0019877.0013255.009989.007988.106650.805698.905004.404445.90402200.00201010.00134039.98100520.0080308.0066955.0157395.0049781.0044289.003983200.002013400.121337800.00999200.00798880.00668320.00572090.06505680.00448850.00

    ▲ 拨码电阻的阻值

    #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # TEST2.PY -- by Dr. ZhuoQing 2020-07-04 # # Note: #============================================================ from headm import * R1 = [39805.00, 19877.00, 13255.00, 9989.00, 7988.10, 6650.80, 5698.90, 5004.40, 4445.90] R2 = [402200.00, 201010.00, 134039.98, 100520.00, 80308.00, 66955.01, 57395.00, 49781.00, 44289.00] R3 = [3983200.00, 2013400.12, 1337800.00, 999200.00, 798880.00, 668320.00, 572090.06, 505680.00, 448850.00] #printff(R1, R2, R3) plt.plot(R1, label='R1') plt.plot(R2, label='R2') plt.plot(R3, label='R3') plt.xlabel("Sample") plt.ylabel("Resistor(Ohm)") plt.grid(True) plt.legend(loc='upper right') plt.show() #------------------------------------------------------------ # END OF FILE : TEST2.PY #============================================================

    3. 拨码电阻建模

    这个电阻应该是用于现场控制应用,通过电压产生一个线性变化的电流。

    假设测量的 R n R_n Rn,在激励电压 U 1 U_1 U1激励下,产生线性增加的电流 I n I_n In。假设模型为:

    ▲ 对应用进行建模

    利用上面所测量的R1,R2,R3来估计U1,R0,I0,I1。 由于所能够使用到数据只有九个,所以预先假设: U 1 = 22 U_1 = 22 U1=22。 得到对应的参数: R 0 = 5 . 29276323 e 03 {\rm{R}}_0 {\rm{ = 5}}{\rm{.29276323e03 }} R0=5.29276323e03 I 0 = 5 . 49295798 e − 04 {\rm{I}}_0 {\rm{ = 5}}{\rm{.49295798e - 04 }} I0=5.49295798e04 I 1 = 4 . 16442321 e − 03 {\rm{I}}_1 {\rm{ = 4}}{\rm{.16442321e - 03}} I1=4.16442321e03

    利用上述的 U 1 , R 0 U_1 ,R_0 U1,R0,有 R 1 R_1 R1计算出对应的输出电流:

    ▲ R1与输出电流之间的关系

    #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # TEST2.PY -- by Dr. ZhuoQing 2020-07-04 # # Note: #============================================================ from headm import * from scipy.optimize import curve_fit #------------------------------------------------------------ def func1(Rn, R0, I0, I1): return (22 * (R0+Rn)/(Rn*R0) - I1) / I0 R1 = [39805.00, 19877.00, 13255.00, 9989.00, 7988.10, 6650.80, 5698.90, 5004.40, 4445.90] R2 = [402200.00, 201010.00, 134039.98, 100520.00, 80308.00, 66955.01, 57395.00, 49781.00, 44289.00] R3 = [3983200.00, 2013400.12, 1337800.00, 999200.00, 798880.00, 668320.00, 572090.06, 505680.00, 448850.00] #------------------------------------------------------------ param = [4000, 0.001, 0.004] ndim = linspace(1, len(R1), len(R1), endpoint=True) #printf(ndim) #------------------------------------------------------------ RR = R1 ra1 = array(RR) param, conv = curve_fit(func1, RR, ndim, p0=param) printf(param) Rcal = func1(ra1, *param) printf(Rcal) #------------------------------------------------------------ I = [22*(5.293e3+r)/(5.293e3*r) for r in R1] plt.plot(I) plt.xlabel("n") plt.ylabel("I(A)") plt.grid(True) plt.show() #------------------------------------------------------------ # END OF FILE : TEST2.PY #============================================================

    4. 拨码电阻数字与电阻之间关系

    r 1 , r 2 , r 3 r1,r2,r3 r1,r2,r3为前面测量的三组电阻。即 r max ⁡ = r 3 [ 0 ] × 10 r_{\max } = r3\left[ 0 \right] \times 10 rmax=r3[0]×10是每一档空挡(即断开)的电阻。

    R 1 = [ r max ⁡ , r 1 ( 0 ) , r 1 ( 1 ) , ⋯ r 1 ( 9 ) ] R1 = \left[ {r_{\max } ,r1\left( 0 \right),r1\left( 1 \right), \cdots r1\left( 9 \right)} \right] R1=[rmax,r1(0),r1(1),r1(9)] R 2 = [ r max ⁡ , r 2 ( 0 ) , r 2 ( 1 ) , ⋯ r 2 ( 9 ) ] R2 = \left[ {r_{\max } ,r2\left( 0 \right),r2\left( 1 \right), \cdots r2\left( 9 \right)} \right] R2=[rmax,r2(0),r2(1),r2(9)] R 3 = [ r max ⁡ , r 3 ( 0 ) , r 3 ( 1 ) , ⋯ r 3 ( 9 ) ] R3 = \left[ {r_{\max } ,r3\left( 0 \right),r3\left( 1 \right), \cdots r3\left( 9 \right)} \right] R3=[rmax,r3(0),r3(1),r3(9)]

    n 1 n 2 n 3 n_1 n_2 n_3 n1n2n3是拨码的三位数字,那么最终的电阻为:

    ▲ 显示数字n1n2n3对应的输出电阻

    取电阻的导数,它们呈现严格的线性关系。

    ▲ 输出电阻的倒数

    r1str = "39805.00 19877.00 13255.00 9989.00 7988.10 6650.80 5698.90 5004.40 4445.90" r2str = "402200.00 201010.00 134039.98 100520.00 80308.00 66955.01 57395.00 49781.00 44289.00" r3str = "3983200.00 2013400.12 1337800.00 999200.00 798880.00 668320.00 572090.06 505680.00 448850.00" r1dim = [float(s) for s in r1str.split() if len(s) > 0] printf(r1dim) r2dim = [float(s) for s in r2str.split() if len(s) > 1] printf(r2dim) r3dim = [float(s) for s in r3str.split() if len(s) > 2] printf(r3dim) rmax = r3dim[0] * 10 r1dim.insert(0, rmax) r2dim.insert(0, rmax) r3dim.insert(0, rmax) #------------------------------------------------------------ def rpp(r1, r2=rmax, r3=rmax): return 1/(1/r1 + 1/r2 + 1/r3) rall = [] for i in range(10): r1 = r1dim[i] for j in range(10): r2 = r2dim[j] for k in range(10): r3 = r3dim[k] rall.append(1/rpp(r1, r2, r3))

    如果 n 1 n 2 n 3 n1n2n3 n1n2n3是拨码显示值,且 n 1 n 2 n 3 ≠ 0 n1n2n3 \ne 0 n1n2n3=0,那么电阻值为:

    这个公式与实际输出之间的误差为:

    ▲ 计算公式与输出电阻之间的误差

    通常,如果输出 R 0 R_0 R0,那么需要设置拨码为:

    以下是一些典型输出电阻所对应的拨码开关的数值以及实际输出的电阻阻值:

    电阻R1R2R3R4R5R6R7R8阻值50001000020000500001000002000005000001000000拨码开关80040020080402084实际输出50009972198114936998856194467466221856039实际测量5000.799994.6019884.3349786.77100122.36201109.33505567.94994331.34 #!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # TEST1.PY -- by Dr. ZhuoQing 2020-07-03 # # Note: #============================================================ from headm import * from tsmodule.tsstm32 import * from tsmodule.tsvisa import * dm3068open() #------------------------------------------------------------ codeflag = 0 while True: time.sleep(1) key = tspread() if key[2] != 0 and codeflag == 0: tspbeep(2000, 200) val = dm3068res() time.sleep(1) tspmsg('%5.2f \a'%val) codeflag = 1 if key[3] != 0 and codeflag == 0: tspbeep(1200, 200) time.sleep(1) tspmsg('\r\n\a') codeflag = 1 codeflag = 0 #------------------------------------------------------------ # END OF FILE : TEST1.PY #============================================================

     

    ※ 结论


    电阻箱有一个固定的0欧电阻,两个电阻箱的静态0欧电阻大约是 0.8欧姆左右;

    电阻箱其它档位的电阻的精度大约是1%左右。

    作为一般初步调试所使用的电阻箱,这种便宜的电阻箱就可以使用了。

    Processed: 0.014, SQL: 9