NBI Generation 3 Array Controller
Introduction
The generation 3 array controller is the latest in a series of
controllers developed at NBI in Copenhagen. The most redeeming feature of
this new unit is that it is all digital, i.e. it uses digital correlated
double sampling and digitally derived clock waveforms. As a result the
controller is small, uses little power and is very flexible to programme,
but retains all the low noise performance of the previous generations. The
whole controller, with internal power supply, fits in a single box some
18x13x7cm in size. External power can be derived from a 50W, 24V dc switch
mode power supply. Typical power consumption for operating a two channel
CCD is ~24W.
The controller comes with its own data acquisition system called ccd3comm,
which provides a complete user interface, under Linux, for setting up and
operating the controller, acquiring data, displaying images and producing
standard FITS files. It is possible to run external shell scripts or batch
files within ccd3comm. A comprehensive set of commands have been
written, that can be used to modify anything from the clock waveforms, to
setting the bias voltages and configuring the detector read format e.g.
define windows and reading back telemetry information.
The controller consists of the traditional series of boards, a power
supply for producing all the various voltage rails required for both bias
and clocking, a sequencer board based around an Altera FPGA, a digital
clock driver board and finally a video board. Communication with the
controller is over a duplex fibre optic link to a custom PCI (or soon to
be provided PCIe) interface board in the data acquisition computer. All
control logic for the PC interface card is contained in a FPGA and there
is space for up to 1GByte of DDR-DRAM, to act as a frame store. The
optical fibre connection between the host PC and the controller(s) can be
either point to point or configured in a daisy chain, using the built in
OptoRing communication system.
Power Supply
The power supply takes a 24Vdc input at up to 2.2A and converts it, by
means of six switching regulators to the various bias and digital voltages
required for the electronics. The switching regulators are synchronised to
the pixel clock to eliminate switching noise on the readout. The board
supplies high current low voltage logic voltages of 3.3V and 5V as well as
low power -5V, +/-15V and 29V for the analogue circuitry, clocks and bias
signals respectively.
Sequencer Board
This is the main board in the controller, it is based around an Altera
Cyclone FPGA and contains a 32-bit RISC Nios processor with SDRAM and
flash memory. The main clock frequency is 80MHz so every operation is
executed at a 12.5ns resolution. The sequencer board handles all the
housekeeping, communication, sequencing, general control and
synchronization.
Clock Drivers
The clocking board consists of a carrier board which can accommodate up to
four driver modules. The standard driver module contains six drivers which
are made up with a 12-bit DAC updated every 12.5ns and an amplifier to a
bi-polar output. The output is capable of delivering a voltage from -10V
to 11.95V at 900V/us with a bandwidth of about 30MHz. Virtually any kind
of waveform can be generated by these drivers, the patterns can be either
generated by a local processor or uploaded from the host PC.
It is possible to produce up to 96 clocks, when the maximum of four
carrier boards are installed. It is foreseen that modules capable of
producing high voltage EMCCD signals and ones for SWIR arrays will be
available.
Video Board
A video board can support four video channels, with each channel
consisting of a digital CDS path and bias generators to make typical
voltages for VOD , VRD, and VRG. Up to four boards (16 video channels) can
be accommodated in a single controller.
The analogue CCD video signal first passes through a dual FET input
differential amplifier before been digitised by a 14-bit ADC at 80MHz,
which is directly coupled to a FPGA digital CDS processor. The input noise
performance is 2 - 2.5
µV/√ Hz .
Any type of CDS is possible to be programmed, dual-slope has been
implemented with fixed value coefficients, i.e. no weighting. There are
several stages in the CDS chain, including the possibility to apply a
different gain to each channel to ensure similar gains for all channels,
the dual-slope is applied and a resulting unsigned 32-bit pixel value
transmitted. The controller by default provides four pixel speeds, 112kHz,
200kHz, 400kHz and 800kHz, though any reasonable speed can be derived by
suitable adjustments of the timing.
ccd3comm Data Acquisition System
The DAS, ccd3comm runs under GNU/Linux and provides a complete interface
for the controller, including a status window, a DS9 image display and a
command window. Normally a controller will be delivered with a
pre-installed and configured computer to the customer's specifications.
The package includes a user editable configuration file ccd3comm.conf
for
customisation of the ccd3comm module, for example image display
preferences and default FITS header parameters. ccd3comm has a low level
command interface where commands can be issued.
The program produces standard FITS image files and has the ability to
include complete header information on the associated instrument status,
for example through a data base interface.
The user interface is implemented as a console program that reads from
StdIn and writes on StdOut, thus ordinary piping and redirection
can be
used. This gives the user the ability to produce their own top layer that
communicates to ccd3comm though these simple pipes. For example external
shell scripts can be written, and piped to the DAS for execution.
As an alternative to shell scripts, batch files can also be used. A batch
file can be executed either from within ccd3comm by simply typing its file
name or as an argument to ccd3comm, e.g. "ccd3comm -b [filename]".
An example of a batch file is given below:
@rden 1
@xsiz 2148
@ysiz 4102
@shut 0
@time 2
file dmy.fits
expose
file bias1.fits
expose
file bias2.fits
expose
@shut 1
@time 300 0
file flat1.fits
expose
file flat2.fits
expose
q
Or an example of the shell script equivalent:
#!/bin/sh
TMPFILE="./tmpbatch"
CCD3COMM="/usr/local/bin/ccd3comm"
# setup CCD size
XSIZ=2148
YSIZ=4102
# define output file names
B1FILE=bias1.fits
B2FILE=bias2.fits
F1FILE=flat1.fits
F2FILE=flat2.fits
# Take bias images
echo @rden 1
echo @xsiz $XSIZ > $TMPFILE
echo @ysiz $YSIZ >> $TMPFILE
echo @shut 0 >> $TMPFILE
echo @time 2 >> $TMPFILE
echo file $B1FILE >> $TMPFILE
echo expose >> $TMPFILE
echo file $B2FILE >> $TMPFILE
echo expose >> $TMPFILE
# Take flats
echo @shut 1 >> $TMPFILE
echo @time 3000 >> $TMPFILE
echo file $F1FILE >> $TMPFILE
echo expose >> $TMPFILE
echo file $F2FILE >> $TMPFILE
echo expose >> $TMPFILE
echo q >> $TMPFILE
# execute commands
$CCD3COMM -b $TMPFILE
# Possible to include here for example a call to an IDL or Python
program to do analysis on the four acquired images.
Exit 0
|