Custom-Made Galvanostat-Potentiostat and Potentiometer For Decentralized Measurements of Ionophore-Based Membranes

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 45

Supporting Information for:

Custom-Made Galvanostat-Potentiostat and

Potentiometer for Decentralized Measurements of

Ionophore-Based Membranes

Stéphane Jeanneret, Gastón A. Crespo, Majid Ghahraman Afshar and Eric Bakker*

Department of Inorganic and Analytical Chemistry, University of Geneva, Quai Ernest-Ansermet 30, CH-

1211 Geneva, Switzerland.

KEYWORDS: Potentiometer, Potentiostat, Chronopotentiometry, Coulometry, Perm-selective

membranes

1
Figure 1S – Galvapot is an electronic instrument that contains a potentiostat, galvanostat and
potentiometry. It can be controlled either in stand-alone using its graphical touch screen or
connected to a PC through a USB or serial port. Many options are available for digital inputs or
outputs. A RS485 communication port is implemented in order to control external devices such
as peristaltic pumps, actuators, valves, etc.

2
CE electrode Max current: +/-4.0 mA
Max voltage +/-3.0 V
RE electrode Input current: max. 200 pA
Voltage range +/- 2.500 V +/- 2mV
WE electrode Current ranges +/- 5 mA (Rconv=100Ohm)
+/- 3.5 mA (Rconv=1kOhm)
+/- 350 uA (Rconv=10kOhm)
+/- 35 uA (Rconv=100kOhm)
+/- 350 nA (Rconv=10MOhm)
Precision +/- 0.1%
Chrono modes Acq speed 500 Hz
Nb max of points 3000 points (= 6 sec)
Serial link Factory option: USB or
RS232 on DB9 male , 57600, 8, N, 1
RS485 link For pump type Baoding Longer Precision type T100-
S102
Link RS485
Nb max pumps 30
10 direct on the Galvapot, for more
please consider adding RS485 repeaters.
Pump speed 0.01 to 99.9 rpm
Power supply External power supply: 6.5-9 V / 500 mA
(without external devices like pumps or
relays)
Weight 500g
Dimensions 14 cm x16 cm x7 cm

Figure 2S – Features of GalvaPot.

3
Figure 3S - The front panels contain two LEDs, two buttons (Start and abort) and a touch screen
(green display).

4
Figure 4S - Diagram of the acquisition board

5
Figure 5S –Diagram of the measurement board.

6
Fig 6S – Hyperbole interval confidence with a significance level of 95%.

7
Fig 7S – Labview interface for Potentiometry, Chronopotentiometry and Coulometry.

8
Fig 8S – Coulometric set-up.

9
Fig 9S – Coulometric readout.

10
Fig 10S - Hyperbole interval confidence with a significance level of 95%.

11
Fig 11S – Set-up of the chronopotentiometric measurements.

12
Fig 12S - Hyperbole interval confidence with a significance level of 95%.

13
Appendix 1: Acquisition board components (Figure 3, main manuscript)
a) Bat1: Battery for local clock
This is the battery that permits the local clock to be kept even without external power.
This battery is a model CR2032.
b) J24: GP_DigExt
This connector is used to control the measurement circuit board. There are no available pins for
the user on this connector.The internal GalvaPot application use these signals.
c) J23: GP AnaExt
This connector is used to control the measurement circuit board. There are no available pins for
the user on this connector. The internal GalvaPot application use these signals.
d) J22: Ext_SPI3
This connector contains many digital I/Os that are directly connected to the microcontroller:
PIC24FJ256GB206. It can be used as digital I/Os or external SPI expansion port. (the SPI3
controller is reserved for this port). The voltage can never be higher than 3.3V on these pins.
These pins must be protected against electrostatic discharges.

3.3V
RB8 / SPI3_nCS1
RD8 / SPI3_nCS2
RB9 / SPI3_SCL
RB14/ SPI3_SDI
RB15/ SPI3_SDO
RF3 / SPI3_nINT
GND

14
e) J27: I/O1

3.3V
GP7
GP6
GP5
GP4
GP3
GP2
GP1
GP0
GND

This port is available as eight digital outputs for user purpose. The outputs are 0V / 3.3V, max
5mA. These outputs are controlled by the MCP23008 number 2, with these pins connected in
series with R100ohm. Software access to these outputs is available using the “write_io1”
command.

f) J11: I2C2_Ext
This port is the extension of the local I2C2 port. It works at 3.3V, already contains the needed
pullups. This bus already contains three circuits.

GND
SDA
SCL
3.3V

15
g) J28: I/O2

3.3V
GP7
GP6
GP5
GP4
GP3
GP2
GP1
GP0
GND

This port is available as eight digital inputs for user purpose. The inputs are 0V / 3.3V. A 100
ohm resistors are in serie. These inputs are connected on the MCP23008 number 1, with these
pins connected in series with R100ohm. Software access to these outputs is available using the
“read_io2” command.

16
h) Leds + Buttons Ext
This connector permits to connect additional buttons and Leds.

Led 2 Cathode (GP5)


Led 2 3.3V (GP5)
Led 3 Cathode (GP4)
Led 3 3.3V (GP4)
Button 1 3.3V (GP1)
Button 1 In (GP1)
Button 0 3.3V (GP0)
Button 0 In (GP0)

i) Internal USB port


The internal USB port is currently not used by the GalvaPot application, but is available as
needed. The USB port has been tested with success with an application that emulates a serial
port. Under Windows, this port needs the installation of a specific driver. The USB port has not
been used for the GalvaPot application because the USB ports consumes significant internal time
resources (IRQs) inside the local microcontroller. In chronometric measurements, these
requirements had a negative impact on the precision of the timestamps.
For USB connexions on the GalvaPot, we use the Comm1 port equipped with a USB interface.
Please see the Comm1 port description for more informations.

17
j) Comm1 port
The Comm1 communication port provides a terminal that permits us to select the type of the
interface to the PC.
a) Standard USB interface:

or
b) Standard RS232 interface

2: RxD: input to uC
3: TxD: output from uC
5: GND

18
k) Comm2 RS485 port
The Comm2 communication port is fitted with a RS485 interface. It is used to connect the
GalvaPot to the external peristaltics pumps. These pumps are provided by Baoding Longer Pump
Co., Ltd; and we use the type T100-S102. The 3.3V and the GND connections are connected to
the respective signals through a R100 in serial. A 120 ohm terminaison is already mounted on-
board. Failsafe resistors are also included on-board, this configuration consume 20 Unit Loads
(UL). Then only 10 unit loads are available for user purpose. Then up to 10 pumps can be
directly connected to this connector. It is possible to connect up to 30 pumps if we add RS485
repeaters.

GND
RS485 B
RS485 A
3.3V

For loaded bus or long bus, please do not forget to add a 120 ohm resistor on the last load.
The Baoding Longer Pump type T100-S102:

19
l) J14: I2C1_Ext

This port is the extension of the local I2C1 port. It works at 3.3V, already contains the needed
pull-ups. This bus already contains one circuit on-board.

3.3V
SCL
SDA
GND

This port permits to add some future extension to the GalvaPot.

20
Appendix 2: Touch screen interface

2.Screen Menus

The touch screen permits to navigate through internal menus. Only pertinent information is
displayed on the screen.

The menus are organized in the following manner:

2.1 Main Menu

The Galvapot shows the main menu:

GalvaPot
Version: 0.8

The bottom of the screen shows dynamic buttons that permits to enter different menus or execute
functions.

21
2.2 Manual Menu

The Manual menu is an intermediate menu to choose another submenus.

Menu Manual
Please choose
an option

2.2.1 Manual, Meas menu

The Measurement menu permits to select potentiometric or Galvanostatic measurements.

Pot Galv

22
2.2.1.1 Manual, Meas, Pot menu

This is the Potentiostat function.


The conversion resistor RC can be modified.
The voltage applied between Ref and WE can be modified.
The cell can be Disconnected or Connected.
On the bottom, the current mesured on WE is displayed.

RC- 10k RC+

mV- 1500.0 mV+

2.2.1.2 Manual, Meas, Galv menu

This is the Galvanostat function.


The conversion resistor RC can be modified.
The current applied on WE can be modified.
The cell can be Disconnected or Connected.
On the bottom, the voltage mesured on Ref is displayed.

RC- 10k RC+

uA- 1500.0 uA+

23
2.2.2 Manual, Pump menu

This menu permits to control the peristaltic pumps connected to the RS485 link.

The first line permits to change the rpm.


The second line permits to change the rotation direction: ClockWise ot AntiClockWise.
The pump can be Stopped or Started.
The bottom line permits to choose the Pump’s number. Please note that the Pump number 31 is a
broadcast that control all pumps on the link.

- 100 +

ACW CW CW

2.2.3 Manual, Sys menu

This System menu is an intermediate menu that permits to access to different options that
concerns the intern system.

Time

Rst

24
2.2.3.1 Manual, Sys, Time menu

The Time menu display the local time reference in real time.
It permits to modifiy the Date and/or the Hour stored in local.

12.08.2013 08:41:12

Date Hour

2.2.3.1.1.1 Manual, Sys, Time, Date menu

This menu permits to modify the Date on the local clock.


By touching Quit, the modification is cancelled and the modification is not made.
By touching Save, the modification is saved.

Day- 12 Day+

Mth- 08 Mth+

25
2.2.3.1.1.2 Manual, Sys, Time, Hour menu

This menu permits to modify the Hour on the local clock.


By touching Quit, the modification is cancelled and the modification is not made.
By touching Save, the modification is saved.

Hou- 12 Hou+

Min- 08 Min+

2.2.3.1.2 Manual, Sys, Reset menu

This menu permits to make a Reset on the GalvaPot.


The user has to confirm the Reset.

Please confirm

Res

26
2.3 Experiment menu

This menu starts the Experiment.

It is not yet implemented.

2.4 Demo menu

This menu displays the University logo.

27
Appendix 3: PC-GalvaPot

3.1 Connexion to a PC

When powered up, the Galvapot send a welcome message and indicates the main default states of the
internal values.

----------------------------

| GalvaPot rev0 |

| Galvanostat / Potentiostat |

----------------------------

Version: 0.8/SJ

Build: 12-août-13 09:08:37

Default values:

The '>' sign is the command prompt. It indicates that the Galvapot is ready to receive a new command.

It is possible to recall the last command by typing Ctrl+A.

3.2 Commands Syntax

The Galvapot is not case sensitive: each command can be entered lower or upper case.

Each command is evaluated by the GalvaPot when it receives the Carriage Return character (ASCII code
13).

Then a control is done by the GalvaPot. If everything is fine the command is executed. Otherwise the
Galvapot only send back an error message starting by ###.

By default each value is in decimal.


It is possible to enter hexadecimal values by adding the prefix 0x before the hexadecimal value.

28
3.3 Commands List

Here follows the list of the commands recognized by the Galvapot:

Commande Description
? Display the help
set_mode Set the mode of the device: galvanostat or potentiostat
set_i_range Set the conversion resistor for the I->U conversion
connect_cell Connect or disconnect the cell
read_cell Read the cell values
set_ref set the reference voltage
set_cur set the working current
read_ref read the reference voltage
read_cur reaf the working current
read_aux read the aux voltage
chrono start a chrono-potentiometry/galvanometry measurement
read_adcmain read the voltage on the main ADC
read_adcsec read the voltage on the secondary ADC
write_dac send a voltage on the DAC
set_led set a LED state
read_buttons read the buttons state
write_pump set a pump state
read_pump read the state of a pump
read_io2 read the state on the IO2 connector
write_io1 define the state on the io1 connector
write_iogp define the state on the IOGP connector
read_time read the internal clock
write_time set the internal clock
write_rtc_calib calibrates the internal clock
piezo send a sound on the piezo
info Display the GalvoPot informations
test Display 'Test'
version Shows the firmware version

Please note that if a command is followed by ‘?’, a help about needed parameters is shown.
Example:

> read_cell ?

read_cell <cont>

<cont> = c read continuously, stop with Q+<CR>

29
3.3.1 ? Display Help
Description: Display the list of the recognized commands.

Syntax: ?

Example:

> ?

Help

----

test Display 'Test'

info Display informations

version Shows the firmware version

set_mode [p,g] Set the mode: potentiostat/galvanostat

set_i_range [0-5] Set range for current measurement

connect_cell [0,1] Connect / disconnect the cell

read_cell [c] Read the cell values, option continuous

set_ref [float] In potentiostat mode: set the reference voltage

set_cur [float] In galvanostat mode: set the working current

read_ref Read the reference voltage

read_cur Read the working current

read_aux Read the auxiliary voltage

chrono [float] [dur] Start a chronometric experiment

read_adcmain [0-3,a] [c] Read the main ADC, options: all and cont

read_adcsec [0-3,a] [c] Read the secondary ADC, options: all and cont

30
3.3.2 test Display ‘Test’
Description: Display ‘Test’
Used for example to test if the GalvaPot responds to the PC.

Syntax: test

Example:

> test

Test

3.3.3 info Display GalvaPot informations


Description: Display some informations on the GalvaPot.

Syntax: info

Example:

> info

Informations

Cell: Off

Mode: Potentiostat

R_Conv: 10000.0

Imin: -400.0 uA

31
3.3.4 version Display the Firmware version
Description: Display the Firmware version

Syntax: version

Example:

> version

Version: 0.8/SJ

Build: 12-août-13 16:17:25

3.3.5 set_mode Set the GalvaPot mode


Description: Set the GalvaPot mode.
The mode can be Potentiostat or Galvanostat.

Syntax: set_mode <mode>

with <mode> = p for Potentiostat


g for Galvanostat

Example:

> set_mode p

Mode = Potentiostat

32
3.3.6 set_i_range Set the current range for measurement
Description: Set the conversion resistor used for current measurement.
This command will connect physically a specific resistor on the
current-to-voltage module for the measurement on the Working
electrode.

Syntax: set_i_range <range>

with <range> = 0 for 100 ohm -> I range = +/-40mA


1 for 1k ohm -> I range = +/-4mA
2 for 10k ohm -> I range = +/-400uA
3 for 100k ohm -> I range = +/-40uA
4 for 1M ohm -> I range = +/-4uA
5 for 10M ohm -> I range = +/-400nA

Example:

> set_i_range 1

R_Conv = 1000 Ohm, Imin= -4000.0002 uA, Imax= 4000.0002 uA

3.3.7 connect_cell Connect or disconnect the cell


Description: this command permits to connect or disconnect the measurement cell.

Syntax: connect_cell <state>

with <state> = 0 to disconnect the cell


1 to connect the cell

Example:

> connect_cell 0

Cell Off

3.3.8 read_cell Read the cell values


Description: This command permits to read the measurement values of the cell.
There is a possibility to indicates to read continuously the values in
order to see in ‘real time’ the state of the cell.

33
Syntax: read_cell <cont>

with <cont> = nothing for one read


c for continuous read, to abort:
send q, then send CR

Example:

> read_cell

CE RE WE DAC

[V] [V] [uA] [V]

3.3.9 set_ref Set the Reference Voltage


Description: Set the desired Reference voltage for Potentiostatic measurement.

Syntax: set_ref <voltage>

with <voltage> desired voltage in Volts: from -2.500 to 2.500 [V]

Example:

> set_ref -2.345

RE=-2344.99975mV

34
3.3.10 set_cur Set the Working current
Description: Set the desired current on the Working electrode for Galvanostatic
measurement.

Syntax: set_cur <current>

with <current> desired current in uA: from -4000 to 4000 [uA]

Example:

> set_cur 400

I=400.00000uA ( DAC = 0.39999V )

3.3.11 read_ref Read the Reference voltage


Description: Read the voltage on the Reference electrode.

Syntax: read_ref

Example:

> read_ref

-0.001852V

3.3.12 read_cur Read the Working current


Description: Read the current flowing on the Working electrode.

Syntax: read_cur

Example:

> read_cur

-0.398159uA

3.3.13 read_aux Read the voltage on the Aux electrode


Description: Read the voltage on the Auxilliary electrode.

Syntax: read_aux

35
Example:

> read_aux

0.000576V

3.3.14 chrono Start a chrono measurement


Description: Start a chrono measurement depending of the current mode.
Please see the set_mode command.
If the GalvaPot is in Potentiostat mode, a chrono-potentiometric
measurement is started: apply a fixed voltage and read the current.
Else if the GalvaPot is in Galvanostat mode, a chrono-galvanostatic
measurement is started: apply a fixed current and read the voltage.
When the measurement is done, all the values are sent.

Syntax: chrono <value> <duration> <transfer>

with <value> is the voltage or the current to apply on the cell


<duration> is the measurement duration
<tranfer> is the transfer mode:
0 = measure then immediatly the data
1 = measure and memorize the data in memory
2 = send the memorized data
Example:

> chrono 0.2 1

0: 0.479221

0:1328.141723

31661:1315.491210

63322:1315.250366

94983:1315.014404

126644:1315.093017

For each field the first number is the timecode and the second number is the corresponding measurement.

The timecode is the time in 1/16MHz multiple.

The first line displays the measurement before applying the value.

The next lines displays the measurement after the value as been applied.

36
3.3.15 read_adcmain Read a value on the main ADC
Description: Read a voltage on the main ADC converter.
The channel 0 measure the Reference voltage.
The channel 2 measure the Working current-to-voltage value.

Syntax: read_adcmain <channel> <continuous>

with <channel> is the channel to read: 0-3


if channel = ‘a’, read all four channels
<continuous> if its nothing, only display once the value(s)
is its ‘c’, display in continuous the values.
To abort, send any character.

Example:

> read_adcmain 0

ADCmain 0 = 1.249521 [V]

37
3.3.16 read_adcsec Read a value on the secondary ADC
Description: Read a voltage on the secondary ADC converter.
The channel 0 measure the AUX voltage.
The channel 1 measure the DAC output.

Syntax: read_adcsec <channel> <continuous>

with <channel> is the channel to read: 0-3


if channel = ‘a’, read all four channels
<continuous> if its nothing, only display once the value(s)
is its ‘c’, display in continuous the values.
To abort, send any character.

Example:

> read_adcsec 0

ADCsec 0 = 1.25014 [V]

3.3.17 write_dac Write a value on the DAC


Description: Write a value on the DAC.
The DAC value is the value that the GalvaPot will try to reach.
It is either the reference voltage, either the WE current-to-voltage value.

Syntax: write_dac <value>

with <value> is the value to send in Volts: -2.5 to 2.5V

Example:

> write_dac 0.1

DAC = 0.10000 [V]

38
3.3.18 set_led Set a Led state
Description: Set the state of the Leds.
The Led 0 is the Running Led
The Led 1 is the Error Led
The Leds 2 and 3 are available on the ‘Leds+Buttons ext’ connector.

Syntax: set_led <led_nr> <state>

with <led_nr> is the Led number: 0-3


<state> is the state: 0=off, 1=on

Example:

> set_led 0 1

Led 0 = 1

3.3.19 read_buttons Read the state of the buttons


Description: Read the state of the buttons
The buttons 0 and 1 are available on the ‘Leds+Buttons ext’ connector. The
button 2 is the Start button
The button 3 is the Abort button

Syntax: read_buttons

Example:

> read_buttons

Buttons = 0 0 1 0

39
3.3.20 write_pump Send a command to a pump
Description: Send a command to a peristaltic pump connected to the RS485 port.

Syntax: write_pump <adr> <on> <spd> <dir>

with <adr> is the pump address: 0-30.


31 is the broadcast address and all pumps
will execute the command.
<on> 0=pump off, 1=pump on
<spd> pump speed: 1 = 0.01 rpm, 999=99.9 rpm
<dir> 0=clockwise, 1=anti-clockwise

Example:

> write_pump 1 1 200 0

Pump 1: on, speed = 200, dir = clockwise

3.3.21 read_pump Read the state of a pump


Description: Read the state of a peristaltic pump connected to the RS485 port.

Syntax: read_pump <adr>

with <adr> is the pump address: 0-30.

Example:

> read_pump 1

Pump Nr 1: Start = 0, Speed = 1, Dir = 0

40
3.3.22 read_io2 Read the I/O2 connecteur state
Description: Read the state of the digital inputs of the I/O2 connector.

Syntax: read_io2

Example:

> read_io2

IO2 = 0x00

3.3.23 write_io1 Write a value on the I/O1 connector


Description: Set the state of the digital outputs of the I/O1 connector

Syntax: write_io1 <output> <state>

with <output> is the output number: 0-7


<state> is the state: 0=off, 1=on

Example:

> write_io1 0 1

IO1, pin 0 = 1

3.3.24 write_iogp Write a value on the GP connector


Description: Set the state of the digital outputs to the J24=GP_DigExt connector.
This connector controls digital functions on the measurement board.
This command must be used only for debug purposes.

Syntax: write_iogp <output> <state>

with <output> is the output number: 0-7


<state> is the state: 0=off, 1=on

Example:

> write_iogp 0 0

IO Galvapot, pin 0 = 0

3.3.25 read_time Display the time


Description: Read and display the time on the local clock.

Syntax: read_time

41
Example:

> read_time

13.08.2013 16:30:46

3.3.26 write_time Write the time


Description: Write the time on the local clock.

Syntax: write_time <time>

with <time> is the time and date in the format:


ddmmyyhhmmss

Example:

> write_time 130813163400

13.08.2013 16:34:00

42
3.3.27 write_rtc_calibWrite the RTC calibration code
Description: Write the RTC calibration code to adjust precisely the local clock.
Please read the MPC79410 datasheet for more informations

Syntax: write_rtc_calib <code>

with <code> is the calibration code

Example:

> write_rtc_calib 0

RTC Calibration code: 0 sent to the RTC

3.3.28 piezo Play a sound on the piezo


Description: Play a sound on the piezo buzzer.

Syntax: piezo <freq> <dur>

with <freq> is the frequence: 1=500Hz to 30=15000Hz


<dur> the duration: 10 to 5000 ms

Example:

> piezo 15 500

Piezo: 7500 Hz, dur: 500 ms

43
Appendix 4: Additional Files

Appendix 4 is storage in:

http://www.unige.ch/sciences/chiam/static/crespo/Supplementary_Information.zip

All the schematic circuits are placed in Circuits folder:

File 1 - Extension_RS232.pdf Personalization module for Comm port, version RS232

File 2 - Extension_RS485.pdf Personalization module for Comm port, version RS485

File 3 - Extension_USB_MCP2200.pdf Personalization module for Comm port, version USB

File 4 - GalvaPot_Acq.pdf 'Upper' Acquisition board, digital part of GalvaPot

File 5 - GalvaPot_Mes.pdf 'Lower' Measurement board, analog part of GalvaPot

All the drawing circuit boards are placed in the PCB folder. These files are in Gerber format.

File 6 - PCB_GalvaPot_Mes.zip Gerber files for Measurement board

File 7 - PCB_GalvaPot_Acq.zip Gerber files for Acquisition board

Firmware Files are placed Firmware folder.

File 8 - ADS1115.h Driver for the secondary ADC

File 9 - ADS1255.h Driver for the two main ADCs

File 10 - decodeur_commandes.h Command decoder

File 11 - dogl128_defs.h Definitions for graphical display

File 12 - dogl128.h Driver for graphical display

File 13 - Ext_EEPROM.h Driver for EEPROM

File 14 - GalvaPot.c Main program

File 15 - liste_commandes.h Commands implementation

File 16 - LTC2642.h Driver for the DAC

File 17 - MCP23008.h Driver for the General Purpose I/Os interfaces

44
File 18 - MCP79410.h Driver for the Real Time Clock

File 19 - piezo.h Driver for the piezo buzzer

File 20 - Pump_T100.h Driver for the RS485 Pumps

File 21 - redir_port_comm.h Handler for redirectable communication ports

Labview Sources are placed in Labview folder.

File 22 - Check_Panel.pdf Panel displayed if GalvaPot is found

File 23 - Check.pdf Check if GalvaPot is responding

File 24 - Cherche_Ports.pdf Search for the available serial ports

File 25 - CMD_Chrono.pdf Routine for Chronopotentiometry

File 26 - CMD_Connect_Cell.pdf Routine for connecting modes of the cell

File 27 - CMD_Mode.pdf Routine for modes of the instrument

File 28 - CMD_Pump.pdf Routine for the RS485 pumps

File 29 - CMD_Read_Cell.pdf Routine to read the cell values

File 30 - CMD_Read.pdf Routine to read a value

File 31 - CMD_Set_I_Range.pdf Routine to set the current ranges

File 32 - CMD_Set.pdf Routine to set a value

File 33 - Init.pdf Routine to init the PC serial port for the instrument

File 34 - Main_Prog.pdf Main program to control the GalvaPot

File 35 - Send_Chars.pdf Utility to send the commands to the instrument

45

You might also like