A device to measure very, very small electric currents, based on DDC112 analog front end

Similar projects worth following
I made a breakout board to test the DDC112 chip while pushing the limits of my electronics skills, from PCB designing and soldering, to FPGA coding. I used KiCAD and followed attentively the datasheet recommendations regarding the precision voltage reference and analog/digital separation in routing. I've interfaced the DDC112 with a TinyFPGA to ease the digital design. I've written a Verilog code to output the data via UART. In a future development of the project (if so), it would be possible to use the USB port on the TinyFPGA. Here is the video I've made (in French) for my YouTube channel :

PLEASE NOTE : there is an oversight in my PCB design : DDC112 digital pins are 5V, and the TinyFPGA are 3.3V and are NOT 5V tolerant (it's a bit not clear on the internet, but the ICE40LP8K specs don't mention 5V anywhere). I'm just lucky my poor TinyFPGA survived this treatment and I hope everything's fine. So it may be ok to use it that way, but be warned! It should be easy to add a logic converter and I definitively will if I ever put some time in this project in the future.

Python code to run on computer (or raspberry pi), to read UART and convert bytes to decimal number in pC

x-python - 598.00 bytes - 11/30/2020 at 03:28


Verilog code, to interface DDC112's logic and output to UART

Zip Archive - 1.05 MB - 11/30/2020 at 03:27


PCB KiCAD design, DDC112 breakout board

Zip Archive - 2.48 MB - 11/30/2020 at 03:26


  • Reducing noise by using jumper wires

    Frédérik Berthiaume03/24/2023 at 21:38 1 comment

    By putting some distance between the FPGA and the DDC112 board, the noise is reduced to about 5fA (100ppm at the range of 50pA). This would mean that either the inductance of the jumper wires act as a filter for the power supply and ground lines, or that EM radiant noise comming from the FPGA is reduced.

    I tried to add a separate 5V power supply form a regulated 9V battery, to see if there was still some noise comming from the positive side of the power supply. With this new setup, the noise is still around 5fA, so no improvement. (Wich is good news, since I don't want to be limited to battery-supplied operation.)

    To further investigate the effect of proximity of the two cards, I put back the FPGA on top of the analog card, and got still the same noise.

    Adding two small inductors ( ~100nH or 1uH, I can't measure the wire inductance with my LCR meter since it's too low) in series with 5V and ground lines (or some kind of choke transformer) would probably do the same thing as the jumper wires. 

    Two things might help : 

    - A better Faraday shielding of the analog portion of the circuit. 

    - Complete isolation from USB ground, wether by wirelessly transmitting data (and power the circuit with a battery), or by using a whole bunch of optoisolators and power isolators. In both cases, it's a project in itself.

    By placing the box inside aluminum foil, I get an alternance of values from -0.012pA to -0.016pA in a regular alternating pattern. If this systematic error was corrected, I would get a noise of about 0.5fA, or 10ppm, wich would be in good agreement of the datasheet (~10ppm at range 1 (50pC) and 50pF of input capacitance). This is probably due to the fact that the two integrators don't have exactly the same capacitance. A background correction could measure the mean of the two signals and correct accordingly.

    This points me to a small bug regarding data transmission. As my code rely on the sending of a \n (ascii=10) character, sometimes I got incorrect length of string because some other byte also have this exact value. I'm not at all constrained by speed of data transfer, so doubling the number of bytes to get all the data seems the way to go.

    The effect of alternating between two charge values is also seen in test mode, with the 13pC charge injected, however the amplitude is greater (0.2pC, compared to ~0.05pC when there is no signal at the input). It would be a good idea to mesure if the correction is relative or absolute. (In case of a mismatch of integrator capacitance, the effect is on gain, so it would be a percentage of the reading.)

  • Measuring performances

    Frédérik Berthiaume03/15/2023 at 19:54 0 comments


    I'm using a ~60pF photodiode, 3x3mm, directly hooked up on the input of the DDC112, in photovoltaic mode (no bias), as indicated in the datasheet. The second input is left floating.

    I'm seeing a bias current input of about -0.15pA on both inputs. The dark current from the photodiode is probably below this level.

    The datasheet specifies a noise of max 6ppm of FSR. At 350pC, this means 3.5fC. I'm seeing a fluctuation of about 50fC, no matter the range used. This points out to some external noise of unknown origin. I guess I could add more shielding around the DDC112 to form a better faraday cage, use a better insulator material for the PCB, and isolate furthermore the analog power supply. Maybe the fact that the 5V digital power comes from the USB port doesn't help. Anyway, finding and adressing the exact source of this extra noise is another project in itself.

    Per specification, at the lowest range (50pC), we should be able to get a noise below 1fC, or in the order of 3000 electrons. It's very small in the electronic world, but very big in regard to camera sensors (read noises in order of 1e-)

    Light sensitivity

    I'm using a white source of known power, settable between 1fW to 10pW. Light is sent directly onto the photodiode with a 1mm fiber optic. The entire circuit is put in a black box to avoid surrounding lighting getting in. With everything in place, I'm seeing about 0.3pA with an input of 1pW. This is well in accordance with sensitivity of about 0.3A/W for 500nm. It's great that I can show that the relationship still holds for this particular circuit at low light levels.

    With a noise of 0.05pA, this means that I can measure light in the range of 1pW to 1nW with a resolution of 0,1pW. Pretty impressive, considering the fact that i'm doing this with a 30$ chip. 

View all 2 project logs

Enjoy this project?



helge wrote 03/25/2023 at 09:10 point

Here are my learning experiences with DDC118:

Call me paranoid, but if you want good results, you'll need shielding and chassis GND that is separate from circuit GND. I ended up adding eight u.fl connectors to the board and it appeared that connecting the shields of all cables on both sides wasn't good enough. That is, it looked like floating the sensor-side ground and adding another shielded can around the PIN diodes (with the shield connected with Cu braid back to the board) made a difference.

If you're looking to build measuring equipment, I'd suggest either sleeving coax with metal braid, or going straight to triaxial connectors altogether. RP-TNC connectors are somewhat affordable, as they're used for WiFi / antenna gear.

Keithley / Tektronix have "low triboelectric effect" triaxial cables for the 2450 / 2470 SMU series, but that's probably where I'd draw the line. The antenna cables one can buy should be just fine as long as they're not moving around and the temperature is allowed to stabilize.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates