cleanup
This commit is contained in:
parent
503860120f
commit
5aa66ec7ea
|
@ -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
|
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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)
|
|
|
@ -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)
|
|
@ -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,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")
|
|
|
@ -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)
|
|
@ -0,0 +1 @@
|
||||||
|
/remote_media/m03/home/pi/i2c
|
|
@ -0,0 +1 @@
|
||||||
|
/remote_media/m03/home/pi/i2c/i2c2.py
|
|
@ -0,0 +1 @@
|
||||||
|
sshfs hbpc9:. afshome
|
Loading…
Reference in New Issue