Back: 8. Using Pulsers Forward: 8.1.1 ASSIGNMENTS section   FastBack: 8. Using Pulsers Up: 8. Using Pulsers FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document

8.1 Setting up the Pulser

The basic setup of a pulser happens in the ASSIGNMENTS and the PHASES section. The latter section will be missing if no phase cycling is to be done during the experiment.

Back: 8.1 Setting up the Pulser Forward: Setting the TIMEBASE   FastBack: 8. Using Pulsers Up: 8.1 Setting up the Pulser FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document

8.1.1 ASSIGNMENTS section

Within the ASSIGNMENTS section the pulsers timebases and trigger modes are set. It also deals with the basic setup of the channels, i.e. associating some or more output connectors with pulse functions and setting the physical characteristics of the output (e.g. voltage levels, inverting the output etc.).

Back: 8.1.1 ASSIGNMENTS section Forward: Setting the trigger mode   FastBack: 8. Using Pulsers Up: 8.1.1 ASSIGNMENTS section FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document Setting the TIMEBASE

For most pulsers the first statement of the ASSIGNMENTS section has to be the setting of the timebase of the pulser. Most of the pulsers function similarly: the output is divided into a certain number of time slices (usually 65536, 2^16) and for each of them the output can be either set to a high or a low voltage. By setting the output during one or more of these time slices to a high voltage (and for the neighboring slices to low) pulses are created. The timebase set in the ASSIGNMENT section is the length of these time slices. From the above it is clear that all pulses (as well as all the times between pulses) have to be integer multiples of the length of the timebase.

An exception is the Bruker EP385 pulse programmer. This pulser has a fixed built-in timebase of 8 ns. In this case a TIMEBASE statement (see below) may only be given if an external clock input is used, in which case you need to specify the inverse of the frequency of the external clock.

In case of the Interface Technology RS690 the internal clock is automatically used for timebases of 4 ns, 8 ns and 16 ns, all other timebases require an external clock. To distinguish between the TTL and ECL level input connectors for the external clock the additional keywords TTL and ECL can be given together with the timebase value. When one of these keywords is given the external clock will be used, even if the timebase value is one of the three values that can be realized using the internal clock. When neither of the two keywords is given and the specified timebase requires an external clock the TTL level clock input connector is used per default.

In the currently used configuration the timebase for the J-band version of the Rulbus pulsers is fixed to 10 ns. But this is a compilation option that can be changed via the configuration files. After this change and a recompilation of the modules variable timebases. In contrast, for the W-band version the timebase in the current configuration must be set, where possible settings are either 10 ns, 100 ns, 1 us, 10 us, 100 us, 1 ms or 10 ms.

The statement to set the timebase, i.e. the length of the individual time slices is(3):


or, for the Interface Technology RS690, when using an external clock at the TTL level input connector:


The minimum and maximum values for the timebase differ for the different pulsers:

If you're using two or more pulsers simultaneously you need as many TIMEBASE statements in your EDL script as you have pulsers. In this case you need to append a # character plus the number of the pulser to indicate for which of the pulsers the statement is to be used. E.g. if you have two pulsers you normally will need two TIMEBASE statements:

TIMEBASE#1:  5 ns;
TIMEBASE#2: 25 ns;

The additional #1 in the statement for the first pulser is optional.

Back: Setting the TIMEBASE Forward: Channel setup   FastBack: 8. Using Pulsers Up: 8.1.1 ASSIGNMENTS section FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document Setting the trigger mode

The next statement concerns the triggering of the pulser. A pulser starts a new sequence of pulses either on receiving an external trigger or it uses an internal trigger. Which type of triggering to use depends, of course, on the experiment. To set either internal or external trigger mode use a statement like this(4):




Especially when using the internal trigger it is useful to be able to set the rate or the frequency with which the experiment is to be repeated. Thus for the Sony/Tektronix DG2020, the Bruker EP385, the Interface Technology RS690 as well as the Rulbus pulsers an additional keyword can be specified, either REPEAT_TIME or REPEAT_FREQUENCY(5), i.e. one may use:




to set the repetition rate of the experiment to 100 Hz. The repeat time must be an integer multiple of the timebase of the pulser.

When using an external trigger a repetition time or frequency can't be enforced for obvious reasons. It can only be guaranteed that the pulse sequence is as long as the repetition time, thus keeping the pulser from getting restarted by a stray trigger event before the end of the repetition time.

For the Tektronix HFS9003 no repetition frequency or rate can be set, so an external trigger has to be used to determine the repetition rate of the experiment, otherwise the pulser will repeat the pulse sequence at the highest possible rate.

For the Bruker EP385 pulse programmer the highest repetition frequency is about 976.56 Hz (when using the internal clock, otherwise multiply the external clocks oscillation period by 160768 to compute the exact length of the minimum repeat time). Repetition times can be only set to multiples of 102.4 us (or in increments of 12800 times the external clocks oscillation period). If necessary, repetition frequencies are adjusted automatically to the next lower allowed value.

For the Interface Technology RS690 it might happen that for certain pulse settings the repetition time must be lengthened slightly, but never more than three times the timebase.

For the TEGAM 2714A no repetition time or frequency can be set (you can use the function pulser_maximum_pattern_length() instead to adjust the pattern length if necessary).

On the other hand, when using an external trigger one may want to set the trigger level, slope and, possibly, the trigger input impedance. For pulsers allowing this it is done using a statement similar to one of these(6):




The Bruker EP385 does not allow the setting of any of these parameters.

The trigger input impedance can only be set for the Sony/Tektronix DG2020.

For the Sony/Tektronix DG2020 the trigger level must be in the range between -5V and +5 V, while for the Tektronix HFS9003 the allowed trigger level range is -4.7 V to +4.7 V.

For the Interface Technology RS690 no input trigger level nor input impedance can be set, but it has two trigger input connectors, one for TTL and one for ECL level trigger input. To distinguish between the two trigger input ports the additional keywords TTL and ECL may be used. If none is given the TTL level input port is used per default.

The Rulbus pulsers only allow to set the trigger slope.

For the TEGAM 2714A neither impedance, level or slope of the input trigger can be set.

If you need to control more than one pulser you must have a TRIGGER_MODE statement for each of the pulsers. In this case you need to append a # and the number of the pulser to tell fsc2 for which pulser the trigger mode setting is to be used.

Back: Setting the trigger mode Forward: Phase channel setup   FastBack: 8. Using Pulsers Up: 8.1.1 ASSIGNMENTS section FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document Channel setup

The statements described in the following deal with setting up the output channels of the pulser. The basic idea is to abstract from the real output connectors of the pulser and to use symbolic names for them. So, instead of telling the pulser to output a pulse at e.g. the output connector numbered 1 during the experiment, in the ASSIGNMENTS section output connectors get associated with symbolic names for their functions and these symbolic names are used when specifying pulses. While this may be only a convenience in simple experiments (you only have to apply changes in one place when changing the output connectors instead of finding and changing it for all pulses concerned) it makes doing phase cycling much simpler because here the same pulse may have to be output at different output connectors, depending on the current phase. Instead of always specifying which output connector to use for a certain phase for each pulse, the program is told which connectors to use for a function (and which phase) and then it's left to the program to figure out when to use which of the output connectors.

The following symbolic names for pulse functions are defined:

The names of the functions of course do not enforce what the connectors are really going to be used for, but it is probably a good idea not to use e.g. the MICROWAVE function for something completely different (or other people will have major problems understanding what your EDL script is supposed to do and there's no obfuscated EDL contest yet;-). Besides, some of the pulser modules also define special functions (e.g. for automatically setting TWT pulses) that only work for some of these functions.

The functions PHASE_1 and PHASE_2 are special in that they can only be used with the Frankfurt version of the driver for the Sony/Tektronix DG2020, dg2020_f, and are used for controlling the phase switches, i.e. it's pulses are created automatically.

The functions OTHER_1 to OTHER_4 should be used in cases where none of the other function names seem to fit the special purpose you have in mind for the pulses of this function.

Before showing some examples it is important to point out that there are some differences between the different devices.

The simplest one is the Bruker EP385. It has 8 output connectors, which are named in the EDL script as CH0 ti CH7.

The Tektronix HFS9003 can has at least one and up to three channel boards, each with 4 channels. The channels of the first board are named A1 to A4 for the first, B1 to B4 for the second and C1 to C4 for the thrid channel board. Additionally, the Tektronix HFS9003 has a trigger output channel that can produce a single pulse of 5 ns duration. This special channel can also be associated with a function (e.g. for generating a DETECTION trigger pulse) and is named TRIG_OUT (or TRIGOUT, TRIGGER_OUT or TRIGGEROUT).

The Interface Technology RS690 has 4 sets of output connectors (or even 8, if a second HSM card is installed), each with 16 output channels. Each output channel can be addressed by a letter between A and D (or H, if two HSM cards are installed) for the connector, followed by a number between 0 and 15, specifying the channel on the connector to use. Valid channel designators are e.g. A3, C13 etc. Moreover, the number of channels of a connector that can be used depends on the timebase setting: for a timebase of 4 ns only the lowest 4 channels of each connector can be used, for a timebase of 8 ns only the lower 8 channels.

The Sony/Tektronix DG2020 is quite a bit different. It has 36 internal channels (named CH0 to CH35) that have to be mapped to pod channels (named P0 to P11. The pod is the additional box, conected to the pulser by a cable and having (for both the Frankfurt S-band and and the Berlin X-band spectrometer) 12 output connectors, numbered from 0 to 11. Instead of associating one of the (internal) channels for this device a pod channel has to be associated with a function. Optionally, it is also possible to tell fsc2 which of the internal channels are to be used for a function.

For the Tektronix HFS9003 simply a channel is associated with a function by statements like (the keyword CHANNEL can be replaced by CH)

MICROWAVE: CHANNEL = A1;          /* board A, channel 1 */
RF:        CHANNEL = A2;          /* board A, channel 2 */
RF_GATE:   CH = B3;               /* board B, channel 3 */

(where the A in the channel specifier stands for the first channel card and B for the second card) or, for the Interface Technology RS690,

MICROWAVE: CHANNEL = A3;          /* connector A, channel 3 */
RF:        CHANNEL = B7;          /* connector B, channel 7 */
RF_GATE:   CH = C5;               /* connector C, channel 5 */
DETECTION: CHANNEL = D15;         /* connector D, channel 15 */

For the Sony/Tektronix DG2020 the function gets associated with a pod (or several pods, see below why sometimes more than one is needed), with the pods named P0 to P11:

MICROWAVE: POD = P1, P2, P3, P4;
RF:        POD = P6;
RF_GATE:   POD = P7;

Optionally, for the Sony/Tektronix DG2020 you can also tell the program which of the 36 internal channels (numbered CH0 to CH35) should be used for a function. If you don't the program will automatically grab as many of the internal channels as it needs, always using the lowest numbered ones first. To declare which of the internal channels are to be associated with the output connectors (PODs) use a statement like this:

MICROWAVE: POD = P1, P2, P3, P4  CHANNEL = CH31, CH32, CH33, CH34;
RF:        POD = P6              CHANNEL = CH35;
RF_GATE:   POD = P7              CHANNEL = CH17;
DETECTION: POD = P11;   // leave it to the program to select the channel

Please note: the Tektronix HFS9003 does not allow assignment of more than one channel to a single function.

Here a list of the pod and/or channel numbers that can be used for the pulsers:

For the TEGAM 2714A the channel determines the number of the user waveform to be used to create the pulse sequence. If no such assignment is done channel 99 is used pr default and the function of the single channel the pulser has is determined from the setting of the first pulse to be defined.

Beside defining at which of the output connectors the pulses for a function will appear at you can also set other properties for the pulses of a POD or channel. As far as the hardware allows it you may set the high and the low voltage for all pulses of a function by using the keywords V_HIGH and V_LOW(14):

MICROWAVE: POD = P1, P2, P3, P4  V_HIGH = 4.3 V, V_LOW = -0.5 V;
RF:        POD = P6              V_HIGH = 2.6 V, V_LOW = 0 V;
RF_GATE:   POD = P7              V_HIGH = 5 V,   V_LOW = 0 V;

The high voltage must always be larger than the low voltage, to get inverted pulses use the INVERTED keyword, see below.

For the Sony/Tektronix DG2020 the high voltage can be adjusted to values between -2 V and +7 V and the low voltage can be in the range between -3 V and +6 V. The difference between the voltages must be between 0.5 V and 9 V and can be set in increments of 0.1 V.

For the Tektronix HFS9003 the high voltage can be adjusted to values between -1.5 V and +5.5 V, the low voltage has to be in the range from -2 V to +5 V. The minimum and maximum voltage swing is 0.5 V and 5.5 V, respectively, and the voltage resolution is 10 mV.

For the TEGAM 2714A pulse levels can be set in the range between -10.2 V and +10.2 V, with the maximum difference being 10.2 V. If the level difference is below 1 V the levels must be in the +/-1 V range and for level differences below 100 mV within +/-100 mV.

If a function requires the output levels to be inverted (i.e. that the voltage is high while there are no pulses and low during pulses) use the INVERTED keyword(15):

RF:        POD = P6   V_HIGH = 2.6 V, V_LOW = 0 V, INVERTED;

For both the Bruker EP385 and Interface Technology RS690 pulser pulse levels can't be specified. For the Bruker EP385 also the INVERTED keyword cannot be used, use the inverted output connectors instead.

Finally, in order to take care of different cable lengths a delay for a function can be set. This delay will be automatically added to the start position of each pulse of this function:

MICROWAVE: POD = P1, P2, P3, P4  DELAY = 50 ns;

For obvious reasons setting negative delays is only possible when internal trigger mode is used(16).

If you are dealing with two or more pulsers simultaneously you will have to append a # character plus the pulser number to each of the channel function setup statements, i.e. use

TWT#2:       CH  = A7;

to create microwave pulses with the first pulser and TWT pulses with the second one.

For the Rulbus pulsers in the J-band configuration(module rb_pulser_j) only allows for three function, MICROWAVE (restricted to creating three pulses), RADIO_FREQUENCY (restricted to creating a single pulse) and DETECTION (also restricted to creating a single pulse). In the W-band configuration (module rb_pulser_w allows additionally the function LASER (restricted to creating a single pulse) and DEFENSE (restricted to creating a single pulse starting at the very start of the pulse pattern, so only its length can be changed - normally the defense pulse is created automatically). Moreover, in the W-band configuration the lenght of the detection pulse can only be varied between 0 s and the timebase of the pulser. For both configurations the functions are fixed to certain delay cards of the pulsers, so assigning a function to a "channel" isn't possible - there are no channels. All that can be set for a certain function is the delay to be used with this function.

Back: Channel setup Forward: 8.1.2 PHASES section   FastBack: 8. Using Pulsers Up: 8.1.1 ASSIGNMENTS section FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document Phase channel setup

Please note that a phase channel setup can only be done with the Sony/Tektronix DG2020 and the Bruker EP385. Moerover, there are several differences between the Frankfurt S-band and the Berlin X-band spectrometer. And all the following is only relevant if phase cycling is to be used.

Berlin X-band spectrometer (Sony/Tektronix DG2020, Bruker EP385 and Interface Technology RS690):

The Berlin bridge setup is rather simple in that it expects pulses with different phases to appear on different input connectors of the microwave bridge. The bridge has 4 different inputs, one for each phase +X, -X, +Y and -Y, and the phase of the pulse coming from the bridge and going to the TWT amplifier depends on which input connector was used for the pulse.

Now all you have to do is to tell the program once which pulser pod channel is connected to which phase input of the bridge (and, to allow for some sanity checks, which functions is to be phase cycled). This is done via a statement in the ASSIGNMENTS section like the following:

              +X: POD = P1,
              +Y: POD = P2,
              -X: POD = P4,
              -Y: P5;


              +X: CH = C1,
              +Y: CH = C2,
              -X: CH = C4,
              -Y: C5,

(depending on the pulser you use). In this example you obviously want to phase cycle the microwave pulses and the +X input connector of the bridge is connected to pod channel 1 (or output connector C1) of the pulser etc.(17) Since you actually can have 2 phase cycled function, you may append either 1 or _1 and 2 or _2 to distinguish between the two phase setups, i.e. PHASE_SETUP_1.

Please note that you only have to supply settings for phases that are really needed during the experiment, e.g. if during the experiment only the +X and -X phases are needed only channels for both these phases have to be specified.

Frankurt S-band spectrometer (Sony/Tektronix DG2020 only):

The Frankfurt spectrometer is somewhat more complicated. The bridge has one microwave pulse input and two further input channels that control the setting of the bridges phase switch. So, while a microwave pulse is sent to the bridge, further phase pulses have to be present to control the phase switch. Two phase inputs are enough to differentiate between the 4 phases +X, -X, +Y and -Y.

In order to create the phase pulses an extra function is needed for these pulses, which is called PHASE (or, abbreviated PH). For being able to feed both the bridges phase inputs, for this function two of the pod channels of the pulser are needed. The definition of this function looks nearly identical to the other functions, the only exception is that also the name of the function to be phase cycled using the phase function needs to be specified:

PHASE:        MICROWAVE, POD = P8, P9, V_HIGH = 5 V, V_LOW = 0 V;

In this example the phase function is used to phase cycle the microwave pulses and the pod channels assigned to it are the ones numbered 8 and 9.

The second thing that is needed is which voltages have to be present at the outputs to set a certain phase. Here's an example:

              +Y: POD1  = ON,  POD_2 = 0,
              -X: 0, 1,
              -Y: 1, 1;

This phase setup command tells the program that to set the +X phase the voltage at both pod outputs of the phase function have to be in the low state, while for the -Y phase the first pod output (set to pod channel 8 by the PHASE command, see above) has to be in the high state, while the other output (pod channel 9) has to be low. POD_1 stands here for the first pod channel of the phase function, POD_2 for the second one. ON and 1 can both be used to indicate a high output state, OFF and 0 stand for a low state.

With these informations the program is able (or nearly is) to create the the additional "phase" pulses (i.e. the pulses that control the phase switch) without the user having to deal with it. So, all that needs to be done later is to create the microwave pulses and define the sequence of phases for the pulses. The program will automatically create the pulses necessary to set the phases of the microwave pulses.

You can also specify how long phase pulses start before the pulse they are made for and how much longer they are supposed to last by using the functions pulser_phase_switch_delay() and pulser_grace_period() (these functions replace the deprectated but still supported keywords PHASE_SWITCH_DELAY and GRACE_PERIOD in the ASSIGNMENTS section).

Back: Phase channel setup Forward: 8.2 Defining Pulses   FastBack: 8. Using Pulsers Up: 8.1 Setting up the Pulser FastForward: 9. Example EDL Scripts         Top: fsc2 Contents: Table of Contents Index: Index About: About This Document

8.1.2 PHASES section

The PHASES section is for defining with phase sequences and, optionally, acquisition sequences. As the word says a phase sequence defines for one (or more) pulses the sequence of phases a pulse is switched between during the experiment. For example, in a phase cycled stimulated echo experiment the first microwave pulse usually is set first to a +X phase, then to -X, again to +X and finally to -X. The second pulse will run at the same time through the sequence +X, +X, -X and -X. The third pulse has alway the same +X phase. Because a constant phase of +X is the default, only two phase sequences have to be defined:

PHASE_SEQUENCE_1: +x, -x, +x, -x;  // for 1st pulse
PHASE_SEQUENCE_2: +x, +x, -x, -x;  // for 2nd pulse

As can be seen from this example the keyword is PHASE_SEQUENCE(18), followed by an optional underscore and the number of the phase sequence (if there is only one phase sequence no number is needed). For the phase number any number between 0 and 2147483647 (2^32 - 1) can be chosen. Of course the lengths of all phase sequences have to be identical.

Please note that due to hardware limitations for the W-band configuration of the Rulbus pulser the phase -Y can't be used.

The following sections explain how the phase sequences become associated with certain pulses.

Beside the phase sequences also acquisition sequences can be defined. These are used by some EDL functions to determine how the results of the experiments with different phases have to be added up in order to give the final result for a complete phase cycling sequence. In the example of a phase cycled stimulated echo experiment the area of the echo measured for the second phase setting has to be subtracted from the area of the first phase, the area of the third also has to be subtracted, and for the fourth the area has to be added. Thus the acquisition sequence would be defined as:


When one has an experiment with a quadrature mixer one also can define in the acquisition sequence which of the signals from the two digitizer channels have to be used. The first channel is named A and the second B. In this case one usually also needs two acquisition sequences, one for the real part and one for the imaginary part of the signal. To distinguish between the sequences append either 1 or 2 to the keyword (optionally with an underscore in between. As an example here the phase and acquisition sequence definitions for an inversion recovery experiment with FID detection and phase cycling:

PHASE_SEQUENCE_1       = +x, +x, +x, +x, -x, -x, -x, -x;
PHASE_SEQUENCE_2       = +x, -x, +y, -y, +x, -x, +y, -y;
ACQUISITION_SEQUENCE_1 = +A, -A, +B, -B, +A, -A, +B, -B;
ACQUISITION_SEQUENCE_2 = +B, -B, -A, +A, +B, -B, -A, +A;

The definition of acquisition sequences is optional and only needed if the function get_phase_cycled_area() (see below) is going to be used. If defined their lengths have to be identical to the lengths of the phase sequences.



Instead of TIMEBASE one may also write TB:, T_B, TBASE:, T_BASE:, TIMEB, TIME_B: or TIME_BASE:.


Instead of TRIGGER_MODE also TM:, T_M:, TRIGM:, TRIG_M:, TRIGMODE:, TRIG_MODE:, T_MODE:, TMODE:, TRIGGER_M:, TRIGGERM: or TRIGGERMODE: can be used. And the keywords INTERNAL and EXTERNAL can be shortened to INTERN or INT and EXTERN or EXT.




The keywords LEVEL can be shortens to LEV, SLOPE to SL, POSITIVE to POS, NEGATIVE to NEG, IMPEDANCE to IMP and, finally, HIGH to H and LOW to L.


The function MICROWAVE can also be abbreviated to MICRO_WAVE, MICROW, MICRO_W, MWAVE, M_WAVE or M_W


Instead of TRAVELING_WAVE_TUBE all other combinations, where any of constituting words is replaced by its initial character or one or all underscore characters are missing can be used.


TRAVELING_WAVE_TUBE_GATE may also be abbreviated by all combinations, where any of constituting words is replaced by its initial character or one or all underscore characters are missing.




Instead RADIO_FREQUENCY also all combinations can be used where RADIO is replaced by R or FREQUENCY by either FREQ or F. The underscore can also be left out.


For RADIO_FREQUENCY_GATE all combinations where RADIO is replaced by R, FREQUENCY by either FREQ or F or GATE by G may be used. As usual, the underscore characters can be omitted.




Instead of V_HIGH you can also write VHIGH, V_H or VH and for V_LOW you may use VLOW, V_L or VL.


The keyword INVERTED can be shortened to INVERT or INV.


The obvious reason is, of course, causality - the pulser can't know when the external trigger is going to happen, so starting before the trigger is detected would be a bit difficult. By the way, the keyword DELAY can be abbreviated to DEL.


As usual, the keyword PHASE_SETUP can be abbreviated, either to PH_SETUP, PHASE_S, or PHS.



Back: Phase channel setup Forward: 8.2 Defining Pulses   FastBack: 8. Using Pulsers Up: 8.1 Setting up the Pulser FastForward: 9. Example EDL Scripts

This document was generated by Jens Thoms Toerring on September 6, 2017 using texi2html 1.82.