From 35a0779b2da3afbcf9c9cd4f9bfd063a1371e1bc Mon Sep 17 00:00:00 2001 From: Markus Koller Date: Tue, 31 Jan 2023 10:54:09 +0100 Subject: [PATCH] Implemented oversampling (untested!) --- src/calibration.py | 9 +++++---- src/user_interface.py | 28 ++++++++++++++++------------ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/calibration.py b/src/calibration.py index 63aafca..721ec9e 100644 --- a/src/calibration.py +++ b/src/calibration.py @@ -410,12 +410,13 @@ class MagnetometerCalibrationSimple(Thread): class MagnetometerCalibrationComplete(Thread): def __init__(self, view_queue, calibration_points, calibration_interval, calibration_mag_field, - mgm_to_helmholtz_cos_trans, right_column): + calibration_oversampling, mgm_to_helmholtz_cos_trans, right_column): Thread.__init__(self) self.view_queue = view_queue self.calibration_points = calibration_points self.calibration_interval = calibration_interval self.calibration_mag_field = calibration_mag_field + self.var_oversampling = calibration_oversampling self.matrix_trans_mgm_to_hh = [[x.get() for x in row] for row in mgm_to_helmholtz_cos_trans] self.right_column = right_column @@ -451,9 +452,9 @@ class MagnetometerCalibrationComplete(Thread): # This contains the raw experiment data for exporting # Each row is a dict containing the applied vector and measured vector raw_data = [] - var_oversampling = 5 + self.var_oversampling = 5 - for i in range(var_oversampling): + for i in range(self.var_oversampling): # Find sensor offsets. They must be found prior to applying the chosen calibration algorithm # This will be accurate if the cage was recently calibrated self.cage_dev.set_field_compensated([0, 0, 0]) @@ -480,7 +481,7 @@ class MagnetometerCalibrationComplete(Thread): applied_vec = test_vec * self.calibration_mag_field self.cage_dev.set_field_compensated(applied_vec) # Set compensated field not raw field - for i in range(var_oversampling): + for i in range(self.var_oversampling): # Sleep for a certain duration to allow psu to stabilize output and magnetometer to supply readings time.sleep(self.calibration_interval) diff --git a/src/user_interface.py b/src/user_interface.py index f0d8663..f4a19c8 100644 --- a/src/user_interface.py +++ b/src/user_interface.py @@ -1121,14 +1121,7 @@ class CalibrateMagnetometerSimple(Frame): calibration_point_nr__unit = Label(controls_frame, text="- (> 8 points)") calibration_point_nr__unit.grid(row=1, column=2, pady=5, sticky="nw") # Measurement interval - calibration_point_nr_label = Label(controls_frame, text="Measurement interval [s]") - calibration_point_nr_label.grid(row=2, column=0, pady=5, sticky="nw") - calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_interval_var) - calibration_point_nr_entry.grid(row=2, column=1, pady=5, sticky="nw") - calibration_point_nr_unit = Label(controls_frame, text="s (> 2 s)") - calibration_point_nr_unit.grid(row=2, column=2, pady=5, sticky="nw") - # Measurement interval - calibration_point_nr_label = Label(controls_frame, text="Measurement interval [s]") + calibration_point_nr_label = Label(controls_frame, text="Measurement interval") calibration_point_nr_label.grid(row=2, column=0, pady=5, sticky="nw") calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_interval_var) calibration_point_nr_entry.grid(row=2, column=1, pady=5, sticky="nw") @@ -1547,6 +1540,7 @@ class CalibrateMagnetometerComplete(Frame): self.mag_field_magnitude_var = DoubleVar(value=100) self.calibration_points_var = IntVar(value=8) self.calibration_interval_var = DoubleVar(value=5) + self.calibration_oversampling_var = DoubleVar(value=1) # Calibration results self.a_mat_result_vars = [[DoubleVar(), DoubleVar(), DoubleVar()], [DoubleVar(), DoubleVar(), DoubleVar()], @@ -1632,35 +1626,43 @@ class CalibrateMagnetometerComplete(Frame): calibration_point_nr__unit = Label(controls_frame, text="- (> 8 points)") calibration_point_nr__unit.grid(row=1, column=2, pady=5, sticky="nw") # Measurement interval - calibration_point_nr_label = Label(controls_frame, text="Measurement interval [s]") + calibration_point_nr_label = Label(controls_frame, text="Measurement interval") calibration_point_nr_label.grid(row=2, column=0, pady=5, sticky="nw") calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_interval_var) calibration_point_nr_entry.grid(row=2, column=1, pady=5, sticky="nw") calibration_point_nr_unit = Label(controls_frame, text="s (> 2 s)") calibration_point_nr_unit.grid(row=2, column=2, pady=5, sticky="nw") + # Oversampling + calibration_point_nr_label = Label(controls_frame, text="Oversampling (samples/setpoint)") + calibration_point_nr_label.grid(row=3, column=0, pady=5, sticky="nw") + calibration_point_nr_entry = Entry(controls_frame, textvariable=self.calibration_oversampling_var) + calibration_point_nr_entry.grid(row=3, column=1, pady=5, sticky="nw") + calibration_point_nr_unit = Label(controls_frame, text="- (>= 1)") + calibration_point_nr_unit.grid(row=3, column=2, pady=5, sticky="nw") # Calibration start buttons start_button_frame = Frame(controls_frame) - start_button_frame.grid(row=3, column=0, columnspan=1, sticky="nw") + start_button_frame.grid(row=4, column=0, columnspan=1, sticky="nw") self.start_calibration_button = Button(start_button_frame, text="Start Calibration", command=self.start_calibration_procedure, pady=5, padx=5, font=SMALL_BUTTON_FONT) self.start_calibration_button.grid(row=0, column=0, padx=10, pady=(30, 10), sticky="we") # Reinitialize button reinitialize_button_frame = Frame(controls_frame) - reinitialize_button_frame.grid(row=3, column=1, columnspan=1) + reinitialize_button_frame.grid(row=4, column=1, columnspan=1) self.reinitialize_button = Button(reinitialize_button_frame, text="Reinitialize", command=self.reinitialize, pady=5, padx=5, font=SMALL_BUTTON_FONT) self.reinitialize_button.grid(row=0, column=0, padx=10, pady=(30, 10), sticky="we") # Calibration progress bar progress_bar_frame = Frame(controls_frame) - progress_bar_frame.grid(row=4, column=0, columnspan=2) + progress_bar_frame.grid(row=5, column=0, columnspan=2) calibration_procedure_progress_label = Label(progress_bar_frame, text="Progress:") calibration_procedure_progress_label.grid(row=0, column=0, padx=10, pady=10, sticky="nw") calibration_procedure_progress = ttk.Progressbar(progress_bar_frame, length=240, variable=self.calibration_procedure_progress_var) calibration_procedure_progress.grid(row=0, column=1, padx=10, pady=10, sticky="nw") + row_counter += 1 # CENTER COLUMN @@ -1936,12 +1938,14 @@ class CalibrateMagnetometerComplete(Frame): calibration_points = self.calibration_points_var.get() calibration_interval = self.calibration_interval_var.get() calibration_mag_field = self.mag_field_magnitude_var.get() * 1e-6 # converted to micro Tesla + calibration_oversampling = self.calibration_oversampling_var.get() if calibration_mag_field <= 0 or calibration_mag_field > g.MAG_MAG_FIELD: raise MagFieldOutOfBounds self.calibration_thread = MagnetometerCalibrationComplete(self.view_mpi_queue, calibration_points, calibration_interval, calibration_mag_field, + calibration_oversampling, self.mgm_to_helmholtz_cos_trans, self.right_column) self.calibration_thread.start()