Commit b85a5514 authored by Clement Remi's avatar Clement Remi
Browse files

Measurement injection correction

Showing with 513 additions and 18 deletions
+513 -18
1 4 2 3
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 10
8 9 10 11
9 10 11 12
10 11 12 13
11 12 13 14
12 13 14 15
13 14 15 16
14 15 16 17
15 16 17 18
16 17 18 19
17 18 19 20
18 19 20 21
19 20 21 22
20 21 22 23
21 22 23 24
22 23 24 25
23 24 25 26
24 25 26 27
25 26 27 28
26 27 28 29
27 28 29 30
28 29 30 31
29 30 31 32
30 31 32 33
31 32 33 34
32 33 34 35
33 34 35 36
34 35 36 37
......@@ -39,8 +39,6 @@ offset_p3= 0
integer=10
meas=numpy.zeros((3,integer))
"""
import parameters
"""
......@@ -74,7 +72,30 @@ Elec_N= adafruit_tca9548a.TCA9548A(i2c, 0X70)
functions
"""
# function swtich_mux select the right channels for the multiplexer cascade for electrodes A, B, M and N.
def switch_mux(quadripole):
def switch_mux_on(quadripole):
elec_adress=[0x76,0X71,0x74,0x70]
for i in range(0,4):
tca= adafruit_tca9548a.TCA9548A(i2c, elec_adress[i]) #choose MUX A B M or N
if quadripole[i] < 17:
nb_i2C=7
a=quadripole[i]
elif quadripole[i] > 16 and quadripole[i] < 33:
nb_i2C=6
a=quadripole[i]-16
elif quadripole[i] > 32 and quadripole[i] < 49:
nb_i2C=5
a=quadripole[i]-32
elif quadripole[i] > 48 and quadripole[i] < 65:
nb_i2C=4
a=quadripole[i]-48
mcp2 = MCP23017(tca[nb_i2C])
mcp2.get_pin(a-1).direction=digitalio.Direction.OUTPUT
mcp2.get_pin(a-1).value=True
def switch_mux_off(quadripole):
elec_adress=[0x76,0X71,0x74,0x70]
for i in range(0,4):
......@@ -93,10 +114,10 @@ def switch_mux(quadripole):
nb_i2C=4
a=quadripole[i]-48
mcp = MCP23017(tca[nb_i2C])
mcp.get_pin(a-1).direction=digitalio.Direction.OUTPUT
mcp.get_pin(a-1).value=True
print(quadripole[i])
mcp2 = MCP23017(tca[nb_i2C])
mcp2.get_pin(a-1).direction=digitalio.Direction.OUTPUT
mcp2.get_pin(a-1).value=False
#function to switch off mux
def ZERO_mux(nb_elec):
......@@ -118,9 +139,9 @@ def ZERO_mux(nb_elec):
nb_i2C=4
a=qd-48
mcp = MCP23017(tca[nb_i2C])
mcp.get_pin(a-1).direction=digitalio.Direction.OUTPUT
mcp.get_pin(a-1).value= False
mcp2 = MCP23017(tca[nb_i2C])
mcp2.get_pin(a-1).direction=digitalio.Direction.OUTPUT
mcp2.get_pin(a-1).value= False
# function to find rows with identical values in different columns
def find_identical_in_line(array_object):
......@@ -144,7 +165,7 @@ def find_identical_in_line(array_object):
def read_quad(filename, nb_elec):
output = numpy.loadtxt(filename, delimiter=" ",dtype=int) # load quadripole file
# locate lines where the electrode index exceeds the maximum number of electrodes
test_index_elec = numpy.array(numpy.where(output > 32))
test_index_elec = numpy.array(numpy.where(output > nb_elec))
# locate lines where an electrode is referred twice
test_same_elec = find_identical_in_line(output)
# if statement with exit cases (rajouter un else if pour le deuxième cas du ticket #2)
......@@ -165,14 +186,19 @@ def run_measurement(nb_stack, injection_deltat, R_shunt, coefp2, coefp3, elec_ar
sum_I=0
sum_Vmn=0
sum_Ps=0
# injection courant and measure
mcp = MCP23008(i2c, address=0x20)
pin0 = mcp.get_pin(0)
pin0.direction = Direction.OUTPUT
pin1 = mcp.get_pin(1)
pin1.direction = Direction.OUTPUT
pin0.value = False
pin1.value = False
# injection courant and measure
for n in range(0,3+2*nb_stack-1) :
# current injection
if (n % 2) == 0:
pin1.value = True
pin0.value = False # current injection polarity n°1
else:
......@@ -256,10 +282,10 @@ for g in range(0,pardict.get("nbr_meas")): # for time-lapse monitoring
# call the switch_mux function to switch to the right electrodes
switch_mux(N[i,])
switch_mux_on(N[i,])
# run a measurement
current_measurement = run_measurement(pardict.get("stack"), pardict.get("injection_duration"), R_shunt, coef_p2, coef_p3, N[i,])
ZERO_mux(pardict.get("nb_electrodes"))
switch_mux_off(N[i,])
#save data and print in a text file
append_and_save(pardict.get("export_path"), current_measurement)
......
No preview for this file type
{
"nb_electrodes": 64,
"injection_duration": 0.5,
"injection_duration": 0.250,
"nbr_meas": 10000,
"sequence_delay": 5,
"sequence_delay": 0,
"stack": 1,
"export_path": "/home/pi/ohmpi1_5/measurement.csv"
}
test.py 0 → 100644
import time , board, busio, numpy, os, sys, json, glob,os.path,adafruit_tca9548a
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn
from pandas import DataFrame
from datetime import datetime
from adafruit_mcp230xx.mcp23008 import MCP23008
from adafruit_mcp230xx.mcp23017 import MCP23017
import digitalio
from digitalio import Direction
current_time = datetime.now()
print(current_time.strftime("%Y-%m-%d %H:%M:%S"))
"""
hardware parameters
"""
R_shunt = 0.2# reference resistance value in ohm
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
offset_p3= 0
integer=10
meas=numpy.zeros((3,integer))
"""
import parameters
"""
with open('ohmpi_param.json') as json_file:
pardict = json.load(json_file)
i2c = busio.I2C(board.SCL, board.SDA) #activation du protocle I2C
mcp = MCP23008(i2c, address=0x20) #connexion I2C MCP23008, injection de courant
ads_current = ADS.ADS1115(i2c, gain=16,data_rate=860, address=0X48)# connexion ADS1115, pour la mesure de courant
ads_voltage = ADS.ADS1115(i2c, gain=2/3,data_rate=860, address=0X49)# connexion ADS1115, pour la mesure de courant
#initialisation desvoie pour la polarité
pin0 = mcp.get_pin(0)
pin0.direction = Direction.OUTPUT
pin0.value = False
pin0.value = False
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment