This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| acquisition_and_control_module_acm_board [2025/03/11 11:16] – [Software] simon | acquisition_and_control_module_acm_board [2026/02/12 15:39] (current) – vagelis | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== The Acquisition and Control Module (ACM Board) ====== | ====== The Acquisition and Control Module (ACM Board) ====== | ||
| - | Detailed schematics of the board are available | + | ===== Schematics ===== |
| + | |||
| + | Detailed schematics of the board are available | ||
| + | |||
| + | In the following table you can find the schematics of the ACM board (in this setup Revision A is used): | ||
| + | ^ Block | ||
| + | | Top level diagram | ||
| + | | Digital Input and Clocks | ||
| + | | ADC Block | {{ : | ||
| + | | ADC Channel (x4) | ||
| + | | Power Block | {{ : | ||
| + | | FPGA | ||
| + | | FPGA Decoupling Circuit | ||
| + | | VME Block | {{ : | ||
| + | | VME - P1 | ||
| + | | VME - P2 | ||
| + | | Ethernet Block | ||
| + | | SFP Block - Optical Output (x2) | {{ : | ||
| + | | CCD Control Block | {{ : | ||
| + | | DAC | {{ : | ||
| + | | Clock Generator Block (x5) | ||
| + | | VSUB Generator Block | ||
| + | | Bias Generator Block (x4) | {{ : | ||
| + | | Bias Generator with Offset Block (x2) | {{ : | ||
| + | | CCD Connector Block | {{ : | ||
| + | | Connector placement | ||
| + | ^ Synchronisation board ||| | ||
| + | | {{ : | ||
| + | | {{ : | ||
| + | | {{ : | ||
| + | ^ Test Sequencer board Paris ||| | ||
| + | | {{ : | ||
| + | | {{ : | ||
| + | | {{ : | ||
| ===== Powering the ACM Board ===== | ===== Powering the ACM Board ===== | ||
| Line 14: | Line 47: | ||
| There exists an outdated user manual; please use it with care: {{ : | There exists an outdated user manual; please use it with care: {{ : | ||
| + | |||
| ==== Powering On and Off the ACM Board ==== | ==== Powering On and Off the ACM Board ==== | ||
| To start the ACM board, it is important to follow this order: | To start the ACM board, it is important to follow this order: | ||
| - | Turn on the VME crate. | + | * Turn on the VME crate. |
| - | + | | |
| - | Turn on the external supplies (HMP 2030). | + | |
| To shut down the ACM board: | To shut down the ACM board: | ||
| - | Turn off the HMP2030. | + | * Turn off the HMP2030. |
| + | * Turn off the VME crate. | ||
| + | |||
| + | |||
| + | ===== 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 | ||
| + | | +5 V | 4.02 A | ||
| + | | +3.3 V | 4.0 A | 970 mA | 2.4 A | | ||
| + | | -30 V | ||
| + | | +12 V | Disconnected, | ||
| + | | -12 V | ::: | ::: | ::: | | ||
| + | | + 15 V | 600 mA | ||
| + | | - 15 V | 600 mA | ||
| - | Turn off the VME crate. | ||
| ===== Software ===== | ===== Software ===== | ||
| The ACM is driven by a two-stage software system: | The ACM is driven by a two-stage software system: | ||
| - | cdaq: Sets up the ACM as a server station. | + | **cdaq:** Sets up the ACM as a server station. |
| - | + | **ldaq:** Manages communication between the server and your workstation. | |
| - | ldaq: Manages communication between the server and your workstation. | + | |
| For download and installation, | For download and installation, | ||
| Line 43: | Line 111: | ||
| Execute the following steps: | Execute the following steps: | ||
| - | Navigate to the directory: /ccd-cdaq | + | * Navigate to the directory: /ccd-cdaq |
| - | + | | |
| - | Run: ./ | + | |
| Start Python scripts: | Start Python scripts: | ||
| - | python start_imagebuilders.py | + | * python start_imagebuilders.py |
| - | + | | |
| - | python ./ | + | |
| Execute commands: | Execute commands: | ||
| - | ./ | + | - ./ |
| + | - ./ | ||
| + | - ./ | ||
| + | - ./ | ||
| + | - ./ | ||
| - | ./sendrun.py --to CCDID ' | + | These steps are part of the start_module.py script. |
| - | ./sendrun.py --to CCDID ' | + | **Erase/Purge CCD** |
| - | ./sendrun.py --to CCDID 'daq.load_current_sequencer()' | + | * daq.ops.erase_CCD(highP=9., |
| + | * daq.ops.epurge_CCD(lowP=-9., delay=1) | ||
| - | ./ | + | **Image Acquisition** |
| - | Steps 5 and further are part of the start_module.py script. | + | * daq.set_run(" |
| + | * daq.prepare_image(fname=" | ||
| + | * daq.only_take_image(level=2) | ||
| - | Erase/Purge CCD | + | **Trace Acquisition** |
| - | daq.ops.erase_CCD(highP=9., delay=2) | + | * daq.take_trace(fname=" |
| - | daq.ops.epurge_CCD(lowP=-9., | + | **To shut down CDAQ:** |
| - | Image Acquisition | + | * Run screen -ls to check active clients. |
| + | * Use ./ | ||
| + | * If unsuccessful, | ||
| + | * Close the Tmux session using Ctrl+C & Ctrl+D. | ||
| - | daq.set_run(" | + | The CCDID is assigned by the board. For example, board number 105 has the ID ccd105 |
| - | daq.prepare_image(fname=" | + | ==== Synchronization Board ==== |
| - | daq.only_take_image(level=2) | + | To synchronize multiple ACMs, a synchronization board is used. Communication between ACMs and the synchronization board is managed by the cdaq software, but ACMs must be set up correctly: |
| - | Trace Acquisition | + | * Assign one ACM as the master and others as slaves. (Master = Red LED, Slave = Green LED.) |
| + | * Send the ESS command to the master board, enabling it to communicate with the sync board. | ||
| + | * Assign all ACMs to the same pool (otherwise, commands will be chained instead of handled simultaneously). | ||
| + | * Send the CEX command to the pool so they listen to the sync board’s clock. (Yellow LED next to the Ethernet connection indicates an internal clock; off means external.) | ||
| + | * Send commands to the pool; the software will handle the rest. | ||
| - | daq.take_trace(fname=" | + | If the external clock is disconnected, it will automatically switch to the internal clock (not recommended). It will keep searching for an external clock and switch back once reconnected. |
| - | To shut down CDAQ: | + | Master/ |
| - | Run screen -ls to check active clients. | + | * DSS+EXS = Slave board (Green LED) |
| + | * ESS+EXS = Master board (Red LED) | ||
| - | Use ./ | + | **Note:** Different cable lengths can cause issues. |
| - | If unsuccessful, | + | ===== Software Installation and Test ===== |
| - | Close the Tmux session using Ctrl+C & Ctrl+D. | + | Before installing |
| - | The CCDID is assigned by the board. For example, board number 105 has the ID ccd105 (For Rev A, it’s 1). The ID is determined by the board' | + | [[https:// |
| - | ==== How to start the CDAQ and to communicate with the acm board ==== | + | * Install: sudo apt install mosquitto |
| + | [[https:// | ||
| + | * Install: sudo apt install tmux | ||
| - | - Go into the directory /ccd-cdaq | + | Before installing |
| - | - ./ | + | |
| - | - Python start_imagebuilders.py | + | |
| - | - Python ./ | + | |
| - | | + | |
| - | - ./sendrun.py --to CCDID ‘daq.init_ccd(“.bcf file”, “.seq file”)’ | + | |
| - | - ./sendrun.py --to CCDID ‘daq.daemon.send_command(“EHV”)’ | + | |
| - | - ./sendrun.py --to CCDID ‘daq.load_current_sequencer()’ | + | |
| - | - ./sendrun.py --to CCDID ‘daq.startup_ccd()’ | + | |
| - | The second part (step 5 and futher) are part of the start_module.py script | + | To upload firmware, use Quartus: |
| + | Located at: / | ||
| - | **Erase/ | + | - Open Quartus and navigate to Tools → Programmer. |
| - | | + | |
| - | | + | |
| + | - SUBSYSTEM==" | ||
| + | Reload rules: | ||
| + | * sudo udevadm control --reload-rules | ||
| + | * sudo udevadm trigger | ||
| + | After shutting down the ACM board, firmware must be re-uploaded. A permanent installation using a .pof file is possible. | ||
| + | ==== cdaq and ldaq ==== | ||
| - | **image aquisation** | + | After this you can download the files from [[https:// |
| - | | + | |
| - | | + | - cp example.ini default.ini |
| - | | + | |
| + | | ||
| + | - ./ | ||
| + | now a tmux window sould appear, in the bottom shel type: | ||
| + | * python scripts/ | ||
| - | **Trace acquisistion** | + | Now you should see command moving around. |
| - | * daq.take_trace(fname=”trace”, ch=channel) | + | If the test was sucessull, you have to shut down the run que, clients and CDAQ: |
| + | | ||
| + | wait for this process to finish | ||
| + | | ||
| + | | ||
| + | shutdown the CDAQ | ||
| + | * ./ | ||
| + | * close the tmux sessioin using ctrl+c,ctrl+d or exit | ||
| - | when shuting | + | Now for the ldaq software follow also the README file. |
| - | - screen -ls (shows all existing clients) | + | |
| - | - ./ | + | |
| - | - Screen -r ID (If ./ | + | |
| - | - Close Tmux session using ctrl+c &ctrl+d | + | |
| - | The CCDID is set by the board for example board number 105 has the ID ccd105. (For Rev A it’s 1). The Id is set by the IP of the board, and the IP is set by the Chip ID. It is possible to change the IP through the firmware manually but in general not needed because every board gets the IP set individual by its Chip ID. The default IP for Rev B is 192.168.105.5 | + | === Rev A === |
| + | Multiple modificatioins have to made for the Rev A to work properly, first make sure that you use the correct commits: | ||
| + | * Ldaq: c5121925 | ||
| + | * Cdaq: 6adb7739 | ||
| - | ==== Synchronisation Board ==== | + | Once this happens it is necessary to manually link the path of the libACM (which should be in / |
| - | To use multiple ACM together it is necessary to synchronize them, for this a synchronisation board was developed. Communicaiton between | + | Second, also the init file in the libDAQ directory has to be heavely modified, otherwise |
| - | - Assign one ACM to be a master board and the others as slaves (if set up correctly master=red LED, slave= green LED) | + | |
| - | - Send to the Masterboard the command ESS, which allows | + | |
| - | - Asign all ACM to the same pool (otherwise commands are chained and not simultaneously handled) | + | |
| - | - Send to the pool the command CEX such that they will listen | + | |
| - | - then send command to pool, and the software will handle the rest. | + | |
| - | If the external clock is cut it will automatically switch to internal, not a recommended procedure, it will try to always search for an externall one, if reconnected it will switch to external. For the commands see chapter commands. Since the commands are wrapped in different stages it is possible to send a master/ | + | Third, there are two files the acmpy.py and daemon.py file, that have to be exchange with this versions: |
| - | * DSS+EXS= slave board (green LED) | + | |
| - | * ESS+EXS= master board (red LED) | + | |
| - | **Note:** Different cable length can cause trouble. | + | otherwise the communication between the cdaq server and the ACM itself is not proparly started and some commands will produce errors. |
| + | Fourth, you have to correct an error in the acmpy file in line 120 os.mkdirs(tmppath, | ||
| ===== Command list ===== | ===== Command list ===== | ||
| The main idea of the CDAQ is that you can send a list of commands to several | The main idea of the CDAQ is that you can send a list of commands to several | ||
| Line 159: | Line 246: | ||
| 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. The general command structure is: | 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. The general command structure is: | ||
| - | **./ | + | **./ |
| Take note of the quotation marks around the CMD, they are indeed needed (we send a string). The CCDID is set by the board for example board number 105 has the ID ccd105. All daq functions can be found in the acmpy.py file. Some function are calling ops/aqs functions, they are second level function and there corresponding files (operation/ | Take note of the quotation marks around the CMD, they are indeed needed (we send a string). The CCDID is set by the board for example board number 105 has the ID ccd105. All daq functions can be found in the acmpy.py file. Some function are calling ops/aqs functions, they are second level function and there corresponding files (operation/ | ||
| Line 190: | Line 277: | ||
| | ./ | | ./ | ||
| | ./ | | ./ | ||
| - | |||
| - | |||
| - | ===== 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 | ||
| - | | +5 V | 4.02 A | ||
| - | | +3.3 V | 4.0 A | 970 mA | 2.4 A | | ||
| - | | -30 V | ||
| - | | +12 V | Disconnected, | ||
| - | | -12 V | ::: | ::: | ::: | | ||
| - | | + 15 V | 600 mA | ||
| - | | - 15 V | 600 mA | ||
| Line 309: | Line 361: | ||
| | ::: | Z30 | 158 | ::: | ::: | ::: | ::: | | | ::: | Z30 | 158 | ::: | ::: | ::: | ::: | | ||
| | ::: | Z32 | 160 | ::: | ::: | ::: | ::: | | | ::: | Z32 | 160 | ::: | ::: | ::: | ::: | | ||
| - | |||
| - | ===== Software Installation and Test ===== | ||
| - | |||
| - | 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:// | ||
| - | |||
| - | sudo apt install mosqiotto | ||
| - | |||
| - | * [[https:// | ||
| - | |||
| - | sudo apt install tmux | ||
| - | |||
| - | Before the installation of the cdaq and ldaq take place the firmware has to be uploaded. The firmware for the ACM driver can be found here: | ||
| - | * / | ||
| - | |||
| - | To upload or update the firmware the auxiliary software //Quartus// is needed it is located here: | ||
| - | * / | ||
| - | 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 // | ||
| - | * SUBSYSTEM==" | ||
| - | 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): | ||
| - | * / | ||
| - | |||
| - | **Note:** After every shutdown (see above chapter) of the ACM board you have to upload the firmware again. | ||
| - | |||
| - | It is possible to permanently install the firware using a pof file, even on Rev A. | ||
| - | |||
| - | |||
| - | |||
| - | ==== cdaq and ldaq ==== | ||
| - | |||
| - | After this you can download the files from [[https:// | ||
| - | - cd experiment | ||
| - | - cp example.ini default.ini | ||
| - | - cp example_ccd_clients.json ccd_clients.json | ||
| - | - cd .. | ||
| - | - ./ | ||
| - | |||
| - | now a tmux window sould appear, in the bottom shel type: | ||
| - | * python scripts/ | ||
| - | |||
| - | 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 the CDAQ | ||
| - | * ./ | ||
| - | * close the tmux sessioin using ctrl+c, | ||
| - | |||
| - | Now for the ldaq software follow also the README file. | ||
| - | |||
| - | **Note:** for RevA we had to manually link the path of the libACM (which should be in / | ||
| - | |||
| - | ===== Schematics ===== | ||
| - | In the following table you can find the schematics of the ACM board (in this setup Revision A is used): | ||
| - | ^ Block | ||
| - | | Top level diagram | ||
| - | | Digital Input and Clocks | ||
| - | | ADC Block | {{ : | ||
| - | | ADC Channel (x4) | ||
| - | | Power Block | {{ : | ||
| - | | FPGA | ||
| - | | FPGA Decoupling Circuit | ||
| - | | VME Block | {{ : | ||
| - | | VME - P1 | ||
| - | | VME - P2 | ||
| - | | Ethernet Block | ||
| - | | SFP Block - Optical Output (x2) | {{ : | ||
| - | | CCD Control Block | {{ : | ||
| - | | DAC | {{ : | ||
| - | | Clock Generator Block (x5) | ||
| - | | VSUB Generator Block | ||
| - | | Bias Generator Block (x4) | {{ : | ||
| - | | Bias Generator with Offset Block (x2) | {{ : | ||
| - | | CCD Connector Block | {{ : | ||
| - | | Connector placement | ||
| - | ^ Synchronisation board ||| | ||
| - | | {{ : | ||
| - | | {{ : | ||
| - | | {{ : | ||
| - | ^ Test Sequencer board Paris ||| | ||
| - | | {{ : | ||
| - | | {{ : | ||
| - | | {{ : | ||