Photodiode response time

Hi all,

I’ve made a simple circuit using a photodiode (TEPT5700) to detect a white flash from a projector (i.e. a black video with 40ms of white video every 3 seconds). This is the circuit:

I need to detect the rising edge of the white projected video image (i.e. transition from black video to white video) within 1ms of it appearing. This is where I have an issue as the rise time of the values read from A0 is very slow. Here is a graph showing this (the blue line is the 40ms of white video and the red line is light from my phone torch as a test):

The ambient light reading from A0 is about 70 and should jump to over 300 within 1ms at t=0. The response time of the Arduino analogue input is 100ns and photo diodes are meant to be significantly quicker than that so I’m not sure why it’s taking so long to reach a peak value. Does anyone have any idea why this may be?

For reference, this is the simple code I used to make the graphs:

#include <Wire.h>

const byte DiodePin = A0;

void setup() {

  Serial.begin(9600);

}

void loop() {

  if ( analogRead(DiodePin) > 75 )
  {
    Serial.println( analogRead(DiodePin) );
  }
}

Thanks,

Mark

schem.png

Increase the serial baud rate and see what you get. Serial.print at 9600 takes a millisecond per byte.

Thanks groundfungus. However I'm only using Serial.println in the loop for testing purposes. In my main program I only use it to print a single value for every flash of white. (Also I did try increasing it out of interest but all I get is a stream of random characters - looks like it can't handle anything higher than 9600?).

Mark

You need a better circuit. You will probably want to use the photoconductive mode, page 13 of this PDF:

http://ecee.colorado.edu/~ecen4827/hw/hw1/PhotodiodeAmplifers.pdf

looks like it can't handle anything higher than 9600?).

Did you change the baud rate in serial monitor?
You can get samples faster by reading the analog pin into an array and printing the array after a series of samples have been acquired. Use blink without delay to get samples at a known rate.

Note the following from the ATmega328 data sheet. The rise time of your circuit is limited by the high impedance of the detector, so you might try using a buffer amplifier, as in the very useful PDF linked by polymorph above.

The ADC is optimized for analog signals with an output impedance of approximately 10 k? or
less. If such a source is used, the sampling time will be negligible. If a source with higher impedance
is used, the sampling time will depend on how long time the source needs to charge the
S/H capacitor, with can vary widely.

The TEPT5700 is a photo transistor and not a photodiode.
See http://www.vishay.com/docs/84154/appnotesensors.pdf for some example schematic and info on how to use them.

In general photodiodes have faster response times than phototransistors, particularly the TEPT5700 is not aimed at fast response time but more as an ambient light sensor. The datasheet doesn't contain any spec on response time.

Have a look at the Vishay selection guide, there are a lot of alternatives. For those ones rise/fall time are specified, so you can make an appropriate choice. http://www.vishay.com/docs/49495/_sg2123.pdf

Beside Vishay there are of course a bunch of other manufacturers

Thanks all for the replies. I will try buffering the analogue input first and if I don't get anywhere with that I will try an actual photodiode (I bought the TEPT5700 on ebay where it was wrongly described as a photodiode!).

Did you change the baud rate in serial monitor?
You can get samples faster by reading the analog pin into an array and printing the array after a series of samples have been acquired. Use blink without delay to get samples at a known rate.

Good point, I didn't change it in the serial monitor. Good to know that this is possible.