====== The ACM Board ====== Detail schematics of the board are available here: [[https://edg.uchicago.edu/~bogdan/DAMIC_ACM/schematics.html|ACM Schematics]]. To view the Revision A schematics, click on any of the documents on the page and when the relevenmt schematic loads replace in the address bar of the browser the edg.uchicago.edu/~bogdan/DAMIC_ACM/**doc**/.... with edg.uchicago.edu/~bogdan/DAMIC_ACM/doc/**docA**/... To power the ACM board we use the //VME8004X// from //CAEN// it provides all voltages except for the ±15 V and the -30 V, which are added manually by connecting the V1 and V2 outputs on the backside of the VME. Where the input voltages are defined in the table below: ^ Fuse ^ Input Voltage ^ | -V1 | -15 V | | +V1 | +15 V | | -V2 | -30V | | +V2 | spare fuse | ===== Powering the ACM Board ===== To start the ACM board it is **important** to follow the folowing order: - Turn the VME crate on - Turn the external supplies on (HMP 2030) To shut the ACM board down: - Turn the HMP2030 off - turn the VME crate off ===== Software ===== The software for the ACM driver can be found here: * /home/ccdtest/Desktop/ACM_Firmware To upload or update the firmware the auxiliary software //Quartus// is needed it is located here: * /intelFPGA_pro/24.2/quartus/bin It can be started by klicking on the icon on the destop, it takes a while to start. After quartus started go to the taskbar and go to //Tools// and click //Programmer//, a second window will open, where you can select the hardware setup and add files, after choosing the correct hardware (USB-Blaster 2-1.4) press start. The first window will show you messages related to the upload process. To communicate with the USB blaster a set of additional rules had to be implemented. First open/create the file ///etc/udev/rules.d/99-usb-blaster.rules// and add the following command: * SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", GROUP="usb> Then reload the rules: * sudo udevadm control --reload-rules * sudo udevadm trigger After this the setup has to be restarted for the modification to take effect. The firmware can be found here (installed is: damic_m_acm_v11a.sof): * /home/ccdtest/Desktop/ACM_Firmware/Firmware V1 **Note:** After every shutdown (see above chapter) of the ACM board you have to upload the firmware again. ===== Command list ===== The main idea of the CDAQ is that you can send a list of commands to several clients and the software will handle their execution: it will wait until one command finishes before executing the next. This is accomplished via a 'queue'. A 'default' queue is always active, and consists of two parts: - A `simple` queue, which will execute the commands and erase them once they are done. - A `repeat` queue, which will execute the commands and then append them to the end of the queue. The `printqueue` pane will print a nice view of this queue. Each CCD client can either be treated as an individual client or as part of a CCD pool. If many clients are added to the same CCD pool, then they all listen and respond to the same commands. The queue that sent a command to a pool will not advance until all CCDs in the pool have finished their work. To add a command to the que use: * ./sendrun.py --to CCDID "CMD" Replace CCDID with the name of the target CCD client, replace CMD with the actuall command zou want to send. Full documentation of the CDAQ is under way. Find below the most commonly used commands. The following commands can be sent via the command line to operate the CDAQ: ^ Command | Additional arguments ^ Explanation ^ | ./sendrun.py --to ccd1 "daq.doOneImage()" | | Takes one image | | ./delqueue.py [-t {queuerepeat}] [-n CMD_ID] | - `-t`: the type of the queue to clear. If not present, clear both. `-n`: remove a specific command. Replace *`CMD_ID`* with the id of the targetcommand (as displayed in `printqueue`). If not present, clear the whole queue. | deletes command specified in -n CMD_ID | | ./sendrun.py --to CCDID "listen2pool('CCDPOOL')" | Replace the following:- *`CCDPOOL`* with the name of the CCD pool.- *`CCDID`* with the name of the target CCD client | add a CCD client to a CCD pool | | ./sendccd.py CCDID "listen2pool(None)" | | Remove a CCD client from a CCD pool | | ./printqueue.py [-p] [-v] | -p` is persistance mode (useful e.g. for a shifter window) `-v` is verbose mode (prints all commands even if there are more than 20) | Inspect the run que | | ./printccdstatus.py [-p] | `-p` is persistance mode | Inspect the status of the CCD clients | | ./printlog.py | | Get all logs printed on screen | | ./sendqman.py "add_target(TARGET)" | | Add a non-ccd client to the run controll | | ./sendqman.py "remove_target(TARGET)" | | removes non-ccd client from the run | | ./sendccd.py CCDID "CMD" | | Sending a command to a CCD client outside the run_control queue | | ./sendrun.py --to ccd1 'daq.daemon.send_command("SEX")' | | start exposure | | ./sendrun.py --to ccd1 'daq.load_current_sequencer()' | | | | ./sendrun.py --to ccd1 'daq.daemon.send_command("AEX")' | | | | ./shutdown_client.py ccd1 | | | | ./delqueue.py | | deletes the entire queue | | python3 ./scripts/disconnect_acm.py 1 | | | | python3 ./scripts/connect_acm.py 1 | | | | ./shutdown_clients.py ccd1 | | | | ./start_clients.py | | | | reset queue -> ./pausequeue.py -- unpause | | | | ./sendrun_py --to ccd1 'daq.ops.seqrunner.set_pointer("Main", newtarget="AcquireImage") -> | | | ===== Power Rail to Ground test ===== * +3.3 -> GND 170 Ohm * +5.0 -> GND: 480 kOhm * +12 -> GND: 4.36 kOhm * -12 -> GND: 490 kOhm * -15 -> GND 285 Ohm * +15 -> GND 500 kOhm * -30 -> GND 825 kOhm Fuse continuity test * +3.3V -> ok * +5V -> ok * +15V -> ok * -15V -> ok * -30V -> ok Output Fuse test from top to bottom including the back side resistors (measuring between capacitors and resistors) * 100 Ohm * 100 Ohm * 1 kOhm * 1 kOhm * 1 kOhm * 1 kOhm ^ Supply ^ Compliance setting ^ current before firmware loading ^ current after firmware loading ^ | +5 V | 4.02 A | 110 mA | 0.18 mA | | +3.3 V | 4.0 A | 970 mA | 2.4 A | | -30 V | 100 mA | 2 mA | 0 | | +12 V | Disconnected, generated from the ±15V line ||| | -12 V | ::: | ::: | ::: | | + 15 V | 600 mA | 334 mA | 360 | | - 15 V | 600 mA | 155 mA | 160 | === Back-plane voltages === Voltage connections to the VME back-plane inputs of the ACM. ^ Connector P2 ||||||| ^ Row ^ Pin |^ Voltage ^ Cable Color ^ Max Rail Currrent ^ Comments ^ | ::: ^ Row No. ^ No. Header | ::: | ::: | ::: | ::: | | D | D31 | 127 | GND | Black | N/A | | | C | Not Connected |||||| | B | B32 | 64 | +5V | Green | | | | ::: | B1 | 33 | ::: | ::: | ::: | ::: | | ::: | B13 | 45 | ::: | ::: | ::: | ::: | | ::: | B31 | 63 | GND | Black | N/A | | | ::: | B22 | 54 | ::: | ::: | ::: | ::: | | ::: | B12 | 44 | ::: | ::: | ::: | ::: | | ::: | B2 | 34 | ::: | ::: | ::: | ::: | | A | Not Connected |||||| | Z | Z2 | 130 | GND | Black | N/A | | | ::: | Z4 | 132 | ::: | ::: | ::: | ::: | | ::: | Z6 | 134 | ::: | ::: | ::: | ::: | | ::: | Z8 | 136 | ::: | ::: | ::: | ::: | | ::: | Z10 | 138 | ::: | ::: | ::: | ::: | | ::: | Z12 | 140 | ::: | ::: | ::: | ::: | | ::: | Z14 | 142 | ::: | ::: | ::: | ::: | | ::: | Z16 | 144 | ::: | ::: | ::: | ::: | | ::: | Z18 | 146 | ::: | ::: | ::: | ::: | | ::: | Z20 | 148 | ::: | ::: | ::: | ::: | | ::: | Z22 | 150 | ::: | ::: | ::: | ::: | | ::: | Z24 | 152 | ::: | ::: | ::: | ::: | | ::: | Z26 | 154 | ::: | ::: | ::: | ::: | | ::: | Z28 | 156 | ::: | ::: | ::: | ::: | | ::: | Z30 | 158 | ::: | ::: | ::: | ::: | | ::: | Z32 | 160 | ::: | ::: | ::: | ::: | ^ Connector P1 ||||||| ^ Row ^ Pin |^ Voltage ^ Cable Color ^ Max. Rail Current ^ Comment ^ | ::: ^ Row No. ^ No. Header | ::: | ::: | ::: | ::: | | D | D30 | 126 | +3.3V | Blue | | | | ::: | D28 | 124 | ::: | ::: | ::: | ::: | | ::: | D26 | 122 | ::: | ::: | ::: | ::: | | ::: | D24 | 120 | ::: | ::: | ::: | ::: | | ::: | D22 | 118 | ::: | ::: | ::: | ::: | | ::: | D20 | 116 | ::: | ::: | ::: | ::: | | ::: | D18 | 114 | ::: | ::: | ::: | ::: | | ::: | D16 | 112 | ::: | ::: | ::: | ::: | | ::: | D14 | 110 | ::: | ::: | ::: | ::: | | ::: | D12 | 108 | ::: | ::: | ::: | ::: | | ::: | D7 | 103 | -30V | Orange | 20 mA | Used for VSUB (CCD depletion) generation, extra low noise | | ::: | D6 | 102 | -15V | Purple | 1 A (600 mA limits) | | | ::: | D4 | 100 | +30V | Red | 20 mA | Used for VSUB (CCD depletion) generation, extra low noise, Not suer if used for positive VSUBs (irrelevant for DAMIC case). Not supplied during tests | | ::: | D3 | 99 | +15V | Yellow | 1 A (600 mA limits) | | | ::: | D2 | 98 | GND | Black | N/A | | | ::: | D31 | 127 | ::: | ::: | ::: | ::: | | C | C9 | 73 | GND | Black | N/A | | | ::: | C31 | 95 | +12V | Pink | | | | ::: | C32 | 96 | +5V | Green | | | | B | B32 | 64 | +5V | ::: | ::: | ::: | | ::: | B23 | 55 | GND | Black | N/A | | | ::: | B20 | 52 | ::: | ::: | ::: | ::: | | A | A9 | 9 | GND | Black | N/A | | | ::: | A11 | 11 | ::: | ::: | ::: | ::: | | ::: | A15 | 15 | ::: | ::: | ::: | ::: | | ::: | A17 | 17 | ::: | ::: | ::: | ::: | | ::: | A19 | 19 | ::: | ::: | ::: | ::: | | ::: | A31 | 31 | -12V | Brown | | | | ::: | A32 | 32 | +5V | Green | | | | Z | Z2 | 130 | GND | Black | N/A | | | ::: | Z4 | 132 | ::: | ::: | ::: | ::: | | ::: | Z6 | 134 | ::: | ::: | ::: | ::: | | ::: | Z8 | 136 | ::: | ::: | ::: | ::: | | ::: | Z10 | 138 | ::: | ::: | ::: | ::: | | ::: | Z12 | 140 | ::: | ::: | ::: | ::: | | ::: | Z14 | 142 | ::: | ::: | ::: | ::: | | ::: | Z16 | 144 | ::: | ::: | ::: | ::: | | ::: | Z18 | 146 | ::: | ::: | ::: | ::: | | ::: | Z20 | 148 | ::: | ::: | ::: | ::: | | ::: | Z22 | 150 | ::: | ::: | ::: | ::: | | ::: | Z24 | 152 | ::: | ::: | ::: | ::: | | ::: | Z26 | 154 | ::: | ::: | ::: | ::: | | ::: | Z28 | 156 | ::: | ::: | ::: | ::: | | ::: | Z30 | 158 | ::: | ::: | ::: | ::: | | ::: | Z32 | 160 | ::: | ::: | ::: | ::: | ===== Software Installation ===== Before installing the ACM Board software, you have to install the auxilliary software. On our setup the files are installed in the /Home/ACM directory. * [[https://www.mosquitto.org/download/|Mosquitto broker]] sudo apt install mosqiotto * [[https://github.com/tmux/tmux/wiki|tmux]] sudo apt install tmux After this you can download the files from [[https://gitlab.com/nicolaseavalos/ccd-cdaq|GitLab]]. Go to the directory /path/to/ccd-cdaq and untar the file. To check if the installation was a sucess open the ccd-cdaq directory in terminal and send the following lines: - cd experiment - cp example.ini default.ini - cp example_ccd_clients.json ccd_clients.json - cd .. - ./start_daq.sh now a tmux window sould appear, in the bottom shel type: * python scripts/example.py Now you should see command moving around. If the test was sucessull, you have to shut down the run que, clients and CDAQ: * delqueue.py wait for this process to finish * ./shutdown_client.py fake1 -f * ./shutdown_client.py fake2 -f shutdown the CDAQ * ./shutdown_daq.py * close the tmux sessioin using ctrl+c,ctrl+d or exit ===== Schematics ===== In the following table you can find the schematics of the ACM board (in this setup Revision A is used): ^ Block ^ Revision A ^ Revision B ^ | Top level diagram | {{ :readout:acm:sch3018_1.pdf|Top Level A }} | {{ :readout:acm:sch3018_1_b.pdf| Top Level B}} | | Digital Input and Clocks | {{ :readout:acm:sch3018_2.pdf | Clock A}} | {{ :readout:acm:sch3018_2_b.pdf| Clock B}} | | ADC Block | {{ :readout:acm:sch3018_3.pdf| ADC A}} | {{ :readout:acm:sch3018_3_b.pdf| ADC B}} | | ADC Channel (x4) | {{ :readout:acm:sch3018_4_1.pdf| ADC Channel 1 A}} {{ :readout:acm:sch3018_4_2.pdf| ADC Channel 2 A}} {{ :readout:acm:sch3018_4_3.pdf| ADC Channel 3 A}} {{ :readout:acm:sch3018_4_4.pdf| ADC Channel 4 A}} | {{ :readout:acm:sch3018_4_1_b.pdf| ADC Channel 1 B}} {{ :readout:acm:sch3018_4_2_b.pdf| ADC Channel 2 B}} {{ :readout:acm:sch3018_4_3_b.pdf| ADC Channel 3 B}} {{ :readout:acm:sch3018_4_4_b.pdf| ADC Channel 4 B}} | | Power Block | {{ :readout:acm:sch3018_5.pdf| Power Block A}} | {{ :readout:acm:sch3018_5_b.pdf| Power Block B}} | | FPGA | {{ :readout:acm:sch3018_6.pdf| FPGA A}} | {{ :readout:acm:sch3018_6_b.pdf| FPGA B}} | | FPGA Decoupling Circuit | {{ :readout:acm:sch3018_7.pdf| FPGA Decoupling A}} | {{ :readout:acm:sch3018_7_b.pdf| FPGA Decoupling B}} | | VME Block | {{ :readout:acm:sch3018_8.pdf | VME Block A}} | {{ :readout:acm:sch3018_8_b.pdf| VME Block B}} | | VME - P1 | {{ :readout:acm:sch3018_9.pdf| VME - P1 A}} | {{ :readout:acm:sch3018_9_b.pdf| VME - P1 B}} | | VME - P2 | {{ :readout:acm:sch3018_10.pdf| VME - P2 A}} | {{ :readout:acm:sch3018_10_b.pdf| VME - P2 B}} | | Ethernet Block | {{ :readout:acm:sch3018_11.pdf| Ethernet Block A}} | {{ :readout:acm:sch3018_11_b.pdf| Ethernet Block B}} | | SFP Block - Optical Output (x2) | {{ :readout:acm:sch3018_12_1.pdf| Optical Output 1 A}} {{:readout:acm:sch3018_12_2.pdf| Optical Output 2 A}} | {{ :readout:acm:sch3018_12_1_b.pdf| Optical Output 1 B}} {{ :readout:acm:sch3018_12_2_b.pdf| Optical Output 2 B}} | | CCD Control Block | {{ :readout:acm:sch3018_13.pdf| Control Block A}} | {{ :readout:acm:sch3018_13_b.pdf| Control Block B}} | | DAC | {{ :readout:acm:sch3018_14.pdf| DAC A}} | {{ :readout:acm:sch3018_14_b.pdf| DAC B}} | | Clock Generator Block (x5) | {{ :readout:acm:sch3018_15_1.pdf| Clock Generator 1 A}} {{ :readout:acm:sch3018_15_2.pdf| Clock Generator 2 A}} {{ :readout:acm:sch3018_15_3.pdf| Clock Generator 3 A}} {{ :readout:acm:sch3018_15_4.pdf| Clock Generator 4 A}} {{ :readout:acm:sch3018_15_5.pdf| Clock Generator 5 A}} | {{ :readout:acm:sch3018_15_1_b.pdf| Clock Generator 1 B}} {{ :readout:acm:sch3018_15_2_b.pdf| Clock Generator 2 B}}{{ :readout:acm:sch3018_15_3_b.pdf| Clock Generator 3 B}} {{ :readout:acm:sch3018_15_4_b.pdf| Clock Generator 4 B}}{{ :readout:acm:sch3018_15_5_b.pdf| Clock Generator 5 B}} | | VSUB Generator Block | {{ :readout:acm:sch3018_16.pdf| VSUB A}} | {{ :readout:acm:sch3018_16_b.pdf| VSUB B}} | | Bias Generator Block (x4) | {{ :readout:acm:sch3018_17_1.pdf| Bias Generator 1 A}} {{ :readout:acm:sch3018_17_2.pdf| Bias Generator 2 A}} {{ :readout:acm:sch3018_17_3.pdf| Bias Generator 3 A}} {{ :readout:acm:sch3018_17_4.pdf| Bias Generator 4 A}} | {{ :readout:acm:sch3018_17_1_b.pdf| Bias Generator 1 B}} {{ :readout:acm:sch3018_17_2_b.pdf| Bias Generator 2 B}} {{ :readout:acm:sch3018_17_3_b.pdf| Bias Generator 3 B }} {{ :readout:acm:sch3018_17_4_b.pdf| Bias Generator 4 B}} | | Bias Generator with Offset Block (x2) | {{ :readout:acm:sch3018_18_1.pdf| Bias Generator 1 A}} {{ :readout:acm:sch3018_18_2.pdf|Bias Generator 2 A}} | {{ :readout:acm:sch3018_18_1_b.pdf| Bias Generator 1 B }} {{ :readout:acm:sch3018_18_1_b.pdf| Bias Generator 2 B }} | | CCD Connector Block | {{ :readout:acm:sch3018_19.pdf|CCCD Connector Block A}} | {{ :readout:acm:sch3018_19_b.pdf|CCCD Connector Block B}} | | Connector placement | {{ :readout:acm:3020_asm_top.pdf |Connector Placement A}} | {{ :readout:acm:3020_asm_top_1_.pdf |Connector Placement B}} |