This commit is contained in:
acereca 2018-05-14 12:44:17 +02:00
parent 503860120f
commit 5aa66ec7ea
10 changed files with 1263 additions and 195 deletions

View File

@ -1,9 +0,0 @@
set_v,dset_v,meas_v,dmeas_v,read_adc, dread_adc
48.0,.03,48.07,.002,4091,1
39.02,.03,39.07,.002,3760,16
40.01,.01,40.058,.002,3805,16
41.01,.02,41.07,.003,3850,16
42.02,.02,42.081,.002,3875,20
43.02,.02,43.082,.002,3930,20
44.00,.02,44.07,.002,3972,16
46.01,.02,46.073,.002,4060,20
1 set_v dset_v meas_v dmeas_v read_adc dread_adc
2 48.0 .03 48.07 .002 4091 1
3 39.02 .03 39.07 .002 3760 16
4 40.01 .01 40.058 .002 3805 16
5 41.01 .02 41.07 .003 3850 16
6 42.02 .02 42.081 .002 3875 20
7 43.02 .02 43.082 .002 3930 20
8 44.00 .02 44.07 .002 3972 16
9 46.01 .02 46.073 .002 4060 20

1066
data/adccalib.eps Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,101 +0,0 @@
from labcontrol.ea import EA_PS8080
from labcontrol.ea import EA_EL9080
from labcontrol.ea import EA_interface
import time
# Setup
maxpower = 2000
psvolt = 48.0
steps = 40
settletime = 10
measures = 4
measuretime = .5
# defines
stepwidth = maxpower/psvolt/steps
starttime = time.time()
def identify(devlist):
outdict = {}
for dev in devlist:
devid = EA_interface(dev).write(12, 0, [])
if "PS" in devid[1]:
devtype = "ps"
else:
devtype = "el"
outdict[devtype] = {"id":devid[1][:-1], "address":dev, "type":devtype}
return outdict
def init(tree):
for dev, dat in tree.iteritems():
if dat['type'] == "el":
devobj = EA_EL9080(tree[dev]['address'])
else:
devobj = EA_PS8080(tree[dev]['address'])
#devobj.interface.debug_output = False
devobj.remote(True)
time.sleep(1)
if dat['type'] == "el":
devobj.set_current(0)
devobj.enable(True)
else:
devobj.set_current(maxpower/psvolt)
devobj.set_voltage(48)
devobj.output(True)
tree[dev]['dev'] = devobj
def deinit(tree):
for dev, dat in tree.iteritems():
if tree[dev]['type'] == "el":
tree[dev]['dev'].enable(False)
else:
tree[dev]['dev'].output(False)
tree[dev]['dev'].remote(False)
tree[dev]['dev'].close()
def measurement(devicetree):
print("starting Measurement (approx {}s)".format(steps*(settletime + measures*measuretime)))
log = "time,set_curr,set_volt,act_curr_ps,act_curr_el\n"
devicetree['ps']['dev'].set_current(stepwidth*steps)
for i in range(1, steps):
steppos = i*stepwidth
try:
devicetree['el']['dev'].set_current(steppos)
time.sleep(settletime)
act_el = 0
act_ps = 0
for m in range(0, measures):
act_el += devicetree['el']['dev'].get_actual_values()['i']
act_ps += devicetree['ps']['dev'].get_actual_values()['i']
time.sleep(measuretime)
act_ps = act_ps/measures
act_el = act_el/measures
log_new= "{:.3f},{:.3f},{:.1f},{:.3f},{:.3f}\n".format(
time.time()-starttime,
steppos,
48.0,
act_ps,
act_el
)
log += log_new
except Exception as e:
print type(e)
print e
print(log)
with open('./log.csv', 'w') as f:
f.write(log)
if __name__ == "__main__":
devicetree = identify(["/dev/ttyUSB0","/dev/ttyUSB1"])
print(devicetree)
init(devicetree)
init(devicetree)
measurement(devicetree)
deinit(devicetree)

150
data/general_eacontrol.py Normal file
View File

@ -0,0 +1,150 @@
from labcontrol.ea import EA_PS8080,EA_EL9080,EA_interface
from labcontrol.meter import MeterConfig,K2100Multimeter
import time
import i2c.i2c2 as pit
import signal
# Setup
maxpower = 1000 #maximum powerdraw for complete system in W
psvolt = [48.0] #supplied voltage in V
steps = 20 # number of steps to measure between 0 and 100% power
settletime = 8. # time to wait between setting current to draw and measurements in s
measures = 8 # number of measurements per setting
measuretime = .6 # time between measures in s
# defines
# stepwidth = maxpower/psvolt/steps
starttime = time.time()
def identify(devlist, mm=False):
outdict = {}
for dev in devlist:
devid = EA_interface(dev).write(12, 0, [])
if "PS" in devid[1]:
devtype = "ps"
else:
devtype = "el"
outdict[devtype] = {"id":devid[1][:-1], "address":dev, "type":devtype}
if mm == True:
outdict['mm']['dev'] = K2100Multimeter(mm_config)
outdict['mm']['type'] = "mm"
outdict['mm']['config'] = MeterConfig()
return outdict
def init(tree):
for dev, dat in tree.iteritems():
if dat['type'] == "el":
devobj = EA_EL9080(tree[dev]['address'])
devobj.remote(True)
elif dat['type'] == "ps":
devobj = EA_PS8080(tree[dev]['address'])
devobj.remote(True)
elif dat['type'] == "mm":
devobj = K2100Multimeter(tree[dev]['config'])
devobj.interface.debug_output = False
tree[dev]['dev'] = devobj
def setRanges(tree, volts):
for dev, dat in tree.iteritems():
if dat['type'] == "el":
dat['dev'].set_current(0)
dat['dev'].enable(True)
elif dat['type'] == "ps":
dat['dev'].set_current(maxpower/volts+1)
dat['dev'].set_power(maxpower+1)
dat['dev'].set_voltage(volts)
dat['dev'].output(True)
def deinit(signum, frame):
for dev, dat in devicetree.iteritems():
if devicetree[dev]['type'] == "el":
devicetree[dev]['dev'].enable(False)
#else:
#tree[dev]['dev'].output(False)
devicetree[dev]['dev'].remote(False)
devicetree[dev]['dev'].close()
#signal.signal(signal.SIGINT, original_sigint)
def measurement(devicetree, volts):
devicetree['ps']['dev'].set_current(maxpower/volts*1.1)
for i in range(1, steps+1):
steppercent = 100 * i/float(steps)
adcdata = {'T':0, 'V48':0, 'I48':0}
try:
act_el = devicetree['el']['dev'].get_actual_values()
act_ps = devicetree['ps']['dev'].get_actual_values()
devicetree['el']['dev'].set_current(steppercent /100 *maxpower/act_el['v'])
time.sleep(settletime)
act_el['i'] = 0
act_ps['i'] = 0
for m in range(0, measures):
act_el['i'] += devicetree['el']['dev'].get_actual_values()['i']
act_ps['i'] += devicetree['ps']['dev'].get_actual_values()['i']
#act_mm += devicetree['mm']['dev'].get_voltage()
adc = pit.rxtx_em()
for k in adcdata:
adcdata[k] += adc[k]
time.sleep(measuretime)
act_ps['i'] /= measures
act_el['i'] /= measures
for k in adcdata:
adcdata[k] /= measures
#$act_mm = act_mm/measures
log_new= "{:.2f},{:d},{:.3f},{:.3f},{:.3f},{:.3f},{:.3f},{:.3f},{:.3f},{:.3f},{:.3f}\n".format(
time.time()-starttime,
int(steppercent),
act_ps['v'],
act_ps['i'],
act_ps['p'],
act_el['v'],
act_el['i'],
act_el['p'],
adcdata['T'],
adcdata['V48'],
adcdata['I48']
)
log += log_new
except Exception as e:
print type(e)
print e
print(log)
if __name__ == "__main__":
#original_sigint = signal.getsignal(signal.SIGINT)
#signal.signal(signal.SIGINT, deinit)
devicetree = identify(["/dev/ttyUSB0","/dev/ttyUSB1"])
# manually start measurement by enabling 8V OUT
init(devicetree)
setRanges(devicetree, 48.0)
print("waiting for enable")
print(devicetree)
while (devicetree['el']['dev'].get_actual_values()['v'] < 5):
time.sleep(measuretime)
# prep log
time.sleep(settletime)
print("starting Measurement (approx {}s)".format(steps*(settletime + measures*measuretime)*len(psvolt)))
log = "time,perc_power,act_volt_ps,act_curr_ps,act_pow_ps,act_volt_el,act_curr_el,act_pow_el,pit_t,pit_v48,pit_i48\n"
for volts in psvolt:
#init(devicetree, volts)
#init(devicetree, volts)
setRanges(devicetree, volts)
measurement(devicetree, volts)
with open('./log.csv', 'w') as f:
f.write(log)
deinit(devicetree)

View File

@ -1,40 +0,0 @@
time,set_curr,set_volt,act_curr_ps,act_curr_el
16.357,1.042,48.0,0.870,1.047
28.546,2.083,48.0,1.839,2.031
40.752,3.125,48.0,2.835,3.031
52.939,4.167,48.0,3.939,4.141
65.100,5.208,48.0,4.965,5.172
77.241,6.250,48.0,6.054,6.250
89.367,7.292,48.0,7.062,7.258
101.493,8.333,48.0,8.149,8.352
113.651,9.375,48.0,9.159,9.359
125.777,10.417,48.0,10.262,10.461
137.903,11.458,48.0,11.272,11.477
150.061,12.500,48.0,12.248,12.453
162.235,13.542,48.0,13.335,13.531
174.425,14.583,48.0,14.325,14.531
186.615,15.625,48.0,15.408,15.609
198.805,16.667,48.0,16.385,16.625
210.979,17.708,48.0,17.470,17.703
223.169,18.750,48.0,18.464,18.672
235.342,19.792,48.0,19.433,19.656
247.532,20.833,48.0,20.515,20.734
259.738,21.875,48.0,21.505,21.734
271.944,22.917,48.0,22.586,22.820
284.150,23.958,48.0,23.561,23.797
296.355,25.000,48.0,24.697,24.938
308.546,26.042,48.0,25.685,25.906
320.736,27.083,48.0,26.790,27.016
332.925,28.125,48.0,27.771,28.000
345.115,29.167,48.0,28.752,28.977
357.289,30.208,48.0,29.832,30.078
369.479,31.250,48.0,30.844,31.078
381.670,32.292,48.0,31.934,32.156
393.859,33.333,48.0,32.917,33.164
406.049,34.375,48.0,34.020,34.250
418.223,35.417,48.0,35.041,35.281
430.413,36.458,48.0,36.191,36.422
442.602,37.500,48.0,37.209,37.438
454.793,38.542,48.0,38.183,38.422
466.983,39.583,48.0,39.244,39.492
479.172,40.625,48.0,40.246,40.500
1 time set_curr set_volt act_curr_ps act_curr_el
2 16.357 1.042 48.0 0.870 1.047
3 28.546 2.083 48.0 1.839 2.031
4 40.752 3.125 48.0 2.835 3.031
5 52.939 4.167 48.0 3.939 4.141
6 65.100 5.208 48.0 4.965 5.172
7 77.241 6.250 48.0 6.054 6.250
8 89.367 7.292 48.0 7.062 7.258
9 101.493 8.333 48.0 8.149 8.352
10 113.651 9.375 48.0 9.159 9.359
11 125.777 10.417 48.0 10.262 10.461
12 137.903 11.458 48.0 11.272 11.477
13 150.061 12.500 48.0 12.248 12.453
14 162.235 13.542 48.0 13.335 13.531
15 174.425 14.583 48.0 14.325 14.531
16 186.615 15.625 48.0 15.408 15.609
17 198.805 16.667 48.0 16.385 16.625
18 210.979 17.708 48.0 17.470 17.703
19 223.169 18.750 48.0 18.464 18.672
20 235.342 19.792 48.0 19.433 19.656
21 247.532 20.833 48.0 20.515 20.734
22 259.738 21.875 48.0 21.505 21.734
23 271.944 22.917 48.0 22.586 22.820
24 284.150 23.958 48.0 23.561 23.797
25 296.355 25.000 48.0 24.697 24.938
26 308.546 26.042 48.0 25.685 25.906
27 320.736 27.083 48.0 26.790 27.016
28 332.925 28.125 48.0 27.771 28.000
29 345.115 29.167 48.0 28.752 28.977
30 357.289 30.208 48.0 29.832 30.078
31 369.479 31.250 48.0 30.844 31.078
32 381.670 32.292 48.0 31.934 32.156
33 393.859 33.333 48.0 32.917 33.164
34 406.049 34.375 48.0 34.020 34.250
35 418.223 35.417 48.0 35.041 35.281
36 430.413 36.458 48.0 36.191 36.422
37 442.602 37.500 48.0 37.209 37.438
38 454.793 38.542 48.0 38.183 38.422
39 466.983 39.583 48.0 39.244 39.492
40 479.172 40.625 48.0 40.246 40.500

View File

@ -1,45 +0,0 @@
#! /usr/bin/python3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.ioff()
plt.style.use('bmh')
data = pd.read_csv("./log_2kw_direct.csv")
print(data)
#plt.errorbar(
# data['time'],
# data['act_curr_ps'],
# yerr=data['act_curr_ps']*.002,
# label="Spannungsquelle Ausgang",
# fmt='.'
#)
#plt.errorbar(
# data['time'],
# data['act_curr_el']-.125,
# label="Elektronische Last Eingang",
# fmt='.'
#)
data['act_curr_el'] = data['act_curr_el']-.125
meandist = np.mean(data['act_curr_el'] - data['act_curr_ps'])
plt.bar(data['set_curr'], (data['act_curr_el']-data['act_curr_ps']-meandist), .2, aa=True)
data['nom_max_delta_i'] = np.sqrt(2*(data['set_curr']*.002)**2)
plt.errorbar(
data['set_curr'],
data['nom_max_delta_i'],
fmt='.'
)
plt.errorbar(
data['set_curr'],
-data['nom_max_delta_i'],
fmt='.'
)
plt.ylabel('$\Delta$I/A')
plt.xlabel('I$_{set}$/A')
plt.legend()
plt.savefig("2kw_direct.png")

View File

@ -0,0 +1,44 @@
#! /usr/bin/python3
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.ioff()
plt.style.use('bmh')
plt.figure(figsize=(19.2,10.8))
data = pd.read_csv("./log.csv")
print(data)
#plt.errorbar(
# data['time'],
# data['act_curr_ps'],
# yerr=data['act_curr_ps']*.002,
# label="Spannungsquelle Ausgang",
# fmt='.'
#)
#plt.errorbar(
# data['time'],
# data['act_curr_el']-.125,
# label="Elektronische Last Eingang",
# fmt='.'
#)
plt.errorbar(
data['perc_power'],
data['pit_i48'],
fmt='.'
)
plt.errorbar(
data['perc_power'],
data['act_curr_ps'],
fmt='.'
)
#plt.ylabel('$\Delta$I/A')
#plt.xlabel('I$_{set}$/A')
plt.legend()
#-plt.savefig("2kw_direct.png")
plt.savefig("adccalib.eps", format='eps', dpi=1000)

1
data/raspi-i2c/i2c Symbolic link
View File

@ -0,0 +1 @@
/remote_media/m03/home/pi/i2c

1
data/raspi-i2c/i2c2.py Symbolic link
View File

@ -0,0 +1 @@
/remote_media/m03/home/pi/i2c/i2c2.py

1
data/sshfs.sh Executable file
View File

@ -0,0 +1 @@
sshfs hbpc9:. afshome