---+ Cryo-Electronics Firmware Design

(There has been a movement in the lab to name firmware releases after something easy to remember... ok.)

"Chicago" early release

The goal here is to get a fully functional and easy-to-interface with fridge controller. It will not include fancy things like scriptable cycles, automatic plot generation, etc, but should be capable of running manually controlled fridge cycles. This is intended to go out on a board to be delivered to Chicago in early Oct, 2009.

Necessary todo list (roughly descending order of priority):

  • Get the latest firmware onto the board (Graeme & Peter)
    • The FPGA bitstream has been frozen as of Sept 29th
    • The embedded kernel is near frozen, the only exception being network negotiation (see below)
    • The microSD filesystem is continuing to evolve as new functions are added.
  • Fix inetd spawning so no serial cable is necessary to telnet in after boot (Graeme)
  • Client-side python library, for use on & off board (Graeme)
  • Python routines to load calibration curves (Keith)
    • One set, locked to the board, to convert ADC counts into electrical units
    • One set, user configurable, to convert electrical units to physical measurements
  • Temp readout via website (Keith)
  • Fridge control via website (Keith)

Hopeful todo list:

  • Off-board client to record dirfiles + client timestamps (Graeme)
  • Fix network speed negotiation so the board can work on a gigabit network (Graeme)
  • Fridge configuration (and cal curve uploading) via website (Keith)
  • ntp client on board for timestamping (Graeme)
  • General board configuration via website (Keith/Graeme)

Long-term wishlist (Graeme)

  • Clock running at faster speed (500Hz)
  • On-board log, rolling 7-day archive of data
  • On-board scripting ability
  • Automated graph & plot production via website
  • Record board housekeeping temps & voltages

"Dave Semenko" early release

(http://www.oilersheritage.com/history/dynasty_players_davesemenko.html)

The intention of this release is to get the 16 RTD channels working as fast as possible, with little or no software. We won't support heater channels, Diodes, or web interfaces for this early, simple release. We also won't bother to read out the current sense on the drive (we can calibrate this in the lab).

We have 16 Resistive Thermometry Device (RTD) channels. Each needs to produce a sine-wave current bias, then we read-out the voltage across the RTD with a 4-wire connection.

Timestamp:

  • include the same IRIG-B and manchester timestamp firmware as the DfMux boards.

Drive Channels:

  • 4 DACs each provide 4 outputs, which together monitor 16 RTD channels
  • we want each one producing a fixed amplitude (2V p-p) sine wave at 117 Hz, sampled at 25MHz/2^15 = 762.94.. Hz (or a factor 2 lower)
  • Firmware
    • DAC_INIT: write SPI commands to initialize the DAC if necessary
    • DAC_OUT: write SPI command to send output to DAC
    • DAC_CHAIN_OUT: commands that uses DAC_OUT to send 4 output commands to the 4 DACs in the same chip that share an SPI line.
    • SINE_DRIVE: include a primitive DDS (probably just use Xilinx Coregen) that produces the sine-wave output - and then use DAC_CHAIN_OUT to send it to all channels.

RTD Sense Channels:

  • 4 ADCs each provide 8 inputs, which together monitor both the "RTD Sense" and "Current Sense" for 16 RTD channels
  • Firmware
    • ADC_INIT: SPI commands to initialize the ADC
    • ADC_INPUT: SPI command to read one ADC input.
    • ADC_CHAIN_INPUT: commands that use ADC_INPUT to cycle through all 8 inputs on a single ADC
    • ADC_FIFO: read all 16 ADC channels and push the data into a FIFO.
  • Software:
    • Take the data from the FIFO and multicast it off the board.
    • somewhere we also need to demodulate the data. We can do this on the remote computer or the PPC. Since the data rate is so low, I don't see any reason to do this in firmware. We can greatly reduce the multcast volume by doing it on the PPC. We want to multiply by both a sine and cosine wave (I and Q components), low pass the data down to 25MHz/2^22 = 5.96 Hz. We want to take the total signal magnitude, so sqrt(I^2+Q^2).

"Marty McSorley" early release

(http://en.wikipedia.org/wiki/Marty_McSorley)

  • add ability to set heater DAC voltage, and enable the output analog switch sending a current through the heaters.
  • read back heater ADC, to monitor the current being sent to the heaters (this uses the same ADC as the housekeeping on the DfMux)
  • read back the current sense on the RTD drive.

  • for each RTD drive, I want to be able to choose whether the output will be a sine wave or a DC level. I want to be able to set the amplitude of the sine wave or the DC level.

  • Software:
    • set and read anything via TCP/IP
    • nice webpage, modelled after DfMux

fancy release

  • add code to intelligently cycle the chase fridge (Dalhberg to write)
  • add PID loops
  • add ability to plot graphs of recent temperature data.


Webpage and interface Design

Like the DfMux board, we'd like to have:

  • a fastpath TCP/IP board for sending / receiving set and read commands
  • ability to multi-cast the board output
  • telnet ability

It would be good if each channel could store one data sample per minute for 7 days (24 channels x 24 hrs x 60 min x 2 bytes = 70 kBytes) in a FIFO file on RAM disk. This is just for convenience, so the user can view a webpage with the last 7 days history.

We would like to have the following webpages available

  1. System Info Page - just like the DfMux, this tells users which version of firmware is running.
  2. Dashboard page
    • most recent timestamp
    • Thermo_Ch_XX Requested_drive Measured_drive sine_or_DC (radio button) Measured_sense ADC_or_physical units (radio button) Temperature (if cal is available)
    • Heater_X Requested_drive Measured_drive Output_enabled
    • Heater_AUX on_or_off
  3. Housekeeping page
    • analog enabled?
    • most recent timestamp
    • Housekeeping voltages x8
    • board temperature from ADT7301
    • board serial number
  4. start/stop streamer page.
  5. Uploads page, allows users to upload to the onboard flash: (we should also allow download or viewing of these files)
    • a board_cal.dat file (that we will provide) that tells the board the
      • 16 RTD drive ADC counts per uA conversion, DAC counts per uA conversion
      • 16 RTD sense ADC counts per mV conversion
      • 8 heater drive ADC counts per mA conversion
    • choose a channel_name for each of the 16 RTD channels, 8 heater channels, and 8 heater_aux channels
    • channel_XX_cal.dat files, that gives two columns, providing R vs. T calibration for sensors. Max of 16 files.
    • IP address of board for next boot up.


This topic: CryoElectronics > DigitalFMux > CryoElectronicsFirmwareDesign Topic revision: r5 - 2009-09-29 - KeithVanderlinde
© 2020 Winterland Cosmology Lab, McGill University, Montréal, Québec, Canada