diff --git a/ohmpi.py b/ohmpi.py index 695c387ebd00dcf44ad371f74d494777e2d9a1c6..585bdc351550c70f71dd5f583c417cf39e0a0a2c 100644 --- a/ohmpi.py +++ b/ohmpi.py @@ -319,67 +319,56 @@ class OhmPi(object): vmn=0 count=0 - while I < 3 or abs(vmn) < 20 : # I supérieur à 1 mA et Vmn surpérieur - if count >0 : - volt = volt + 2 - count=count+1 - if volt > 50: - break - # set voltage for test - self.DPS.write_register(0x0000, volt, 2) - self.DPS.write_register(0x09, 1) # DPS5005 on - time.sleep(best_tx_injtime) # inject for given tx time - - # autogain - self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_current_address) - self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_voltage_address) - gain_current = self._gain_auto(AnalogIn(self.ads_current, ads.P0)) - gain_voltage0 = self._gain_auto(AnalogIn(self.ads_voltage, ads.P0)) - gain_voltage2 = self._gain_auto(AnalogIn(self.ads_voltage, ads.P2)) - gain_voltage = np.min([gain_voltage0, gain_voltage2]) - self.ads_current = ads.ADS1115(self.i2c, gain=gain_current, data_rate=860, address=self.ads_current_address) - self.ads_voltage = ads.ADS1115(self.i2c, gain=gain_voltage, data_rate=860, address=self.ads_voltage_address) - # we measure the voltage on both A0 and A2 to guess the polarity - I = AnalogIn(self.ads_current, ads.P0).voltage * 1000. / 50 / self.r_shunt # noqa measure current - U0 = AnalogIn(self.ads_voltage, ads.P0).voltage * 1000. # noqa measure voltage - U2 = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000. # noqa - - # check polarity - polarity = 1 # by default, we guessed it right - vmn = U0 - if U0 < 0: # we guessed it wrong, let's use a correction factor - polarity = -1 - vmn = U2 - if strategy == 'vmax': - if abs(vmn)>4500 or I> 45 : - volt = volt - 2 - self.DPS.write_register(0x0000, volt, 2) - self.DPS.write_register(0x09, 1) # DPS5005 on - time.sleep(best_tx_injtime) - I = AnalogIn(self.ads_current, ads.P0).voltage * 1000. / 50 / self.r_shunt - U0 = AnalogIn(self.ads_voltage, ads.P0).voltage * 1000. - U2 = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000. - - polarity = 1 # by default, we guessed it right - vmn = U0 - if U0 < 0: # we guessed it wrong, let's use a correction factor - polarity = -1 - vmn = U2 - break - - - self.DPS.write_register(0x09, 0) # DPS5005 off - # print('polarity', polarity) - self.pin0.value = False - self.pin1.value = False - # compute constant - c = vmn / I - Rab = (volt * 1000.) / I # noqa - - self.exec_logger.debug(f'Rab = {Rab:.2f} Ohms') - # implement different strategy if strategy == 'vmax': + while I < 3 or abs(vmn) < 20 : # I supérieur à 1 mA et Vmn surpérieur + if count >0 : + volt = volt + 2 + count=count+1 + if volt > 50: + break + # set voltage for test + self.DPS.write_register(0x0000, volt, 2) + self.DPS.write_register(0x09, 1) # DPS5005 on + time.sleep(best_tx_injtime) # inject for given tx time + + # autogain + self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_current_address) + self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_voltage_address) + gain_current = self._gain_auto(AnalogIn(self.ads_current, ads.P0)) + gain_voltage0 = self._gain_auto(AnalogIn(self.ads_voltage, ads.P0)) + gain_voltage2 = self._gain_auto(AnalogIn(self.ads_voltage, ads.P2)) + gain_voltage = np.min([gain_voltage0, gain_voltage2]) + self.ads_current = ads.ADS1115(self.i2c, gain=gain_current, data_rate=860, address=self.ads_current_address) + self.ads_voltage = ads.ADS1115(self.i2c, gain=gain_voltage, data_rate=860, address=self.ads_voltage_address) + # we measure the voltage on both A0 and A2 to guess the polarity + I = AnalogIn(self.ads_current, ads.P0).voltage * 1000. / 50 / self.r_shunt # noqa measure current + U0 = AnalogIn(self.ads_voltage, ads.P0).voltage * 1000. # noqa measure voltage + U2 = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000. # noqa + + # check polarity + polarity = 1 # by default, we guessed it right + vmn = U0 + if U0 < 0: # we guessed it wrong, let's use a correction factor + polarity = -1 + vmn = U2 + if strategy == 'vmax': + if abs(vmn)>4500 or I> 45 : + volt = volt - 2 + self.DPS.write_register(0x0000, volt, 2) + self.DPS.write_register(0x09, 1) # DPS5005 on + time.sleep(best_tx_injtime) + I = AnalogIn(self.ads_current, ads.P0).voltage * 1000. / 50 / self.r_shunt + U0 = AnalogIn(self.ads_voltage, ads.P0).voltage * 1000. + U2 = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000. + + polarity = 1 # by default, we guessed it right + vmn = U0 + if U0 < 0: # we guessed it wrong, let's use a correction factor + polarity = -1 + vmn = U2 + break + factor_I = (current_max) / I factor_vmn = voltage_max / vmn factor = factor_I @@ -388,12 +377,22 @@ class OhmPi(object): vab = factor * volt * 0.8 if vab > tx_max: vab = tx_max - + elif strategy == 'constant': vab = volt else: vab = 5 + self.DPS.write_register(0x09, 0) # DPS5005 off + # print('polarity', polarity) + self.pin0.value = False + self.pin1.value = False + # compute constant + c = vmn / I + Rab = (volt * 1000.) / I # noqa + + self.exec_logger.debug(f'Rab = {Rab:.2f} Ohms') + # self.DPS.write_register(0x09, 0) # DPS5005 off self.pin0.value = False self.pin1.value = False