Color sensor achieves high dynamic range with auto exposure

Hamamatsu S9032

Massimo Gottardi


The Design Idea in Figure 1 is a color detector capable of generating an RGB triplet over a high dynamic range, a useful attribute for machine vision applications. The circuit implements auto-exposure control to achieve this. Thus, RGB values for a subject are invariant over a range of light intensity.

Color sensor achieves high dynamic range with auto exposure
Figure 1. RGB sensor with auto-exposure control.

The three common-cathode RGB photodiodes (U1, Figure 2) are reverse-biased and pre-charged to VR (typically 0.5 V) through the three N-channel MOSFETs (M1, M2, M3) when RES is driven high by the µC (microcontroller). After the reset phase, the voltages on nodes R, G, and B start increasing, linearly proportional to the intensity of each color component. These signals feed three comparators (U2) with wired-OR-connected outputs. The first signal reaching the threshold VTH (typically 2.6 V) causes SH to assert through inverter U3A, which strobes the sample-and-hold amplifiers, U4.

Color sensor achieves high dynamic range with auto exposure
Figure 2.  

The held voltages RH, GH, and BH are then converted by the Arduino Nano for further processing. Analog-to-digital conversion could be accomplished by the µC without U4, but the successive conversions would introduce a sampling error among signals. This error is larger for brighter signals because of the higher slew‑rate. Alternatively, a µC with at least three ADCs could be used.

D1 adds brute-force hysteresis to the comparators, and D2 allows the Arduino to define a maximum exposure time by pulling node T2 down, holding the RGB signals. This function is necessary to guarantee a fixed operating rate of the sensor. Figure 3 shows signal timing. At time t1, when R = VTH, comparator U2A pulls low, holding the triplet [RH, GH, BH], to be converted by the µC at the end of the process (TADC). At t2 – the end of the maximum exposure time – the µC sets SH1 low and converts the inputs.

Color sensor achieves high dynamic range with auto exposure
Figure 3. Timing diagram.

Summarizing, the brightest signal among R, G, and B determines the exposure time (t1) so that no saturation occurs on any of the signals. This signal compression enables a dynamic range of about 100 dB using an 8-bit ADC. Moreover, to reach such performance, it is not necessary to tune any circuit parameter.

Figure 4 explains how high dynamic range is obtained through the auto-exposure control. Given a target, for each light intensity, there will be always an exposure time which guarantees the triplet [RH, GH, BH] to be constant:

Color sensor achieves high dynamic range with auto exposure
Figure 4. An example of two RGB triplets referred to the same target acquired at two
different light intensities. [R1,G1,B1] are bright signals, sampled at Ta,
while [R2,G2,B2] are dark signals, sampled at Tb. Since
[R1,G1,B1]Ta = [R2,G2,B2]Tb, the chromaticity of the object does not
depend on the light intensity.

Although fully integrated, digitally-interfaced RGB sensors are available (e.g., Avago APDS-9950, ams TMG3993), they do not implement auto-exposure, and hence may require multiple exposures and µC intervention to achieve such functionality.

Materials on the topic

  1. Datasheet Hamamatsu S9032
  2. Datasheet Analog Devices SMP04
  3. Datasheet Texas Instruments SN74LS04
  4. Datasheet Texas Instruments TLC339


  1. Arduino source code


JLCPCP: 2USD 2Layer 5PCBs, 5USD 4Layer 5PCBs

You may have to register before you can post comments and get full access to forum.
User Name