SB-800 measurements

The setup

Top trace is sensor 1: a photo diode from a CD-ROM drive in series with a 9k resistor. The voltage drop across the diode changes logarithmically with the light level (in theory). The lower the voltage drop, the more light. This voltage drop is measured via a 1X probe (BW app. 15MHz) with a Tektronix TDS 220 oscilloscope (AC coupling).

Bottom trace is sensor 2: a light sensitive capacitor (the self discharge rate is higher when the light level is higher). If it receives a light pulse, it discharges, and is recharged via a 10 ohm resistor in series with the capacitor. The voltage across the capacitor is measured via a 10X probe (BW. 250MHz) with a Tektronix TDS 220 oscilloscope (DC coupling).

Both sensors are connected to a 5V linear regulated lab supply. The power supply is buffered on the PCB of both sensors via a few electrolytic and ceramic capacitors.

No attempt was made to measure absolute amplitude. Since this is depedent on slave position in real live, I can't imagine that absolute amplitudes are of any importance. Differences in absolute amplitude between measurements are because of different flash positions (it was handheld).

The scope was set to trigger on the falling edge of the first sensor. The first sensor produces proper pulses and makes it easy to see amplitude (although it remains to be tested how accurate this is), the second sensor was the first I built. It has the advantage of lower noise (because the voltage varies between 0 and 5V instead of between -0.10 and 0.02V), but is harder to read because every flash pulse initiates another exp(-t/RC) curve.

Below is a picture of the setup, on the left is sensor 1, sensor 2 on the right (the PCB's with a handful of components). The red and black wire from the right are the 5V DC wires from my lab power supply. The oscilloscope probe is connected to the photodiode, which is on the green PCB I removed from a CD-ROM player. Sensor 2 is not connected in this picture. This clearly shows that this is not like an HF optical probes as sold commercially, and doesn't have the same sensitivity or bandwidth.

Coding and channel encoding

All measurements in this group were with one SB-800 on my D70. It was set to master mode, without contributing to the exposure (mode --- for M). Only group A was turned on, at Manual 1/128. The purpose of this test was to see how the channel number is communicated.

Channel 1

Channel 2

Channel 3

Channel 4

My hypothesis based on these graphs is that the channel number is defined by the interval between the first three pulses. There doesn't seem to be a consistent difference between pulse amplitudes, and it would make sense to send the channel number first (so the flashes know if they have to listen).

Below are the intervals between the first three pulses. Unit is some relative unit from the software (I believe a rectangle in the images is 25 units high and 250 units wide).

Channel numberInterval between pulse 1 and 2Interval between pulse 2 and 3
178116
211277
3114115
477186

This looks like a sort of binary/trinary encoding:

101
210
311
402(?)

...

Since sensor 1 seemed to perform better than sensor 2, and since sensor 2 made the power supply less stable (it drew a lot of power during a flash burst), I stopped using sensor 2. To decrease the amount of noise (low noise isn't one of the virtues of my oscilloscope), I limited the bandwidth to 20MHz (which is still overkill).

To illustrate the problem of measuring pulse width, here's a close-up of the first pulse with the same camera/flash settings as channel 4 of the previous section. The pulse width is about 340ns in this case (measured at -50mV).

To give a better picture of the complete process of the flash, I did a few measurements where I captured everything including the main flash. The purpose of these traces is not to analyze it in detail, but to get an idea when communication and pre-flashes take place.

This was with SB-800 on camera, in TTL-BL mode, exp. comp -3 and flash a few centimeters from the sensor to avoid the main flash from obscuring the pre-flash. The first peak is the pre-flash, the shorter peaks after it look like oscillation, and the wide peak is the main flash. The main flash fires about 23us after the pre-flash, and the flash duration is 34us (or 1/29000 second).

This was with one SB-800 on camera, set to master mode, master in TTL, group A in TTL, no actual slaves. The first bunch of peaks are the communication before the pre-flash, the last peak is the real flash, and the bunch of peaks just before the last are probably the information from the pre-flash (results for TTL metering). I'm not sure how many of the four seperate peaks are communication or pre-flash. I'd imagine you use a seperate pre-flash per group to figure out which groups illuminates what part of the picture, just like a human with a flash meter would do in a studio (meter all strobes individually).

This is the same setup as before, but with all three groups set to TTL (still no slaves). The timebase setting is about twice as slow, so there's clearly more going on. Comparing it to the previous, I'd guess that the first bunch is initial communication with the slaves, the peak at 100ms is the master pre-flash, then three sets of peaks for the pre-flash of each group of slaves, then the metering results, and the last peak is the final flash.

The increased noise in the last two traces is because I had set the probe to ground reference, but I still got a weak signal, so I didn't really notice it at first. I decided the traces are still clear enough to be usable, so I didn't repeat the measurements.

Decoding the signals

To make decoding the signals less labor intensive, I wrote a simple program that converts a trace from sensor 1 to a row of intervals (in number of points on my scope, this only works as long as the timebase is constant). The source of this program is available here. It uses a fairly dumb algorithm: loops through all 2500 points in a trace, compares the value of the current point with the previous one, and decides that it's a peak if it's at least threshold pixels lower than the previous point. It's main problems are that the threshold has to be tuned depending on the vertical amplifications plus the distance between sensor and flash, and that it sometimes also counts peaks from oscillation as peak (if it's large enough). This is why intervals shorter than 10 pixels are ignored. Results from this program are in the table below. # refers to the File0# number.

Description#12345678910
Master mode, M ---, A M 1/128, B ---, C ---, channel 1178116148761481467674294
Master mode, M ---, A M 1/128, B ---, C ---, channel 2211278150761481487474294
Master mode, M ---, A M 1/128, B ---, C ---, channel 33114116152741481507474294
Master mode, M ---, A M 1/128, B ---, C ---, channel 4476186152741481487674294

To figure out the group encoding, I did a few tests with identical data (M 1/128) and channel (4), but different groups. All other groups and the master were turned off. Group A was already tested in experiment #4, so only group B and C were tested. Vertical amplification of the scope was 50mV instead of 20mV, but this is irrelevant assuming FM. Since I didn't see a clear pattern in these results, I also measured all combinations of two and three groups with the same data (M 1/128).

Description#12345678910111213
Master mode, M ---, A M 1/128, B ---, C ---, channel 4476186152741481487674294
Master mode, M ---, A ---, B M 1/128, C ---, channel 4978186148761482941487474
Master mode, M ---, A ---, B ---, C M 1/128, channel 410781861507614829429614876
Master mode, M ---, A M 1/128, B M 1/128, C ---, channel 411781861527414614874741487474
Master mode, M ---, A M 1/128, B ---, C M 1/128, channel 4127618815074146148747429415072
Master mode, M ---, A ---, B M 1/128, C M 1/128, channel 4137618815074148294150727414676
Master mode, M ---, A M 1/128, B M 1/128 C M 1/128, channel 41476186150761481487674146767414874

This isn't as simple as the channel encoding. It's clearly in intervals 6-13, but the role of interval 6 and the last interval seems unclear (why isn't A+B 148 76 74 294 294 148 74 74, as combining #4 and #9 would suggest?). It looks like interval 6 is always from the first mentioned group (eg. with B,C it's taken from B), but then B,C should be 294 148 74 296 148 76, A,C is as expected however. There seems to be a more complex pattern than just a combination of tokens (i.e. a + b would have encoding a b).

Flash duration

Nikonian Bill Claff observed that the Nikon D70 receives less light from the Nikon SB-800 flash at faster shutter speeds above 1/100s. Nikon specifies a flash duration of 1/1050 second at full power, and the D70 uses an electronic shutter above 1/250, so the shutter speed shouldn't matter until you get close to 1/1000s. The reasonable explenation is that the flash duration isn't 1/1050 at full power. I measured the flash duration by mounting the SB-800 (flash 1) on a light stand about 30cm from sensor 1 (see the first section for description of the sensor). It was set to manual mode at 24mm, not connected to any camera, and fired by the FLASH button.

The flash fired at 1/1 power. The voltage drop over the photodiode rises above the null value at the end of the flash. I assume that this is the recovery time of the photodiode. The following two measurements show this in more detail. The flash duration is clearly longer than 1/1050 second (2 divs). I didn't calibrate the vertical scale of the photodiode, it should be logarithmic in theory, so I can't really do proper t0.1 or t0.5 (under 'effective flash duration') measurements.

The next two waveforms were sampled by averaging 4 flashes, to reduce noise. Since I try to detect very small differences in amplitude, I need as much vertical resolution as possible. Conditions are similar to the first waveform, but I used difference vertical amplifier and time base settings to zoom in on the rise at the end of the pulse.

It slowly falls back to the null value in about 100ms after the start of the flash pulse (this is the behavior of my sensor, not the flash).

It stops climbing about 7.5ms after the start of the flash, this is probably when the flash really stops firing, but the amount of energy emitted in this last phase is very low.

This time I set the flash to 1/2 power. This one looks different from full power. It looks more like a pulse, without the very slow decay. It's only slightly longer than the specified 1/1100 second.

At 1/4 power it's a fairly clean pulse. The Nikon specified flash duration is still too optimistic. The waveform stays basically the same above at lower power levels, so I don't show them. However, the raw data is available.

This is the pulse at 1/128 power. It's still a fairly clean pulse, and shows that this sensor has enough bandwidth for these measurements.

I measured the flash duration at minus one div (the time between the intersections with the -100mV line, one div below the null value) via cursors on my oscilloscope in two signficant digits. The '#' column refers to the File### numbers of the raw data (available here). The specified flash duration is from the Nikon SB-800 manual, page 122. To test for sample variation, I repeated the tests with a second SB-800 unit (flash 2). I measured the flash duration with the same method (cursors), but didn't collect any other data.

Flash power#Flash duration (sec.)
Measured (flash 1)Measured (flash 2)Specified
1/1151/3801/3701/1050
1/2161/9901/10001/1100
1/4171/21001/20001/2700
1/8181/39001/38001/5900
1/16191/65001/70001/10900
1/32201/110001/120001/17800
1/64211/200001/220001/32300
1/128221/330001/410001/41600

The fact that the Nikon spec for 1/1 and 1/2 power is almost the same is suspicious, and suggests that the method that Nikon uses to measure flash duration doesn't take the slowly decaying tail into account. The flash duration that I measured is in most cases about 10-25% longer than the flash duration that's specified by Nikon. I don't really know the vertical scale: the voltage drop over a photodiode should be logarithmic, but may not be in the range that I use, but I believe that the method that I use (between the -100mV points) captures almost all of the output, somewhat similar to the t0.1 spec. Nikon seems to measure only the width of the peak, something like t0.9, which is very different from the real duration at full power. It's reasonably accurate for lower power levels.

The second flash had a slightly shorter flash duration in most cases. The only large difference between the two flashes is at 1/128, which is as expected since this is the shortest flash duration, where small differences become relatively large. The second flash has seen less use. I don't know if this is the cause of the slightly shorter flash duration, or whether it's just the standard variation between different units.

Raw data

All raw data as written by the program I use (with this script) to download traces from my scope is available. The numbers are the same as for the images, measurements.txt contains an index. The format used is quite simple, the .CHx.dat files contain the trace data for channel x: each line is a point on the X axis, the value is the Y value (in internal units of the scope, the same I use for measurements, a division in the images is 250 units wide and 25 units high). The .header.dat file contains settings (such as timebase and vertical amplification). I haven't figured this format out yet, but you can get these settings from this article.

Written by Alson van der Meulen, you can contact me at the Nikonians forums via e-mail or PM, nickname alm.

Last update: 2006-07-06