Compare commits

...

9 Commits

Author SHA1 Message Date
matthias@arch
849730be09 Merge remote-tracking branch 'origin/dev' 2023-08-17 01:29:54 +02:00
matthias@arch
a672ab3dc2 merge 2023-08-17 01:19:03 +02:00
Matthias@Dell
095ee19722 start add plot 2023-07-01 17:01:09 +02:00
Matthias@Dell
a1b21cb26e added beep 2023-07-01 16:59:54 +02:00
Matthias@Dell
cc01663be2 fix keithley beep 2023-07-01 16:59:05 +02:00
Matthias@Dell
73fe34ee04 added bep 2023-07-01 16:58:33 +02:00
Matthias@Dell
93f41d8e1b change smu 2023-06-28 10:48:09 +02:00
Matthias@Dell
83457661a3 added udev rule 2023-06-27 15:23:48 +02:00
Matthias@Dell
292ca9c918 fixed import 2023-06-27 15:22:48 +02:00
7 changed files with 68 additions and 10 deletions

8
99-usbtmc.rules Normal file
View File

@ -0,0 +1,8 @@
# Rule for Keithley 2611B
# take vendor and product id from lsusb
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="05e6", ATTRS{idProduct}=="2614", GROUP="usbtmc", MODE="0660" RUN+="/bin/touch /tmp/05e6-2611-connected"
# Devices
KERNEL=="usbtmc/*", MODE="0660", GROUP="usbtmc"
KERNEL=="usbtmc[0-9]*", MODE="0660", GROUP="usbtmc"

View File

@ -30,6 +30,8 @@ def init(beep_success=True):
if beep_success: keithley.write("beeper.beep(0.5, 1000)") if beep_success: keithley.write("beeper.beep(0.5, 1000)")
return keithley return keithley
def beep(instr, length=0.5, pitch=1000):
instr.write(f"beeper.beep({length}, {pitch})")
def exit(instr): def exit(instr):
instr.close() instr.close()

View File

@ -3,7 +3,7 @@ import numpy as np
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
import pyvisa import pyvisa
from m_teng.backends.keithley import reset from m_teng.backends.keithley.keithley import reset
from m_teng.utility import testing as _testing from m_teng.utility import testing as _testing
def measure_count(instr, count=100, interval=0.05, update_func=None, update_interval=0.5, beep_done=True, verbose=True): def measure_count(instr, count=100, interval=0.05, update_func=None, update_interval=0.5, beep_done=True, verbose=True):

View File

@ -2,6 +2,7 @@
smua.reset() smua.reset()
smua.measure.autorangev = smua.AUTORANGE_ON smua.measure.autorangev = smua.AUTORANGE_ON
smua.measure.autorangei = smua.AUTORANGE_ON smua.measure.autorangei = smua.AUTORANGE_ON
-- smua.measure.autozero = smua.AUTOZERO_AUTO
smua.measure.autozero = smua.AUTOZERO_AUTO smua.measure.autozero = smua.AUTOZERO_AUTO
-- smua.measure.autozero = smua.AUTOZERO_ONCE -- smua.measure.autozero = smua.AUTOZERO_ONCE
-- set output to 0A DC -- set output to 0A DC

View File

@ -66,7 +66,9 @@ from m_teng.utility.data import load_dataframe
from m_teng.utility import file_io from m_teng.utility import file_io
from m_teng.update_funcs import _Monitor, _ModelPredict, _update_print from m_teng.update_funcs import _Monitor, _ModelPredict, _update_print
config_path = path.expanduser("~/.config/k-teng.json") from m_teng.backends import keithley as _keithley
config_path = path.expanduser("~/.config/m-teng.json")
_runtime_vars = { _runtime_vars = {
"last-measurement": "" "last-measurement": ""
@ -75,7 +77,7 @@ _runtime_vars = {
settings = { settings = {
"datadir": path.expanduser("~/data"), "datadir": path.expanduser("~/data"),
"name": "measurement", "name": "measurement",
"interval": 0.05, "interval": 0.02,
"beep": True, "beep": True,
} }
@ -230,7 +232,7 @@ def repeat(measure_func: callable, count: int, repeat_delay=0):
sleep(repeat_delay) sleep(repeat_delay)
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
if settings["beep"]: _backend.beep() if settings["beep"]: _backend.beep(dev)
def get_dataframe(): def get_dataframe():

View File

@ -1,11 +1,13 @@
import pandas as pd import pandas as pd
import numpy as np import numpy as np
from os import path from os import path
import matplotlib.pyplot as plt
def buffer2dataframe(buffer): # deprecated
df = pd.DataFrame(buffer) # def buffer2dataframe(buffer):
df.colums = ["Time [s]", "Voltage [V]"] # df = pd.DataFrame(buffer)
return df # df.colums = ["Time [s]", "Voltage [V]"]
# return df
def buffers2dataframe(ibuffer, vbuffer): def buffers2dataframe(ibuffer, vbuffer):
""" """
@ -30,3 +32,38 @@ def load_dataframe(p:str):
else: else:
df = pd.read_pickle(p) df = pd.read_pickle(p)
return df return df
def plot(data: str or pd.DataFrame or np.ndarray, title="", U=True, I=False):
"""
Plot recorded data
@param data: filepath, dataframe or numpy array
"""
if type(data) == str:
_data = load_dataframe(data).to_numpy()
elif type(data) == pd.DataFrame:
_data = data.to_numpy()
else:
_data = data
print(_data[0])
plt.ion()
fig, ax = plt.subplots()
ax.set_xlabel("t [s]")
vax = ax
iax = ax
if U and I:
iax = ax.twinx()
if U:
vax = ax
vax.set_ylabel("U [V]")
vax.plot(_data[:,0], _data[:,2], color="blue", label="voltage")
if I:
iax.set_ylabel("I [A]")
iax.plot(_data[:,0], _data[:,1], color="orange", label="current")
if U and I:
plt.legend()
return fig

View File

@ -1,5 +1,5 @@
# m-TENG # m-TENG
Helper scripts and shell for measuring **T**ribo**e**lectric **N**ano**g**enerator-based sensor output with a Keithley 2611B SMU or an Arduino Helper scripts and shell for measuring **T**ribo**e**lectric **N**ano**g**enerator-based sensor output with a Keithley 2600B SMU or an Arduino
## Features ## Features
@ -17,9 +17,10 @@ Helper scripts and shell for measuring **T**ribo**e**lectric **N**ano**g**enerat
- Run lua script on Keithley SMU - Run lua script on Keithley SMU
- Auto-filenames - Auto-filenames
## Available backends ## Available backends
### keithley ### keithley
Use a Keithley 2611B Source-Measure-Unit via *pyvisa*. This backend allows measuring both voltage and current simultaneously. Use a Keithley 2600B Source-Measure-Unit via *pyvisa*. This backend allows measuring both voltage and current simultaneously. *Tested with 2611B and 2614B*
### arduino ### arduino
Use a Bluetooth capable Arduino with [https://git.quintern.xyz/MatthiasQuintern/teng-arduino](this software on the arduino). Use a Bluetooth capable Arduino with [https://git.quintern.xyz/MatthiasQuintern/teng-arduino](this software on the arduino).
@ -37,3 +38,10 @@ ipython -i k_teng_interactive.py -- -*X*
Substitute *X* for `-k` for keithley backend, `-a` for arduino backend or `-t` for testing backend. Substitute *X* for `-k` for keithley backend, `-a` for arduino backend or `-t` for testing backend.
In the shell, run `help()` to get a list of available commands In the shell, run `help()` to get a list of available commands
## Installation
### Keithley
On linux:
Install the udev rule in `/etc/udev/rules.d/` and run `sudo udevadm control --reload` to force the usbtmc driver to be used with the Keithley SMU.
The `ATTRS{product_id} ` needs to match the id shown by `lsusb`.