diff --git a/hardware_components/abstract_hardware_components.py b/hardware_components/abstract_hardware_components.py index 125cb188c9e845c25e694ae5f8e441f7329c6e2b..e4f9e207ea6009d7f147c00110822612002d7e90 100644 --- a/hardware_components/abstract_hardware_components.py +++ b/hardware_components/abstract_hardware_components.py @@ -220,6 +220,7 @@ class TxAbstract(ABC): self.soh_logger = create_stdout_logger('soh_tx') self.ctl = kwargs.pop('ctl', None) self.pwr = kwargs.pop('pwr', None) + self._polarity = 0 self._inj_time = None self._adc_gain = 1. self.inj_time = inj_time @@ -264,12 +265,21 @@ class TxAbstract(ABC): assert isinstance(value, float) self._inj_time = value + @property + def polarity(self): + return self._polarity + + @polarity.setter + @abstractmethod + def polarity(self, polarity): + assert polarity in [-1, 0, 1] + self._polarity = polarity + @property @abstractmethod def tx_bat(self): pass - def voltage_pulse(self, voltage=0., length=None, polarity=1): """ Generates a square voltage pulse diff --git a/hardware_components/ohmpi_card_3_15.py b/hardware_components/ohmpi_card_3_15.py index 86feb65de40126b9e4bfd08683a7e76288f63dd3..46e1240fa035a0f7f7feeb993d0550e42259f49f 100644 --- a/hardware_components/ohmpi_card_3_15.py +++ b/hardware_components/ohmpi_card_3_15.py @@ -95,8 +95,7 @@ class Tx(TxAbstract): self.pin0.direction = Direction.OUTPUT self.pin1 = self.mcp_board.get_pin(1) self.pin1.direction = Direction.OUTPUT - # self.polarity = 0 - + self.polarity = 0 self.adc_gain = 2 / 3 self.pwr = None @@ -141,21 +140,29 @@ class Tx(TxAbstract): self.exec_logger.warning(f'Current pulse is not implemented for the {TX_CONFIG["model"]} board') def inject(self, polarity=1, inj_time=None): - assert polarity in [-1,0,1] - if polarity==1: + self.polarity = polarity + TxAbstract.inject(self, polarity=polarity, inj_time=None) + + @property + def polarity(self): + return self._polarity + + @polarity.setter + def polarity(self, polarity): + assert polarity in [-1, 0, 1] + self._polarity = polarity + if polarity == 1: self.pin0.value = True self.pin1.value = False - time.sleep(0.005) # Max turn on time of 211EH relays = 5ms - elif polarity==-1: + time.sleep(0.005) # Max turn on time of 211EH relays = 5ms + elif polarity == -1: self.pin0.value = False self.pin1.value = True - time.sleep(0.005) # Max turn on time of 211EH relays = 5ms + time.sleep(0.005) # Max turn on time of 211EH relays = 5ms else: self.pin0.value = False self.pin1.value = False - time.sleep(0.001) # Max turn off time of 211EH relays = 1ms - TxAbstract.inject(self, polarity=polarity, inj_time=None) - + time.sleep(0.001) # Max turn off time of 211EH relays = 1ms def turn_off(self): self.pwr.turn_off(self) diff --git a/hardware_system.py b/hardware_system.py index 33b2f78d6cb04ed9610270f80dbba72c5c323995..077bf9541db8dcb8c0c869511804175f4a4df211 100644 --- a/hardware_system.py +++ b/hardware_system.py @@ -241,7 +241,7 @@ class OhmPiHardware: def _vab_pulse(self, vab, length, sampling_rate=None, polarity=1, append=False): """ Gets VMN and IAB from a single voltage pulse """ - + self.tx.polarity = polarity if sampling_rate is None: sampling_rate = RX_CONFIG['sampling_rate'] if self.tx.pwr.voltage_adjustable: @@ -268,7 +268,7 @@ class OhmPiHardware: if polarities is not None: assert len(polarities)==n_pulses else: - polarities = [-1 * np.heaviside(i % 2, -1.) for i in range(n_pulses)] + polarities = [-self.tx.polarity * np.heaviside(i % 2, -1.) for i in range(n_pulses)] if not append: self._clear_values() for i in range(n_pulses):