Balluff - BVS CA-GX0 / BVS CA-GX2 Technical Documentation
Using the mvMultiExposureCount feature
Since
Firmware version 2.56.0

Introduction

Multiple exposure is a feature from Sony Pregius sensor family. This feature is available at Balluff/MATRIX VISION cameras with sensors from the 3rd and 4th generation.
It allows to have multiple exposures in a single frame. The sensor will start as many exposures as configured in the property mvMultiExposureCount before it starts its readout.
The pause between each exposure is either as small as possible, respecting the sensor's "memory transfer waiting time", or defined by the user.

Exposing multiple times as soon as possible (default)


This is the default mode. The property "Setting → Base → Camera → AcquisitionControl → mvMultiExposureCount" defines how many times the sensor exposes.
The sensor will start each exposure as soon as possible. After all exposures are done, the sensor starts its readout. The camera will then produce a single frame.
The frame rate calculated at mvResultingFrameRate depends on the number of exposures, the duration of each exposure and the minimal necessary pause between exposures.

Note
Every exposure has the same duration defined with the property ExposureTime and the minimal pause can not be changed. Each sensor has its own pause.

Programing the Multi Exposure with minimal pause

#include <mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h>
// more code
double desiredExposureTime_us = 1000;
unsigned int desiredExposureCount = 4; // Range 1 - 4095
// more code
GenICam::AcquisitionControl ac = new GenICam::AcquisitionControl( pDev );
ac.exposureMode.writeS( "Timed" );
ac.exposureTime.write( desiredExposureTime_us );
ac.mvMultiExposureCount.write( desiredExposureCount );
ac.triggerSelector.writeS( "FrameStart" );
ac.triggerMode.writeS( "Off" );
// more code
Note
Check if ExposureMode is set to Timed and TriggerMode is set to Off.

Exposing multiple times with variable pause


As in the default mode, the number of exposures and the exposure duration can be set respectively with mvMultiExposureCount and ExposureTime.
The pause between exposures can be set using the TriggerMode for the TriggerSelector "FrameStart". By choosing an appropriate TriggerSource, this pause can be variable as well.

Note
Every trigger generated by the TriggerSource will start a single exposure from the sensor.
The camera will produce a frame only after the TriggerSource generated as many triggers as the number set at mvMultiExposureCount.
The frame rate will depend on the rate with which the triggers are generated and does not necessarily match the value calculated at mvResultingFrameRate

Programing the Multi Exposure with variable pause


Timers can be used to trigger each exposure. As shown in the example code below.

#include <mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h>
// more code
GenICam::AcquisitionControl ac = new GenICam::AcquisitionControl( pDev );
GenICam::CounterAndTimerControl ctc = new GenICam::CounterAndTimerControl( pDev );
double desiredExposureTime_us = 1000;
double desiredTimerDuration_us = 250000; 
unsigned int desiredExposureCount = 4; // Range 1 - 4095

ac.exposureMode.writeS( "Timed" );
ac.exposureTime.write( desiredExposureTime_us );
ac.mvMultiExposureCount.write( desiredExposureCount );
ac.triggerSelector.writeS( "FrameStart" );
ac.triggerMode.writeS( "On" );
ac.triggerSource.writeS( "Timer1End" );

ctc.timerSelector.writeS( "Timer1" );
ctc.timerTriggerSource.writeS( "Timer1End" );
ctc.timerDuration.write( desiredTimerDuration_us );
// more code
Note
Check if ExposureMode is set to Timed and TriggerMode is set to On. If the next trigger is generated before both the previous exposure and the minimal pause between exposures are done, this trigger will be ignored.

The resulting frame from the example above is shown below.

Figure: Example of usage of mvMultiExposureCount with TriggerMode On.