diff --git a/configs/config_mb_2024_0_2__4_mux_2024_dps5005.py b/configs/config_mb_2024_0_2__4_mux_2024_dps5005.py index 011c374fbeba8ef60ac602d455885e0de74efb1c..cf1f4ac7bedcc55da86e7aeea0b2f2e697d19898 100644 --- a/configs/config_mb_2024_0_2__4_mux_2024_dps5005.py +++ b/configs/config_mb_2024_0_2__4_mux_2024_dps5005.py @@ -15,14 +15,14 @@ OHMPI_CONFIG = { 'id': ohmpi_id, # Unique identifier of the OhmPi board (string) 'settings': 'ohmpi_settings.json', # INSERT YOUR FAVORITE SETTINGS FILE HERE } - +r_shunt =2. HARDWARE_CONFIG = { 'ctl': {'model': 'raspberry_pi'}, 'pwr': {'model': 'pwr_dps5005', 'voltage': 3., 'interface_name': 'modbus'}, 'tx': {'model': 'mb_2024_0_2', 'voltage_max': 50., # Maximum voltage supported by the TX board [V] - 'current_max': 4800, # Maximum voltage read by the current ADC on the TX board [mA] - 'r_shunt': 2, # Shunt resistance in Ohms + 'current_max': 4.8/(50*r_shunt), # Maximum voltage read by the current ADC on the TX board [A] + 'r_shunt': r_shunt, # Shunt resistance in Ohms 'interface_name': 'i2c' }, 'rx': {'model': 'mb_2024_0_2', @@ -75,7 +75,8 @@ HARDWARE_CONFIG = { }, 'default': {'interface_name': 'i2c_ext', 'voltage_max': 100., - 'current_max': 3.} + 'current_max': 3. + } } } diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py index 7ac3f947591317184ad7be4732039bf255ded807..87dcfa60072f111b5d8126d75ea7659ade13c38b 100644 --- a/ohmpi/hardware_system.py +++ b/ohmpi/hardware_system.py @@ -43,7 +43,7 @@ for k, v in rx_module.SPECS['rx'].items(): except Exception as e: print(f'Cannot set value {v} in RX_CONFIG[{k}]:\n{e}') -current_max = np.min([TX_CONFIG['voltage_max']/50/TX_CONFIG['r_shunt'], # TODO: replace 50 by a TX config +current_max = np.min([TX_CONFIG['current_max'], # TODO: replace 50 by a TX config np.min(np.hstack((np.inf, [MUX_CONFIG[i].pop('current_max', np.inf) for i in MUX_CONFIG.keys()])))]) voltage_max = np.min([TX_CONFIG['voltage_max'], np.min(np.hstack((np.inf, [MUX_CONFIG[i].pop('voltage_max', np.inf) for i in MUX_CONFIG.keys()])))]) @@ -317,7 +317,7 @@ class OhmPiHardware: sp = np.mean(mean_vmn[np.ix_(polarity == 1)] + mean_vmn[np.ix_(polarity == -1)]) / 2 return sp - def _find_vab(self, vab, iab, vmn, p_max, vab_max, vmn_max): + def _find_vab(self, vab, iab, vmn, p_max, vab_max, iab_max, vmn_max): iab_mean = np.mean(iab) iab_std = np.std(iab) vmn_mean = np.mean(vmn) @@ -338,9 +338,10 @@ class OhmPiHardware: # conditions for vab update cond_vmn_max = rab_lower_bound / r_upper_bound * vmn_max cond_p_max = np.sqrt(p_max * rab_lower_bound) + cond_iab_max = rab_lower_bound * iab_max print(f'Rab: [{rab_lower_bound:.1f}, {rab_upper_bound:.1f}], R: [{r_lower_bound:.1f},{r_upper_bound:.1f}]') print(f'{k}: [{vab_max:.1f}, {cond_vmn_max:.1f}, {cond_p_max:.1f}]') - new_vab = np.min([vab_max, cond_vmn_max, cond_p_max]) + new_vab = np.min([vab_max, cond_vmn_max, cond_p_max, cond_iab_max]) if new_vab == vab_max: print('Vab bounded by Vab max') elif new_vab == cond_p_max: @@ -432,7 +433,7 @@ class OhmPiHardware: v = np.where((self.readings[:, 0] > delay) & (self.readings[:, 2] != 0) & (self.readings[:, 1]==pulse))[0] # NOTE : discard data aquired in the first x ms iab = self.readings[v, 3]/1000. vmn = np.abs(self.readings[v, 4]/1000. * self.readings[v, 2]) - new_vab = self._find_vab(vab_list[k], iab, vmn, p_max, vab_max, vmn_max) + new_vab = self._find_vab(vab_list[k], iab, vmn, p_max, vab_max, iab_max, vmn_max) diff_vab = np.abs(new_vab - vab_list[k]) vabs.append(new_vab) print(f'new_vab: {new_vab}, diff_vab: {diff_vab}\n') diff --git a/ohmpi/ohmpi.py b/ohmpi/ohmpi.py index ea8710f1f3f8bcf9756e96b517de4c0c65401195..3b3f1ca555ca7018c62917dc0131133b9472d195 100644 --- a/ohmpi/ohmpi.py +++ b/ohmpi/ohmpi.py @@ -500,7 +500,7 @@ class OhmPi(object): bypass_check = kwargs['bypass_check'] if 'bypass_check' in kwargs.keys() else False d = {} if self.switch_mux_on(quad, bypass_check=bypass_check, cmd_id=cmd_id): - tx_volt = self._hw._compute_tx_volt(tx_volt=.5, strategy=strategy, vab_max=10.) # TODO: use tx_volt and vmn_max instead of hardcoded values + tx_volt = self._hw._compute_tx_volt(tx_volt=.5, strategy=strategy, vab_max=5.) # TODO: use tx_volt and vmn_max instead of hardcoded values self._hw.vab_square_wave(tx_volt, cycle_duration=injection_duration*2/duty_cycle, cycles=nb_stack, duty_cycle=duty_cycle) if 'delay' in kwargs.keys(): delay = kwargs['delay']