Skip to main content

Python class for serial communication with QuSpin Zero Field Magnetometer

Project description

QuSpin Zero Field Magnetometer DAQ

Read and control QuSpin magnetometer (unofficial)

Uses QZFM commands to send/receive signals via the pySerial module. See also this guide for more info on setup for the QuSpin.

This has been tested on the QuSpin Triaxial sensor.

Module QZFM

Classes

QZFM(device_name=None, nbytes_status=1000) : Low-level control of QuSpin magnetic sensor via QZFM serial commands via USB

device_name:    str, name of device to look for (connection)
                for windows this is likely COM3 or COM5
                for linux, search Z3T0 or similar    
nbytes_status: serial read chunk size in bytes for status updates

Class variables

data_read_rate :

serial_settings :

Instance variables

axis_mode: str, readback mode for daq

field: np.array of magnetic fields (pT)

gain: float, V/nT from setting analog gain

is_calibrated: True if calibration is ok

is_data_streaming: True if data streaming mode

is_field_zeroed: True if field zeroing is maintained

is_xyz_zeroing: True if field zeroing applied to all axes, else only y and z

led: dict of led status on/off

messages: list of tuples (message, epoch time)

nbytes_status: serial read chunk size in bytes for status updates

read_axis: str, axis for readback

sensor_par: dict of sensor parameter readback values

ser: serial.Serial object for connection

status_last_updated:epoch time last updated status (led, sensor_par, messages)

time: np.array of epoch times corresponding to field measurements

cell_Tlock :

field_zeroed :

is_master :

laser_locked :

laser_on :

Methods

auto_start(self, block=True, show=True) : Initiate the automated sensor startup routines

if block, wait until laser is locked and 
temperature stabilized before unblocking

if show, monitor status

calibrate(self, show=True) : Calibrate the response (field to voltage) of the magnetometer with an internal signal reference

show: if true, print to screen

connect(self, device_name) : Connect to the QuSpin

device_name: str, name of device (ex: "Z3T0-AAL9"), or 
                partial name (ex: "Z3T0")

disconnect(self) : Disconnect from QuSpin

draw_data(self) : Draw data to window

field_reset(self) : Sets the internal coil field values to zero

field_zero(self, on=True, axes_xyz=True, dBz=inf, dBy=inf, dB0=inf, dT=inf, show=True) : Run field zeroing procedure

if on: 
    Start sensor field zeroing procedure to apply a compensation field using the internal sensor coils to null background fields 

if axes_xyz: Field Zeroing is applied to all three axes (default)
else:        Field Zeroing is applied only to Y & Z axes

dBz, dBy, dB0:  field step thresholds in pT. 
                if step is smaller than this, stop zeroing procedure.
                All conditions must be satisfied for field zero stop
                Set to inf to disable

dT:             similar to above fields, but for cell temperature

show: if true write diagnostic to stdout

monitor_cell_T_error(self, window_s=20, figsize=(10, 6)) : Continuously stream cell temperature to window

window_s: show the last window_s seconds of data on the stream
figsize:  size of display

See https://matplotlib.org/stable/tutorials/advanced/blitting.html

monitor_data(self, axis='z', window_s=10, figsize=(10, 6)) : Continuously stream data to window

axis:     axis to read from
window_s: show the last window_s seconds of data on the stream
figsize:  size of display

See https://matplotlib.org/stable/tutorials/advanced/blitting.html

monitor_status(self) : Continuously update and print status

print_messages(self, last_n=None) : Print messages to screen

last_n: print the last number of messages

print_state(self) : Print state of the python object

print_status(self, update=False, overwrite_last=False) : Print status of QuSpin in a nicely formatted message

update: if true, update before printing
overwrite_last: if true, overwrite the last message. Used in monitor_status

read_data(self, seconds, axis='z', clear_buffer=True) : Read data from the device

seconds:        float, duration of measurement npts= seconds*200Hz
axis:           str, which axis to read from (x, y, or z)
clear_buffer:   bool, if true, clear buffer and wait for new

assumed readback rate based on comments from QuSpin
time[0] is the time immediately after clearing the buffer. 
    Note that there is often an incomplete word after clear, we ignore this
    As a result the error in time is at most 1/self.data_read_rate

returns (time, field)

read_offsets(self, npts, clear_buffer=True) : Read offset data from the device in field zeroing mode

npts:           int, number of data points to read
clear_buffer:   bool, if true, clear initial buffer and wait for new

time[0] is the time immediately after clearing the buffer. 

reads at approx 7.5 Hz

reboot(self) : Reboot the microprocessor and reloads the firmware

set_axis_mode(self, mode='z') : Change field-sensitive axis

Note: triaxial sensors do not respond to this command

mode =  z       Operate the magnetometer in single Z axis mode
        y       Operate the magnetometer in single Y axis mode
        dual    Operate the magnetometer in dual Y and Z axis mode

set_gain(self, mode='1x') : Set analog gain (analog output only)

mode =  0.33x   Set the analog output gain to 0.33 times default (0.9 V/nT)
        1x      Set the analog output gain to default (2.7 V/nT)
        3x      Set the analog output gain to 3 times default (8.1 V/nT)

to_csv(self, filename=None, *notes) : Write data to csv, if no filename, use default

notes: list of things to add to file header

to_csv_fz(self, filename=None, *notes) : Write field zero data to csv, if no filename, use default

notes: list of things to add to file header

update_status(self, clear_buffer=True) : Clear input buffer and read status

updates the following attributes: 
    self.status_last_updated
    self.led
    self.sensor_par
    self.messages

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

QZFM-0.0.2.tar.gz (11.9 kB view hashes)

Uploaded Source

Built Distribution

QZFM-0.0.2-py3-none-any.whl (13.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page