Focus Speed

From rev0wiki
Jump to: navigation, search

This is a method that I used to benchmark the focusing speed (originally from MFD to ~1.7m target, in the new setup from fixed FD of 14" to FD of 8') of several lenses/motor technologies. The setup involves using a DSLR, Arduino (used a Maple Mini clone for the hardware) connected to an LED, and a PC for setting the delay. The Arduino triggers the shutter and turns on the LED after a set delay, if the LED is not on by the time the picture is taken, the delay should be increased, and vice versa until the focus time is converged.

File:Test.jpg
Picture of the test setup with a 700D and Canon EF-S 17-55mm IS USM lens.

Results (New)

Setup was revised to the following conditions:

  • Focus speed measured from 14″ distance to 8′ distance.
  • Lighting (per 700D metering sensor): 1/60s at f/2.8, ISO200 (HTP on).
  • Lens set to ~50mm focal length.

1. Canon EF-S 17-55mm f/2.8 IS USM (Ring USM with FTM) -> 227ms

2. Sigma DG 17-50 f/2.8 OS HSM (Micro HSM without FTM) -> 262ms

3. Canon EF 50mm f/1.8 (DC micro motor) -> 311ms

4. Canon EF-S 18-55mm IS STM (Stepper motor) -> 204-222ms (204ms with equivalent available light as above f/2.8 lenses)

The numbers above do not include the native shutter lag, which for the 700D measured (lens set to MF, manual mode 1/60s shutter, f/2.8): 162-163ms. From this more controlled test it appears that ring USM is ~13% faster than micro HSM, ~27% faster than micro motor, and micro HSM is ~16% faster than micro motor.

Results (Old)

1. Canon EF-S 18-55 IS STM -> 500ms

2. Canon EF-S 17-85 IS USM (Ring USM with FTM) -> 307ms

3. Sigma DG 17-50 f/2.8 OS HSM (Micro HSM without FTM) -> 472ms

The numbers above do not include the native shutter lag, which for the 7D measured (in manual focus) at: 120-125 ms. The native shutter lag was also measured for the 450D at 171ms.

Arduino Code

/*
Justin Kenny 2017
AF Speed Tester
*/

  uint32 delaytime = 100;
  
void setup() {
  Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor
  // Initialize the built-in LED pin as an output:
  pinMode(20, OUTPUT);
  pinMode(10, OUTPUT);
  // Initialize the built-in button (labeled BUT) as an input:
  pinMode(32, INPUT);
}

uint8 isButtonPressed() {
    if (digitalRead(32) == 1) {
        delay(1);
        while (digitalRead(32) == 1);
        return true;
    }
    return false;
}

void loop() {
  while (Serial.available() > 0) {
  
    // look for the next valid integer in the incoming serial stream:
    delaytime = Serial.parseInt();
    
    // look for the newline. That's the end of your
    // sentence:
    if (Serial.read() == '\n') {
      break;
    }
  }
  Serial.print("Using ");
  Serial.print(delaytime);
  Serial.println("ms delay.");
     
    // Check if the button is pressed.
    if (isButtonPressed()) {
        // Trigger camera
        digitalWrite(10, HIGH); // Trigger shutter release
        delay(delaytime);
        digitalWrite(20,HIGH); // Turn LED on
        delay(5000);
        digitalWrite(10, LOW); // Let off shutter release
        digitalWrite(20,LOW); // Turn LED off
    }
    delay(100);
}

Improvements and Notes

  • The setup should be better controlled, the following conditions need to be fixed:
    • Start and end focus distances should be equivalent (MFD as start distance is not "fair" as it varies from lens to lens)
      • Adjust start focus by using a fixed target near the camera
    • Lighting conditions should be fixed, along with shutter speed
    • Target (high contrast) is fixed and camera is pointing at same part of the target from lens to lens
    • Focal length is common between lenses compared (if possible)

Video