diff --git a/hardware/abstract_hardware.py b/hardware/abstract_hardware.py index b4c7e43b92b9a9fce7269d55cb27fca7b899b753..c90bc112c45314ab96d374b01ecfd16af57403cb 100644 --- a/hardware/abstract_hardware.py +++ b/hardware/abstract_hardware.py @@ -150,6 +150,7 @@ class RxAbstract(ABC): self.exec_logger = create_stdout_logger('exec_tx') self.soh_logger = kwargs.pop('soh_logger', None) self.board_name = kwargs.pop('board_name', 'unknown RX hardware') + self._sampling_rate = kwargs.pop('sampling_rate', 1) self.exec_logger.debug(f'{self.board_name} RX initialization') self._adc_gain = 1. @@ -167,6 +168,16 @@ class RxAbstract(ABC): def adc_gain_auto(self): pass + @property + def sampling_rate(self): + return self._sampling_rate + + @sampling_rate.setter + def sampling_rate(self, value): + assert value > 0. + self._sampling_rate = value + self.exec_logger.debug(f'Sampling rate set to {value}') + @property @abstractmethod def voltage(self): diff --git a/hardware/ohmpi_card_3_15.py b/hardware/ohmpi_card_3_15.py index ee623c597f8f1bb90274af1bc7e1e61df5ab3520..3de6a26b08ee157e50a1262e39ae7ce572737e5c 100644 --- a/hardware/ohmpi_card_3_15.py +++ b/hardware/ohmpi_card_3_15.py @@ -214,6 +214,7 @@ class Rx(RxAbstract): self._ads_voltage_address = 0x49 self._adc_gain = 2/3 self._ads_voltage = ads.ADS1115(self.controller.bus, gain=self._adc_gain, data_rate=860, address=self._ads_voltage_address) + self._sampling_rate = kwargs.pop('sampling_rate', sampling_rate) @property def adc_gain(self): diff --git a/measure.py b/measure.py index 917fc12a1d04544b71ff936956c704c58004cf98..428cc625efbed76e6a9bd4c9586add35da5e0943 100644 --- a/measure.py +++ b/measure.py @@ -48,6 +48,7 @@ class OhmPiHardware: self.mux = kwargs.pop('mux', mux_module.Mux(exec_logger=self.exec_logger, data_logger=self.data_logger, soh_logger=self.soh_logger)) + self.readings=np.array([]) def _inject(self, duration): self.tx_sync.set() @@ -86,9 +87,6 @@ class OhmPiHardware: injection.start() readings.join() injection.join() - iab = self.tx.current # measure current - vmn = self.rx.voltage - return iab, vmn def _compute_tx_volt(self, best_tx_injtime=0.1, strategy='vmax', tx_volt=5, vab_max=voltage_max, vmn_min=voltage_min): @@ -136,7 +134,13 @@ class OhmPiHardware: vab = np.min([np.abs(tx_volt), vab_max]) self.tx.polarity = 1 self.tx.turn_on() - vmn, iab = self._vab_pulse(vab=vab, length=best_tx_injtime) + if self.rx.sampling_rate*1000 > best_tx_injtime: + sampling_rate = best_tx_injtime + else: + sampling_rate = self.tx.sampling_rate + self._vab_pulse(vab=vab, length=best_tx_injtime, sampling_rate=sampling_rate) + vmn = np.mean(self.readings[:,2]) + iab = np.mean(self.readings[:,1]) # 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 if strategy == 'vmax':