assembly/src/hw/booster.md

5.3 KiB

Sinara 9805 RF Power Amplifier "Booster"

Firmware

Flashing

Easier way

Download and unpack the booster firmware, and then:

nix-shell -p dfu-util
dfu-util -a 0 -s 0x08000000:leave --download booster0.5.0.bin

Build from source on Fedora 38

Creating proper Nix shell for updated Rust is quite troublesome, so the faster way is actually to use any classic Linux distribution:

git clone https://github.com/quartiq/booster.git # download sources
sudo dnf install clang dfu-util
cd booster/
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # install Rust, we need rustup
rustup target add thumbv7em-none-eabihf
cargo install cargo-binutils
rustup component add llvm-tools-preview
cargo build --release
cargo objcopy --release -- -O binary booster.bin
# enter dfu mode by either serial terminal or
# press `DFU Bootloader` button while rebooting
dfu-util -a 0 -s 0x08000000:leave --download booster.bin

For version before September 2023 on NixOS

git clone git@github.com:quartiq/booster.git
cd booster
git checkout a1f83b63180511ecd68f88a04621624941d17a41 # or earlier
nix-shell -p rustup cargo rustc dfu-util
rustup target add thumbv7em-none-eabihf
cargo install cargo-binutils
rustup component add llvm-tools-preview
cargo build --release
cargo objcopy --release -- -O binary booster.bin
# enter dfu mode by either serial terminal or
# press `DFU Bootloader` button while rebooting
dfu-util -a 0 -s 0x08000000:leave --download booster.bin

Basic setup via USB

  1. nix-shell -p cutecom mosquitto appimage-run
  2. Create mosquitto config mosquitto.conf with your bound address:
    bind_address 192.168.1.123
    allow_anonymous true
    
  3. mosquitto -c mosquitto.conf -d
  4. Run cutecom
  5. Connect to the Booster via /dev/ttyACMX port, baud 9600, switch from LF to CR on newer version
  6. Send help command to check if it works
  7. Enter commands (change details if necessary):
    write broker-address 192.168.1.123
    # only if you need static IP address
    write gateway 192.168.1.1
    write ip-address 192.168.1.142
    write netmask 255.255.255.0
    # apply changes and wait until it fully rebooted
    reset
    
    Newer version:
     write broker "192.168.1.123"
     write ip "192.168.1.75"
     # apply changes and wait until it fully rebooted
     reset
    
  8. Check the Booster connects to your broker.
  9. Download AppImage from MQTT Explorer
  10. Run it with appimage-run /path/to/MQTT-Explorer-XXX.AppImage
  11. Connect to your MQTT broker
  12. Restart booster to receive settings

Calibration

  1. Assemble Kasli with one Urukul, build and flash firmware for it with booster.json
  2. Run dds_for_booster.py experiment once
  3. Attach parallel 50 Ohm load to the oscilloscope, as shown on the picture: ,
  4. Configure oscilloscope for 1M Ohm impedance
  5. Attach attenuator to the Urukul's RF2
  6. cd py/
  7. You may also need to download or install python's gmqtt and miniconf:
    python -m venv env
    source env/bin/activate.fish
    pip install git+https://github.com/quartiq/miniconf.git@84cc9046bf504cc2d0d33b84d2f3133f2faf2248#subdirectory=py/miniconf-mqtt
    
  8. Enable channels: python -m booster --broker 192.168.1.123 --prefix dt/sinara/booster/xx-xx-xx-xx-xx-xx --channel N tune=0.1
  9. Using booster_template fill in y0, y1, m, c, values using instructions below
  10. Update settings with the adjusted values
  11. Save settings with python -m booster --broker 192.168.1.123 --prefix dt/sinara/booster/xx-xx-xx-xx-xx-xx --channel N save
  12. Reboot and check settings are applied

Input power

  1. Connect Urukul's output (see booster template for exact ports) to the oscilloscope with load
  2. Measure it's RMS, convert to dBm, put it to the measured cell
  3. Connect Urukul's output to the Booster's input
  4. Get the input value from telemetry (see booster template for exact path)
  5. Do steps 1-4 for second Urukul's output
  6. Fill in slope and offset from settings
  7. Do steps 1-6 for every channel

Note: default setting and Urukul's measured values are usually the same across channels, so you can extrapolate them for all channels.

Output and reflected power

  1. Connect Urukul's output (see booster template for exact ports) to the Booster's input
  2. Connect Booster's output to the oscilloscope with load
  3. Raise channel's output_interlock_threshold to 40
  4. Turn channel's state to Enabled
  5. Measure it's RMS, convert to dBm, put it to the measured cell
  6. Get the output value from telemetry (see booster template for exact path)
  7. Disconnect the Booster's output
  8. Get the reflected value from telemetry
  9. Do steps 1-6 for second Urukul's output
  10. Fill in slope and offset from settings for output and reflected curves
  11. Set channel's output_interlock_threshold to 0
  12. Turn channel's state to Off
  13. Do steps 1-10 for every channel

Note: default setting values are usually the same across channels, so you can extrapolate them for all channels.