We ended up encapsulating the everything in the SystemState::serviceDataBuffer() in the ps_system_state.cpp file after the comment "//Empty data buffer" in an if statement. The data buffer is only emptied once the test is finished running.
After making this change, the t vectors returned by the test were still delayed, each point was a minimum of 1ms apart, and thus we had repeated points. However, after creating our own t vectore with the know t step, the plots came out quite nicely, and we were able to run waveforms up to 10kHz.
Due to the limitation on data buffer size, slower waveforms must be analyzed with a sample rate such that the number of points doesn’t exceed the data buffer. But this is not big deal, as for our purposes we only need the high sampling rate for the fast waveforms.. I may do some further modifications to change the buffer size to allow for high sampling rates on slow waves, but for now the above modifications have sufficed to allow us to run waveforms of up to 10kHz.
Next we’ll be working on calculating impedance and phase from these output data arrays.
Unfortunately, we don't have a version colorimeter software which works on Chrome OS.
We do have software for linux. so you could install ubuntu on the Chromebook using crouton https://github.com/dnschneid/crouton This will allow you to run ubuntu while preserving your original Chrome OS system.
First, the output voltages are set at discrete time points via the testTimer which run by default at 5kHz. To make a reasonable approximation of a sine wave you will probably want enough points - maybe 50 or so. So you could probably output reasonable approximations of sinusoids voltages up to frequencies of about 100Hz.
Second, the data is not sent back to the PC (or other device connected via UART) at every update of the testTimer. Rather it is sent at a lower sub-sampled rate set by the sample rate (or actually sample period in the firmware). The maximum value for the sample frequency is 1000Hz. You will need sufficient number of sample points at which to measure the current you get in response to the sine wave output. So maybe 20 or 30 or 50 ... the exact number depends on your needs. Lets say that 20 is sufficient. Then this further reduces the maximum sinusoid frequency to 50Hz (1000/20).
Third you will need to take into account the bandwidth of the current measurement range you are using e.g. +/- 1uA, +/-10uA, +/-100uA, +/-1000uA. Each of these channels will lowpass filter the measure signal to some extent based on the resistor capacitor combination used in the feedback network of the transimpedance amplifier. The more sensitive channels will have lower cutoff frequencies. The +/-1000uA and +/-100uA channels have pretty high cut off frequencies such that it won't be an issue. However, the +/-10 uA and +/- 1uA ranges have cutoff frequencies of approximately 47Hz and 4.7Hz respectively. So if you are using these channels this will limit the bandwidth of your measurements somewhat or at least you should be aware of the possible attenuation of the measurements at higher frequencies.
Hi...i am a new user here. I don't have much experience but as per my observation the control amplifier will still be running trying to control the voltage between the reference and working electrode, so can disconnect the counter electrode.
The Rodeostat has voltage ranges of +/-1, +/-2 , +/-5 and +/-10V. So it can achieve the voltage you want without modifications.
The standard current ranges are +/-1, +/-10, +/-100 and +/-1000 uA. Which are a bit lower than you are looking for. We have made modified versions with increased current range. The limit on this was about 24mA (24000uA). There is a topic discussing the modifications here Increasing current ranges to detect mA
Yes, I think it is possible to reduce this overcurrent. This is most likely caused by the abrupt change in potential when the cyclic voltammetry test is run with the 'shift' parameter (dimensionless phase shift) set to zero. The cyclic voltammetry test outputs a triangle waveform for the potential and when the 'shift' parameter is set to zero this waveform will start at the minimum voltage as shown in the figure below
This figure shows two cycles of the potential output for the cyclic voltammetry test when shift = 0. At the start of the test the potential abruptly changes from 0V to the minimum value (in this case -0.4V) at the start of the test. This abrupt change in potential can cause a large current.
In order to minimize this current it is possible to adjust the shift parameter so that the waveform starts at 0V and then linearly progresses to the minimum value. An example is shown in the figure below
In this case the shift was adjusted so that the waveform initial goes from 0V to the minimum voltage (-0.4V). The exact value of the shift parameter required to achieve this depends on your minimum and maximum voltages and can be calculated as follows
shift = 0.5*(volt_max/(volt_max-volt_min)) + 0.5
Regarding your second question. There is currently no way to disconnect the counter electrode via the firmware e.g., via some sort of digital switch. However, this is something I would like to add to a future revision of the hardware design. At the moment your best option might be to physically disconnect the counter electrode whenever you remove the reference electrode.
We don't have DPV implemented yet. However, we did just add squarewave voltammetry (SWV). I will be putting up some documentation on the squarewave voltammetry shortly.
I think adding DPV wouldn't be too difficult. I plan to put together some online notes showing how to implement custom tests by modifying the firmware for the teensy. You could have a look at the implementation of the squarewave test in the Rodeostat's firmware here https://bitbucket.org/iorodeo/potentiostat/src as it will be very similay. See the "firmware/libraries/potentiostat" sub-directory. The squarewave test is implemented in ps_squarewave_test.h and ps_squarewave_test.cpp.
This is with the Rodeostat correct? Going over 100uA shouldn't be an issue. There are four current ragnes +/- 1, 10, 100 and 1000 uA. So ideally you would use the 1000uA current range setting? But even in the +/-1, 10, and 100uA ranges going over 100uA should not cause any damage to the potentiostat or the computer. Your current measure will clip at the limits of the range, but otherwise it should be fine . If you think it might have more than a couple of mA then you might want to take measures to limit the current.
Yes you could definitely use the Rodeostat's teensy 3.2 to control the LEDs. On the Rodeostat PCB there are two 5x2 expansion headers which expose various DIO pins on the teensy which you can use. The ability to toggle the expansion header IO pins via USB commands from the host PC is not included in the standard firmware . So you would need modify the firmware to toggle these pins - to control the LEDs - yourself.
The firmware for the Rodeostat is just an Arduino sketch. so if you are comfortable programming Arduinos modifying it should be pretty straight forward. You could probably quickly hack in this feature by adding a few lines to the SystemState's "updateTestOnTimer" method - just check the time and set desired digital outputs for the LEDs using digitalWrite based on time or the current measurement, etc. The "updateTestOnTimer" method can be found in firmware/libraries/potentiostat/ps_system_state.cpp starting on line 353. With the default settings it is called at 5kHz - so every 200us.