Commit f5431111 authored by Olivier Kaufmann's avatar Olivier Kaufmann
Browse files

Adds pulse number in readings

No related merge requests found
Showing with 16 additions and 7 deletions
+16 -7
...@@ -50,10 +50,12 @@ class OhmPiHardware: ...@@ -50,10 +50,12 @@ class OhmPiHardware:
soh_logger=self.soh_logger)) soh_logger=self.soh_logger))
self.readings = np.array([]) # time series of acquired data self.readings = np.array([]) # time series of acquired data
self._start_time = None # time of the beginning of a readings acquisition self._start_time = None # time of the beginning of a readings acquisition
self._pulse = 0 # pulse number
def _clear_values(self): def _clear_values(self):
self.readings = np.array([]) self.readings = np.array([])
self._start_time = None self._start_time = None
self._pulse = 0
def _inject(self, duration): def _inject(self, duration):
self.tx_sync.set() self.tx_sync.set()
...@@ -72,11 +74,13 @@ class OhmPiHardware: ...@@ -72,11 +74,13 @@ class OhmPiHardware:
self._start_time = datetime.datetime.utcnow() self._start_time = datetime.datetime.utcnow()
while self.tx_sync.is_set(): while self.tx_sync.is_set():
lap = datetime.datetime.utcnow() lap = datetime.datetime.utcnow()
_readings.append([elapsed_seconds(self._start_time), self.tx.current, self.rx.voltage, self.tx.polarity]) _readings.append([elapsed_seconds(self._start_time), self._pulse, self.tx.polarity, self.tx.current,
self.rx.voltage])
sample+=1 sample+=1
sleep_time = self._start_time + datetime.timedelta(seconds = sample * sampling_rate / 1000) - lap sleep_time = self._start_time + datetime.timedelta(seconds = sample * sampling_rate / 1000) - lap
time.sleep(np.min([0, np.abs(sleep_time.total_seconds())])) time.sleep(np.min([0, np.abs(sleep_time.total_seconds())]))
self.readings = np.array(_readings) self.readings = np.array(_readings)
self._pulse += 1
def _compute_tx_volt(self, best_tx_injtime=0.1, strategy='vmax', tx_volt=5, def _compute_tx_volt(self, best_tx_injtime=0.1, strategy='vmax', tx_volt=5,
vab_max=voltage_max, vmn_min=voltage_min): vab_max=voltage_max, vmn_min=voltage_min):
...@@ -129,8 +133,8 @@ class OhmPiHardware: ...@@ -129,8 +133,8 @@ class OhmPiHardware:
else: else:
sampling_rate = self.tx.sampling_rate sampling_rate = self.tx.sampling_rate
self._vab_pulse(vab=vab, length=best_tx_injtime, sampling_rate=sampling_rate) self._vab_pulse(vab=vab, length=best_tx_injtime, sampling_rate=sampling_rate)
vmn = np.mean(self.readings[:,2]) vmn = np.mean(self.readings[:,4])
iab = np.mean(self.readings[:,1]) iab = np.mean(self.readings[:,3])
# if np.abs(vmn) is too small (smaller than voltage_min), strategy is not constant and vab < vab_max , # if np.abs(vmn) is too small (smaller than voltage_min), strategy is not constant and vab < vab_max ,
# then we could call _compute_tx_volt with a tx_volt increased to np.min([vab_max, tx_volt*2.]) for example # then we could call _compute_tx_volt with a tx_volt increased to np.min([vab_max, tx_volt*2.]) for example
if strategy == 'vmax': if strategy == 'vmax':
......
import numpy as np import numpy as np
import logging
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from utils import change_config from utils import change_config
change_config('config_ohmpi_card_3_15.py', verbose=False) change_config('config_ohmpi_card_3_15.py', verbose=False)
from OhmPi.measure import OhmPiHardware from OhmPi.measure import OhmPiHardware
k = OhmPiHardware() k = OhmPiHardware()
k.exec_logger.setLevel(logging.INFO)
# Test #1: # Test #1:
print('Testing _vab_pulse') print('Testing _vab_pulse')
k._vab_pulse(vab=12, length=1., sampling_rate=k.rx.sampling_rate, polarity=1) k._vab_pulse(vab=12, length=1., sampling_rate=k.rx.sampling_rate, polarity=1)
r = k.readings[:,2]/k.readings[:,1] r = k.readings[:,4]/k.readings[:,3]
print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %') print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms') print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms')
# Test #2: # Test #2:
print('\n\nTesting vab_square_wave') print('\n\nTesting vab_square_wave')
k.vab_square_wave(vab=12, cycle_length=2., sampling_rate=k.rx.sampling_rate, cycles=3) k.vab_square_wave(vab=12, cycle_length=2., sampling_rate=k.rx.sampling_rate, cycles=3)
r = k.readings[:,2]/k.readings[:,1] r = k.readings[:,4]/k.readings[:,3]
print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %') print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms') print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms')
print(r) print(r)
print(f'length of array: {len(r)}, expected length: {6000./k.rx.sampling_rate}') print(f'length of array: {len(r)}, expected length: {6000./k.rx.sampling_rate}')
print(k.readings) print(k.readings)
fig, ax = plt.subplots() fig, ax = plt.subplots()
ax.plot(k.readings[:,0], k.readings[:,1], '-r', label='iab') ax.plot(k.readings[:,0], k.readings[:,3], '-r', marker='.', label='iab')
ax.set_ylabel('Iab [mA]')
ax2 = ax.twinx() ax2 = ax.twinx()
ax2.plot(k.readings[:,0], k.readings[:,2], '-b', label='vmn') ax2.plot(k.readings[:,0], k.readings[:,2]*k.readings[:,4], '-b', marker='.', label='vmn')
ax2.set_ylabel('Vmn [mV]')
fig.legend()
plt.show() plt.show()
change_config('config_default.py', verbose=False) change_config('config_default.py', verbose=False)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment