jarjonam 5 년 전
부모
커밋
531996f2ea
4개의 변경된 파일78개의 추가작업 그리고 4개의 파일을 삭제
  1. 47 1
      pi/server.py
  2. 1 1
      pi/web/main.css
  3. 19 2
      pi/web/main.html
  4. 11 0
      pi/web/main.js

+ 47 - 1
pi/server.py

@@ -34,6 +34,8 @@ def save_waveform():
 	with open('data/long_term.csv','a') as fd:
 		fd.write(line)
 
+	update_state()
+
 import datetime
 def clean_old_files():
 	for dirpath, dirnames, filenames in os.walk("data/waveforms/"):
@@ -45,6 +47,9 @@ def clean_old_files():
 
 @eel.expose
 def calibrate_gain():
+	if(state["mode"]!=0):
+		error("You must be in learn mode to calibrate the loop gain")
+		return
 	chip = chips[state["selected_board"]]
 	auto_set_pga = state["auto_set_pga"]
 	chip.set_auto_set_pga(0) #Stop it while we scan
@@ -75,6 +80,9 @@ def calibrate_gain():
 
 @eel.expose
 def calibrate_coarse_fine_ratio():
+	if(state["mode"]!=0):
+		error("You must be in learn mode to calibrate the broad to fine ratio")
+		return
 	chip = chips[state["selected_board"]]
 	auto_set_pga = state["auto_set_pga"]
 	chip.set_auto_set_pga(0) #Stop it while we scan
@@ -116,6 +124,44 @@ def calibrate_coarse_fine_ratio():
 	chip.set_auto_set_pga(auto_set_pga)
 	update_state()
 
+@eel.expose
+def measure_response_function():
+	if(state["mode"]!=0):
+		error("You must be in learn mode to measure the response function.")
+		return
+	chip = chips[state["selected_board"]]
+	auto_set_pga = state["auto_set_pga"]
+	chip.set_auto_set_pga(0) #Stop it while we scan
+
+	# Scan Vcoarse
+	measurements = []
+	for Vcoarse in range(0, 4000, 100):
+		chip.set_Vlearn(Vcoarse)
+		time.sleep(0.1)
+		data = chip.read_data()
+		gnd = sum(data[state["start_gnd"]:state["stop_gnd"]])/(state["stop_gnd"]-state["start_gnd"])
+		signal = sum(data[state["start"]:state["stop"]])/(state["stop"]-state["start"])
+		print('Vcoarse', chip.get_Vlearn(), 'signal', signal-gnd)
+		measurements.append([chip.get_Vlearn(), signal-gnd])
+	chip.set_Vlearn(state["Vlearn"])
+	measurements = np.array(measurements)
+	
+	plt.plot(measurements[:,0], measurements[:,1])
+	plt.xlabel('Output voltage')
+	plt.ylabel('Photodiode signal')
+	plt.plot()
+
+	chip.set_auto_set_pga(auto_set_pga)
+	update_state()
+
+@eel.expose
+def sdev_time():
+	pass
+
+@eel.expose
+def noise_power_spectrum():
+	pass
+
 
 ###################################
 ## EXPOSED GUI COMMUNICATION
@@ -366,7 +412,7 @@ def update_state():
 my_options = {
 	'mode': "chrome-app", #chrome-app
 	'host': 'localhost',
-	'port': 8107,
+	'port': 8000 + int(np.random.rand()*1000),
 	'size':(710, 725),
 	#'chromeFlags': ["--start-fullscreen", "--browser-startup-dialog"]
 }

+ 1 - 1
pi/web/main.css

@@ -3,7 +3,7 @@ body{
 }
 #app{
 	background: whitesmoke;
-	width: 700px;
+	width: 705px;
 	height: 715px;
 	font-family: sans-serif;
 	font-size: 12px;

+ 19 - 2
pi/web/main.html

@@ -25,6 +25,7 @@
 			<div class="row">
 				<span>Box address</span><input type="text" id="boxAddress" disabled>
 				<span class="spacing">&nbsp</span>
+				Mode:
 				<input type="radio" id="isLearn" checked disabled> Learn
 				<input type="radio" id="isLock" disabled> Lock
 				<span class="spacing">&nbsp</span>
@@ -32,9 +33,9 @@
 			</div>
 			
 			<div class="row">
-				<span>Pi freq. / Hz</span><input type="text" id="piFreq">
+				<span>Pi communication freq. / Hz</span><input type="text" id="piFreq">
 				<span class="spacing">&nbsp</span>
-				<span>Board freq. / Hz</span><input type="text" id="boardFreq" disabled>
+				<span>Current board freq. / Hz</span><input type="text" id="boardFreq" disabled>
 				<span class="spacing">&nbsp</span>
 				<input type="checkbox" id="remoteTrigg"> Ignore trigger
 			</div>
@@ -57,6 +58,16 @@
 						X: <select id="longGraphX">
 							<option value="0">Wf. number</option>
 							<option value="1">Time / min</option>
+							<option disabled>_________</option>
+							<option value="2">Signal</option>
+							<option value="3">Gnd</option>
+							<option value="4">Signal - Gnd</option>
+							<option value="5">Signal Std</option>
+							<option value="6">Gnd Std</option>
+							<option value="7">Mode</option>
+							<option value="8">Out of lock</option>
+							<option value="9">Broad output</option>
+							<option value="10">Fine output</option>
 						</select>
 						Y: <select id="longGraphY">
 							<option value="2">Signal</option>
@@ -124,6 +135,12 @@
 					<span class="spacing">&nbsp</span>
 					<input type="button" id="calibrateCoarseFineRatio" value="Calibrate ratio">
 				</div>
+				<span class="label">____ Analysis tools _________________</span>
+				<div class="row">
+					<div class="row" style="margin-bottom: 3px"><input type="button" id="measureResponseFunction" value="Measure response function"> </div>
+					<div class="row" style="margin-bottom: 3px"><input type="button" id="sdevTime" value="Sdev vs. time" disabled> </div>
+					<div class="row" style="margin-bottom: 3px"><input type="button" id="noisePowerSpectrum" value="Noise power spectrum" disabled> </div>
+				</div>
 
 			</div>
 		</div>

+ 11 - 0
pi/web/main.js

@@ -75,6 +75,17 @@ function onload(){ //Bind events
 	document.querySelector('#calibrateCoarseFineRatio').addEventListener("click", function(event){
 		eel.calibrate_coarse_fine_ratio()
 	})
+	// Analysis tools
+	document.querySelector('#measureResponseFunction').addEventListener("click", function(event){
+		eel.measure_response_function()
+	})
+	document.querySelector('#sdevTime').addEventListener("click", function(event){
+		eel.sdev_time()
+	})
+	document.querySelector('#noisePowerSpectrum').addEventListener("click", function(event){
+		eel.noise_power_spectrum()
+	})
+
 	// Graphs
 	document.getElementById("waveformGraphSelect").addEventListener("change", function(){
 		document.querySelector('#waveformGraphAutoupdate').checked = false