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.
@Will-Dickson Thank you so much for the suggestions. I could make it work with the AVRISPMKII programmer. Also, your modified firmware, especially the makefile was very helpful and made my work absolutely easy. Thank you once again.
After buffering the data, the limitation in sampling frequency appears to come from the testTimer function. This function has a specific runtime, and runs on a timer interrupt. If the timer interrupt's period (testTimerPeriod in ps_constants.cpp) is smaller than the actual time it takes for the function to run, the function does not run correctly, yielding incorrect and strange results.
For those looking to increase their sampling frequency, this seems to be the next bottleneck after the data streaming. Perhaps some alteration/optimization of this function could increase the sampling rate slightly, perhaps not.
Ultimately, to increase the sampling frequency of the Rodeostat, you can:
Decrease MinimumSamplingPeriod within ps_constants.cpp in order to remove the software limitation on sampling frequency
Remove calls to convertMstoUs in ps_periodic test and in ps_system_state.cpp, allowing for periods to be passed directly in units of us, rather than being limited to a sampling period of an integer in ms
In serviceDataBuffer (in ps_system_state.cpp) , modify the function so that it does not transmit data until test done flag has been set (by putting an if statement around most of the function).
With this we were able to achieve higher than the stock sampling frequency for a small number of periods (this was limited by the memory, since the data buffer would get filled with too many points since we did not clear it until the end). Unfortunately, high frequencies like 10kHz or 100kHz did not seem to be reachable.
In addition, thank you @Will-Dickson for your help figuring this out.
The values returned are the raw integers read from the ADC (analog to digital converter) on the output of the transimpedance amplifier (current to voltage converter). You will need to convert these integer values to current measurements e.g. uA. While it is possible to do a first principles calculation using the values of the feedback resistor in the transimpedance amplifier it is generally better to just do a simple calibration using a dummy cell consisting of a single resistor (of known value R).
The basic idea is to connect the counter and reference electrodes to one side of the resistor and the working electrode to the other side. You then want to sweep the voltages through a range of values - e.g. via a cyclic voltammetry test. Because the resistance R is known for each output voltage v(t) in the test you can calculate the current i(t) = v(t)/R through the resistor. At the same time you have the measured ADC integer values n(t) corresponding to this current. To get the calibration you can just perform a linear fit between the ADC integers n(t) and the know current values i(t).
When performing the calibration test make sure to select an appropriate resistor. You want to generate currents which span the input range (for current), but don't go outside of it. The transimpedance amplifier can't generate voltages higher then 3.3V or lower than 0V - so if you go outside of the current range you will get clipping (or saturation) of the output which will show up as a flat spot in your calibration data.
Oh gosh, you are right! I’m sorry for the delay but I was very busy. I have never thought to rotate the LED matrix because I thought I was right with that (otherwise, if not, no LED would have turned on). Thanks very much! I also take advantage of you for another issue. I have tried to load the arena configuration on the SD card but PControl doesn’t let me do that. Have you any suggestion? It seems that the controller doesn’t communicate to the SD nevertheless at the beginning (when the controller is switch on) PControl finds and initializes the SD card. I’m sorry because of all these questions!
At this concentrations, it should not be too much of a problem to measure Pb, even though GC electrodes are not very sensitive. Is -400mV a low enough potential to accumulate Pb onto the electrode ? Have you tried at -0.8V?
Also, I don't know if there is Cu in your solution but I remember having some disappearance of the Pb signal with addition of Cu.
If it doesn't work, maybe try a gold electrode which is a bit more sensitive to Pb. Or maybe modify your GC electrode by depositing some bismuth on the surface.
Corrosion monitoring and analysis usually takes a large dynamic range (eg polarization curves etc.) or requires measurements with respect to open circuit (LPR, EIS , OCP-monitoring). These are not well-suited to the current version of cheapstat.
It looks like the RTL8195 has 3.3V IO. The potentiostat shield powers the MCP4261 with 5V. So you are connecting a 3.3V device to a 5V device - I think. I'm not sure if the IO pins on the RTL8195 are 5V tolerant, but you might want to check. Could be related to you issue.
Note, the MCP4261's could be powered off of 3.3V. They have a pretty broad allowed input range 2.7 - 5.5V. This would require cutting one trace - the one going to the 5.5V on the shield - and rerouting this trace to to the 3.3V pin.
Below are some images of the green LED transilluminator we designed for a custom application using the superbright green LEDs I mentioned earlier. The enclosure is the same as the blue version, we just swap the 470 nm LED for the superbright green LED. A diffuser and green filter is placed over the LEDs as I mentioned.
The red viewing filter that sits above the LED board is actually a thin film Roscolux #26 filter which we laser cut.
Because it is thin, we have to support it. We can do this using a black frame.
Let me know what you think and whether this would work for your application.
We would be able to ship approx. a week after ordering. The lead-time would be on purchasing the LEDs from Superbright. Once we receive the LEDs we would ship 1-2 days later. The cost would be $225 for the fully assembled version with the 18V power supply. So it would be ready to use. I can send you a formal quote if you want to send me an email with your shipping info to email@example.com.
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.