diff --git a/.gitignore b/.gitignore index 684e998..86fb82c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ # PDF output - usually a bad idea to keep this in Git *.pdf +!data/**/*.pdf # Latexmk *.fdb_latexmk diff --git a/README.md b/README.md index 1cc5244..f47fa14 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - [x] Umbau - [x] **packed** union based data structures (removes the need for magic numbers - [ ] safe types inside `pi2cproto.h` - - [ ] old + - [ ] ~~old~~ - [x] ballast - [x] reused - remaining compatability to v1 @@ -24,6 +24,8 @@ - missing `__attribute__((packed))` declarations - [x] why are `digipoti` and `anapoti` only readable from `0x02` and 0x04` not partial? - same as above + - [ ] instability on mass spi communication + - timebased / overflow ? - Calibration - [x] characterize adcbehaviour diff --git a/data/m02_adccalib_48/adccalib_20180517.csv b/data/m02_adccalib_48/adccalib_20180517.csv new file mode 100644 index 0000000..4ef5784 --- /dev/null +++ b/data/m02_adccalib_48/adccalib_20180517.csv @@ -0,0 +1,22 @@ +time/s,v_ps/v,dv_ps/v,v_pit48/v,dv_pit48/v,v_keith/v,v_set/v +13.313,43.039,0.006,42.177,0.042,43.110,43.000 +26.148,43.516,0.010,42.621,0.042,43.586,43.500 +38.952,44.004,0.006,43.085,0.039,44.072,44.000 +51.764,44.497,0.005,43.576,0.055,44.566,44.500 +64.650,44.998,0.011,44.056,0.038,45.072,45.000 +77.457,45.491,0.009,44.563,0.046,45.567,45.500 +90.270,46.002,0.007,45.088,0.061,46.074,46.000 +103.151,46.510,0.007,45.562,0.054,46.585,46.500 +115.961,47.000,0.007,46.026,0.096,47.074,47.000 +132.470,47.477,0.006,46.475,0.081,47.559,47.500 +145.285,48.002,0.007,46.964,0.201,48.077,48.000 +162.967,48.495,0.002,47.466,0.206,48.574,48.500 +175.817,48.981,0.006,47.833,0.425,49.058,49.000 +188.953,49.495,0.006,48.484,0.213,49.577,49.500 +207.095,49.990,0.005,48.958,0.209,50.071,50.000 +219.895,50.477,0.007,49.446,0.221,50.561,50.500 +232.955,50.966,0.007,49.841,0.146,51.049,51.000 +245.762,51.484,0.010,50.340,0.031,51.562,51.500 +258.574,51.952,0.009,50.842,0.079,52.038,52.000 +272.588,52.435,0.006,51.325,0.078,52.524,52.500 +287.068,52.973,0.011,51.830,0.052,53.057,53.000 diff --git a/data/m02_adccalib_48/adccalib_48.csv b/data/m02_adccalib_48/adccalib_48.csv deleted file mode 120000 index 20347ca..0000000 --- a/data/m02_adccalib_48/adccalib_48.csv +++ /dev/null @@ -1 +0,0 @@ -/remote_media/m03/home/pi/adccalib_48.csv \ No newline at end of file diff --git a/data/m02_adccalib_48/adccalib_v10.pdf b/data/m02_adccalib_48/adccalib_v10.pdf new file mode 100644 index 0000000..c2cfc90 Binary files /dev/null and b/data/m02_adccalib_48/adccalib_v10.pdf differ diff --git a/data/m02_adccalib_48/adccalib_v10_bus.pdf b/data/m02_adccalib_48/adccalib_v10_bus.pdf new file mode 100644 index 0000000..7f6eb30 Binary files /dev/null and b/data/m02_adccalib_48/adccalib_v10_bus.pdf differ diff --git a/data/m02_adccalib_48/adccalib_v18ana.pdf b/data/m02_adccalib_48/adccalib_v18ana.pdf new file mode 100644 index 0000000..6767aad Binary files /dev/null and b/data/m02_adccalib_48/adccalib_v18ana.pdf differ diff --git a/data/m02_adccalib_48/adccalib_v18digi.pdf b/data/m02_adccalib_48/adccalib_v18digi.pdf new file mode 100644 index 0000000..7747d06 Binary files /dev/null and b/data/m02_adccalib_48/adccalib_v18digi.pdf differ diff --git a/data/m02_adccalib_48/adccalib_v48.pdf b/data/m02_adccalib_48/adccalib_v48.pdf new file mode 100644 index 0000000..d4c69a2 Binary files /dev/null and b/data/m02_adccalib_48/adccalib_v48.pdf differ diff --git a/data/m02_adccalib_48/processing_adccalib_48.py b/data/m02_adccalib_48/processing_adccalib_48.py deleted file mode 100644 index ef85fd6..0000000 --- a/data/m02_adccalib_48/processing_adccalib_48.py +++ /dev/null @@ -1,68 +0,0 @@ -#! /usr/bin/python3 - -import scipy.optimize as opt -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -import VisTools.plotting as vt - -plt.ioff() -plt.style.use('bmh') -fig, axarr = plt.subplots(2,1, sharex='col',figsize=(11.88, 8.4)) -data = pd.read_csv("./adccalib_48.csv") - -data['Dv'] = data['v_pit48/v'] - data['v_keith/v'] -print(data) - -axarr[0].errorbar( - data['v_set/v'], - data['v_pit48/v'], - yerr=data['dv_pit48/v'], - label="V$_{MONITOR\_48V}$", - fmt='.' -) -axarr[0].errorbar( - data['v_set/v'], - data['v_ps/v'], - yerr=data['dv_ps/v'], - label="V$_{PS}$", - fmt='.' -) - -axarr[1].errorbar( - data['v_set/v'], - data['Dv'], - yerr=data['dv_pit48/v'], - label=" absolute Error of ADC", - fmt='.' -) - -# fit to abs dist -linfnc = lambda x,m,c: x*m+c - -pfinal, pcov = opt.curve_fit( - linfnc, - data['v_set/v'], - data['Dv'], - p0=(.1,2.6), - sigma=[.5 for e in range(data['Dv'].size)] -) - -print( pfinal ) - -axarr[1].plot( - data['v_set/v'], - data['v_keith/v']*pfinal[0]+pfinal[1] -) - -vt.annotate_val(plt, pfinal[0], np.sqrt(pcov[0][0]), name="V48[2]", data_pos=(44, 3)) - -plt.xlabel('V$_{set}$/V') -axarr[0].set_ylabel('V$_{IN}$/V') -axarr[0].set_title("PowerIt ADC Calibration: 48V Input") -axarr[1].set_ylabel('$\Delta$V$_{IN}$ / V') -axarr[0].legend() -#-plt.savefig("2kw_direct.png") - -plt.tight_layout() -plt.savefig("adccalib_48.eps", format='eps', dpi=1000) diff --git a/data/m02_adccalib_48/processing_adccalib_v10.py b/data/m02_adccalib_48/processing_adccalib_v10.py new file mode 100644 index 0000000..febcea6 --- /dev/null +++ b/data/m02_adccalib_48/processing_adccalib_v10.py @@ -0,0 +1,71 @@ +#! /usr/bin/python3 + +import scipy.optimize as opt +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import VisTools.plotting as vt + +plt.ioff() +plt.style.use('bmh') +fig, axarr = plt.subplots( + 2, + 1, + figsize=(10, 8), + gridspec_kw={'height_ratios':[2, 1]}, + sharex="col" +) +data = pd.read_csv("./adccalib_v10.csv", comment="#") + +data['Dv'] = data['v_pit10'] / data['v_keith'] +print(data) + +axarr[0].errorbar( + data['v_keith'], + data['v_pit10'], + yerr=data['dv_pit10'], + label="V$_{MONITOR\_48V}$", + fmt='.' +) +p =axarr[1].errorbar( + data['v_keith'], + data['Dv'], + yerr=data['dv_pit10'], + label=" absolute Error of ADC", + fmt='.', + alpha=.3 +) + +# fit to abs dist +linfnc = lambda x,m,c: x*m+c + +pfinal = vt.fit_linear( + data.v_keith, + data.Dv, + (0,0) +) + +axarr[1].plot( + data.v_keith, + linfnc(data.v_keith, pfinal[0].n, pfinal[1].n), + color=p[0].get_color() +) + +print( pfinal ) + + +vt.annotate_unc( + plt, + pfinal[1], + name="\Delta V48[1]", + data_pos=(47, 1.1), + formatting='f') + +plt.xlabel('V$_{IN,EXT} / V$') +axarr[0].set_ylabel('V$_{IN,PIT} / V$') +axarr[0].set_title("PowerIt ADC Calibration: 48V Input") +axarr[1].set_ylabel('($V_{IN,PIT} / V_{IN,EXT}$) / V') +#-plt.savefig("2kw_direct.png") + +plt.tight_layout() +plt.savefig("adccalib_v10.pdf", dpi=1000) diff --git a/data/m02_adccalib_48/processing_adccalib_v18.py b/data/m02_adccalib_48/processing_adccalib_v18.py new file mode 100644 index 0000000..ae7d418 --- /dev/null +++ b/data/m02_adccalib_48/processing_adccalib_v18.py @@ -0,0 +1,73 @@ +#! /usr/bin/python3 + +import scipy.optimize as opt +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import VisTools.plotting as vt + +plt.ioff() +plt.style.use('bmh') +fig, axarr = plt.subplots( + 2, + 1, + figsize=(10, 8), + gridspec_kw={'height_ratios':[2, 1]}, + sharex="col" +) + +for f in ["ana", "digi"]: + data = pd.read_csv("./adccalib_v18" + f + ".csv", comment="#") + + data['Dv'] = data['v_pit18'+f] / data['v_keith'] + print(data) + + axarr[0].errorbar( + data['adcval'], + data['v_pit18'+f], + yerr=data['dv_pit18'+f], + label="V$_{MONITOR\_48V}$", + fmt='.' + ) + p =axarr[1].errorbar( + data['adcval'], + data['Dv'], + yerr=data['dv_pit18'+f], + label=" absolute Error of ADC", + fmt='.', + alpha=.3 + ) + + # fit to abs dist + linfnc = lambda x,m,c: x*m+c + + pfinal = vt.fit_linear( + data.adcval, + data.Dv, + (0,0) + ) + + axarr[1].plot( + data.adcval, + linfnc(data.adcval, pfinal[0].n, pfinal[1].n), + color=p[0].get_color() + ) + + print( pfinal ) + + + vt.annotate_unc( + plt, + pfinal[1], + name="\Delta 1V8"+f+"[1]", + data_pos=(np.mean(data.adcval), 1.1), + formatting='f') + + plt.xlabel('V$_{IN,EXT} / V$') + axarr[0].set_ylabel('V$_{IN,PIT} / V$') + axarr[0].set_title("PowerIt ADC Calibration: 1V8 Output") + axarr[1].set_ylabel('($V_{IN,PIT} / V_{IN,EXT}$) / V') + #-plt.savefig("2kw_direct.png") + + plt.tight_layout() + plt.savefig("adccalib_v18" + f + ".pdf", dpi=1000) diff --git a/data/m02_adccalib_48/processing_adccalib_v48.py b/data/m02_adccalib_48/processing_adccalib_v48.py new file mode 100644 index 0000000..7d3cdb6 --- /dev/null +++ b/data/m02_adccalib_48/processing_adccalib_v48.py @@ -0,0 +1,71 @@ +#! /usr/bin/python3 + +import scipy.optimize as opt +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import VisTools.plotting as vt + +plt.ioff() +plt.style.use('bmh') +fig, axarr = plt.subplots( + 2, + 1, + figsize=(10, 8), + gridspec_kw={'height_ratios':[2, 1]}, + sharex="col" +) +data = pd.read_csv("./adccalib_v48.csv", comment="#") + +data['Dv'] = data['v_pit48'] / data['v_keith'] +print(data) + +axarr[0].errorbar( + data['v_keith'], + data['v_pit48'], + yerr=data['dv_pit48'], + label="V$_{MONITOR\_48V}$", + fmt='.' +) +p =axarr[1].errorbar( + data['v_keith'], + data['Dv'], + yerr=data['dv_pit48'], + label=" absolute Error of ADC", + fmt='.', + alpha=.3 +) + +# fit to abs dist +linfnc = lambda x,m,c: x*m+c + +pfinal = vt.fit_linear( + data.v_keith, + data.Dv, + (0,0) +) + +axarr[1].plot( + data.v_set, + linfnc(data.v_keith, pfinal[0].n, pfinal[1].n), + color=p[0].get_color() +) + +print( pfinal ) + + +vt.annotate_unc( + plt, + pfinal[1], + name="\Delta V48[1]", + data_pos=(47, 1.1), + formatting='f') + +plt.xlabel('V$_{IN,EXT} / V$') +axarr[0].set_ylabel('V$_{IN,PIT} / V$') +axarr[0].set_title("PowerIt ADC Calibration: 48V Input") +axarr[1].set_ylabel('($V_{IN,PIT} / V_{IN,EXT}$) / V') +#-plt.savefig("2kw_direct.png") + +plt.tight_layout() +plt.savefig("adccalib_v48.pdf", dpi=1000) diff --git a/data/m03_poticalib/adccalib_02-eps-converted-to.pdf b/data/m03_poticalib/adccalib_02-eps-converted-to.pdf new file mode 100644 index 0000000..75b017c Binary files /dev/null and b/data/m03_poticalib/adccalib_02-eps-converted-to.pdf differ diff --git a/data/m04_cycledepends/cycledepends_20180529.pdf b/data/m04_cycledepends/cycledepends_20180529.pdf new file mode 100644 index 0000000..40c5427 Binary files /dev/null and b/data/m04_cycledepends/cycledepends_20180529.pdf differ diff --git a/data/m04_cycledepends/cycledepends_20180530.pdf b/data/m04_cycledepends/cycledepends_20180530.pdf new file mode 100644 index 0000000..b6eb658 Binary files /dev/null and b/data/m04_cycledepends/cycledepends_20180530.pdf differ diff --git a/data/m04_cycledepends/cycledepends_20180605.pdf b/data/m04_cycledepends/cycledepends_20180605.pdf new file mode 100644 index 0000000..03a5196 Binary files /dev/null and b/data/m04_cycledepends/cycledepends_20180605.pdf differ diff --git a/data/m04_cycledepends/processing_cycledepends.py b/data/m04_cycledepends/processing_cycledepends.py index 81204c9..cb04629 100644 --- a/data/m04_cycledepends/processing_cycledepends.py +++ b/data/m04_cycledepends/processing_cycledepends.py @@ -6,10 +6,11 @@ import pandas as pd import matplotlib.pyplot as plt import VisTools.plotting as vt import VisTools.tex as vtt +import sys #import uncertainties as unc #import uncertainties.unumpy as unp -append = "_20180605" +append = str(sys.argv[1]) plt.ioff() plt.style.use('bmh') diff --git a/data/m04_cycledepends/processing_cycledepends_raw.py b/data/m04_cycledepends/processing_cycledepends_raw.py index acb853e..c3d3367 100644 --- a/data/m04_cycledepends/processing_cycledepends_raw.py +++ b/data/m04_cycledepends/processing_cycledepends_raw.py @@ -6,10 +6,11 @@ import pandas as pd import matplotlib.pyplot as plt import VisTools.plotting as vt import VisTools.tex as vtt +import sys #import uncertainties as unc #import uncertainties.unumpy as unp -append = ""#"_20180529" +append = str(sys.argv[1]) plt.ioff() plt.style.use('bmh') diff --git a/thesis.tex b/thesis.tex index 150a337..3f7c516 100644 --- a/thesis.tex +++ b/thesis.tex @@ -9,7 +9,7 @@ \postdate{\par\vspace{3cm}} \author{Patrick Nisblé} -\title{$<$ on the calibration and regulation of a PowerIt, english $>$} +\title{Calibration and Regulation of BrainScaleS' PowerIt Subsystems} \begin{document} \maketitle \thispagestyle{empty} @@ -29,7 +29,7 @@ \begin{figure} \centering \hspace*{-.16\columnwidth} - \includegraphics[width=1.3\columnwidth]{./data/m04_cycledepends/cycledepends.pdf} + \includegraphics[width=1.3\columnwidth]{./data/m04_cycledepends/cycledepends_20180530.pdf} \caption{plotted difference from set input voltage, and fitted linearly, May 30th 2018, $\approx$25\si\degree C} \end{figure} \include{parts/intro}