Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,22 @@ The versions of EPICS base, asyn, ADCore, and other synApps modules used for eac
the configure/RELEASE file in each release of quadEM.

## Release 9-8 (November XXX, 2026)
- Improved support for the FX4 quad electrometer.
- Improved support for the FX4.
- Add support for high-speed gating and triggering up to 5 kHz.
This requires updated firmware, version 26.10.151957 or higher.
- Added diagnostic records to read the FX4 CPU %, trigger level,
and trigger counter.
- Added records to configure the trigger input settings on the FX4
at iocInit.
- Improved External Trigger mode support for the TetrAMM.
Previously it required that the trigger period be longer than the AveragingTime.
If a trigger pulse arrived before the averaging time was complete it was ignored.
This required clients to know what the minimum trigger period would be and to
set the AveragingTime to be at least slightly less than this.
Now if the next trigger arrives before the averaging time is complete it immediately
computes the average of the samples so far and starts the next acquisition.
This means that external trigger mode is the same as external bulb mode if the trigger
period is less than the averaging time.
- Fixed error in the fanout records for the PREC fields.
- Increased the PREC field for the averaging times from 2 to 4.
- Tweaked the device-dependent sub-screens to display better on Phoebus.
Expand Down
22 changes: 13 additions & 9 deletions docs/source/databases.rst
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ minimum, maximum, and other statistics, including a histogram of array values.
- Provides the number of values that will be accumulated in the ring buffer before
they are read out into NDArray objects and any registered plugins are called. NumAverage_RBV
is computed as (int)((AveragingTime / SampleTime_RBV) + 0.5).
, On the TetrAMM when TriggerMode=External Bulb and on the AH501BE when TriggerMode=External
On the FX4 and TetrAMM when TriggerMode=External Bulb and on the AH501BE when TriggerMode=External
Gate the AveragingTime is ignored and NumAverage_RBV will be 0. The averaging is
done on all samples collected when the external gate signal is asserted.
* - QE_NUM_AVERAGED
Expand All @@ -459,8 +459,8 @@ minimum, maximum, and other statistics, including a histogram of array values.
before they were read out into NDArray objects and any registered plugins were called.
If AveragingTime>0 then NumAveraged_RBV will be the same as NumAverage_RBV. However,
if AveragingTime=0. then NumAverage_RBV=0 and NumAveraged_RBV gives the actual number
of values read from the ring buffer when the ReadData record was processed. This
is also true on the TetrAMM when TriggerMode=ExternalBulb.
of values read from the ring buffer when the ReadData record was processed.
This is also true on the FX4 and TetrAMM in ExternalTrigger or ExternalBulb modes.
* - N.A.
- $(P)$(R)FastAveragingTime, $(P)$(R)FastAveragingTime_RBV
- ao, ai
Expand Down Expand Up @@ -488,8 +488,9 @@ minimum, maximum, and other statistics, including a histogram of array values.
- All
- The number of acquisitions to acquire when AcquireMode=Multiple. An acquisition
is complete when the callbacks are called. This normally occurs when the AveragingTime
has elapsed. However when TriggerMode=Ext. Bulb then the callbacks are called and
an acquisition is complete on the trailing edge of each external gate pulse.
has elapsed. However when TriggerMode=Ext. Bulb (and sometimes Ext. Trig)
then the callbacks are called and an acquisition is complete on the trailing edge of each
external trigger pulse.
* - QE_NUM_ACQUIRED
- $(P)$(R)NumAcquired
- longin
Expand Down Expand Up @@ -534,10 +535,11 @@ minimum, maximum, and other statistics, including a histogram of array values.
- 0: "Free Run" (all models). Ignores any external gate or trigger signal.
- 1: "Software" (possible future choice for TetrAMM) This will trigger a single
acquisition each time a software trigger command is sent.
- 2: "Ext. Trigger" (TetrAMM, FX4, AH401B, PCR4) This is an edge-sensitive trigger. On the
TetrAMM this will collect samples for the AveragingTime and then wait for the next
trigger. On the FX4 if the next trigger arrives before the AveragingTime is complete
then it immediately averages the existing samples and begins a new average.
- 2: "Ext. Trigger" (TetrAMM, FX4, AH401B, PCR4) This is an edge-sensitive trigger.
On the leading edge of each trigger pulse it will collect samples for the AveragingTime
and then wait for the next trigger. However, on the FX and TetrAMM if the next trigger
arrives before the AveragingTime is complete then it immediately averages the existing
samples and begins a new average.
- 3: "Ext. Bulb" (TetrAMM, FX4, AH501D) This is a level-sensitive trigger. It acquires
data while the external gate signal is asserted. On the trailing edge of the gate
signal the callbacks will be called. In this mode the AveragingTime is ignored and
Expand Down Expand Up @@ -784,6 +786,8 @@ minimum, maximum, and other statistics, including a histogram of array values.


The following is the medm screen to control the quadEM with the records in quadEM.template.
This is the version for the TetrAMM. The versions for the other models differ only in the device-specific
widgets in the left center of the screen.

.. figure:: quadEM.png
:align: center
Binary file modified docs/source/quadEM.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/sscan_fx4_triggered.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/source/sscan_tetramm_base.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/source/sscan_tetramm_free_run.png
Binary file not shown.
Binary file removed docs/source/sscan_tetramm_free_run_plot.png
Binary file not shown.
Binary file modified docs/source/sscan_tetramm_triggered.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/source/sscan_tetramm_triggered_plot.png
Binary file not shown.
Binary file removed docs/source/tetramm_fly_bulb.png
Binary file not shown.
Binary file removed docs/source/tetramm_fly_bulb_statistics_mean.png
Binary file not shown.
Binary file removed docs/source/tetramm_fly_bulb_time_series_plot.png
Binary file not shown.
Binary file modified docs/source/tetramm_fly_triggered.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/source/tetramm_fly_triggered_time_series.png
Binary file not shown.
Binary file not shown.
77 changes: 23 additions & 54 deletions docs/source/tetramm_modes.rst
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
TetrAMM and FX4 Acquisition Modes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The TetrAMM and FX4 can be used in 8 different acquisition modes, depending on the values
of the TriggerMode and AcquireMode records. The following table describes these
modes. Note that AcquireMode=Single is completely equivalent to AcquireMode=Multiple
and NumAcquire=1, so the table does not list AcquireMode=Single.
TetrAMM and FX4 Trigger Modes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The TetrAMM and FX4 can be used in 4 different acquisition modes.
The following table describes these modes.

Note that the TetrAMM supports triggering and gating modes in the firmware, using the
commands shown in the table below. The FX4 does not support triggering or gating for
ADC acquisition. However, it does support streaming of a high-speed position counter
For each trigger mode AcquireMode can be Continuous, Multiple, or Single.
When AcquireMode=Multiple acquisition stops after NumAcquire acquisition are complete.
Note that AcquireMode=Single is completely equivalent to AcquireMode=Multiple
and NumAcquire=1.

Note that the TetrAMM supports triggering and gating modes in the firmware.
The nominal maximum trigger rate is 2000 Hz. However, with ValuesPerRead=10
I have found that it reliably triggers at 1500 Hz and is not reliable at 1800 Hz.

The FX4 does not support triggering or gating for ADC acquisition.
However, it does support streaming of a high-speed position counter
at the same rate that it streams the ADC data.
The position counter is configured to increment on both the rising and falling edge of
the first digital input (D1). Each ADC measurement and the position counter
has a precise timestamp. The EPICS support streams the position counter, and
does the triggering and gating operations in the driver software, using the counter
transitions and the timestamps. This has been tested to work with 2000 point acquisition
transitions and the timestamps. This has been tested to work with 10000 point acquisition
with 5 kHz trigger signal and ValuesPerRead=10.

.. cssclass:: table-bordered table-striped table-hover
Expand All @@ -22,60 +28,23 @@ with 5 kHz trigger signal and ValuesPerRead=10.
:widths: auto

* - TriggerMode
- AcquireMode
- Description
- TetrAMM commands
* - Free Run
- Continuous
- Values are acquired continuously and are averaged each time the AveragingTime is reached.
- NRSAMP=ValuesPerRead, NAQ=0, TRG:OFF
* - Free Run
- Multiple
- Data is acquired for the AveragingTime. This is repeated NumAcquire times and then
acquisition stops. The plugins will be called NumAcquire times, each time with NumAverage
samples.
- NRSAMP=ValuesPerRead, NAQ=0, TRG:OFF
* - Ext. Trig.
- Continuous
- A fixed number of samples is acquired starting on each leading edge of the external trigger input.
For the TetrAMM the AveragingTime must be set to a value less than the time between trigger pulses.
If the next trigger arrives before the averaging time is complete then that trigger will be ignorred.
For the FX4 the time between triggers can be less than the averaging time.
- NumAcquire samples are acquired starting on each leading edge of the external trigger input.
NumAcquire is determined by the AveragingTime and ValuesPerRead.
If the next trigger arrives before the averaging time is complete then it will immediately average the
values received so far, and start accumulating the next time point.
It thus effectively runs in Ext. Bulb mode if the triggers are faster than the averaging time.
ValuesPerRead must be set to a value less than AveragingTime/1e5.
- NRSAMP=ValuesPerRead, NAQ=AveragingTime/1e5/ValuesPerRead, TRG:ON
* - Ext. Trig.
- Multiple
- This is the same as Ext. Trig. above, except that acquisition stops once NumAcquire
triggers have been received.
- NRSAMP=ValuesPerRead, NAQ=AveragingTime*1e5/ValuesPerRead, TRG:ON
This means that Ext. Trig functions the same as Ext. Bulb mode if the trigger period is less
than the averaging time.
* - Ext. Bulb
- Continuous
- Samples are acquired while the external trigger input is asserted. On each trailing
edge of the external trigger signal the plugins are called. ValuesPerRead must be
set to a value less than (external trigger asserted time * 1e5). AveragingTime is
edge of the external trigger signal the plugins are called. AveragingTime is
ignored in this mode.
- NRSAMP=ValuesPerRead, NAQ=0, TRG:ON
* - Ext. Bulb
- Multiple
- This is the same as Ext. Bulb. above, except that acquisition stops once NumAcquire
triggers have been received.
- NRSAMP=ValuesPerRead, NAQ=0, TRG:ON
* - Ext. Gate
- Continuous
- Samples are acquired while the external trigger input is asserted. When NumAverage
- Samples are acquired while the external trigger input is asserted. When NumAverage
samples have been acquired the plugins are called. The actual averaging time between
calling the plugins will be longer than AverageTime, and is controlled by the duty
cycle of the external gate signal. The trailing edge of the gate pulse is ignored
in this mode. ValuesPerRead must be set to a value less than (external trigger asserted
time * 1e5).
- NRSAMP=ValuesPerRead, NAQ=0, TRG:ON
* - Ext. Gate
- Multiple
- The is the same as Ext. Gate above except that when the plugins have been called NumAcquire
times acquisition is stopped. Note that the actual number of gate pulses received
will be > NumAcquire, and is also controlled by the duty cycle of the external
gate signal.
- NRSAMP=ValuesPerRead, NAQ=0, TRG:ON
in this mode.
Loading
Loading