本文讨论电阻箱和拨码电阻器的精度问题,为今后的实验做好数据的准备。
■ 电阻箱
使用 TB上的电阻箱 便于进行电子实验。但是这种低价位电阻箱的误差需要在使用过程中进行考虑。本文对于该电阻的,使用数字万用表初步测量,校验一下实际的电阻箱的误差。
▲ 价格小于100的教学电阻箱
拆开电阻箱内部,可以看到
▲ 低价电阻箱0~99999Ω
◎ 电阻箱的型号:
下面表格给出了不同型号雨潺潺显示组织的大小:
01测量电阻箱各档电阻
1.电阻箱的电阻
电阻箱1的测量结果:
C1C2C3C4C5C6C7C8C9
0.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测量结果
C1C2C3C4C5C6C7C8C9
1.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 测量结果
R1R2R3R4R5R6R7R8R9
0.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 测量结果
R1R2R3R4R5R6R7R8R9
1.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
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)
2.拨码电阻
▲ 拨码电阻器
拨码电阻器1
R1R2R3R4R5R6R7R8R9
39980.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
R1R2R3R4R5R6R7R8R9
39805.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
▲ 拨码电阻的阻值
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]
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
()
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.49295798e−04
I
1
=
4
.
16442321
e
−
03
{\rm{I}}_1 {\rm{ = 4}}{\rm{.16442321e - 03}}
I1=4.16442321e−03
利用上述的
U
1
,
R
0
U_1 ,R_0
U1,R0,有
R
1
R_1
R1计算出对应的输出电流:
▲ R1与输出电流之间的关系
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)
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
()
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
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
※ 结论
电阻箱有一个固定的0欧电阻,两个电阻箱的静态0欧电阻大约是 0.8欧姆左右;
电阻箱其它档位的电阻的精度大约是1%左右。
作为一般初步调试所使用的电阻箱,这种便宜的电阻箱就可以使用了。