CHAMP:Manual: Difference between revisions

From Monnier Group Research Wiki
Jump to navigationJump to search
No edit summary
 
(164 intermediate revisions by 5 users not shown)
Line 1: Line 1:
Manual for the CHARA-Michigan Phasetracker*
Manual for the CHARA-Michigan Phasetracker
*CHAMP*


==Overview==


{| border="1"
|+
!Tools!!Username@Computer!!Command!!Comments
|-
|  CHAMP server  || champdev@champ || champ_server || 
|-
|  CHAMP spooler  || champdev@champ || champ_spooler ||
|-
|  Filters GUI  || devel@wolverine || filtergui ||  || 
|-
|  Picomotor GUI  || devel@wolverine || picogui ||  || 
|-
|  Fringe Tracking GUI  || devel@wolverine || ftgui ||
|-
|  Infrared camera GUI  || devel@wolverine || ircamgui  ||
|-
|  ESP GUI  || observe@zoot || espgtk RETRO  || server command in /etc/rc.d/rc.local
|-
|  Shutter GUI  || observe@zoot || shutgtk  ||
|-


%TOC%
'''Bold text'''
---+ Overview


---+ Quick Startup Guide
|}


---+ Alignment
---++ Nightly Alignment
---++ Full Alignment


---+ Hardware Subsystems
{| border="1"
---++ Overview
|+  
---++ Dichroic Pickoffs
!Computer!!IP
|-
|  champ  || 192.168.3.136 
|-
|  wolverine  || 192.168.3.143
|-
|  zoot  || 192.168.3.31
|-
| lothlorien || 192.168.3.134
|-
| ctrscrut || 192.168.3.3
|-
| mirkwood || 192.168.3.131
|}


---+ Real-time system
==Quick Startup Guide==
---++ Xenomai
---+++ Install
Debian network install using debian-503-i386-businesscard.iso


I used linux.csua.berkrley.edu as a mirror for Debian archive.
How to log into CHAMP for development.
The install is pretty straightforward. I used guided partitioning using entire disc.
After install and reboot edit /etc/network/interfaces to look like this:
 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.3.136
        netmask 255.255.255.0
        network 192.168.3.0
        broadcast 192.168.3.255
        gateway 192.168.3.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.153.157.142
        dns-search chara-array.org
 
if you want to work remotely install ssh server
aptitude install openssh-server
 
aptitude search package will search a package in the debian archive.
 
Once installation finished create a file called  preference in /etc/apt
 
Package: *
Pin: release a=stable
Pin-Priority: 700
 
Package: *
Pin: release a=testing
Pin-Priority: 650
 
Package: *
Pin: release a=unstable
Pin-Priority: 600
 
Then modify /etc/apt/sources.list to look like this:
 
#
# deb cdrom:[Debian GNU/Linux 5.0.2 _Lenny_ - Official i386 NETINST Binary-1 20090629-11:06]/ lenny main
 
#deb cdrom:[Debian GNU/Linux 5.0.2 _Lenny_ - Official i386 NETINST Binary-1 20090629-11:06]/ lenny main
 
#stable
deb http://linux.csua.berkeley.edu/debian/ lenny main non-free contrib
deb-src http://linux.csua.berkeley.edu/debian/ lenny main non-free contrib
deb http://security.debian.org/ lenny/updates main non-free contrib
deb-src http://security.debian.org/ lenny/updates main non-free contrib
deb http://volatile.debian.org/debian-volatile lenny/volatile main non-free contrib
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main non-free contrib
 
#testing
deb http://ftp.us.debian.org/debian testing main non-free contrib
deb-src http://ftp.us.debian.org/debian testing main non-free contrib
 
#unstable
deb http://ftp.us.debian.org/debian unstable main non-free contrib
deb-src http://ftp.us.debian.org/debian unstable main non-free contrib
 
aptitude update
aptitude safe-upgrade
aptitude full-upgrade
 
if you get this:
E: Dynamic MMap ran out of room
 
Add the following line to /etc/apt/apt.conf
 
APT::Cache-Limit "8388608";
 
 
You will be on debian STABLE. you can install packages from testing or unstable by typing:
 
aptitude install <package> /unstable
(or /testing)
 
 
Install screen (useful when compiling remotely if ssh connection dies)
 
aptitude install screen
 
run screen
 
Now install the latest xenomai
 
cd /usr/src
 
Install the packages necessary to compile the kernel.
aptitude install kernel-package ncurses-dev fakeroot bzip2
 
Install package to retrieve latest stable xenomai from the git repository 
aptitude install git-buildpackage
aptitude install pbuilder
 
Using new howto on: http://www.xenomai.org/index.php/Building_Debian_packages
 
aptitude install devscripts debhelper dh-kpatches findutils
 
rom a Git repository
 
To build from a git Repository install these additional packages and clone the Git repository:
 
# apt-get install git-core git-buildpackage
# cd /usr/src
$ git clone git://xenomai.org/xenomai-2.5.git
 
Change to the Xenomai Git working tree and update the repository:
 
$ cd xenomai-2.5 && git fetch origin
 
Create and checkout a new branch based on a git treeish object. In this example, we create a branch v2.5.3-deb based on git tag v2.5.3:
 
xenomai-2.5$ git checkout -b v2.5.3-deb v2.5.3
 
Create a new debian changelog entry:
 
xenomai-2.5$ DEBEMAIL="your@email" DEBFULLNAME="Your Name" debchange -v 2.5.3-0.1 Release 2.5.3
 
Commit the changelog to the v2.5.3-deb branch:
 
xenomai-2.5$ git commit -a --author="Your Name <your@email>" -m 2.5.3-0.1
 
Build the packages in the parent directory:
 
xenomai-2.5$ git-buildpackage \
--git-upstream-branch=v2.5.3 \
--git-debian-branch=v2.5.3-deb \
--git-export-dir=.. \
-uc -us
 
Switch back to the master branch and delete the branch v2.5.3-deb:
 
xenomai-2.5$ git checkout master && git branch -D v2.5.3-deb
 
use dpkg to install the packages:
 
# dpkg -i *.deb
 
dpkg-query -W -f'${Description}\n' linux-patch-xenomai | grep Patch-file
 
Apply the Xenomai adeos-ipipe patch and compile kernel:
 
tar -jxf linux-2.6.32.11.tar.bz2 && cd linux-2.6.32.11
 
remember to copy to this directory the .config file used in the previous kernel
cp /boot/config-2.6.32.11-xenomai-2.5.3 .config (note: this file  could be called differently).
 
since we copied the old .config file we can use --config oldconfig
if you want to edit the kernel configuration use --config menuconfig (NEVER edit .config manually).
 
Compile and patch the kernel:
 
CONCURRENCY_LEVEL=2 fakeroot make-kpkg --initrd --added-patches xenomai --append-to-version -xenomai-2.5.3 --revision 1.0 --config oldconfig binary-arch
 
If you need to recompile the kernel additional times, avoid reapplying the xenomai patch:
 
CONCURRENCY_LEVEL=2 fakeroot make-kpkg --initrd --revision=ipipe.2.0.05  binary-arch
 
install the kernel
 
dpkg -i linux-image-2.6.31.1_ipipe.2.0.05_i386.deb
 
modify /boot/grub/menu.lst
root= should not use the device (/dev/sda1) since that may change. Use the UUID (obtained typing blkid) or the label of the disc
 
Also append "noht mem=2048M memmap=1024M" to the real time kernel using the asgtropci board.
 
install kernel and headers
dpkg -i linux-image*.deb
 
emacs /boot/grub/menu.lst
 
title          Debian GNU/Linux, kernel 2.6.32.11-xenomai-2.5.3
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.32.11-xenomai-2.5.3 root=LABEL=ROOTFS_TEST ro noht mem=2048M memmap=1024M pci=routeirq
initrd          /boot/initrd.img-2.6.32.11-xenomai-2.5.3
 
title          Debian GNU/Linux, kernel 2.6.32.11-xenomai-2.5.3 (single-user mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.32.11-xenomai-2.5.3 root=LABEL=ROOTFS_TEST ro single
initrd          /boot/initrd.img-2.6.32.11-xenomai-2.5.3
 
title          Debian GNU/Linux, kernel 2.6.26-2-686
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.26-2-686 root=LABEL=ROOTFS_TEST ro quiet
initrd          /boot/initrd.img-2.6.26-2-686
 
Also modify /etc/fstab to use UUID or LABEL instead of devices. Label names have to be unique:
 
# /etc/fstab: static file system information.
#
# <file system>        <mount point>  <type>          <options>              <dump>  <pass>
proc                    /proc          proc            defaults                0      0
LABEL=ROOTFS-XENO      /              ext3            errors=remount-ro      0      1
LABEL=SWAP-XENO        none            swap            sw                      0      0
/dev/scd0              /media/cdrom0  udf,iso9660    user,noauto            0      0
/dev/fd0                /media/floppy0  auto            rw,user,noauto          0      0
 
Modify /etc/modules to look like this:
 
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
 
loop
xeno_native
xeno_rtdm
 
In this way the xenomai modules are loaded at boot time.
 
and reboot
 
Type lsmod to see the kernel modules loaded.
It should show:
 
Module                  Size  Used by
xeno_native          105088  0
analogy_ni_pcimio      15644  0
analogy_ni_mio        44860  1 analogy_ni_pcimio
analogy_ni_tio        24956  1 analogy_ni_mio
analogy_8255            3900  1 analogy_ni_mio
analogy_ni_mite        10140  3 analogy_ni_pcimio,analogy_ni_mio,analogy_ni_tio
xeno_analogy          40220  5 analogy_ni_pcimio,analogy_ni_mio,analogy_ni_tio,analogy_8255,analogy_ni_mite
xeno_rtdm              28436  2 analogy_ni_mio,xeno_analogy
ext3                  109636  1
jbd                    43920  1 ext3
mbcache                6272  1 ext3
ide_pci_generic        3712  0
ide_core              74204  1 ide_pci_generic
ata_piix              15748  2
sata_mv                26448  0
e1000                114208  0
libata                142156  2 ata_piix,sata_mv
unix                  22992  10
 
all the analogy drives are the real-time comedi drivers (not present in mirkwood).
 
Obtain the astropci driver from the Bob Leach site. For kernel 2.6.30 is astropciFC11.tar.bz2.
 
tar xjf astropciFC11.tar.bz2
cd /usr/src/astropci/FC11/
make default
make install
 
reboot


Now with lsmod you should see an extra module:
'''1) Power on outlets'''
astropci              10944  0


I have not figured out how to create the node /dev/astropci automatically.
Open in a web browser the CHAMP and MIRC APC controls:
Use Immediate Turn On for:


execute this command to create the node:
* CHAMP scanning PZTs


astropci_make_node
* CHAMP Electronics


you can test the RTOS with xeno-test
* CHAMP picomotors (#1, 2, 4 in the list).


xeno-test was  broken but I fixed it doing the following links:
* MIRC MOXA Serial Port box.


ln -s /usr/lib/xenomai/clocktest /usr/bin/clocktest
'''2) Launch CHAMP server''' (fringe tracking and camera engine)
ln -s /usr/lib/xenomai/cyclictest /usr/bin/cyclictest
ln -s /usr/lib/xenomai/irqloop /usr/bin/irqloop
ln -s /usr/lib/xenomai/klatency /usr/bin/klatency
ln -s /usr/lib/xenomai/latency /usr/bin/latency
ln -s /usr/lib/xenomai/sigtest /usr/bin/sigtest
ln -s /usr/lib/xenomai/switchtest /usr/bin/switchtest
ln -s /usr/lib/xenomai/unit /usr/bin/unit


Install CVS and SVN to retrieve MIRC anc CHAMP trees.
'''3) Launch CHAMP spooler''' (data saving)


aptitude install cvs subversion
'''4) Launch the infrared camera GUI'''


Now test compile of old mirkwood code
Once the IR Camera gui appears:


install dependencies
* click Update DAQ in the FPA Tab.


aptitude install fftw3
* click Update Server in the FT Tab.
aptitude install fftw3-dev
aptitude install fftw3-doc


* click Config Camera in the FPA Tab.


---+++ RTNET
* click Start Exposure in the top bar.
Building RTNET


Download git tree in /usr/src/
The camera will start acquiring frames.


git clone git://rtnet.git.sourceforge.net/gitroot/rtnet/rtnet
'''4) Launch the Fringe Tracking GUI'''


Change name of directory to a tag name (otherwise dhmake refuses to write debian info to dir)
==Alignment==
===Nightly Alignment===


mv rtnet rtnet-0.9.11
Start the shutters and picomotors GUI.


Install the package dh_make
===Internal fringes with retros===


aptitude install dh-make
----
HOW TO GET RETRO FRINGES


cd rtnet-0.9.11/
* Start the retro-reflector GUI.
* Press RETE1 (becomes green), home it, select step size of 4 microns (0.004).
* for automatic RETRO search, use acceleration = 0.1, and vel=0.02.


dh_make --createorig
----
RESULTS


Type of package: single binary, multiple binary, library, kernel module or cdbs?
* May 2011 results (+/- around 0.1 mm repeatability) with the pickoff mirrors in fiducial position (mount and platform aligned manually):
[s/m/l/k/b] b


Maintainer name : root
BC: 58440
Email-Address  : root@fangorn.chara-array.org
Date            : Fri, 27 Nov 2009 03:15:25 -0800
Package Name    : rtnet
Version        : 0.9.11
License        : blank
Using dpatch    : no
Type of Package : cdbs
Hit <enter> to confirm:
Done. Please edit the files in the debian/ subdirectory now. rtnet
uses a configure script, so you probably don't have to edit the Makefiles.
fangorn:/usr/src/rtnet-0.9.11# git clone git://rtnet.git.sourceforge.net/gitroot/rtnet/rtnet
Initialized empty Git repository in /usr/src/rtnet-0.9.11/rtnet/.git/


'b' option worked when I compiled the package.
IR1 175910, IR2 172160, IR3 173123, IR4 172835, IR5 173756


Need to run this script for building dependencies:
W1W2 on B1B2: 3.15 mm (May 5) -- May 18 2011: 2.94 mm
/usr/lib/pbuilder/pbuilder-satisfydepends


Then run:
W1W2 on B2B3: 6.84 mm (May 5) -- May 18 2011: 6.77 mm


git-buildpackage -us -uc -rfakeroot --git-debian-branch=master --git-upstream-branch=origin/master --git-ignore-new
W1W2 on B3B4: 3.28 mm  -- May 17 2011: 3.12 mm for CHAMP and MIRC 4.51 mm (MIRC fiducial position)


The following packages are created:
W1W2 on B4B5: 5.70 mm  -- May 18 2011: 5.14 mm for CHAMP


rtnet_0.9.11-1.diff.gz rtnet_0.9.11-1.dsc  rtnet_0.9.11-1_i386.build  rtnet_0.9.11-1_i386.changes  rtnet_0.9.11-1_i386.deb  rtnet_0.9.11.orig.tar.gz
W1W2 on B5B6: 10.36 mm (found with IR5 210007 and BC at 0) -- May 18 2011 10.38 for champ


install debian package:
W1W2 on B6B1: not found


dpkg -i rtnet_0.9.11-1_i386.deb
* July 2011


edit /etc/rtnet.conf
Retro fringes so that we can phase with the optical combiner, with the far right vernier mirrors visually aligned.


need to change:
Retro position:


RT_DRIVER="rt_e1000"          #driver for our intel chipset
B1B2 5.10 (checked Jul 2011 with visible combiner)
RT_DRIVER_OPTIONS="cards=0,1"  #This loads RT driver for eth1


IPADDR="10.0.0.10"           
B2B3 5.940


# Simple setup: List of TDMA slaves
B3B4 5.375
TDMA_SLAVES="10.0.0.9"        # this is the VME address (could add mirkwood too as 10.0.0.8)


To test RTNET do the following
B4B5 5.841


Shutdown network interface/s
B5B6 5.720


ifdown eth0
B6B1 -----


remove standard network driver for ethernet cards:
Pickoff
modprobe -r e1000


start rtnet:
IR1: 183939 (July 14th)


rtnet start
IR2: 177589 (July 13th)


add a route to the VME CPU
IR3: 160452 (July 13th)


rtroute add 10.0.0.9 00:01:af:17:a4:53 dev rteth0
IR4: 151714 (July 13th)


reinsert non-RT ethernet driver
IR5: 141585  (July 12th)


modprobe e1000
BC: 58440 for the moment


Test connection:


rtping 10.0.0.9


Zaber configuration file before the June 2012 alignment [[Media:zaber_alignment.txt]]
---+++ Analogy (comedi)
--------------------
---------------------
Jun 9 2012


Example programme:
IR pickoffs in default position


/**
Before re-alignment B1B2 5.52
* @file
* Analogy for Linux, output command test program
*
* @note Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>
* @note Copyright (C) 2008 Alexis Berlemont <alexis.berlemont@free.fr>
*
* Xenomai is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Xenomai is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Xenomai; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/


#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <errno.h>
#include <getopt.h>
#include <string.h>


#include <native/task.h>
After re-alignment


#include <analogy/analogy.h>
B1B2 5.39


/* Default command's parameters */
B3B4 5.55


/* For write operation, we consider
B5B6 5.50 -> 5.28 after moving PZT 6 mount
  the default subdevice index is 1 */
#define ID_SUBD 1
/* For simplicity sake, a maximum channel
  count is defined */
#define MAX_NB_CHAN 10
/* Four channels used by default */
#define NB_CHAN 4
/* One hundred triggered scans by default */
#define NB_SCAN 100


#define FILENAME "analogy0"
===Internal fringes with delaylines===


#define BUF_SIZE 10000
----
Jan 2011: Using Delaylines+ new delayline retros


static unsigned char buf[BUF_SIZE];
B3/B4, W1 2.2000, W2 2.0079
static char *filename = FILENAME;
static char *str_chans = "0,1";
static unsigned int chans[MAX_NB_CHAN];
static int verbose = 0;
static int real_time = 0;
static int use_mmap = 0;


static RT_TASK rt_task_desc;


/* The command to send by default */
15 July 2011: fringes on W1(B1)-W2(B6) on MIRC, with W1 at 1.000000 m and W2 at 1.222642 m.
a4l_cmd_t cmd = {
  .idx_subd = ID_SUBD,
  .flags = 0,
  .start_src = TRIG_INT,
  .start_arg = 0,
  .scan_begin_src = TRIG_TIMER,
  .scan_begin_arg = 2000000, /* in ns */
  .convert_src = TRIG_NOW,
  .convert_arg = 0, /* in ns */
  .scan_end_src = TRIG_COUNT,
  .scan_end_arg = 0,
  .stop_src = TRIG_COUNT,
  .stop_arg = NB_SCAN,
  .nb_chan = 0,
  .chan_descs = chans,
};


a4l_insn_t insn = {
B6/B1. W1 2.0000, W2 2.2250
  .type = A4L_INSN_INTTRIG,
  .idx_subd = ID_SUBD,
  .data_size = 0,
};


struct option cmd_write_opts[] = {
Delayline delay equation
  {"verbose", no_argument, NULL, 'v'},
  {"real-time", no_argument, NULL, 'r'},
  {"device", required_argument, NULL, 'd'},
  {"subdevice", required_argument, NULL, 's'},
  {"scan-count", required_argument, NULL, 'S'},
  {"channels", required_argument, NULL, 'c'},
  {"mmap", no_argument, NULL, 'm'},
  {"help", no_argument, NULL, 'h'},
  {0},
};


void do_print_usage(void)
W1- W2 = delay = 0.295 - 0.104 n
{
  fprintf(stdout, "usage:\tcmd_write [OPTS]\n");
  fprintf(stdout, "\tOPTS:\t -v, --verbose: verbose output\n");
  fprintf(stdout,
  "\t\t -d, --device: "
  "device filename (analogy0, analogy1, ...)\n");
  fprintf(stdout, "\t\t -s, --subdevice: subdevice index\n");
  fprintf(stdout, "\t\t -S, --scan-count: count of scan to perform\n");
  fprintf(stdout, "\t\t -c, --channels: channels to use (ex.: -c 0,1)\n");
  fprintf(stdout, "\t\t -m, --mmap: mmap the buffer\n");
  fprintf(stdout, "\t\t -h, --help: print this help\n");
}


int main(int argc, char *argv[])
where n= difference between beam numbers
{
  int ret = 0, len, ofs;
  unsigned int i, scan_size = 0, cnt = 0;
  unsigned long buf_size;
  void *map = NULL;
  a4l_desc_t dsc = { .sbdata = NULL };


  /* Compute arguments */
n=1 -> 0.191
  while ((ret = getopt_long(argc,
    argv,
    "vrd:s:S:c:mh", cmd_write_opts, NULL)) >= 0) {
    switch (ret) {
    case 'v':
      verbose = 1;
      break;
    case 'r':
      real_time = 1;
      break;
    case 'd':
      filename = optarg;
      break;
    case 's':
      cmd.idx_subd = insn.idx_subd = strtoul(optarg, NULL, 0);
      break;
    case 'S':
      cmd.stop_arg = strtoul(optarg, NULL, 0);
      break;
    case 'c':
      str_chans = optarg;
      break;
    case 'm':
      use_mmap = 1;
      break;
    case 'h':
    default:
      do_print_usage();
    return 0;
    }
  }


  /* Recover the channels to compute */
n=5 -> -0.225
  do {
    cmd.nb_chan++;
    len = strlen(str_chans);
    ofs = strcspn(str_chans, ",");
    if (sscanf(str_chans, "%u", &chans[cmd.nb_chan - 1]) == 0) {
      fprintf(stderr, "cmd_write: bad channels argument\n");
      return -EINVAL;
    }
    str_chans += ofs + 1;
  } while (len != ofs);


  /* Update the command structure */
11 June 2012: fringes on W1(B1)-W2(B6) on MIRC, with W1 at 1.000000 m and W2 at 1.222525 m.
  cmd.scan_end_arg = cmd.nb_chan;
Ealing IR1 68580
Ealing IR6 87750


  if (real_time != 0) {
15 June 2012: W1(B1)-W2(B2) 2.200000m and 2.0079, offset was -1.1 mm


    if (verbose != 0)
      printf("cmd_write: switching to real-time mode\n");


    /* Prevent any memory-swapping for this program */
=== J band experiment ===
    ret = mlockall(MCL_CURRENT | MCL_FUTURE);
    if (ret < 0) {
      ret = errno;
      fprintf(stderr, "cmd_write: mlockall failed (ret=%d)\n",
      ret);
      goto out_main;
    }


    /* Turn the current process into an RT task */
Adding Michigan shortpass filter 1.3 um, counts 80 -> 50 (white light on ND 1 + metrology)
    ret = rt_task_shadow(&rt_task_desc, NULL, 1, 0);
    if (ret < 0) {
      fprintf(stderr,
      "cmd_write: rt_task_shadow failed (ret=%d)\n",
      ret);
      goto out_main;
    }
  }


  /* Open the device */
  ret = a4l_open(&dsc, filename);
  if (ret < 0) {
    fprintf(stderr,
    "cmd_write: a4l_open %s failed (ret=%d)\n",
    FILENAME, ret);
    return ret;
  }


  if (verbose != 0) {
    printf("cmd_write: device %s opened (fd=%d)\n",
  filename, dsc.fd);
    printf("cmd_write: basic descriptor retrieved\n");
    printf("\t subdevices count = %d\n", dsc.nb_subd);
    printf("\t read subdevice index = %d\n", dsc.idx_read_subd);
    printf("\t write subdevice index = %d\n", dsc.idx_write_subd);
  }


  /* Allocate a buffer so as to get more info (subd, chan, rng) */
-----------------
  dsc.sbdata = malloc(dsc.sbsize);
  if (dsc.sbdata == NULL) {
    fprintf(stderr, "cmd_write: malloc failed \n");
    return -ENOMEM;
  }


  /* Get this data */
===Full Alignment===
  ret = a4l_fill_desc(&dsc);
  if (ret < 0) {
    fprintf(stderr,
    "cmd_write: a4l_get_desc failed (ret=%d)\n", ret);
    goto out_main;
  }


  if (verbose != 0)
STEP 1
    printf("cmd_write: complex descriptor retrieved\n");
* Turn on the CHAMP alignment laser (red) on the CHAMP table
* Align each beam on R1 target using A0
* Align on L1 using A1
* Align on R2 using A2, putting blocker on R1 (using L1/L2-target), so you don't see two spots
* Align on target L2 using A3, putting blocker on L1 (using the R1/2-target).


  /* Get the size of a single acquisition */
STEP 2
  for (i = 0; i < cmd.nb_chan; i++) {
* Remove all blockers, put a blocker on R1
    a4l_chinfo_t *info;
* Align on Towers of Power 1 and 2 using R1-R6
* Remove all blockers, put a blocker on L1
* Align on Towers of Power 3 and 4 using L1-L6 mirrors
* Align on Tower of Power 1-2 using beam splitter A4
* Check the alignment on Tower of Power 3-4


    ret = a4l_get_chinfo(&dsc,
STEP 3
cmd.idx_subd, cmd.chan_descs[i], &info);
* Put camera target in front of camera
    if (ret < 0) {
* Align on camera target using the Towers of Power and the cheat sheet: each spot should be near the edge of the pyramid, so that it's nearly jumping if you move the mirror knobs.
      fprintf(stderr,
* Turn off the alignment laser
      "cmd_write: a4l_get_chinfo failed (ret=%d)\n",
      ret);
      goto out_main;
    }


    if (verbose != 0) {
------
      printf("cmd_write: channel %x\n", cmd.chan_descs[i]);
====Setting up camera to align spots====
      printf("\t ranges count = %d\n", info->nb_rng);
      printf("\t range's size = %d (bits)\n", info->nb_bits);
    }


    scan_size += (info->nb_bits % 8 == 0) ?
Last step is to align the picomotor actuated mirrors using the actual infrared images.
      info->nb_bits / 8 : (info->nb_bits / 8) + 1;
  }


  if (verbose != 0) {
Configurations for wide field and normal modes can be found in mainWindow.py.
    printf("cmd_write: scan size = %u\n", scan_size);
    printf("cmd_write: size to write  = %u\n",
  scan_size * cmd.stop_arg);
  }


  /* Cancel any former command which might be in progress */
Due to mechanical shifts of the camera (when filling it), the spots may not appears where expected, needing to offset the camera read by a few pixels (or in a worst case scenario to realign the pyramid).
  a4l_snd_cancel(&dsc, cmd.idx_subd);


  if (use_mmap != 0) {
2010 Jul center of pyramid on wide-field image: 23, 8
2010Jul: row off: 7, col off: 9, freq: 30


    /* Get the buffer size to map */
Jan 2011 row off:8, col off: 20, freq: 29.2571
    ret = a4l_get_bufsize(&dsc, cmd.idx_subd, &buf_size);
    if (ret < 0) {
      fprintf(stderr,
      "cmd_write: a4l_get_bufsize() failed "
      "(ret=%d)\n", ret);
      goto out_main;
    }


    if (verbose != 0)
May 2011 row 7 col 22
      printf("cmd_write: buffer size = %lu bytes\n",
    buf_size);


    /* Map the analog input subdevice buffer */
May 2012 row 7 col 18
    ret = a4l_mmap(&dsc, cmd.idx_subd, buf_size, &map);
    if (ret < 0) {
      fprintf(stderr,
      "cmd_write: a4l_mmap() failed (ret=%d)\n",
      ret);
      goto out_main;
    }


    if (verbose != 0)
------
      printf("cmd_write: mmap performed successfully "
    "(map=0x%p)\n", map);
  }


  /* Send the command to the output device */
====Shutters, spot pico ordering for alignment ====
  ret = a4l_snd_command(&dsc, &cmd);
  if (ret < 0) {
    fprintf(stderr,
    "cmd_write: a4l_snd_command failed (ret=%d)\n", ret);
    goto out_main;
  }


  if (verbose != 0)
using white light and K' filter.
    printf("cmd_write: command successfully sent\n");


  /* Set up the buffer to be written */
{| border="1"
  for (i = 0; i < BUF_SIZE; i++)
|+ Method for aligning spots on camera for 4 beams configuration
    buf[i] = i;
!Step!!Open Shutter!!Spot!!Pico [alternate]!!Comments (To be confirmed)
|-
|  1  || B1 || L1 || Dicroic 1 (or T3H)  || 
|-
|  2  || B1 || R2 || T2H  || top spot 
|-
|  3  || B2 || L2 || Dicroic 2 (or T3M)  || top spot
|-
|  4  || B2 || R3 || T2M  ||  bottom spot
|-
|  5  || B2 || R2 || BC1-2  ||  top spot
|-
|  6  || B3 || L3 || Dicroic 3 (or T4H)  || bottom spot
|-
|  7  || B3 || R4 || T1L  ||  top spot
|-
|  8  || B3 || R3 || BC2-3  ||  bottom spot
|-
|  9  || B4 || L4 || Dicroic 4 (T4M) ||  top spot
|-
|  10 || B4 || R1 || T2L  ||  top spot
|-
|  11 || B4 || R4 || BC3-4 ||  top spot
|-
|  12 || B4 || L1 || BC6-1  ||  bottom spot
|-
|}


  if (use_mmap == 0) {


    /* Send data */
{| border="1"
    while (cnt < scan_size * cmd.stop_arg) {
|+ Method for aligning spots on camera for 6 beams configuration
      unsigned int tmp =
!Step!!Open Shutter!!Spot!!Pico [alternate]!!Comments (To be confirmed)
(scan_size * cmd.stop_arg - cnt) > BUF_SIZE ?
|-
BUF_SIZE : (scan_size * cmd.stop_arg - cnt);
|  1  || B1 || L1 || Dicroic 1 (or T3H)  ||  top spot
|-
|  2  || B1 || R2 || T2H  || top spot 
|-
|  3  || B2 || L2 || Dicroic 2 (or T3M) || top spot
|-
|  4  || B2 || R3 || T2M  ||  bottom spot
|-
|  5  || B2 || R2 || BC1-2  ||  top spot
|-
|  6  || B3 || L3 || Dicroic 3 (or T4H)  || bottom spot
|-
|  7  || B3 || R4 || T1L  ||  top spot
|-
|  8  || B3 || R3 || BC2-3  ||  bottom spot
|-
|  9  || B4 || L4 || Dicroic 4 (T4M) ||  top spot
|-
|  10 || B4 || R5 || T1H || bottom spot
|-
|  11  ||  B4  || R4 || BC3-4 || top spot
|-
| 12 || B5 || L5  || Dichroic 5 || top spot
|-
| 13 ||  B5 || R6 || T1M || bottom spot
|-
| 14 || B5 || R5  || BC4-5 || bottom spot
|-
| 15 || B6 || L6 || Dichroic 6 || should be clean
|-
| 16 || B6 || R1 || T2L || top spot
|-
| 17 || B6 || R6 || BC5-6 || should be clean
|-
| 18 || B6 || L1 || BC6-1 || ???
|}


      ret = a4l_async_write(&dsc, buf, tmp, A4L_INFINITE);
Cheat-sheet:<br>
      if (ret < 0) {
[[Media:CHAMP.cheat-sheet.pdf]]<br>
fprintf(stderr,
[[Media:CHAMP.cheat-sheet.docx]]
"cmd_write: a4l_write failed (ret=%d)\n",
ret);
goto out_main;
      }
      cnt += ret;


      if (cnt == ret && cnt != 0) {
====Pictures====
ret = a4l_snd_insn(&dsc, &insn);
<br>
if (ret < 0) {
  fprintf(stderr,
  "cmd_write: triggering failed (ret=%d)\n",
  ret);
  goto out_main;
}
      }
    }
  } else {
    unsigned long front = 0;


    /* Send data through the shared buffer */
[[Image:AlignLaser.JPG|600px|Alignment Laser]]<br><br>
    while (cnt < cmd.stop_arg * scan_size) {
[[Image:Dichroics.JPG|600px|Dichroics]]<br><br>
 
[[Image:Dichroics2.JPG|600px|Dichroics]]<br><br>
      /* If the buffer is full, wait for an event
[[Image:PeriscopesL1L6.JPG|600px|Periscopes L1-L6]]<br><br>
(Note that a4l_poll() also retrieves the data amount
[[Image:PeriscopesR1R6.JPG|600px|Periscopes R1-R6]]<br><br>
to read; in our case it is useless as we have to update
[[Image:PoT12.JPG|600px|Power of Tower 1+2]]<br><br>
the data read counter) */
[[Image:PoT34.JPG|600px|Power of Tower 3+4]]<br><br>
      if (front == 0) {
[[Image:Pyramides.JPG|600px|Pyramides]]<br><br>
ret = a4l_poll(&dsc, cmd.idx_subd, A4L_INFINITE);
if (ret < 0) {
  fprintf(stderr,
  "cmd_write: a4l_mark_bufrw() failed (ret=%d)\n",
  ret);
  goto out_main;
} else
  front = (unsigned long)ret;
      }
 
      /* Update the variable front according to the data amount
we still have to send */
      if (front > (scan_size * cmd.stop_arg - cnt))
front = scan_size * cmd.stop_arg - cnt;
 
      /* Perform the copy
(Usually, such an operation should be avoided: the shared
buffer should be used without any intermediate buffer,
the "mmaped" buffer is interesting for saving data copy) */
      memcpy(map + (cnt % buf_size),
    buf + (cnt % BUF_SIZE), front);
 
      /* Update the counter */
      cnt += front;
 
      /* Retrieve and update the buffer's state
(In output case, we recover how many bytes can be
written into the shared buffer) */
      ret = a4l_mark_bufrw(&dsc, cmd.idx_subd, front, &front);
      if (ret < 0) {
fprintf(stderr,
"cmd_write: a4l_mark_bufrw() failed (ret=%d)\n",
ret);
goto out_main;
      }
      if (cnt == front && cnt != 0) {
ret = a4l_snd_insn(&dsc, &insn);
if (ret < 0) {
  fprintf(stderr,
  "cmd_write: triggering failed (ret=%d)\n",
  ret);
  goto out_main;
}
      }
    }
  }
 
  if (verbose != 0)
    printf("cmd_write: %d bytes successfully written\n", cnt);
 
  ret = 0;
 
out_main:
 
  /* Free the buffer used as device descriptor */
  if (dsc.sbdata != NULL)
    free(dsc.sbdata);
 
  /* Release the file descriptor */
  a4l_close(&dsc);
 
  return ret;
}
 
Makefile for programme:
 
CC = $(shell /usr/bin/xeno-config --cc)
LXRT_CFLAGS = $(shell /usr/bin/xeno-config --skin=native --cflags) 
LXRT_LDFLAGS = $(shell /usr/bin/xeno-config --skin=native --ldflags)
EXTRA_LDFLAGS = -lanalogy -lrtdm
OBJ = cmd_write
SRC    :=  $(OBJ).c
 
all: $(OBJ)
 
$(OBJ): $(SRC)
$(CC) $(SRC) $(LXRT_CFLAGS) $(LXRT_LDFLAGS) $(EXTRA_LDFLAGS) -o $(OBJ)
 
clean:
rm -fr *.mod.c *.o *.ko $(OBJ) *~ .$(OBJ) .tmp_versions
 
install:
install -m 0755 $(OBJ) /usr/local/bin
 
.PHONY: clean


==Hardware Subsystems==
===Overview===
=== Dichroic Pickoffs===




Line 865: Line 373:
%BR%  
%BR%  


---++ Piezo Scanners
===Piezo Scanners===
Piezojena 8micron
Hardware card from National Instruments


---++ Beamsplitters
Old piezos: Piezojena 8 micron
 
New piezos: piezosystemjena 100 microns, PZ100SG
 
===Beamsplitters===


The IR-grade Fused silica beamsplitters are 50% +/- 10% over the full JHK' bandpasses.  The coatings were done by Omega Optical and
The IR-grade Fused silica beamsplitters are 50% +/- 10% over the full JHK' bandpasses.  The coatings were done by Omega Optical and
Line 877: Line 387:


%BR%
%BR%
---++ Towers of Power
===Towers of Power===
---++ Image Slicers
===Image Slicers===
---++ CHAMP Dewar
===CHAMP Dewar===
---++ Filterset
===Filterset===
---++ Triplet
=== Triplet===
---++ HAWAII-1 Detector
===HAWAII-1 Detector===
 
 
== Software==
===Real-time system (notes from Ettore 2010May) ===
Click here for detail on the upgrade to the realtime system  [[RT_System]]
===Interface Computer (wolverine)===
 
====Generating OPD Map====
JDM: 2011Jan30
 
1. Acquire internal fringes using the Retro Cube A/B.  See wiki page XXXX for table of pickoff mirror positions and Newport ESPGTK positions for easily acquiring fringes.
 
2. Take ~5 datasets (10 seconds each) of fringe data, ideally with slightly different phase offsets.  As of 2011Jan30, we are using the kludge nsave=10000 which outputs a binary file called ~champdev/control/CHAMP/User/ftdata_#######.dat  . This will get standardized using a fits format soon.
 
3. Copy datasets to wolverine for analysis: user: ~observe/CHAMP/Opdmap/Ftdata_DATE
 
4. run idl in ~observe/CHAMP/Opdmap
 
IDL> .r ftdata2idlvar.script
 
choose your FTDATA_DATE directory using dialog box [click on right-hand side of panel] and wait for it to finish. This may take a long while if one has recorded long sets of data. Will be much faster as FITS files.
IDL> .r opdmap_solver.script
 
Choose the ftdata*dat.idlvar file
 
the program wills how you fringes from 6 combiners. choose the one with fringes!
 
[Not working yet: JDM]
 
=== CHAMP control===
=== Actuators===
==Realtime Computer (champ)==
=== Camera Readout===
=== Piezo control===
 
Old PZT national instrument bnc cable to pico box:
 
A00, to left box, beam 5
A01, to middle box, beam 3
A02, to right box, beam 1


---+ Software
===Delay line communication===
---++ Interface Computer (wolverine)
---+++ CHAMP control
---+++ Actuators
---++ Realtime Computer (champ)
---+++ Camera Readout
---+++ Piezo control
---+++ Delay line communication


---+ Appendices
== Appendices==


---++ Diagrams
===Diagrams===


targets
targets
Line 902: Line 446:




---++ Spares
=== Spares===


Optics
Optics

Latest revision as of 02:13, 16 June 2012

Manual for the CHARA-Michigan Phasetracker

Overview[edit]

Tools Username@Computer Command Comments
CHAMP server champdev@champ champ_server
CHAMP spooler champdev@champ champ_spooler
Filters GUI devel@wolverine filtergui
Picomotor GUI devel@wolverine picogui
Fringe Tracking GUI devel@wolverine ftgui
Infrared camera GUI devel@wolverine ircamgui
ESP GUI observe@zoot espgtk RETRO server command in /etc/rc.d/rc.local
Shutter GUI observe@zoot shutgtk


Computer IP
champ 192.168.3.136
wolverine 192.168.3.143
zoot 192.168.3.31
lothlorien 192.168.3.134
ctrscrut 192.168.3.3
mirkwood 192.168.3.131

Quick Startup Guide[edit]

How to log into CHAMP for development.

1) Power on outlets

Open in a web browser the CHAMP and MIRC APC controls: Use Immediate Turn On for:

  • CHAMP scanning PZTs
  • CHAMP Electronics
  • CHAMP picomotors (#1, 2, 4 in the list).
  • MIRC MOXA Serial Port box.

2) Launch CHAMP server (fringe tracking and camera engine)

3) Launch CHAMP spooler (data saving)

4) Launch the infrared camera GUI

Once the IR Camera gui appears:

  • click Update DAQ in the FPA Tab.
  • click Update Server in the FT Tab.
  • click Config Camera in the FPA Tab.
  • click Start Exposure in the top bar.

The camera will start acquiring frames.

4) Launch the Fringe Tracking GUI

Alignment[edit]

Nightly Alignment[edit]

Start the shutters and picomotors GUI.

Internal fringes with retros[edit]


HOW TO GET RETRO FRINGES

  • Start the retro-reflector GUI.
  • Press RETE1 (becomes green), home it, select step size of 4 microns (0.004).
  • for automatic RETRO search, use acceleration = 0.1, and vel=0.02.

RESULTS

  • May 2011 results (+/- around 0.1 mm repeatability) with the pickoff mirrors in fiducial position (mount and platform aligned manually):

BC: 58440

IR1 175910, IR2 172160, IR3 173123, IR4 172835, IR5 173756

W1W2 on B1B2: 3.15 mm (May 5) -- May 18 2011: 2.94 mm

W1W2 on B2B3: 6.84 mm (May 5) -- May 18 2011: 6.77 mm

W1W2 on B3B4: 3.28 mm -- May 17 2011: 3.12 mm for CHAMP and MIRC 4.51 mm (MIRC fiducial position)

W1W2 on B4B5: 5.70 mm -- May 18 2011: 5.14 mm for CHAMP

W1W2 on B5B6: 10.36 mm (found with IR5 210007 and BC at 0) -- May 18 2011 10.38 for champ

W1W2 on B6B1: not found

  • July 2011

Retro fringes so that we can phase with the optical combiner, with the far right vernier mirrors visually aligned.

Retro position:

B1B2 5.10 (checked Jul 2011 with visible combiner)

B2B3 5.940

B3B4 5.375

B4B5 5.841

B5B6 5.720

B6B1 -----

Pickoff

IR1: 183939 (July 14th)

IR2: 177589 (July 13th)

IR3: 160452 (July 13th)

IR4: 151714 (July 13th)

IR5: 141585 (July 12th)

BC: 58440 for the moment


Zaber configuration file before the June 2012 alignment Media:zaber_alignment.txt



Jun 9 2012

IR pickoffs in default position

Before re-alignment B1B2 5.52


After re-alignment

B1B2 5.39

B3B4 5.55

B5B6 5.50 -> 5.28 after moving PZT 6 mount

Internal fringes with delaylines[edit]


Jan 2011: Using Delaylines+ new delayline retros

B3/B4, W1 2.2000, W2 2.0079


15 July 2011: fringes on W1(B1)-W2(B6) on MIRC, with W1 at 1.000000 m and W2 at 1.222642 m.

B6/B1. W1 2.0000, W2 2.2250

Delayline delay equation

W1- W2 = delay = 0.295 - 0.104 n

where n= difference between beam numbers

n=1 -> 0.191

n=5 -> -0.225

11 June 2012: fringes on W1(B1)-W2(B6) on MIRC, with W1 at 1.000000 m and W2 at 1.222525 m. Ealing IR1 68580 Ealing IR6 87750

15 June 2012: W1(B1)-W2(B2) 2.200000m and 2.0079, offset was -1.1 mm


J band experiment[edit]

Adding Michigan shortpass filter 1.3 um, counts 80 -> 50 (white light on ND 1 + metrology)



Full Alignment[edit]

STEP 1

  • Turn on the CHAMP alignment laser (red) on the CHAMP table
  • Align each beam on R1 target using A0
  • Align on L1 using A1
  • Align on R2 using A2, putting blocker on R1 (using L1/L2-target), so you don't see two spots
  • Align on target L2 using A3, putting blocker on L1 (using the R1/2-target).

STEP 2

  • Remove all blockers, put a blocker on R1
  • Align on Towers of Power 1 and 2 using R1-R6
  • Remove all blockers, put a blocker on L1
  • Align on Towers of Power 3 and 4 using L1-L6 mirrors
  • Align on Tower of Power 1-2 using beam splitter A4
  • Check the alignment on Tower of Power 3-4

STEP 3

  • Put camera target in front of camera
  • Align on camera target using the Towers of Power and the cheat sheet: each spot should be near the edge of the pyramid, so that it's nearly jumping if you move the mirror knobs.
  • Turn off the alignment laser

Setting up camera to align spots[edit]

Last step is to align the picomotor actuated mirrors using the actual infrared images.

Configurations for wide field and normal modes can be found in mainWindow.py.

Due to mechanical shifts of the camera (when filling it), the spots may not appears where expected, needing to offset the camera read by a few pixels (or in a worst case scenario to realign the pyramid).

2010 Jul center of pyramid on wide-field image: 23, 8 2010Jul: row off: 7, col off: 9, freq: 30

Jan 2011 row off:8, col off: 20, freq: 29.2571

May 2011 row 7 col 22

May 2012 row 7 col 18


Shutters, spot pico ordering for alignment[edit]

using white light and K' filter.

Method for aligning spots on camera for 4 beams configuration
Step Open Shutter Spot Pico [alternate] Comments (To be confirmed)
1 B1 L1 Dicroic 1 (or T3H)
2 B1 R2 T2H top spot
3 B2 L2 Dicroic 2 (or T3M) top spot
4 B2 R3 T2M bottom spot
5 B2 R2 BC1-2 top spot
6 B3 L3 Dicroic 3 (or T4H) bottom spot
7 B3 R4 T1L top spot
8 B3 R3 BC2-3 bottom spot
9 B4 L4 Dicroic 4 (T4M) top spot
10 B4 R1 T2L top spot
11 B4 R4 BC3-4 top spot
12 B4 L1 BC6-1 bottom spot


Method for aligning spots on camera for 6 beams configuration
Step Open Shutter Spot Pico [alternate] Comments (To be confirmed)
1 B1 L1 Dicroic 1 (or T3H) top spot
2 B1 R2 T2H top spot
3 B2 L2 Dicroic 2 (or T3M) top spot
4 B2 R3 T2M bottom spot
5 B2 R2 BC1-2 top spot
6 B3 L3 Dicroic 3 (or T4H) bottom spot
7 B3 R4 T1L top spot
8 B3 R3 BC2-3 bottom spot
9 B4 L4 Dicroic 4 (T4M) top spot
10 B4 R5 T1H bottom spot
11 B4 R4 BC3-4 top spot
12 B5 L5 Dichroic 5 top spot
13 B5 R6 T1M bottom spot
14 B5 R5 BC4-5 bottom spot
15 B6 L6 Dichroic 6 should be clean
16 B6 R1 T2L top spot
17 B6 R6 BC5-6 should be clean
18 B6 L1 BC6-1 ???

Cheat-sheet:
Media:CHAMP.cheat-sheet.pdf
Media:CHAMP.cheat-sheet.docx

Pictures[edit]


Alignment Laser

Dichroics

Dichroics

Periscopes L1-L6

Periscopes R1-R6

Power of Tower 1+2

Power of Tower 3+4

Pyramides

Hardware Subsystems[edit]

Overview[edit]

Dichroic Pickoffs[edit]

We have provided 3 sets of pickoff optics for use with CHAMP (the angle-of-incidence is 3 degrees). Each is designed with a 30' wedge and have been oriented with thick part down (i.e., transmitted beams is bent downward by 13.7', which may be relevant for downstream combiners during alignment procedure). All substrates have a broadband AR coating on the back-surface and the reflected light comes primarily from the front surface.


  * Short-wave Pass (SWP): 

These IR-grade Fused Silica substrates are coated with a dichroic coating to reflect K' band (2-2.3 microns) and to transmit JH bands (1.1-1.8 microns).

%BR%

  * Long-wave Pass (LWP):

These Calcium Fluoride substrates are coated with a dichroic coating to reflect JH bands (1.1-1.8 microns) and to transmit K' band (2-2.3 microns and longer for possible future experiments).

%BR%

  * Pickoffs Beam-splitters (BS):

These Calcium Fluoride beamsplitters were rejected from American Torch due to the coating not meeting specifications and the performance curves being proven unreliable. We believe the the coatings are about 50/50 at HK bands but are more like 75/25 (mostly transmitting) at J and beyond K band. This might prove useful in the future, but we do not expect these pickoff optics to be the best choice for most observers. Here is a measured transmission curve from the company, although we have not verified the accuracy yet:

%BR%

Piezo Scanners[edit]

Old piezos: Piezojena 8 micron

New piezos: piezosystemjena 100 microns, PZ100SG

Beamsplitters[edit]

The IR-grade Fused silica beamsplitters are 50% +/- 10% over the full JHK' bandpasses. The coatings were done by Omega Optical and you can find the coating performance here. The angle of incidence is ~11.5 degrees.

%BR%

Towers of Power[edit]

Image Slicers[edit]

CHAMP Dewar[edit]

Filterset[edit]

Triplet[edit]

HAWAII-1 Detector[edit]

Software[edit]

Real-time system (notes from Ettore 2010May)[edit]

Click here for detail on the upgrade to the realtime system RT_System

Interface Computer (wolverine)[edit]

Generating OPD Map[edit]

JDM: 2011Jan30

1. Acquire internal fringes using the Retro Cube A/B. See wiki page XXXX for table of pickoff mirror positions and Newport ESPGTK positions for easily acquiring fringes.

2. Take ~5 datasets (10 seconds each) of fringe data, ideally with slightly different phase offsets. As of 2011Jan30, we are using the kludge nsave=10000 which outputs a binary file called ~champdev/control/CHAMP/User/ftdata_#######.dat . This will get standardized using a fits format soon.

3. Copy datasets to wolverine for analysis: user: ~observe/CHAMP/Opdmap/Ftdata_DATE

4. run idl in ~observe/CHAMP/Opdmap

IDL> .r ftdata2idlvar.script

choose your FTDATA_DATE directory using dialog box [click on right-hand side of panel] and wait for it to finish. This may take a long while if one has recorded long sets of data. Will be much faster as FITS files.

IDL> .r opdmap_solver.script

Choose the ftdata*dat.idlvar file

the program wills how you fringes from 6 combiners. choose the one with fringes!

[Not working yet: JDM]

CHAMP control[edit]

Actuators[edit]

Realtime Computer (champ)[edit]

Camera Readout[edit]

Piezo control[edit]

Old PZT national instrument bnc cable to pico box:

A00, to left box, beam 5
A01, to middle box, beam 3
A02, to right box, beam 1

Delay line communication[edit]

Appendices[edit]

Diagrams[edit]

targets filter box diagram filterwheel key


Spares[edit]

Optics

  • Two (2) fused silica beam splitters for CHAMP combiner
  • One (1) fused silica short-wave pass (SWP) dichroic pickoff
  • One (1) calcium fluoride long-wave page (LWP) dichroic pickoff
  • One (1) elliptical mirror mounted to invar piezo mount
  • Four (4) f=450mm spherical mirrors for Tower of Power
  • One (1) image slicer T1
  • One (1) image slicer T2
  • One (1) image slicer B1 [note: we are using the spare. the original B1 has some coating problems near apex and is put back as a backup/spare
  • One (1) image slicer B2 [note: the backup spare B2 has slight problem where the bottom-right quad, B2d, is too large in one dimension. This means the pyramid will not fit in the holder. If one needs to use this backup, one will need to mill-out extra clearance in the holder]


Other things: TBDocumented, some card for camera electronics. zabar motors.

  • One (1) motherboard for servers (compatible with mirkwood, champ -- one kept at CHARA, one at UM)

-- Main.monnier - 08 Feb 2009