Last week I did a blog where I looked at the response of an LED to light: Experimenting With Using an LED as a Light Sensor . I thought it might be interesting to extend that a little bit further.


As before, the input is a reverse-biased LED acting as a photodetector. Again, I'm going to use an op

amp as a transresistance amplifier (this time a Microchip device that can operate on 5V) but, for a bit

of added interest, instead of generating an output voltage that's linear with diode current I decided

to generate the log of the current. Whether that was a good idea, we'll see in a moment. In theory this

should give a larger dynamic range, though we shall have to see whether I can actually make use of it

[it will depend on where the dark current falls on the scale].


My starting point was a quick simulation, just to check whether what I was thinking of would work in



Here's the simulation circuit. It is somewhat messy because it is just how it was slapped together; I

wasn't really thinking about anyone other than myself looking at it.


I've got a current generator (IG1) placed where the LED would be to act as a substitute. It isn't going

to behave quite the same because a somewhat better model for a photodiode would have the device

capacitance in parallel with the source, however I just want to look at the logging here, so it won't

matter much. The component that does the log conversion is the transistor (T1) in the amplifier

feedback path that is wired as a diode. The voltage across the 'diode' will be proportional to the log

of the current and that operates over quite a wide range. That diode voltage adds to the 2.5V voltage

source which, in the final circuit, I'm going to construct with a TL431. To condition the output of the

first op amp I've got the second device in the package connected as a differential amplifier, measuring

the difference between the 2.5V reference and the output and multiplying it by ten. That will then give

a signal referenced to ground.


Here's what the simulation looked like. For the current generator, I had constructed a custom waveform

that stepped the current up by a decade after each second. The other trace shows the output of the

differential amplifier. The transistor is doing the log conversion, but without a great deal of

accuracy. At the low end, it all runs out of steam at a few pA.



Although that looks reasonable on paper, in some ways the op amp and transistor are too good. Since

they're responding and developing an output from the single-digit picoamp area upwards, my problem is

going to be the dark current of the LED [the leakage through the device when no light is falling on

it]. That's probably going to be up in the nanoamp region, so half the range here may be useless as the

current will never be down in that first two or three decades.


Rather than worry about that, I decided to build the circuit anyway so that we could see how it behaved

as a physical prototype. It's not many components and didn't take long to construct.


Here is the circuit



I haven't shown it on the diagram, but I've also got a 100nF ceramic capacitor directly between Vss and

Vdd under the op amp package.


Here is the board with the components on it:




If I try it out with the Arduino UNO, driving an LED at 500Hz, that I used in the previous blog [the

LEDs are inside a small cardboard cylinder to keep out the ambient light], I get this waveform



As suspected, if we compare the bottom level of the waveform to the voltage levels from the simulation,

the dark current looks like it's around the 5nA area. But there are several problems with my circuit.


The rise time




isn't too bad (a couple of microseconds), but the fall



takes a much longer time because there's nothing to discharge the small photodiode capacitance other

than the leakage [the op amp will be trying to pull it low, but it's defeated by the transistor 'diode'

reverse biasing].


The second problem is that it is very sensitive to mains voltage capacitively coupled in. That's the

variation that you see at the bottom of the waveform. The boards are on top of an old cardboard

shoebox, to get them away from the anti-static mat which I know couples signals into sensitive circuits

[it's a cheap rubbery mat with a fairly low resistance], but there's still enough coupling to the

equipment on the bench for it to show.


This is the output with the UNO board turned off, so just the dark current in the sensor LED with added mains.



And this is with the palm of my hand an inch away from the LED. Obviously my body is good at picking up

mains and coupling it to the circuit.



The final problem is that I have slightly too much gain and it's close to limiting at the rail at the

top [the level from pointing the LED at the sun, through a window, was hardly any different to that

from the test LED].


So, in many ways, the logging turned out not to be a particularly inspired idea.


Update 17th April


Since I did the blog, just out of curiosity I've tried a simple shield around the sensitive bits. It's made from a piece of

flexible PCB material: thin plastic with a copper layer bonded to it. It's connected to the ground, but it's open one end,

so doesn't form a complete cage. Here's what it looks like:



That gets the mains noise down to this on the dark current level



With my finger on the end of the sensor LED (so a bit closer than the unshielded one above), I get this



The chip in the LED on its cup can still sense the outside field, even though it's a few millimetres below the copper

level, but it's better than before.


If you found this interesting and would like to see other blogs I've written, a list can be found here: jc2048 Blog Index