Photodiode at 10KHz -- improving signal-to-noise ratio?

Hello: I have been able to read from a photodiode at 10KHz, but there is a lot of noise in the light readings. I've made sure to also test steady-light sources (e.g. LED connected to battery) but there is excess noise.
I would like to know how to configure the Arduino:

-- To make light response as linear as I can
-- To make light reading less noisy
-- To function with visible light

It is currently a BPW34 photodiode. I have used a 100Kohm POT to try different resistance values, and I get reasonable results, but there is still an extreme amount of noise in the readings. How can I go around reducing the noise?

Thanks,

can you post your schematic?

is there a large distance between the LED and the Photodiode?
can other light enter?

In order to get a good signal at frequencies as high as 10kHz, you will need an effective load resistance very much lower than 100K. I used a photodiode to look at a 38kHz IR signal a while ago. For that application, I made a circuit that presented a low impedance to the photodiode and also provided a current sink that automatically took care of the current due to ambient light, so that it could be more sensitive to the 38KHz signal.

robtillaart:
can you post your schematic?
is there a large distance between the LED and the Photodiode?
can other light enter?

Apologies, you right, I should have.
It’s just one photodiode and one resistor, connected in the most common arrangement. +V to photodiode, photodiode to resistor, resistor to ground. Then the middle between photodiode/resistor goes to A0 on Arduino. Someone recently recommended I should add a capacitor; that made sense, but I’m not sure which capacitor size to use.

Full contact with light source.
It is still noisy even if no other light enters.
And, it is very noisy even in total darkness.

Should I be using a higher-quality photodiode? Essentially, I need high-frequency visible-light intensity measurements without noise (at least at the sampling rate of 10 KHz).

dc42:
In order to get a good signal at frequencies as high as 10kHz, you will need an effective load resistance very much lower than 100K. I used a photodiode to look at a 38kHz IR signal a while ago. For that application, I made a circuit that presented a low impedance to the photodiode and also provided a current sink that automatically took care of the current due to ambient light, so that it could be more sensitive to the 38KHz signal.

That's why I used a POT, to try to give me an adjustment range.
However, your circuit sounds interesting. I'm using visible-light rather than infrared, as I need to be able to measure visible light intensities (direct contact with light source) at a high frequency.

I'll check on the low impedance ideas throughout the Net, but got any recommendations to jumpstart me?

Are you sure that the photodiode is connected the "right way around" i.e. reverse biased? If it is forward biased, current conduction leads to a lot of noise.

jremington:
Are you sure that the photodiode is connected the "right way around" i.e. reverse biased? If it is forward biased, current conduction leads to a lot of noise.

New things I tried:
--> I thought of this too, but that's not it. It was correctly connected.
--> I replaced the POT with a 4.7 kilohm resistor, and I'm getting slightly better results. I think the POT was creating some of the "noise".

However dark noise remains unchanged, in total darkness I'm getting analogRead's that varies upwards/downards by full 5 counts or so. What could be the source of this kind of noise in darkness? Current leakages, etc? Are there better-quality photodiodes I could try than BPW34s? (I tried two, just in case one of my BPW34's was defective).

Things to try:

4.7 K seems low for the biasing resistor on a photodiode. Depending on light levels try 100K or 1M. Given the 70 pF capacitance of the BPW34 diode, a 100K bias resistor should permit flat frequency response to over 100 kHz.

Make certain that the power supply is adequately decoupled. You should have good resistor/capacitor decoupling between Vcc and the photodiode or bias resistor as shown here: http://www.thorlabs.us/tutorials.cfm?tabID=31760

Finally, a transimpedance amplifier should improve performance, e.g. http://www.ti.com/lit/an/sboa061/sboa061.pdf

-- To make light response as linear as I can
// You should understand, that arduino has 10-bit ADC, and "linear" region would be limited to 1:500 (approximately).
That is quite low for lighting, where log scale quite common, and up 1: 1 000 000 000 dynamic range required.
Options, external ADC or switchable PGA - programmable gain amplifier.

-- To make light reading less noisy
// Why do you think SNR you have is too high? What kind of reading you expect and receiving?
How fast response do you need, 1 second, 1 microseconds?

-- To function with visible light
// Probably, diode's sensitivity in different part of spectrum (visible 0.38 - 0.75 um) would not be equal, have you seen diagram for this specific diode ?

I agree with dc42: use an opamp to present a low impedance to the photodiode and to convert the current to a voltage.

http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/photdet.html

The noise figure is related to the bandwidth.
What spectral bandwith do you need : 0 Hz to 20 kHz or 10 kHz + /- 1 kHz ?

More bandwidth will be narrow more noise will be low.
Try placing a low-pass or band-pass filter.
The more simple is a low-pass ( a resistor and a capacitor) at the output of the amplifier.

The photo-diodes are wired in two ways:

  1. for highest sensitivity use the photodiode in a “photovoltaic mode”
    2.for fastest response and greatest bandwidth use the photo-diode “photoconductive mode”

Do search for above modi schematics, in each case you need an amplifier..