yet another picoammeter - Page 1
Forum section: electronics / projects

author: exe
author_rank: Unknown
timestamp: May 14, 2024, 11:58:50 am
content: Here is my take onhttps://www.eevblog.com/forum/projects/picoammeter-design/.Analog part:- LMC662, waiting for LMC6482 so I can replace it- four ranges, with resistors 1G, 10M, 1M 100K. ADC can take up to 3.3V, that gives full-scale range of 3.3nA, 0.33uA, 3.3uA, 33uA.- 1G range is on separate opamp.- PETG (colorfabb HT) 3d-printed enclosure. Hope it doesn't leak too much.NB currently only 1M resistor is used, as I'm trouble-shooting the device.Digital part:- XIAO RP2040 module- Nokia 5110 display (pcd8544)- some random parts from trash binWhat went well so far:- I like the look of it.- Programming was easier than I expected. FW is very simple (micropython).- Still have plenty of RAM so I can implement moar stuff.- Stacking modules and vertical mount worked out well.- Placing analog part on the separate pcb was a good decision, this way I can easily wash it in IPA or ethanol.- ADS1115 (perhaps Chinese clone) works surprisingly well, I've got dead-on output. Checked by sampling voltage of LT1004-1.2What is not going well:- I put LMC662 on a breakout board so I can replace it (soic package). But I screwed it, the board is soldered to the main board somehow.- I have another LMC662 in DIP package. So, I wanted to do air-wiring. But I bent the wrong pin on it. Hope I can fix that.- I don't have gloves, so I touched with my fingers all the sensitive nodes in the circuit. I hope I'll be able to clean it with IPA and ultrasonic bath- I damaged ADC pcb while resoldering pin-header. Ordered another board. Also ordered original ADS1115 IC.- The display show image flipped. It seems neither display (pcd8544) nor driver (micropython's framebuf) cannot flip it for me. I have to do it manually somehow.- sockets have holes. I'm afraid dust will get into the device. May be I'll change sockets one day.Now the biggest issue. Unfortunately, the device doesn't work. Troubleshooting it. What I observe is, there is 50 Hz output oscillation rail-to-rail. I hope it's just a bad solder join somewhere. Stay tuned!

author: exe
author_rank: Unknown
timestamp: May 14, 2024, 01:17:26 pm
content: I fixed the issue, I forgot to connect noninverting terminal of opamp.So, first results are semi-promising, connecting an 1.3V battery via a 1M resistor got me 1.3uA, this is good). There is a lot of noise, esp. when I connect long lead. So, I'm converting to battery power now.I've got an issue however:- with all wires disconnected it reads 4nA. But if I short-circuit the input, it reads 600nA. But if I short with 1M resistor, I got 17nA reading. Why is that? I was thinking, can it be because I use single supply for TIA?

author: Phil1977
author_rank: Frequent Contributor
timestamp: May 14, 2024, 01:39:36 pm
content: Just a few comments:- SOIC-8 on an adapter board is difficult for pico ampere applications. I suppose you always have some solder residue between the pins that´s not accessible for solvents or cleaning. I would strongly recommend using the DIP-type with free-air-wiring for the high impedance input.- What do you mean with "single supply for TIA"? AFAIK the operation near the rails is never as good as with a more or less symmetric supply. If you want to keep the single supply I would use a second opamp to generate a virtual ground above 0V.- Battery operation is always a good idea to start with- Maybe it´s even an idea to start with two batteries, one for analog and one for digital. Use only one low impedance connection between the two circuit partsIf you manage to keep the inputs clean the LMC662 is really a lot of fun. Once I did a setup on the breadboard with a free-air wired 150pf Styroflex cap and the opamp just as a follower. After charging the cap with an external source and disconnection the source and going 3m away from everything the output voltage was rock stable on a 4.5 digit DMM. If you let the non-inverting input float you nearly have an electron counter.

author: exe
author_rank: Unknown
timestamp: May 16, 2024, 11:12:43 am
content: I agree that DIP package is better. It's just it wasn't available from lcsc.> What do you mean with "single supply for TIA"? AFAIK the operation near the rails is never as good as with a more or less symmetric supply. If you want to keep the single supply I would use a second opamp to generate a virtual ground above 0V.I think the only real downside of going with a single supply (+5V battery) is that it seems theoutputdoesn't swing quite well to zero, this will create problems at the bottom of the range and reduce dynamic range. I'm checking on that. As of input, it seems they are fine to accept even slightly negative signals at the cost of increased input bias. I can only speculate that this is because of internal guarding not working near rails.I'm also concerned that input offset voltage will create a "deadband" at low currents. Although, with bipolar supply the output may go slightly negative, and I'm not sure if ADC can measure that. I'll check.BTW, I think I know why I have "huge" current when I short the inputs. I simply should not do that). The TIA input is approximately at ground, but not exactly due to opamp's offset voltage. When I short inputs, this cause current to flow.

author: exe
author_rank: Unknown
timestamp: May 27, 2024, 07:28:41 pm
content: Wee, it works!So, I just put 100M resistor, single range, didn't clean pcb or anything and I've got no-input current of 5pA (5s average, 20 samples). No adjustments or calibration, anything. Just raw ADC value that corresponds to 5pA. I think it's a success). I don't know if it's flux leaking, opamp's offset (I used LMC662, haven't switched to LMC6482 yet, and not sure it's worth it), or both. 5pa on 100M resistor corresponds to 0.5mV input offset, that below LMC662 typical offset of +-1mV.Now onto measurements. I'll spare your time, I'll just show measurements of 10G resistor (real value unknown, I don't have equipment to properly measure it). So, I connected 10G (+-5% from aliexpress) resistor in series with 3.305V (as measured by my never-calibrated ut61e) CR2032 battery. Ohm's law says current should be 330pA. My device says 356.6pA. Considering long leads and no calibration, I'd say good-enough.One of the challenges was to write firmware. Not a rocket science, but took much more time than I expected. Had a lot of pitfalls, like rotating the screen. Spent a whole day optimizing it (display driver doesn't support change of orientation).There are a lot of improvements that can be made. Like, logging or wireless capability. I think what I'll try to do is I'll try to clean the pcb in IPA. I also may swap opamp.Now things that didn't go well, but I managed. Split supply. It was more complicated than I thought. So, it works like this, 9V battery stabilized to some 6.5V with AMS1117. Then there is tlv431, shunt regulator that creates virtual ground. It creates offset ~1.25V. So, the supply is roughly some +4.5/-1.25V. I had to use tlv431afta from diodes inc, as it's stable into capacitive load. TI part probably won't be stable. I also originally put LM317L for virtual ground, but I realized it cannot sink current.Now some nasty details. I think total supply current going through tlv431 is about 25-35mA (RP2040 is hungry, and display backlight too). That's quite some current, and it exceed maximum ratings for tlv431, which is 20mA. But hey, it works). I also burned one ADC module along the way, probably my first IC that I accidentally killed.I planned to have four ranges, and an encoder. But it looks like I'm happy with just single ~40nA range, as everything above that I can measure with my trusty nanoranger. It's only the sub-nA range that I need better tooling.There is no shielding. I thought I'd fix it somehow after I finish construction. But now i'm not sure how. Can I just glue some aluminum foil around and call it a day?

author: exe
author_rank: Unknown
timestamp: May 28, 2024, 05:30:14 am
content: Two things I figured out since last post:- my presence greatly disturbs measurements. I have to be one meter away when measuring sensitive stuff. I also twisted the cable, that helped a lot too.- the cable I was using is leaking in the order of some 50pA. I replaced with with a ptfe cable.With that, my 10G actually measures pretty close to 10G, in the range of 9.96-10.1G.I need to repeat measurements with a shield.

author: Gyro
author_rank: Super Contributor
timestamp: May 28, 2024, 09:02:27 am
content: I'm impressed to see how far you've managed to get without any shielding. I guess the need for distancing is the penalty you're paying at the moment. I was able get to the single pA level with my fully shielded implementation with the input BNC open, but I had to put copper foil over the end (non shorting obviously) to get down to the single digits fA level on the bench.It's good to see that you are already achieving useful results (including seeing the cable leakage!).

author: exe
author_rank: Unknown
timestamp: May 29, 2024, 12:06:04 pm
content: Thanks, Chris!Forgot to mention a few tricks. You may wonder how I got picoamp resolution with 16bit ADC (really 15 because my signal is unipolar) and 40nA range.For 40nA range and 1pA resolution it would need 40000 counts ADC.What I do is two things: 1) averaging 2) switching ADC range. With averaging and plenty of noise I can get an extra bit or two. Currently I average 20 samples over 5 seconds, that gives me, in theory, 4+ extra bits. In practice I need ether shield things (may be even internal digital circuitry too, though I chose RP2040 board with a shield), or do longer duration as there is quite some noise. The noise (MAX-MIN value) is displayed as "P-P RAW". It is calculated on raw ADC value.The second trick is do ADC autoranging. ADS11115 has six ranges, from 0.256V to 6.144V. In firmware, I pick roughly the best range with some hysteresis. Took me a while to debug it, but I'm happy with the result. It currently changes ranges sequentially, although down-ranging can be made faster by skipping ranges if measured values is too low. This way I can measure up to 0.256V with 15 bits resolution. With this, LSB is just 7.8 uV. If only it was less noisy)What's next. I think I won't do much with this project (except may be a small improvements like adding bluetooth to do remote measurements), as I have ideas how to make a proper power supply. Because what I really need is a small SMU, rather than just TIA. I mean, I need to apply voltage to DUT and plot VI curves.PS careful reader may notice that the second opamp is not used and inputs are not connected to anything. Probably it oscillates and may also contribute to noise :/. I'll ether short it, or make it a 10G range.PPS including the photo of the device in the night the day I finished building it. I think it looks sexy)PPPS wow, I just put the TIA into the metal drawer, and that reduced noise a by a factor of ten. I've got 80-100uV p-p noise from ADC (when leads are disconnected) comparing to 2mV that was before. More precisely, it measures +-6 counts (12 p-p) on 0.256V range. There is wifi router on my table, so I think the result can be further improved.

author: pardo-bsso
author_rank: Frequent Contributor
timestamp: May 29, 2024, 01:56:28 pm
content: Quote from: Phil1977 on May 14, 2024, 01:39:36 pmI've seen a few times smd ic's where the board has a complete cutout for them and just the leads are soldered.What's your opinion on that in an application like this one?

author: Wolfgang
author_rank: Super Contributor
timestamp: June 02, 2024, 04:30:46 pm
content: Have you ever asked yourself why all picammeters in the industry are heavily shielded ?

author: exe
author_rank: Unknown
timestamp: November 09, 2024, 10:54:30 am
content: About noise. I tuned software a little bit, and I noticed that readings are quite solid. So, I was curious how much noise I have.The ADC peak-to-peak noise after 20 measurements is 12 counts (ADC has 32768 counts full range). The range is 0.256V. This gives p-p voltage noise: 0.256V/32768*12=94uV. Across 100 Meg shunt this translates into 94uV/100Meg=0.94pA noise. Quite impressive, imo.Because of this I added one more digit when displaying the average value, giving me resolution of 100fA! Even more impressive, the last digit is almost rock-solid after 1 minute warmup. It displays 3.9pA for the whole time I'm writing this post. I can't be happier with my device. I was hoping to measure tens of pA at best, but got much more.In case you are curious what's on display. The first row is latest reading (nA). The second row is average value (nA). The third row is current ADC range. Forth row shows two numbers: last adc raw reading and p-p ADC noise over 20 samples (it's not a sliding window, stats are reset every 20 samples). Last row displays uptime in seconds and sample number and how many samples are used for averaging.

author: exe
author_rank: Unknown
timestamp: August 29, 2025, 04:51:01 pm
content: After reading the whole picamp thread () I decided that measuring picoamps is not that difficult and I can upgrade my picoammeter with a higher shunt resistor. So, I replaced 100M with 10G.How would I verify that it worked out well? Well, I measured a current through another 10G resistor biased with a coin cell. The coin cell voltage is 3.293V, and the current is 0.32765nA or 327.65pA. So, it gives 10.05G resistance. Oh, nothing is calibrated, Given the 5% tolerance of resistors, and the price of less than euro per piece, I'd call it a success). The link is below in case you want to buy the same part. With inputs disconnected it shows 150fA current (Idk how much of this is opamp offset and how much is leakage).The noise is also lowered significantly with bigger resistor (as predicted by our senior eevblog engineers in that picoamp thread). Now it's 17 ADC counts, or 0.256V/32768*17= 132uV p-p. Across 10G resistor that is 0.0132pA, or 13.2fA. So, almost 100x lower with resistor 100x larger.Interestingly, the whole system is not calibrated in any way, nether offset, nor full-scale. I didn't even clean the board from flux, there is no guarding or something. Just parts from aliexpress.1.https://www.eevblog.com/forum/projects/picoammeter-design/350/2.https://nl.aliexpress.com/item/1005005494343641.html(I'm not affiliated with this anyhow)

author: MariuszD
author_rank: Regular Contributor
timestamp: August 29, 2025, 07:38:45 pm
content: The input cables pick up more hum than the board. If a screen is used, it should be for the entire measuring circuit. Another way is to limit the amplifier's bandwidth further. Averaging the ADC results works correctly only if the noise is within the range that the amplifier and ADC process linearly. If the amplifier or ADC is limited to positive voltages only, the averaged noise will result in offset.

author: exe
author_rank: Unknown
timestamp: August 29, 2025, 07:58:14 pm
content: Yeah, I'm not 100% confident about measurements close to zero. I'll try to test that separately to see how ADC behaves at slightly negative voltages. I actually want to build another device with bipolar ADC.BTW, I recalled I have a reference 10G resistor from Alex Nikitin (https://www.eevblog.com/forum/buysellwanted/fs-(ukworld)-7-decades-(10k-to-10g)-resistor-set/). The calibration label says it's 10.00G resistor. I measured it, it9.828G, about +2% difference. I'm happy about that). Assuming that the reference resistor is true 10.00G, it means internal tia's resistor is 10.175G.EDIT: resistor was measured as 10.00G, not 10.000G. Corrected in the text.

author: exe
author_rank: Unknown
timestamp: September 02, 2025, 02:09:44 pm
content: I had a lot of issue when tried to measure currents below 10pA. Measurements were all over the place, and numbers didn't make sense. So I decided to verify performance of my device by measuring "calibrated" 10pA current. The current source is a 10G resistor supplied from 0.1V.The first problem was that if a high-impedance cable is near the display, that would screw measurements. So I put it as far as possible, that reduced noise dramatically. Then I had fix software bugs, somehow averaging and noise calculations didn't work well, I fixed that.Now onto measurements. When measured+10pAI got values in the range of9.95-10.00pA,noise 0.17pA p-p. Good-enough for me.Next, negative current,-10pA(I just swapped leads). Since ADC is unipolar, that was the measurement I was worried about, as @MariuszD indicated earlier. I got-9.6pArock-solid, and no noise. This suggests that ADC cannot measure below -96mV. But that's already very good, I'm happy about that. The datasheet says that ADS1115 cannot measure below ground, but, apparently, it can. I wasn't able to find much information if delta-sigma ADCs can measure below ground. Only in an AD's appnote they mentioned that, unlike SAR, sigma-delta can go below zero. Also the datasheet for MCP3422 says the signal can go below ground, but ESD diodes will conduct. So, while not documented, ADS1115 can measure a little bit of negative voltage- https://ww1.microchip.com/downloads/en/devicedoc/22088c.pdf

author: exe
author_rank: Unknown
timestamp: September 02, 2025, 02:22:24 pm
content: I also checked offset and noise performance with leads disconnected and after a couple of minutes of warmup.So, the static offset is was +1fA when I switched it on, then it slowly drifted to +5fA in the next 5 minutes. Now it's slowly oscillating between 4 and 5fA. May be it's reference voltage noise? 1fA corresponds to 10uV at ADC's input.The noise 11fA p-p. So, kinda good. But the settling time is very long, I have to wait minutes until it becomes stable to within +-10fA.

author: exe
author_rank: Unknown
timestamp: September 02, 2025, 07:00:49 pm
content: I tried to measure 1pA current (~10mV across 10G resistor). I got this:+1pa: 1.07pA after 15minutes, 1.03pA after 30minutes, 90fA p-p noise-1pA: -0.96pA / noise 30fA p-pUnfortunately, it takes like 5-15 minutes for numbers to settle. I think the current device is marginally suitable for currents below 5pA. I'll try to reduce display updates to see if it helps with the noise.

author: exe
author_rank: Unknown
timestamp: September 03, 2025, 03:37:46 pm
content: I repeated my measurements without any source attached and results were inconsistent: drifts and offsets up to -0.45pA, and increased noise. I decided to clean the board with a cotton swab and cleaning fluid (pcb cleaner, IPA+acetone or something). It might be related to increased humidity.After cleaning and drying the offset changed to +0.08..0.150pA (slowly drifting), and noise reduced significantly, back to normal. So, I might contaminated the board somehow while doing my experiments, or it absorbed water from the air. Unfortunately, the board is impossible to properly clean without fully submerging into solvent. I'm not sure I want to do that, at least with current board. I consider making a new version of the device, with proper PCB and better components.