diff --git a/config.py b/config.py index 622492f61b11c1b9baffdb6ea585b307f217b0aa..73c8a402281524e8ebb2f8de4fc2504b6380a8e7 100644 --- a/config.py +++ b/config.py @@ -5,8 +5,8 @@ mqtt_broker = 'localhost' # OhmPi configuration OHMPI_CONFIG = { 'id': '0001', # Unique identifier of the OhmPi board (string) - 'R_shunt': 1, # Shunt resistance in Ohms - 'Imax': 4800/50/1, # Maximum current + 'R_shunt': 2, # Shunt resistance in Ohms + 'Imax': 4800/50/2, # Maximum current 'coef_p2': 2.50, # slope for current conversion for ADS.P2, measurement in V/V 'coef_p3': 2.50, # slope for current conversion for ADS.P3, measurement in V/V 'offset_p2': 0, @@ -17,7 +17,7 @@ OHMPI_CONFIG = { 'board_address': {'A': 0x72, 'B': 0x73, 'M': 0x70, 'N': 0x71}, # def. {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} #'board_address': {'A': 0x70, 'B': 0x71, 'M': 0x72, 'N': 0x73}, # def. {'A': 0x76, 'B': 0x71, 'M': 0x74, 'N': 0x70} 'settings': 'ohmpi_settings.json', - 'board_version': '22.11', + 'board_version': '22.10', } # TODO: add a dictionary with INA models and associated gain values CONTROL_CONFIG = { diff --git a/ohmpi.py b/ohmpi.py index 09f3650af8c3abdb2a43e636e5aabda0099f35ca..6f63632e3ec5aba5e8c6fc687859d48ff7c227a2 100644 --- a/ohmpi.py +++ b/ohmpi.py @@ -114,10 +114,12 @@ class OhmPi(object): self.mcp = MCP23008(self.i2c, address=0x20) # ADS1115 for current measurement (AB) - self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=128, address=0x49) + self.ads_current_address = 0x48 + self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_current_address) # ADS1115 for voltage measurement (MN) - self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=128, address=0x48) + self.ads_voltage_address = 0x49 + self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_voltage_address) # current injection module if self.idps: @@ -178,6 +180,7 @@ class OhmPi(object): self.r_shunt = OHMPI_CONFIG['R_shunt'] # reference resistance value in ohm self.Imax = OHMPI_CONFIG['Imax'] # maximum current self.exec_logger.warning(f'The maximum current cannot be higher than {self.Imax} mA') + self.coef_p2 = OHMPI_CONFIG['coef_p2'] # slope for current conversion for ads.P2, measurement in V/V self.nb_samples = OHMPI_CONFIG['integer'] # number of samples measured for each stack self.version = OHMPI_CONFIG['version'] # hardware version self.max_elec = OHMPI_CONFIG['max_elec'] # maximum number of electrodes @@ -461,8 +464,8 @@ class OhmPi(object): 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=0x49) - self.ads_voltage = ads.ADS1115(self.i2c, gain=2/3, data_rate=860, address=0x48) + 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) #print('current P0', AnalogIn(self.ads_current, ads.P0).voltage) #print('voltage P0', AnalogIn(self.ads_voltage, ads.P0).voltage) #print('voltage P2', AnalogIn(self.ads_voltage, ads.P2).voltage) @@ -471,8 +474,8 @@ class OhmPi(object): gain_voltage2 = self.gain_auto(AnalogIn(self.ads_voltage, ads.P2)) gain_voltage = np.min([gain_voltage0, gain_voltage2]) #print('gain current: {:.3f}, gain voltage: {:.3f}'.format(gain_current, gain_voltage)) - self.ads_current = ads.ADS1115(self.i2c, gain=gain_current, data_rate=860, address=0x49) - self.ads_voltage = ads.ADS1115(self.i2c, gain=gain_voltage, data_rate=860, address=0x48) + 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 # measure current @@ -602,8 +605,8 @@ class OhmPi(object): polarity = 1 # first reset the gain to 2/3 before trying to find best gain (mode 0 is continuous) - self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=0x49, mode=0) - self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=0x48, mode=0) + self.ads_current = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_current_address, mode=0) + self.ads_voltage = ads.ADS1115(self.i2c, gain=2 / 3, data_rate=860, address=self.ads_voltage_address, mode=0) # turn on the power supply oor = False @@ -630,8 +633,8 @@ class OhmPi(object): self.pin0.value = False self.pin1.value = False self.exec_logger.debug('Gain current: {:.3f}, gain voltage: {:.3f}'.format(gain_current, gain_voltage)) - self.ads_current = ads.ADS1115(self.i2c, gain=gain_current, data_rate=860, address=0x49, mode=0) - self.ads_voltage = ads.ADS1115(self.i2c, gain=gain_voltage, data_rate=860, address=0x48, mode=0) + self.ads_current = ads.ADS1115(self.i2c, gain=gain_current, data_rate=860, address=self.ads_current_address, mode=0) + self.ads_voltage = ads.ADS1115(self.i2c, gain=gain_voltage, data_rate=860, address=self.ads_voltage_address, mode=0) self.pin0.value = False self.pin1.value = False @@ -674,7 +677,7 @@ class OhmPi(object): else: meas[k, 1] = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000 *-1 elif self.board_version == '22.10': - meas[k, 1] = AnalogIn(self.ads_voltage, ads.P0, ads.P1).voltage * 1000 + meas[k, 1] = -AnalogIn(self.ads_voltage, ads.P0, ads.P1).voltage * self.coef_p2 * 1000 #else: # self.exec_logger.debug('Unknown board') time.sleep(sampling_interval / 1000) @@ -704,7 +707,7 @@ class OhmPi(object): else: measpp[k, 1] = AnalogIn(self.ads_voltage, ads.P2).voltage * 1000 *-1 elif self.board_version == '22.10': - measpp[k, 1] = AnalogIn(self.ads_voltage, ads.P0, ads.P1).voltage * 1000 + measpp[k, 1] = -AnalogIn(self.ads_voltage, ads.P0, ads.P1).voltage * self.coef_p2 * 1000 else: self.exec_logger.debug('unknown board') time.sleep(sampling_interval / 1000) diff --git a/test.py b/test.py index 50b72c13667bd8b3e52a6176c752ba06a1c7df8a..8a73f168c52de53b714643879b701620ab5d7e84 100644 --- a/test.py +++ b/test.py @@ -8,7 +8,7 @@ m = a + 1 n = a + 2 seq = np.c_[a, b, m, n] -k = OhmPi(idps=True) +k = OhmPi(idps=False) k.settings['injection_duration'] = 0.5 k.settings['nb_stack'] = 1 k.settings['nbr_meas'] = 1 @@ -24,10 +24,10 @@ k.settings['nbr_meas'] = 1 #k.rs_check(tx_volt=12) # x = [] -for i in range(5): - out = k.run_measurement(injection_duration=0.5, nb_stack=2, strategy='constant', tx_volt=12, autogain=True) +for i in range(3): + out = k.run_measurement(injection_duration=2, nb_stack=2, strategy='constant', tx_volt=5, autogain=False) #x.append(out['R [ohm]']) - k.append_and_save('out.csv', out) + #k.append_and_save('out.csv', out) data = out['fulldata'] inan = ~np.isnan(data[:,0])