diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/camera_mount.jpg b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/camera_mount.jpg new file mode 100644 index 00000000000..14039fd24da --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/camera_mount.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f88a5e8ddc48962aefb9b56e06be89c3df3281c0202d1f3ca7c20d7b7c63733 +size 60170 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/index.rst new file mode 100644 index 00000000000..a37e27b3d80 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/index.rst @@ -0,0 +1,90 @@ +.. _cn0566_assy_prod_test: + +CN0566 Assembly and Production Test +=================================== + +Assembly and Production Test Procedure for CN0566 (ADALM-PHASER) + +.. video:: https://youtu.be/WR1DHfraLf8 + +Assembly +-------- + +1. Install the u.fl cables as shown. Ensure that the connector is aligned + before seating, and use a flat surface to press, such as an unused pencil + eraser: + + .. figure:: u_fl_cables.jpg + :width: 600 px + +2. Install the 40-pin M-F extender on the reverse side of the board. Place the + board on stiff antistatic foam while doing this, and use a steady, even + pressure. + + .. figure:: rpi_riser.jpg + :width: 600 px + +3. Install a 22mm M-F standoff and 12mm M-F standoff as shown below. The + threads from the 22mm standoff enter from the reverse side of the board. + + .. figure:: standoff_stackup.png + +4. Install the camera mount using two 3mm pan head screws as shown. Do not over-tighten. + + .. figure:: camera_mount.jpg + +5. Install the four tall standoffs from the top side of the board, at the four + corners. + +6. Prepare the ADALM-PLUTO: + + - Remove the board from the enclosure, leaving the SMA panel intact + - Solder the 14-pin header as noted. + + .. figure:: pluto_prep.jpg + +7. Mount the ADALM-Pluto from the top side of the board. Note that the + threaded ends of the standoff will need to be flexed slightly. Secure with 4x + M2.5 nylon nuts. + +8. Connect the U.FL cables to the ADALM-PLUTO as shown: + + - The previously installed RX2 cable from the CN0566 board to Pluto RX2A + - Snap the second cable onto the SMA to U.FL adapter. + - Snap the other end of the second cable onto Pluto TX2A, then snake the + adapter between the Pluto and CN0566, thread onto CN0566 TX_IN SMA. + - Install a 90-degree SMA adapter onto CN0566 J1 as shown, facing downward. + + .. figure:: pluto_u_fls.jpg + + +9. Connect the 14-pin ribbon cable between CN0566 and Pluto as shown: + + .. figure:: ribbon_cable_installation.jpg + +10. Mount the Raspberry Pi from the reverse side of the board. Use 4x M2.5 x 4mm pan head screws to secure. + +Test +---- + +- Place the Vivaldi antenna / Selfie-Stick directly above the assembly as shown. + The antenna should aim directly down at the center of the array. +- Plug a micro HDMI to HDMI cable into the Raspberry Pi HDMI connector closest + to the USB-C power input. +- Insert a pre-prepared SD card into the Raspberry Pi. (See below for + preparation instructions). +- Plug a keyboard into one of the remaining USB ports on the Raspberry Pi + (A mouse is optional). +- Connect a 3 amp USB-C power adapter to the power input on the CN0566. The + Raspberry Pi will boot. +- Create an SD card by following the instructions here: + :ref:`quickstart ` +- Type the following command: + + :: + + cd ~/pyadi-iio/examples/phaser + python3 phaser_prod_tst.py + +- Then press enter. The test script will automatically run and print pass/fail + results. diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/pluto_prep.jpg b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/pluto_prep.jpg new file mode 100644 index 00000000000..a83cab30c2b --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/pluto_prep.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b883c2f23fc112b07be43cdb50fd7b147d700822749ecf8b92bd78dea8ab115f +size 900849 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/pluto_u_fls.jpg b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/pluto_u_fls.jpg new file mode 100644 index 00000000000..5c4aaa1a3b0 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/pluto_u_fls.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7131fb8da8d6584af7e451bbff016594cd204923441aadebfa12b3bbe54baf3 +size 1597307 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/ribbon_cable_installation.jpg b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/ribbon_cable_installation.jpg new file mode 100644 index 00000000000..592ab304c5a --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/ribbon_cable_installation.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25de527690f36e8043fe0390764cd92993e303102bf90abe16b9fd168930f964 +size 32608 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/rpi_riser.jpg b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/rpi_riser.jpg new file mode 100644 index 00000000000..d6c7d964dce --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/rpi_riser.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b06a577d1b52959aa23db65edfb85d5a5c4e689408a2b46d67b4a2769de999df +size 694178 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/standoff_stackup.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/standoff_stackup.png new file mode 100644 index 00000000000..6e127c36546 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/standoff_stackup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02746567b3060cf3f6144889594de2bb04cb88b8da15100a32547dea21d18b75 +size 502135 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/u_fl_cables.jpg b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/u_fl_cables.jpg new file mode 100644 index 00000000000..d4dc781172a --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/assy-prod-test/u_fl_cables.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:623bd921d60392087869e64faec1e199bf95284f4c01ad911d9164b0816cf95c +size 1002060 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-08-38_pm.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-08-38_pm.png new file mode 100644 index 00000000000..8d42d7201d2 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-08-38_pm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90dfe5438269b85f19575682cf9fa0d127a3a845d77abecb459d011ec5319320 +size 398023 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-26-39_pm.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-26-39_pm.png new file mode 100644 index 00000000000..08a83c2c4de --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-26-39_pm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8be205bb6bcc399496bcf4d690910fb5687e8c73a3ab836b7f9fa9dd3dd00743 +size 752081 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-37-00_pm.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-37-00_pm.png new file mode 100644 index 00000000000..47dc24a6c82 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/2-23-2023_4-37-00_pm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b005c1e8c7592d83eb413b03ac99d5e2d3d99d54c4af34685d114ca6b5565bfc +size 734465 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/cn0566-design-files.zip b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/cn0566-design-files.zip new file mode 100644 index 00000000000..80906e7c6f6 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/cn0566-design-files.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0633b4334eca93f6459b16310a444dbb147072989c8b2d34193c1b164f088c66 +size 10023955 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex1.png new file mode 100644 index 00000000000..8fab8cd5004 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de6650c943d33a32dd09179e6609e1d5de784cd6df2aa617c70042e03825a868 +size 133183 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex2.png new file mode 100644 index 00000000000..85a86619da9 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf9eb50e70a9a4e767e6fdbdc30bcc226d967387bcafa67a9460c986fae2cd68 +size 135332 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex3.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex3.png new file mode 100644 index 00000000000..aba01d1e203 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/ex3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:207523da39c1a7a570357bb84d572eb7b7904f21b97a78ebeaabf0adec808a24 +size 122758 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/index.rst new file mode 100644 index 00000000000..45228faf6c9 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/hardware-guide/index.rst @@ -0,0 +1,161 @@ +.. _cn0566_hardware: + +CN0566 Hardware User Guide +=========================== + +:adi:`CN0566` is a phased-array beamforming antenna demonstration +platform that allows the user to experience the principles and applications of +phased array antennas. + +The RF input signal is received from an onboard 8-element patch antenna that +operates from 10GHz to 10.5GHz. Each antenna element is input to an +:adi:`ADL8107`, a low noise amplifier (LNA) that operates from +6GHz to 18GHz with 1.3dB NF and 24dB gain. The output of these amplifiers is fed into +the main core of this circuitry, two of the :adi:`ADAR1000`. The +:adi:`ADAR1000` is an 8GHz to 16GHz, 4-Channel, beamformer that +allows per-channel, 360° phase adjustment with 2.8° resolution, and 31dB gain +adjustment with 0.5dB resolution. The ADAR1000s are capable of bidirectional, +half-duplex operation. However, :adi:`CN0566` only connects the +ADAR1000 receive paths. The outputs of four LNAs get phase and amplitude shifted +by an :adi:`ADAR1000`, then summed together at its RFIO output. + +The ADAR1000’s RFIO output passes through a low pass filter before entering the +:adi:`LTC5548` mixer. The low pass filter removes the high side image +of the mixer as well as any re-radiation of the high side LO. +:adi:`LTC5548` outputs an IF of approximately 2.2 GHz which passes +through a low pass filter (LPF) to remove mixer spurs and attenuate any RF or LO +leakage. The LPF’s output, at Rx1 and Rx2, can then be mixed down and sampled by +an external 2-channel SDR receiver, such as the ADALM-PLUTO. + +The system consists of the EVAL-CN0566-RPIZ, Raspberry Pi 3 or 4 running ADI +Kuiper Linux, an ADALM-Pluto Rev. C, 5V power source, and either +keyboard/mouse/monitor OR separate host connected via VNC. The Raspberry Pi 4 +provides all SPI, I2C, and discrete digital I/O control signals. + +.. figure:: 2-23-2023_4-26-39_pm.png + + EVAL-CN0566-RPIZ Hardware + +Features +-------- + +- Provides CN0566 software control via Raspberry Pi w/ Kuiper Linux +- Includes a 10GHz to 10.5GHz onboard antenna array design but with the option to + connect your own antenna +- Supports applications running GNU Radio, Python, or MATLAB + +Videos +------ + +.. video:: https://www.youtube.com/watch?v=0hnWfTvETcU + +Documents Needed +---------------- + +- :adi:`CN0566` Circuit Note + +Equipment Required +------------------ + +**Hardware** + + - EVAL-CN0566-RPIZ Board + - Raspberry Pi 4 + - ADALM-PLUTO + - 5V, 3A, USB-C wall adapter + - HB100 microwave source + - Micro HDMI to HDMI adaptor + - HDMI to HDMI cable + - 16GB or larger SD card + - USB keyboard and mouse + - Monitor with HDMI display + - Tripod + +**Software** + + - ADI Kuiper Linux image + +Block Assignments +----------------- + +.. figure:: 2-23-2023_4-08-38_pm.png + + EVAL-CN0566-RPIZ Circuit Evaluation Block Assignment + +- Connector **P1** is the 14-pin header for connection to ADALM-Pluto +- Connector **P16** is the type C port for the supply +- Connector **RX1** is the SMA connector for RX1 output +- Connector **RX2** is the SMA connector for RX2 output +- Connector **TX_IN** is the SMA connector for TX input +- Connector **TX_OUT_1** is the SMA connector for the first TX output +- Connector **TX_OUT_2** is the SMA connector for the second TX output +- Connector **LO_OUT** is the SMA connector for the LO output +- Connector **EXT_LO** is the SMA connector for external LO input +- Connector **J3 to J10** are the footprints for SMP connectors in case an + external antenna is to be used + +Running the System +------------------ + +.. figure:: 2-23-2023_4-37-00_pm.png + + Test Setup Functional Block Diagram + +#. Connect ADALM-Pluto to Raspberry Pi via micro-USB to USB cable. +#. Connect the Raspberry Pi to the monitor via the HDMI cable. +#. Connect the keyboard and mouse to the USB port of Raspberry Pi. +#. Follow the Phaser Quick Start Guide here: + `quickstart `__ + + +CN0566 Configuration/Setup Examples +----------------------------------- + +.. figure:: ex1.png + +.. figure:: ex2.png + +.. figure:: ex3.png + +More Information and Useful Links +--------------------------------- + +- :adi:`CN0566 Circuit Note Page ` +- :adi:`ADAR1000 Product Page ` +- :adi:`ADF4159 Product Page ` +- :adi:`ADRF5019 Product Page ` +- :adi:`ADL8107 Product Page ` +- :adi:`HMC654LP2E Product Page ` +- :adi:`AD8065 Product Page ` +- :adi:`LTC5548 Product Page ` +- :adi:`ADM7170 Product Page ` +- :adi:`AD7291 Product Page ` +- :adi:`LT3460 Product Page ` +- :adi:`ADP7158 Product Page ` +- :adi:`HMC652 Product Page ` +- :adi:`HMC735 Product Page ` +- :adi:`LTC4217 Product Page ` +- :adi:`LT8609S Product Page ` +- :adi:`ADM7150 Product Page ` +- :adi:`ADP7118 Product Page ` + +Schematic, PCB Layout, Bill of Materials, Casing +------------------------------------------------ + +.. admonition:: Download + + :download:`EVAL-CN0566-RPIZ Design & Integration Files ` + + - Schematics + - PCB Layout + - Bill of Materials + - Assembly Drawing + - Allegro Project + +Additional Information +---------------------- + +- `pyADI-IIO `__ +- :ref:`PyADI-IIO Installation Guide ` +- :dokuwiki:`IIO Oscilloscope Installation Guide ` +- :dokuwiki:`Kuiper Linux ` diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/index.rst new file mode 100644 index 00000000000..ed381a144bc --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/index.rst @@ -0,0 +1,184 @@ +.. _eval-cn0566-rpiz: + +CN0566 (ADALM-PHASER) Phased Array Exploration Platform +======================================================= + +Introduction +------------ + +Phased array communications and radar systems are finding increased use in a +variety of applications. This places a greater importance on training +engineers and rapidly prototyping new phased array concepts. However, both +those imperatives have historically been difficult and expensive. That is why +Analog Devices launched the ADALM-PHASER. It is a low cost, simplified phased +array radar which allows real beamforming hardware to be used for education, +project proposals, and even software development. + +Most of the labs are run on a Python GUI, with several helper scripts. These +can be run on a remote host computer, or directly on the phaser’s Raspberry Pi +computer with the addition of a keyboard, mouse, and display. + +For more advanced application development, the Phaser is also supported in the +MATLAB RF Microwave Toolbox. Equivalent MATLAB lab exercises are in +development, and will be added below as they are completed. + +Here is a brief video introduction to beamforming and the Phased Array Platform: + +.. video:: https://www.youtube.com/watch?v=dUn2_fiOh94 + + +Quick Start Guide +----------------- + +There are a few steps that need to be performed before diving into the lab +exercises. Please visit the :ref:`Quick Start Guide `. + +Phased Array Hardware +--------------------- + +To get acquainted with the hardware, see the :ref:`Phaser Hardware +Overview ` page. + +Phased Array Software +--------------------- + +There are several pieces of software used with the CN0566 Phaser, including a +user-friendly Graphical User Interface (GUI) and a number of command-line +utilities. This page describes the various pieces of software: + +- :ref:`Phaser Software Guide (GUI and CLI utilities) ` +- :ref:`Phaser Software Guide for MATLAB ` + +Phased Array Assembly and Testing +--------------------------------- + +The phaser ships fully assembled and ready to go. Should you need to re-assemble +a disassembled board, or do a quick functionality test, refer to this page: + +- :ref:`CN0566 Assembly and Production Test ` + +Labs and Lectures +----------------- + +The ADALM-PHASER is meant for you to experience, first hand, phased array +beamforming and radar concepts. But to go along with the hardware, we’ve put +together a series of short lectures followed by hands-on labs that you can +perform with your own Phaser. A complete, printable lab manual is available +here: + +.. admonition:: Download + + :download:`Printable Phaser Lab Instructions (DOCX)` + + :download:`Printable Phaser Lab Instructions (PDF)` + +The expanded list of topics is as follows: + +- Phaser Hardware Overview, Software Setup, and Frequency Plan + + - :ref:`Phaser Hardware Overview ` + - Lecture Video + + .. video:: https://youtu.be/-Vqbgf0MjPk + +- Basics of SDR and Beamforming Control + + - :ref:`Lab: Controlling the Phaser with Python ` + - :ref:`Lab: Controlling the Phaser with MATLAB ` + + - Lecture Video + + .. video:: https://www.youtube.com/watch?v=jBGzOlThpRE + + - Lab Video + + .. video:: https://www.youtube.com/watch?v=5lihNPh4Rm0 +- Phased Array Beam Steering + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=5lihNPh4Rm0 + +- Phased Array Antenna Patterns + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=UQgmtWChNfM + +- Sidelobes and Beam Tapering + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=be_5D4eNtCY + +- Grating Lobes + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=qksh4lGysbI + + +- Beam Squint + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=LYVD014ClZI + +- Quantization Sidelobes + + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=51O5FLVZE4c + +- Analog, Digital, and Hybrid Beamforming + + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=hMiJs2NdXZY + +- Monopulse Tracking + + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=hZDopcNjVzY + +- Radar: Simple FMCW + + - Lecture and Lab Video + + .. video:: https://www.youtube.com/watch?v=CXSbLQgRFAA + +- Radar: CFAR, Range Normalization, Clutter Suppression, and Range/Velocity + + - Lab and Lecture Video + + .. video:: https://www.youtube.com/watch?v=igrN_wd_g74 + +Additional Resources +-------------------- + +This series is partially derived from several sources that also provide valuable +background information. + +- Analogue Dialogue Phased array paper series: + + - :adi:`Phased Array Antenna Patterns—Part 1: Linear Array Beam Characteristics and Array Factor ` + - :adi:`Phased Array Antenna Patterns—Part 2: Grating Lobes and Beam Squint ` + - :adi:`Phased Array Antenna Patterns—Part 3: Sidelobes and Tapering ` + +More Information and Useful Links +--------------------------------- + +- :adi:`CN0566 Product Page ` + +.. toctree:: + :titlesonly: + :maxdepth: 3 + :glob: + + */index diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/find_hb100_step_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/find_hb100_step_1.png new file mode 100644 index 00000000000..9b8ef34bbd5 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/find_hb100_step_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:868c1fb49220a41e3fc6089b2578ea05ccbf7fe0252c3a49d1489bf0396b2a4f +size 436523 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/find_hb100_step_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/find_hb100_step_2.png new file mode 100644 index 00000000000..f797e6dd0a6 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/find_hb100_step_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0ed980a62b99f75c29f371bbd211ab982973658cc8aa9948acfd71a64be6828 +size 31348 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/gain_phase_cal_plots.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/gain_phase_cal_plots.png new file mode 100644 index 00000000000..0fc8f67bdeb --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/gain_phase_cal_plots.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45762a274cdc7bf078f13d1860c3806353b48973b9ea06608eece9c7709ad538 +size 167540 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/index.rst new file mode 100644 index 00000000000..9fc2384a588 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/index.rst @@ -0,0 +1,145 @@ +.. _cn0566_basic_example: + +Controlling CN0566 (Phaser) from Python +======================================= + +The purpose of this lab is to get acquainted with how the software controls +and captures data from the Phaser hardware. You COULD skip forward to the +calibration section in this lab, which is prerequisite for the subsequent +labs, but eventually you may want to write your own custom software, or at +least modify the provided example scripts. Rest assured, very little software +knowledge is required to understand this lab; it is intended to be the Phaser +equivalent of “Hello, World!” + +Make sure that the Phaser hardware and software is set up according to +:ref:`Phaser Overview and Setup `. + +Finding the Source Frequency +---------------------------- + +There are two distinct ways to use the Phaser setup: + +- With a source of unknown frequency, such as an HB100 microwave motion sensor, + or more generally, receiving communications from one or more transmitters that + are not locked to the receiver. This tends to give the sharpest nulls in the + measured pattern. +- With the CN0566 itself providing the signal on one of the TX outputs, fed to + an antenna. This is required for FMCW RADAR applications, but is also + convenient for pattern measurements. The drawback is local leakage limits the + depth of the nulls in the pattern. + +Most of the scripts only examine a few MHz worth of bandwidth at a time, while +the HB100 frequency can vary by several tens of MHz. Thus it is essential to +know the frequency of the source. The cn0566_find_hb100.py script sweeps +several 10 MHz wide bands and attempts to locate the peak frequency. Open the +script in Thonny and run it. (The script can also be run from the command line +if preferred). Typical results are shown in Figure 1. + +.. figure:: find_hb100_step_1.png + + Find HB100 script + +Ideally, there should be a single, sharp peak. If there are several peaks or no +visible peak, close the plot and enter ‘n’ at the prompt. Reposition the HB100 +(and make sure there are no other sources nearby), then re-run the script. +Another method to ensure that the correct source is being identified is to run +the script several times, moving the HB100 toward or away from the antenna. The +peak should increase and decrease accordingly. Once the correct peak has been +identified, enter ‘y’ at the prompt as shown in Figure 2. This will save the +frequency to a calibration file that other scripts and GUIs will read in. + +.. figure:: find_hb100_step_2.png + + Saving Frequency Calibration File + +Running the Minimal Example +--------------------------- + +- Aim the HB100 at the Phaser. +- Open the cn0566_minimal_example.py script, either in Thonny, or run from the + command line. +- Observe the output, which should look similar to the figure below: + +.. figure:: minimal_example_output.png + +Here’s what we’ve done: + +- Received the 10.525 GHz signal +- Downconverted it to 2.2 GHz +- Received the 2.2 GHz IF with the Pluto SDR +- Set the Pluto’s internal PLLs to 2.2 GHz minus a small offset +- Set the Pluto’s ADC sample rate to 30 Msps +- Loaded a 20 MHz wide digital filter into the Pluto +- Capture a buffer of 1024 samples +- Plot the time domain samples +- Take the FFT of the samples, then plot. + +So what does that Python script do?? The python script, +“cn0566_minimal_example.py” first takes care of some housekeeping operations - +set the antenna to zero phase, equal gain on all elements, and set a few +parameters in the Pluto SDR. Then we are simply plotting the buffers of data +from Pluto. + +Next, change the “offset” variable (line 176) to something between -10e6 and ++10e6 (your choice!). Re-run the script and verify that the tone moves along +the horizontal axis accordingly. + +Calibrating Element Gain and Phase +---------------------------------- + +The phaser board is initially uncalibrated; each element will have a slightly +different gain and slight phase error due to numerous factors. This was fine +for finding the HB100 frequency and the minimal example, but the performance +of the subsequent labs requires that each element have a predictably +controllable gain and phase, with respect to other elements in the array. +Since there will always be both gain and phase mismatch due to manufacturing +tolerances, we’ll compensate for this in software. + +For the gain calibration, we’ll illuminate the array with the HB100 held far +away, and at mechanical boresight (zero degrees). One element at a time will +be set to its maximum gain, which is done by setting the ADAR1000 gain for the +associated channel. All other elements are set to zero. The resulting signal +level for each element is measured, and the element with the minimum gain is +chosen as a reference. A factor is then calculated for the other elements, +which are used to equalize their gains to that of the lowest gain element. + +For the phase calibration, two adjacent elements are set to the maximum +calibrated gain. The phase of one of the elements is then swept from 0 to 360 +degrees. The phase that produces the minimum null is 180 degrees away from the +phase that will match the two elements (nulls are much sharper than peaks, and +can be measured more accurately.) Each adjacent pair is measured, and an array +of phase compensation values is generated. + +The cn0566_examples.py script provides a calibration utility that will +generate calibration files. Place an HB100 (or antenna connected to J1) facing +straight at the antenna array from approximately 1.5m away. Then run: + +:: + + python3 cn0566_examples.py cal + +The script provides debug information and plots as it is running, you may have +to close out of each plot for the script to proceed. Calibration is not an exact +science, and is subject to noise, interfering signals, reflections from nearby +objects, and other impairments. But in general, plots from an acceptable +calibration run will have the following features: + +- Gain plots will show eight impulses near the middle of the horizontal axis. + The lowest impulse should be no lower than about 70% of the higherst impulse. + Note that impulse may tend to be grouped into two groups of four, with each + group representing one ADAR1000. +- Phase plots will show seven arcs centered around zero degrees, with nulls + between -180° and -135° or between 135° and 180°. + + Typical plots are shown in Figure 3. + + .. figure:: gain_phase_cal_plots.png + + Gain and Phase Calibration Plots + +After running this script, files gain_cal_val.pkl and phase_cal_val.pkl will +be placed in the working directory. The GUI program will also load these files +automatically. + +If plots differ greatly from Figure 3, examine the physical setup, reposition +the source or antenna, remove interfering objects, and re-run the script. diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/minimal_example_output.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/minimal_example_output.png new file mode 100644 index 00000000000..db1974bda35 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/basic-example/minimal_example_output.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3b071c630f16eb83c035c687d18b79d1b4b811a17a9bb150b66735d5af8ce36 +size 69780 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/index.rst new file mode 100644 index 00000000000..683c11f9d45 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/index.rst @@ -0,0 +1,95 @@ +Laboratory Exercises +==================== + +- Phaser Hardware Overview, Software Setup, and Frequency Plan + + - :ref:`Phaser Hardware Overview ` + - Lecture Video + + .. video:: https://youtu.be/-Vqbgf0MjPk + +- Basics of SDR and Beamforming Control + + - :ref:`Lab: Controlling the Phaser with Python ` + - :ref:`Lab: Controlling the Phaser with MATLAB ` + + - Lecture Video + + .. video:: https://youtu.be/jBGzOlThpRE + + - Lab Video + + .. video:: https://youtu.be/5lihNPh4Rm0 + +- Phased Array Beam Steering + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://youtu.be/5lihNPh4Rm0 + +- Phased Array Antenna Patterns + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://youtu.be/UQgmtWChNfM + +- Sidelobes and Beam Tapering + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://youtu.be/be_5D4eNtCY + +- Grating Lobes + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://youtu.be/qksh4lGysbI + + +- Beam Squint + + - :ref:`Lab Material ` + - Lecture and Lab Video + + .. video:: https://youtu.be/LYVD014ClZI + +- Quantization Sidelobes + + - Lecture and Lab Video + + .. video:: https://youtu.be/51O5FLVZE4c + +- Analog, Digital, and Hybrid Beamforming + + - Lecture and Lab Video + + .. video:: https://youtu.be/hMiJs2NdXZY + +- Monopulse Tracking + + - Lecture and Lab Video + + .. video:: https://youtu.be/hZDopcNjVzY + +- Radar: Simple FMCW + + - Lecture and Lab Video + + .. video:: https://youtu.be/CXSbLQgRFAA + +- Radar: CFAR, Range Normalization, Clutter Suppression, and Range/Velocity + + - Lab and Lecture Video + + .. video:: https://youtu.be/igrN_wd_g74 + +.. toctree:: + :titlesonly: + :maxdepth: 2 + :glob: + + */index \ No newline at end of file diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/find_hb100_step_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/find_hb100_step_1.png new file mode 100644 index 00000000000..9b8ef34bbd5 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/find_hb100_step_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:868c1fb49220a41e3fc6089b2578ea05ccbf7fe0252c3a49d1489bf0396b2a4f +size 436523 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/find_hb100_step_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/find_hb100_step_2.png new file mode 100644 index 00000000000..f797e6dd0a6 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/find_hb100_step_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0ed980a62b99f75c29f371bbd211ab982973658cc8aa9948acfd71a64be6828 +size 31348 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/gain_phase_cal_plots.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/gain_phase_cal_plots.png new file mode 100644 index 00000000000..0fc8f67bdeb --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/gain_phase_cal_plots.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45762a274cdc7bf078f13d1860c3806353b48973b9ea06608eece9c7709ad538 +size 167540 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/index.rst new file mode 100644 index 00000000000..822156680dd --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/index.rst @@ -0,0 +1,147 @@ +.. _cn0566_lab1: + +Lab 1: Basics of SDR and Beamforming Control +============================================ + +The purpose of this lab is to get acquainted with how the software controls +and captures data from the Phaser hardware. You COULD skip forward to the +calibration section in this lab, which is prerequisite for the subsequent +labs, but eventually you may want to write your own custom software, or at +least modify the provided example scripts. Rest assured, very little software +knowledge is required to understand this lab; it is intended to be the Phaser +equivalent of “Hello, World!” + +Make sure that the Phaser hardware and software is set up according to +:ref:`Phaser Overview and Setup `. + +Finding the Source Frequency +---------------------------- + +There are two distinct ways to use the Phaser setup: + +- With a source of unknown frequency, such as an HB100 microwave motion sensor, + or more generally, receiving communications from one or more transmitters that + are not locked to the receiver. This tends to give the sharpest nulls in the + measured pattern. +- With the CN0566 itself providing the signal on one of the TX outputs, fed to + an antenna. This is required for FMCW RADAR applications, but is also + convenient for pattern measurements. The drawback is local leakage limits the + depth of the nulls in the pattern. + +Most of the scripts only examine a few MHz worth of bandwidth at a time, while +the HB100 frequency can vary by several tens of MHz. Thus it is essential to +know the frequency of the source. The cn0566_find_hb100.py script sweeps +several 10 MHz wide bands and attempts to locate the peak frequency. Open the +script in Thonny and run it. (The script can also be run from the command line +if preferred.) Typical results are shown in Figure 1. + +.. figure:: find_hb100_step_1.png + + Find HB100 script + +Ideally, there should be a single, sharp peak. If there are several peaks or no +visible peak, close the plot and enter ‘n’ at the prompt. Reposition the HB100 +(and make sure there are no other sources nearby), then re-run the script. + +Another method to ensure that the correct source is being identified is to run +the script several times, moving the HB100 toward or away from the antenna. The +peak should increase and decrease accordingly. Once the correct peak has been +identified, enter ‘y’ at the prompt as shown in Figure 2. This will save the +frequency to a calibration file that other scripts and GUIs will read in. + +.. figure:: find_hb100_step_2.png + + Saving Frequency Calibration File + +Running the Minimal Example +--------------------------- + +- Aim the HB100 at the Phaser. +- Open the cn0566_minimal_example.py script, either in Thonny, or run from the + command line. +- Observe the output, which should look similar to the figure below: + + .. figure:: minimal_example_output.png + :width: 600 px + +Here’s what we’ve done: + +- Received the 10.525 GHz signal +- Downconverted it to 2.2 GHz +- Received the 2.2 GHz IF with the Pluto SDR +- Set the Pluto’s internal PLLs to 2.2 GHz minus a small offset +- Set the Pluto’s ADC sample rate to 30 MSPS +- Loaded a 20 MHz wide digital filter into the Pluto +- Capture a buffer of 1024 samples +- Plot the time domain samples +- Take the FFT of the samples, then plot. + +So what does that Python script do?? The python script, +“cn0566_minimal_example.py” first takes care of some housekeeping operations - +set the antenna to zero phase, equal gain on all elements, and set a few +parameters in the Pluto SDR. Then we are simply plotting the buffers of data +from Pluto. + +Next, change the “offset” variable (line 176) to something between -10e6 and ++10e6 (your choice). Re-run the script and verify that the tone moves along +the horizontal axis accordingly. + +Calibrating Element Gain and Phase +---------------------------------- + +The phaser board is initially uncalibrated; each element will have a slightly +different gain and slight phase error due to numerous factors. This was fine +for finding the HB100 frequency and the minimal example, but the performance +of the subsequent labs requires that each element have a predictably +controllable gain and phase, with respect to other elements in the array. +Since there will always be both gain and phase mismatch due to manufacturing +tolerances, we’ll compensate for this in software. + +For the gain calibration, we’ll illuminate the array with the HB100 held far +away, and at mechanical boresight (zero degrees). One element at a time will +be set to its maximum gain, which is done by setting the ADAR1000 gain for the +associated channel. All other elements are set to zero. The resulting signal +level for each element is measured, and the element with the minimum gain is +chosen as a reference. A factor is then calculated for the other elements, +which are used to equalize their gains to that of the lowest gain element. + +For the phase calibration, two adjacent elements are set to the maximum +calibrated gain. The phase of one of the elements is then swept from 0 to 360 +degrees. The phase that produces the minimum null is 180 degrees away from the +phase that will match the two elements (nulls are much sharper than peaks, and +can be measured more accurately.) Each adjacent pair is measured, and an array +of phase compensation values is generated. + +The cn0566_examples.py script provides a calibration utility that will +generate calibration files. Place an HB100 (or antenna connected to J1) facing +straight at the antenna array from approximately 1.5m away. Then run: + +:: + + python3 cn0566_examples.py cal + +The script provides debug information and plots as it is running, you may have +to close out of each plot for the script to proceed. Calibration is not an exact +science, and is subject to noise, interfering signals, reflections from nearby +objects, and other impairments. But in general, plots from an acceptable +calibration run will have the following features: + +- Gain plots will show eight impulses near the middle of the horizontal axis. + The lowest impulse should be no lower than about 70% of the highest impulse. + Note that impulse may tend to be grouped into two groups of four, with each + group representing one ADAR1000. +- Phase plots will show seven arcs centered around zero degrees, with nulls + between -180° and -135° or between 135° and 180°. + +Typical plots are shown in Figure 3. + +.. figure:: gain_phase_cal_plots.png + + Gain and Phase Calibration Plots + +After running this script, files gain_cal_val.pkl and phase_cal_val.pkl will +be placed in the working directory. The GUI program will also load these files +automatically. + +If plots differ greatly from Figure 3, examine the physical setup, reposition +the source or antenna, remove interfering objects, and re-run the script. diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/minimal_example_output.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/minimal_example_output.png new file mode 100644 index 00000000000..db1974bda35 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise1/minimal_example_output.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3b071c630f16eb83c035c687d18b79d1b4b811a17a9bb150b66735d5af8ce36 +size 69780 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/index.rst new file mode 100644 index 00000000000..24ba5510317 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/index.rst @@ -0,0 +1,51 @@ +.. _cn0566_lab2: + +Lab 2: Steering Angle +===================== + +Training Objective +------------------ + +In this lab, we’ll explore the relationship between the element to element +phase shift and the resulting electrical steering angle. + +Instructions +------------ + +1. Open the file “cn0566_gui.py” in the Thonny IDE (This guide uses the Thonny + IDE, but the file should run on other IDEs as well) + + .. figure:: steeringangle_1.png + +2. Press the green ``Run`` button + + .. figure:: steeringangle_2.png + +3. You’ll see the FFT (amplitude vs. frequency) of the HB100 source as received + by the Phaser’s array: + + .. figure:: steeringangle_3.png + +4. By adjusting the “Steering Angle” slider bar, you can change the phase values + of each element. + +5. Move the HB100 to an angle of about 30 deg. The protractor, can help you + point this somewhat accurately. Just place it on top of the Raspberry Pi, and + move the arrow to 30 deg. + + .. figure:: steeringangle_5.png + +6. Now slide the “Steering Angle” to find the phase delta that produces the + maximum FFT amplitude. + +7. **What phase delta do you observe that produces the maximum FFT amplitude?** + +8. Now click on the “Rectangular Plot” tab + + .. figure:: steeringangle_8.png + +9. This plots the peak FFT amplitude vs the selected steering angle + +10. Move the Steering Angle slider bar again. + +11. **Does the amplitude move in a predictable way? What do you think is happening?** diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_1.png new file mode 100644 index 00000000000..e6965111a5e --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f851cd36b4c48e2019b6be4259c31fe02859837b4d9bd8be1579d72450348c6c +size 56074 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_2.png new file mode 100644 index 00000000000..c9deee95e3d --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13498a82f7cab81313396322a826f9d1e35967692fbbf3ab2279bf23eab0b735 +size 3405 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_3.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_3.png new file mode 100644 index 00000000000..ad8f45fa227 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a614ef0ffd481ac1888641f3968920f52024d5bc0c9293733ffb95653d4d29a0 +size 118396 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_5.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_5.png new file mode 100644 index 00000000000..12c0aef6dd1 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09375e85e06774ec031d18ba900cf772542e797a34f2573dcb9b50398fce4b5c +size 1150655 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_8.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_8.png new file mode 100644 index 00000000000..2199f77f23f --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise2/steeringangle_8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59835eae3e04a3a5781cddf958a803fa8d77ce8209ea305ec7fa34bcbc7c9ea0 +size 79507 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_1.png new file mode 100644 index 00000000000..076e46ea6e6 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34eacf202fc41b383c5343ecb1f1eba8230e29cd2db66393e001400adffd317a +size 85542 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_10.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_10.png new file mode 100644 index 00000000000..884f694115c --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_10.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48f20d2d1fa6fd16286142717313072e0f4e965cc134b9bb872a014e6b9426be +size 18198 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_11.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_11.png new file mode 100644 index 00000000000..61d857b77ee --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_11.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:061419d6152142fd168059999bca0fff83d88616b0ad4fae81fb9ba3d627b538 +size 165375 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_12.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_12.png new file mode 100644 index 00000000000..832a48ad732 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_12.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8969c26eff5a0d05a33d81eafd02fbfe72a526508992026b712d76e80d804846 +size 258037 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_13.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_13.png new file mode 100644 index 00000000000..417ed452841 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_13.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fdf1a29c789988063dfd46730b4443d5cae6b09f68965305cc7ef18b80efc44 +size 36360 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_2.png new file mode 100644 index 00000000000..a3304f8d625 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf5d552fd056cc61b7a71466678a07c61114d72f19587cb64a7a634dd492f36a +size 97154 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_3.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_3.png new file mode 100644 index 00000000000..3412b365851 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75c49f4c824f8860ce235535d4e795b16797b4230ac03c0c8df62318b990bbcd +size 2031 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_4.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_4.png new file mode 100644 index 00000000000..f32600efb35 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:211b6400d38d0ab6ff866f9f51a949ff149df30b6eca1be4dfe7046089e796e3 +size 117450 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_5.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_5.png new file mode 100644 index 00000000000..a4e3e86aa64 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:439bfd24ceee34d92a82e221c47e3289d859e0b05dbed10e8af155bbb44a2f2e +size 38123 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_6.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_6.png new file mode 100644 index 00000000000..e9ca8897059 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1279b58b6bde1e0ccca3b40221784f60a95d0d32edc099d23ac385f5fede926 +size 9127 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_7.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_7.png new file mode 100644 index 00000000000..7d2e51d7928 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5f8ab914909a7cfef9e4fd41a944387d96917c7fb3773698794b3a224b019fd +size 80079 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_8.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_8.png new file mode 100644 index 00000000000..9b7cb23b16e --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d241f813996ab0b08f738ad5571c49ac114ff8b7e1cd8e738b664699724238b +size 12687 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_9.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_9.png new file mode 100644 index 00000000000..32bc7ec5aef --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/arrayantennapatterns_9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a090db3dfce6b6e18dc53c00386509ce86a7480475b89090665352610d08ab9 +size 184832 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/index.rst new file mode 100644 index 00000000000..779c3aec88d --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise3/index.rst @@ -0,0 +1,143 @@ +.. _cn0566_lab3: + +Lab 3: Phased Array Antenna Patterns +==================================== + +Part 1: Array Factor and Beamwidth +---------------------------------- + +Training Objective +~~~~~~~~~~~~~~~~~~ + +In this lab, we will directly observe the array factor equation. And then +observe how the beamwidth changes with steering angle. + +Instructions +~~~~~~~~~~~~ + +1. In the Phaser GUI, select ``Lab 2: Array Factor``. + + .. figure:: arrayantennapatterns_1.png + +2. Slowly move the HB100 in a half-circle around the array and observe the + changes. + +3. **Does the main lobe’s beamwidth remain constant as you move the RF source?** + +4. In the Phaser GUI, select ``Polar Plot``. + + .. figure:: arrayantennapatterns_2.png + +5. This is the same data, just displayed on a polar grid. + +6. **Slowly move the HB100 in a half-circle around the array and observe the + changes again** + +Part 2: Array Factor Measurements +--------------------------------- + +Training Objective +~~~~~~~~~~~~~~~~~~ + +In this lab, we will make measurements on the array pattern and compare to the +theoretical values. + +Recall that the array factor of a uniform, equally weighted (constant +amplitude), linear array is given by: + +.. figure:: arrayantennapatterns_3.png + +And plotting this for various numbers of array elements (N) gives: + +.. figure:: arrayantennapatterns_4.png + +From this, we can make some measurements on the array: + +1. Halfpower Beam Width (HPBW): Main lobe beamwidth, measured 3dB down from peak +2. First Null Beam Width (FNBW): Spacing between main lobe nulls +3. First Sidelobe Amplitude: Difference in amplitude (measured in dBc) from the main lobe + to the first sidelobe on either side of the main lobe. +4. Peak Amplitude: signal strength of the main lobe (measured in dBFS for our lab) + +.. figure:: arrayantennapatterns_5.png + +From the array factor equation, with a frequency of 10.3GHz and element to +element (d) spacing of 14mm, we can calculate the HPBW and FNBW for various +numbers of elements: + +.. figure:: arrayantennapatterns_6.png + +Let’s measure this now and see how close we are to these calculated values. + +Instructions +~~~~~~~~~~~~ + +1. In the Phaser GUI, select ``Lab 2: Array Factor`` + + .. figure:: arrayantennapatterns_7.png + +2. Move the HB100 to the mechanical boresight location (i.e., directly facing + the array) + +3. Record the following: + + .. figure:: arrayantennapatterns_8.png + +4. **How do the HPBW and FNBW values compare with the calculated values?** + +5. In the Phaser GUI, select the ``Gain`` tab + +6. Click the Rx1_Gain button to disable that channel. + +7. Do the same for Rx2, Rx7, and Rx8. We now have a 4 element array. + + .. figure:: arrayantennapatterns_9.png + +8. Repeat the beamwidth measurements and compare to the calculated values + and to the N=8 values. + + .. figure:: arrayantennapatterns_10.png + +Part 3: Measuring the Actual Antenna Pattern +-------------------------------------------- + +Training Objective +~~~~~~~~~~~~~~~~~~ + +In this lab, we’ll make a simple measurement like what you would do in an +antenna chamber. It certainly won’t be perfect, but you’ll experience the +process and then we’ll measure the sidelobe levels and see how they compare to +the electrical scan method. + +Instructions +~~~~~~~~~~~~ + +1. In the Phaser GUI, select ``Lab 2: Array Factor``. + +2. In the ``Config`` tab, select ``Signal vs Time`` from ``Mode Selection``. This + plots the peak amplitude vs. time. + + .. figure:: arrayantennapatterns_11.png + +3. Now rotate the HB100 in a radius around the Phaser board. Keep the HB100 + pointed at Phaser! + + .. figure::arrayantennapatterns_12.png + +4. Start at the left position (-90 deg), and move around to the right position + (+90 deg) + +5. Keep a smooth, consistent speed. + +6. Practice a few times, then try time it so that one smooth rotation covers the + entire graph span. + +7. With practice, it may look like this: + + .. figure:: arrayantennapatterns_13.png + +8. Ok, so we can’t really get angular measurements from this (we can never + rotate it perfectly). **But we can get accurate lobe amplitudes. Compare these + amplitudes to your earlier measurements. How close are they?** + +9. **Repeat the process, but change the “Steering Angle” from 0 deg to 30 deg**. diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/index.rst new file mode 100644 index 00000000000..f8433420390 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/index.rst @@ -0,0 +1,28 @@ +.. _cn0566_lab4: + +Lab 4: Sidelobes and Beam Tapering +================================== + +Training Objective +------------------ + +In this lab, we’ll observe the side lobe amplitudes as we reduce the gain of the +antenna elements at the edge of the array. + +Recall the impact to the sidelobe gain when we “window” or “taper” an array: + +.. figure::sidelobestapering_1.png + +Instructions +------------ + +1. In the Phaser GUI, select ``Lab 3: Tapering``. + + .. figure:: sidelobestapering_2.png + +2. Press ``Copy Plot to Memory``, then try one of the tapering profile buttons. + +3. What is the impact to sidelobe level, beamwidth, and peak gain? + +4. Select ``Symmetric Taper`` and invent your own profile! Can you make a “better” + taper? diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/sidelobestapering_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/sidelobestapering_1.png new file mode 100644 index 00000000000..f2bcc86139e --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/sidelobestapering_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d6713b5b0f40ea4826d33ee48cc7aec084f4b8426c1ef9b65b73d10e6aada0d +size 169177 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/sidelobestapering_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/sidelobestapering_2.png new file mode 100644 index 00000000000..0653f7971cf --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise4/sidelobestapering_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b64af96b0e48952f02db292cac37606350e447c106989f6e0810dd38403d6b4 +size 66571 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq1.png new file mode 100644 index 00000000000..1fe1786d59f --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:385a5b6dac7f1308de42bd8d32b08f750a06f27ff15ab10f371b3f3e289c0233 +size 3188 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq2.png new file mode 100644 index 00000000000..fd18f172c59 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09c248f2b8adcd5e94b7283217916faecf69655595d101c06880fe781c68d560 +size 3085 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq3.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq3.png new file mode 100644 index 00000000000..7d4fc7453c9 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/grating_eq3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11c7623aa0582ae24b554ccaab3a0f81ef375911417a6f0c882f98e52745999f +size 2135 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_1.png new file mode 100644 index 00000000000..6c93f4825f4 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37552072924fd5dd6c80d2275ad87b99f2e13fc8e0d06c937776ca2405c41f5d +size 105415 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_2.png new file mode 100644 index 00000000000..6c1b7fe774a --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2601d040aabb2407ebff69bf55df6390535d600c416a17b6ba8e0c52c226f077 +size 48701 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_3.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_3.png new file mode 100644 index 00000000000..c4b028323e8 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91e6fee15ff6f28b77ab7cbc3ab22f2859e2170ec54d7783a14d87b422811518 +size 109324 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_4.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_4.png new file mode 100644 index 00000000000..4b14d94e5cf --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd53ea5913bfa157b619e1841b0a18581955264e10724d9f26d050cb7cfc4f00 +size 128171 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_5.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_5.png new file mode 100644 index 00000000000..d83ec32b863 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/gratinglobes_5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca063cc7df9ceeccd925a1d6e26cae20d1e14e76abbeaca0dcced7c191fa7602 +size 105621 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/index.rst new file mode 100644 index 00000000000..456cabe0bbe --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise5/index.rst @@ -0,0 +1,65 @@ +.. _cn0566_lab5: + +Lab 5: Grating Lobes +==================== + +Training Objective +------------------ + +In this lab, we will vary the effective element to element spacing to observe +the formation of grating lobes. Then compare to our calculated values. + +Recall that for the mechanical broadside condition (i.e., steering angle = 0 +deg), that the main lobe position simplifies to: + +.. figure:: grating_eq1.png + +So if λ=29mm (which is the wavelength for 10.3 GHz), and d=14mm (which is +indeed the element to element spacing on the Phaser array), then there is only +one real solution to the equation above. And θMAIN = 0°. So no surprises +there! + +But if we change d to 42mm, then we will see 3 main lobes! And they will be +located at: + +.. figure:: grating_eq2.png + +The true main lobe is at 0°. And then the ±44° are the grating lobes. And +we’ll actually see those grating lobes when we do the lab below. + +But we can also change d to 56mm. And in that case we will see “main” lobes +at: + +.. figure:: grating_eq3.png + +So let’s try it out in the lab, and see those grating lobes directly. + +Instructions +------------ + +1. In the Phaser GUI, select “Lab 4: Grating Lobes” + + .. figure:: gratinglobes_1.png + +2. Set the RF source (HB100) to be directly in front of the array (full + broadside). + +3. Set Rx2, Rx3, Rx5, Rx6, and Rx8 to 0. Now our d = 3 \* 14 mm = 42 mm + + .. figure:: gratinglobes_2.png + +4. **Do you see two additional “main” lobes? Does their peak angle match our + calculations? Why are they broader than the true main lobe?** + + .. figure:: gratinglobes_3.png + +5. Let’s try it again, but now for d=56mm + + .. figure:: gratinglobes_4.png + +6. Set Rx2, Rx3, Rx4, Rx6, Rx7, and Rx8 to 0. Now our d = 4 * 14 mm = 56 mm + +7. Again, check where the grating lobes are, and compare to what we + calculated previously. + + .. figure:: gratinglobes_5.png diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_1.png new file mode 100644 index 00000000000..f96ebe4ad55 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7eb671da68ada2911c4f1caa64ef7be969d5fbaafee383be5b8a48426a3670 +size 18662 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_2.png new file mode 100644 index 00000000000..398fd429b3c --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3efb21ca34ed8d66b5a6c2ac3b6c87e9ef9a4c3ba261c6cb67cfb8f47b7cc2b3 +size 92912 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_3.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_3.png new file mode 100644 index 00000000000..cc5fc8c6abe --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/beamsquint_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b7cc88dfa0c234daed076999c421f9b893f535407c94feb52463cd500b319a3 +size 94551 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/index.rst new file mode 100644 index 00000000000..ce4f3c8a710 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/laboratory-exercises/lab-exercise6/index.rst @@ -0,0 +1,54 @@ +.. _cn0566_lab6: + +Lab 6: Beam Squint +================== + +Training Objective +------------------ + +In this lab, we will observe the change in steering angle as a function of +signal frequency. + +Recall that beam deviation (beam squint) vs frequency can be calculated as: + +.. figure:: beamsquint_1.png + +For example: + +- Let’s set our carrier frequency to be 10.5 GHz, and f0 = 10 GHz (500 MHz of BW) +- We want to steer the beam to +/- 45° from mechanical boresight +- Δθ = arcsin(10.5/10 * sin(45°)) - 45° = 3° +- **The beam will shift 3° at 10.5 GHz vs. 10 GHz** + +Instructions +------------ + +1. In the Phaser GUI, select ``Lab 5: Beam Squint``. + + .. figure:: beamsquint_2.png + +2. Set the RF source (HB100) to an angle of about 50 degrees. + +3. Click ``Copy Plot to Memory``. + +4. **Record the peak angle (you can also turn on “Show Peak Angle” under “Plot + Options” tab)**. + +5. Change the ``Signal BW`` slider bar to 500 MHz. + + .. figure:: beamsquint_3.png + +6. Record the new peak angle. Does the difference between the two peaks match + our ~3° calculation? + +7. Try other *signal bandwidths* and observe the effect. + +8. Try other *steering angles* and observe the effect. + +.. note:: + Since our HB100 frequency source is fixed, we instead change the frequency + at which the steering angle is calculated. i.e. the “Beam Calculated at” + frequency. Both methods are equivalent. Its just easier to change the calculated + frequency in our lab. It also avoids other changes in the antenna pattern that + would come from a new frequency. And that lets us do a more straightforward + comparison. diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/index.rst new file mode 100644 index 00000000000..2939e4baa98 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/index.rst @@ -0,0 +1,9 @@ +MATLAB Setup and Example +======================== + +.. toctree:: + :titlesonly: + :maxdepth: 2 + :glob: + + */index diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/capture.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/capture.png new file mode 100644 index 00000000000..b8076dcacf5 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/capture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83a14a65365f6b5ce36d470ab37380a8642ae999f9913363fc71b8056a6b7eb5 +size 91404 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/capture2.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/capture2.png new file mode 100644 index 00000000000..6a6f4cef494 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/capture2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9ab0aba4e33607448604a97997e510e65afc5bef17f7699c8d78e6fd6f6dac +size 57570 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/index.rst new file mode 100644 index 00000000000..c272685e0df --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-example/index.rst @@ -0,0 +1,72 @@ +.. _cn0566_matlab_example: + +Controlling CN0566 (Phaser) with MATLAB +======================================= + +The article will discuss operating the CN0566 (Phaser) platform with +MATLAB through use of the RF and Microwave Toolbox from Analog Devices (RFuW +Toolbox). The RFuW Toolbox provides interface system objects for control of +Phaser including examples and documentation in one convenient package. + +Required Components +------------------- + +#. First make sure you have ADALM-Phaser running with ADALM-Pluto attached. This + process is covered in the article :ref:`EVAL-CN0566-RPIZ Overview `. +#. Next from MATLAB install the `RF and Microwave Toolbox detailed on + GitHub `__ +#. Finally from MATLAB install `Transceiver + Toolbox `__ + which will control the ADALM-PLUTO. + +Verify Connectivity +------------------- + +With Phaser connected to your local network or directly to your host machine +with MATLAB installed, create an instance of the adi.Phaser class from the +command prompt with the IP address of the Raspberry Pi. + +.. code:: matlab + + bf = adi.Phaser; + bf.uri = 'ip:phaser'; + bf() + +This will connect and configure Phaser with a default set of parameters. If you +receive a connectivity error verify the Raspberry Pi is powered up and you can +at least ping the device. If you are having issues reach out to our support +forums on EngineerZone. + +Next verify connectivity to Pluto with a similar method. Create and instance of +the adi.AD9361.Rx class and run the operator method as so: + +.. code:: matlab + + sdr = adi.AD9361.Rx + sdr.uri = 'ip:pluto'; + data = sdr(); + +Like the Phaser system object this operation should not generate any errors. The +*data* vector should contain non-zero data. + +Running an Example +------------------ + +Now that we can communicate with the boards, we can run a basic example. With +RFuW Toolbox installed a number of examples are provided with it and place on +path. First make sure that the HB100 included with the Phaser kit is place +in-front of Phaser itself and turned on. Next, open the basic RX only example by +running the following on the MATLAB prompt: + +:: + + edit phaser_simple.m + +This will launch the script containing the basic RX example. May any +modifications to the URIs if necessary to reflect your system: + +.. figure:: capture.png + +Once updated run the script by pressing play: + +.. figure:: capture2.png diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/final_assembly.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/final_assembly.png new file mode 100644 index 00000000000..0fd6f6b985f --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/final_assembly.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea7555420a274d2ee750fe900a8397905efcacd787fa89dbacadf318e3ccc25d +size 587601 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/index.rst new file mode 100644 index 00000000000..918928f51f9 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/index.rst @@ -0,0 +1,251 @@ +.. _cn0566_matlab_setup: + +CN0566 (Phaser) MATLAB Setup Guide +================================== + +Getting Started and Setup +------------------------- + +If the CN0566 (Phaser) board is not yet assembled, please visit the +:ref:`Quick Start Guide ` and watch the +**Unboxing/Setup Video** to see how to assemble the Phaser and +related boards. + +The :ref:`Quick Start Guide ` +also has instructions on installing an image of ADI Kuiper Linux onto the +Raspberry Pi’s SD card, which will be required. + +After that is done, a few modifications need to be made to the setup from the +quick start guide. + +- Disconnect the Pluto from the Raspberry Pi, and connect the Pluto to your + computer using a microUSB to USB cable, or other compatible standard +- Connect the Raspberry Pi to your computer via ethernet, using the onboard + ethernet port on the Raspberry Pi + +Once completed, your setup should resemble the image below: + +.. figure:: final_assembly.png + +Setting Up MATLAB +----------------- + +Installing MATLAB +~~~~~~~~~~~~~~~~~ + +.. tip:: + If you already have a recent version of MATLAB installed, please skip + ahead to the **Installing toolboxes** section below. For the hardware + board support packages to work, you must use Matlab version **R2022b** or newer. + You can go to the download page by clicking `here `__, + you may be required to sign in with your MathWorks account first. + +.. figure:: matlab_download_website.png + +-------------- + +Select the release version on the left, then click the download button. + +After downloading the installer, open it to run the MATLAB installation tool. +During the installation process, there will be a window to select which +products and toolboxes will be installed, as shown in the image below. Ensure +that all the products shown in the image have been selected. + +.. figure:: mathworks_products_install.png + +-------------- + +Once this has been done, continue installing MATLAB through the installer as +normal. + +Installing Toolboxes +~~~~~~~~~~~~~~~~~~~~ + +Once MATLAB is installed, additional toolboxes can be downloaded through the +built-in **Add-On Explorer**. It can be found by opening MATLAB, selecting the +**Home** tab, and clicking the three colored cubes labeled **Add-Ons** located +near the top. + +.. figure:: matlab_addons_button.png + +-------------- + +This will open the Add-On Explorer. Here, you can search for toolboxes using the +search bar in the top right corner, and install them. + +.. figure:: matlab_addons_search.png + +-------------- + +- If you have **skipped here** without installing any toolboxes while installing + MATLAB, or already had MATLAB installed, get these first: + + - Antenna Toolbox + - Communications Toolbox + - DSP System Toolbox + - Phased Array System Toolbox + - Signal Processing Toolbox + +- Install these additional toolboxes: + + - Analog Devices, Inc. RF and Microwave Toolbox + - Analog Devices, Inc. Transceiver Toolbox + - Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio + - MATLAB Support for MinGW-w64 C/C++ Compiler + +Running the Labs +---------------- + +Verify Connectivity +~~~~~~~~~~~~~~~~~~~ + +With Phaser connected to your local network or directly to your host machine +with MATLAB installed, create an instance of the adi.Phaser class from the +command prompt with the IP address of the Raspberry Pi. + +.. code:: matlab + + bf = adi.Phaser; + bf.uri = 'ip:phaser'; + bf() + +This will connect and configure Phaser with a default set of parameters. If you +receive a connectivity error verify the Raspberry Pi is powered up and you can +at least ping the device. If you are having issues reach out to our support +forums on EngineerZone. + +Next verify connectivity to Pluto with a similar method. Create and instance of +the adi.AD9361.Rx class and run the operator method as so: + +.. code:: matlab + + sdr = adi.AD9361.Rx + sdr.uri = 'ip:pluto'; + data = sdr(); + +Like the Phaser system object this operation should not generate any errors. +The *data* vector should contain non-zero data. + +If there are errors while attempting to verify connectivity, please try the +following options: + +- Check all the packages/toolboxes listed above are installed properly +- Restart MATLAB and run the code again +- Disconnect and re-connect the cable to the device in question +- Ensure the Raspberry Pi’s SD card has ADI Kuiper Linux installed (and that it + works) + +Running Scripts +~~~~~~~~~~~~~~~ + +- Once both the Phaser and Pluto are able to communicate with MATLAB, download + and extract + + :download:`Phaser_steeringAngle_rev1` + +- Then open the file **Phaser_steeringAngle_rev1.m** +- This script functions to scan through a range of steering angles and output a + plot of the array factor. + +-------------- + +.. code:: matlab + + % Key Parameters + signal_freq = 10.145e9; % this is the HB100 frequency + signal_freq = findTxFrequency(); + plutoURI = 'ip:192.168.2.1'; + phaserURI = 'ip:phaser.local'; + + % Setup the pluto + rx = setupPluto(plutoURI); + + % Setup the phaser + bf = setupPhaser(rx,phaserURI,signal_freq); + bf.RxPowerDown(:) = 0; + bf.RxGain(:) = 127; + +This segment of the code serves to initialize the Pluto and Phaser objects in +MATLAB using the ADI toolboxes installed earlier, here labeled as “rx” and “bf” +respectively. It also scans briefly to find the frequency of the HB100 emitter. + +.. code:: matlab + + % Create the model of the phaser + c = physconst('LightSpeed'); + phaserModel = phased.ULA('NumElements',8,'ElementSpacing', ... + bf.ElementSpacing); + steeringVec = phased.SteeringVector("SensorArray",phaserModel, ... + 'NumPhaseShifterBits',7,'PropagationSpeed',c); + +This segment creates a model of the antenna array on the Phaser, using the +Phased Array System Toolbox (phased) from MathWorks. The Phaser features 8 +uniformly spaced elements, which is modeled using the Uniform Linear Array +object (phased.ULA) from the Phased Array System Toolbox. A corresponding +steering vector is created using the SteeringVector object, also from the +Phased Array System Toolbox. + +.. code:: matlab + + %% Set all gains to max and phases to zero + bf.RxGain(:) = 127; % max gain = 127, min gain = 0 + bf.RxAttn(:) = 0; % if RxAttn=1 then insert 20dB attenuator + bf.RxPhase(:) = 0; + bf.LatchRxSettings(); % write new settings to the ADAR1000s + + % Load Phase calibration values + PhaseCal = [0; -8.4375; -5.625; -5.625; 67.5; 87.1875; 90; 101.25]; + +This segment just sets the gain levels and phase calibration values. + +.. code:: matlab + + %% Sweep the steering angle and capture data + steeringAngle = -90 : 90; + ArrayFactor = zeros(size(steeringAngle)); + for ii = 1 : numel(steeringAngle) + arrayWeights = steeringVec(signal_freq,steeringAngle(ii)); + phases = rad2deg(angle(conj(arrayWeights(:)))); + phases = phases - phases(1); + phases = phases + PhaseCal; + phases = wrapTo360(phases); + bf.RxPhase(:) = phases.'; + bf.LatchRxSettings(); + receivedSig_HW = rx(); + receivedSig_HW_sum = sum(receivedSig_HW,2); + receivedFFT = fft(receivedSig_HW_sum); + ArrayFactor(ii) = (max(abs(receivedFFT))); + end + +Here is where the actual beam steering action happens in the code. +The code creates an array containing the angles that the beam will be steered +through. Then, it performs a loop where: + +#. Takes a given angle from the array of angles +#. Uses the given steering angle to create another array containing the + respective phase shifts to be applied to each antenna element +#. Applies the phase shifts to the Phaser +#. Collects data from the ADALM-PLUTOPluto, perform FFT on the data to get the max + amplitude, and record it +#. Repeats for the next steering angle + +.. code:: matlab + + %% Compare the measured array factor and model + [~,ind] = max(ArrayFactor); + EmitterAz = steeringAngle(ind) + figure(101) + arrayWeights = steeringVec(signal_freq,EmitterAz); + pattern(phaserModel,signal_freq,-90:90,0,'CoordinateSystem', ... + 'Rectangular','Type','powerdb','weights',arrayWeights) + hold on; + + % Plot the measured data and the model + plot(steeringAngle,mag2db(ArrayFactor./max(abs(ArrayFactor)))) + +Here, the Phased Array System Toolbox is used to simulate the array factor for +the Phaser. Then both the experimentally obtained array factor (from the data +above) and the simulated array factor are plotted. The resulting plot that +appears should resemble the image below: + +.. figure:: phaser_steeringangle_output.png diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/mathworks_products_install.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/mathworks_products_install.png new file mode 100644 index 00000000000..6a4cd5ab581 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/mathworks_products_install.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8b3189916bfe42d9a61092e1cd835bf05e702a74096f41776ebece595253fbc +size 99554 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_addons_button.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_addons_button.png new file mode 100644 index 00000000000..50acd2e94b6 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_addons_button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5826ea61c77670e0317c276468076e9f5da38996b5a033e7a9ca6e742dc3cb2 +size 129674 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_addons_search.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_addons_search.png new file mode 100644 index 00000000000..fd92923a810 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_addons_search.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a373f044e974bfeea0dc7d22eb6bbccb7dd615f6a25a2243980e775de30cf00 +size 627891 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_download_website.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_download_website.png new file mode 100644 index 00000000000..82337756083 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/matlab_download_website.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dde8de98d6f9d29a88d845ea928ea6c79c2349bf929e7af7eb671df6e392882b +size 66644 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/phaser_steeringangle_output.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/phaser_steeringangle_output.png new file mode 100644 index 00000000000..1433f2a1d5d --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/phaser_steeringangle_output.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:796f3dc68181e73d059748606e9d708efbff702a616b255553a18d80a7c8313d +size 37182 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/phaser_steeringangle_rev1.zip b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/phaser_steeringangle_rev1.zip new file mode 100644 index 00000000000..937491535d6 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/matlab/matlab-setup/phaser_steeringangle_rev1.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cbdfb8b692e710d310cf05f2a0b9dcce36210851ae3ec036b0fd43c7b39140c +size 1104 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_lab_instructions.docx b/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_lab_instructions.docx new file mode 100644 index 00000000000..35bb89904be --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_lab_instructions.docx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b42054e2db81557e40d4de3505a58349b326e390189c949f9c3b11772b622d7 +size 12207019 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_lab_instructions.pdf b/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_lab_instructions.pdf new file mode 100644 index 00000000000..d005c67ed18 Binary files /dev/null and b/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_lab_instructions.pdf differ diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_with_topics.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_with_topics.png new file mode 100644 index 00000000000..e02225ad617 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/phaser_with_topics.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93353733c2ba9c9cd928e6193d41f3d66f63d66d5bebd148cafa8349898ea057 +size 233772 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/2-23-2023_4-08-38_pm.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/2-23-2023_4-08-38_pm.png new file mode 100644 index 00000000000..8b0d5c893d1 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/2-23-2023_4-08-38_pm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d8ebdc21928c4d04ae4759ebc6dce567eb1c56a38b49d86c29c2707e75c970c +size 111065 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/2-23-2023_4-37-00_pm.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/2-23-2023_4-37-00_pm.png new file mode 100644 index 00000000000..47dc24a6c82 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/2-23-2023_4-37-00_pm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b005c1e8c7592d83eb413b03ac99d5e2d3d99d54c4af34685d114ca6b5565bfc +size 734465 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/find_hb100_step_1.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/find_hb100_step_1.png new file mode 100644 index 00000000000..9b8ef34bbd5 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/find_hb100_step_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:868c1fb49220a41e3fc6089b2578ea05ccbf7fe0252c3a49d1489bf0396b2a4f +size 436523 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/index.rst new file mode 100644 index 00000000000..02f9eba0754 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/index.rst @@ -0,0 +1,318 @@ +.. _cn0566_quickstart: + +CN0566 Quick Start Guide +======================== + +This is the minimum amount of setup to get the Phaser up and running. + +Unboxing / Setup Video +---------------------- + +.. video:: https://www.youtube.com/watch?v=a6MeTsatTUg + +Equipment Required +------------------ + +**Hardware** + + - :adi:`EVAL-CN0566-RPIZ Board` + - Raspberry Pi 4 + - :adi:`ADALM-PLUTO` + - 5V, 3A, USB-C wall adapter + - HB100 microwave source + + - 5V benchtop supply or 3 AAA (or AA) cells for HB100 power + + - Micro HDMI to HDMI cable (or suitable adapters) + - 16GB or larger SD card + - Tripod + - One of the following: + + - Ethernet cable and DHCP-enabled network with internet access + - Wireless network + + - One of the following: + + - USB keyboard and mouse, HDMI display (if running locally) + - Host computer with SSH client and/or VNC client. + +**Software** + + - ADI Kuiper Linux image + +**Other** + + - Wired or Wireless network connection, with access to the internet (for + accessing update files from GitHub) + +This is the step file for the HB100 holder, with +a 1/4-20 thread for a standard camera mount. HB100s can vary from manufacturer +to manufacturer, so please do a quick measurement on the one you have, and +make any necessary adjustments to the step file. + +Alternatively, use one of the other mounting methods described in the +quick-start video. + +**HB100 Holder Step File** + +Overview Photo +-------------- + +.. figure:: 2-23-2023_4-08-38_pm.png + + EVAL-CN0566-RPIZ Circuit Evaluation Block assignment + +SD card / Software Setup +------------------------ + +In order for the Raspberry Pi to control the Phaser devices, you will need to +write the ADI Kuiper Linux image to an SD card and configure it. **The SD card +that ships with the phaser kit MUST be updated with a new image.** The Phaser +software is tested with Kuiper Linux 2021_R2, which, in spite of the “2021” in +the name, was released in Spring, 2023. While there are newer Kuiper Linux +releases, this version is required to maintain compatibility with the current +phaser software packages. + +Download the image from: + +.. admonition:: Download + + 2 April 2023 release (2021_r2) + + - `Actual file `__ + - Checksum image_2023-04-02-ADI-Kuiper-full.zip: ``0cdcf6e131318113a137cf54335b9614`` + - Checksum 2023-04-02-ADI-Kuiper-full.img: ``aeff476b577b45cc6ce6ce02403a57c2`` + +Complete instructions for how to write it to the SD card and how to configure +an example system are provided at `Analog Devices Kuiper Linux `__. + +**Hints:** The Kuiper Linux wiki pages give a few options, but the “official” +Raspberry Pi imager is very straightforward: + +`Raspberry Pi Imager `__ + +.. todo:: + Switch to `ADI Kuiper Imager `__ once it’s + stable and documented on the wiki. + +After writing the image, if a window pops up saying “this card needs to be +formatted, would you like to format it now?”, the answer is **NO**. Eject the +card and insert it into the Raspberry Pi’s SD card slot. + +Assembling, Booting, and Configuring the System +------------------------------------------------ + +.. figure:: 2-23-2023_4-37-00_pm.png + + Test Setup Functional Block Diagram + +#. Connect ADALM-Pluto’s **CENTER** micro-USB port to Raspberry Pi via micro-USB + to USB cable. +#. **CAREFULLY** thread the tripod into the tripod mount. Please minimize stress + on the tripod mount while plugging in cables and other operations, as it is + screwed directly to the PC board. +#. Verify that the SD card is properly inserted into the slot on the Raspberry + Pi. +#. EITHER: + + - Connect an HDMI display, USB keyboard, and USB mouse to the Raspberry pi, + OR + - For remote login, connect the Raspberry Pi’s Ethernet jack to your wired + network, or directly to a host computer’s Ethernet jack + +#. Power up the setup through the type-C port of the CN0566. Do NOT connect a + supply to the Raspberry Pi. +#. Wait for Raspberry Pi to boot. (This may take a minute or two, as the + filesystem is expanded on first boot.) +#. After booting, if you are using a keyboard and local display open a terminal + as seen on the taskbar. If you are logging in over the network connection, + + You can open a graphical desktop VNC session or command line SSH session to + hostname **analog.local** + +Configuring the SD Card +~~~~~~~~~~~~~~~~~~~~~~~ + +The easiest way to configure the SD card is by running a setup script. This +does require a wired or wireless internet connection, but it is much easier +than doing things manually. A wired connection is fairly straightforward if +your network supports DHCP. If you need to use a wireless connection, you’ll +have to boot to the graphical desktop and connect manually. + +Once connected to a network, run the following commands (and take a look at +the setup script if you’re suspicious, and note that there may be some updates +as newer versions of Kuiper Linux are released.) The script is commented if +you want a detailed description of what it’s doing. + +:: + + wget https://github.com/thorenscientific/rpi_setup_stuff/raw/main/phaser/phaser_sdcard_setup.sh + sudo chmod +x phaser_sdcard_setup.sh + ./phaser_sdcard_setup.sh + sudo reboot + +(Wait for the system to reboot) + +.. note:: + After running the script, the hostname will be **phaser.local** + +If you are going to be running scripts and other software directly on the +Raspberry Pi, it’s a good idea set a few options using the Raspberry Pi +configuration utility. This can be accessed from the Start Menu under +Preferences, or by running: + +:: + + sudo raspi-config + +from the command line. Set the locale, keyboard, timezone, and wifi country +(if you’ll be connecting to your network by wifi.) + +You’ll also need to downgrade the numpy version to fix a compatibility issue +with our existing example python scripts: + +:: + + sudo pip install --force-reinstall numpy==1.22 + +Software Quick Start +~~~~~~~~~~~~~~~~~~~~ + +At this point, the GUI can be run from the command line. Power up the HB100 +source with either a 3V benchtop power supply or two AA cells and aim it a the +phaser antenna. Run the following command to find the HB100 frequency: + +:: + + cd ~/pyadi-iio/examples/phaser + python phaser_find_hb100.py + +Ideally, there should be a single, sharp peak as shown in the figure below. + +.. figure:: find_hb100_step_1.png + + Find HB100 script + +If there is a single prominent peak, enter “y”. If there are several peaks or +no visible peak, close the plot and enter ‘n’ at the prompt. Reposition the +HB100 (and make sure there are no other sources nearby), then re-run the +script. + +Next run the GUI: + +:: + + cd ~/pyadi-iio/examples/phaser + python phaser_gui.py + +The GUI should load and begin displaying the beam pattern as shown below. + +.. figure:: phaser_gui_screenshot.png + + Phaser GUI + +Initial Calibration +~~~~~~~~~~~~~~~~~~~ + +The phaser board is initially uncalibrated; each element will have a slightly +different gain and slight phase error due to numerous factors. The +phaser_examples.py script provides a calibration utility that will generate +calibration files. Shut down the GUI if it is running. Place the HB100 directly +in front of the array at `mechanical boresight `__ , +approximately 1.5m away. Then run: + +:: + + cd ~/pyadi-iio/examples/phaser + python phaser_examples.py cal + +The script provides debug information and plots as it is running, you may have +to close out of each plot for the script to proceed. After running this script, +files gain_cal_val.pkl and phase_cal_val.pkl will be placed in the working +directory. The GUI program will also load these files automatically when run +again. + +Refer to `CN0566 Calibration `__ +for additional details. + +Appendix: Pluto Setup +--------------------- + +The Pluto that ships with the phaser kit has been pre-configured. In case +something goes wrong, here is how to update the firmware and settings. For the +CN0566, the TDD engine and additional control signals are required for some +configurations, and were added as of Pluto firmware 0.38. The latest firmware is +available from: + +:git-plutosdr-fw:`plutosdr-fw/releases ` + +The next step is to update the Pluto configuration to enable the AD9361’s +second channel. Follow the directions at: +:dokuwiki:`Updating to the AD9364, `. + +For **setting the mode of a Rev. C PlutoSDR to 2r2t, the following would be +sequence of commands:** + +:: + + fw_setenv attr_name compatible + fw_setenv attr_val ad9361 + fw_setenv compatible ad9361 + fw_setenv mode 2r2t + reboot + +Verify that the configuration was programmed properly by entering the following +commands: + +:: + + fw_printenv attr_name + fw_printenv attr_val + fw_printenv compatible + fw_printenv mode + +Which should return: + +:: + + # fw_printenv attr_name + attr_name=compatible + # fw_printenv attr_val + attr_val=ad9361 + # fw_printenv compatible + compatible=ad9361 + # fw_printenv mode + mode=2r2t + # + +Appendix: Configuration Script Notes +------------------------------------ + +To manually edit config.txt, add the following: + +:: + + # Phaser board overlay: + dtoverlay=rpi-cn0566 + + # Heartbeat blinky: + dtparam=act_led_gpio=26 + dtparam=act_led_trigger=heartbeat + + # Short GPIO121 (Pin 40) to ground for shutdown: + dtoverlay=gpio-shutdown,gpio_pin=21,active_low=1,gpiopull=up + +If you will be logging in via VNC, see this article: + +`RPi 4 4gb slow VNC `__ + +Also if running “headless” without a monitor, set the HDMI group and mode +accordingly: + +:: + + # dtoverlay=vc4-kms-v3d + + # uncomment to force a specific HDMI mode (this will force 1920x1080) + hdmi_group=2 + hdmi_mode=82 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/phaser_gui_screenshot.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/phaser_gui_screenshot.png new file mode 100644 index 00000000000..d7ed719a3ba --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/quickstart/phaser_gui_screenshot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cd3f1ee94f5f4f353d1bd0452d5d9996c0f3eb1bc58be8c554105d161b48857 +size 637665 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/cli_plots.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/cli_plots.png new file mode 100644 index 00000000000..d22929c64ce --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/cli_plots.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e13b3263f907d4f5ecdd4a6898c2362201e9b39a7f9e381244eb55289b30c833 +size 372626 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/index.rst b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/index.rst new file mode 100644 index 00000000000..91d6b219050 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/index.rst @@ -0,0 +1,128 @@ +.. _cn0566_software: + +CN0566 Software User Guide +========================== + +There are several pieces of software used with the CN0566 Phaser, including a +user-friendly Graphical User Interface (GUI) and a number of command-line +utilities. These are located in the pyadi-iio examples folder. Assuming the +pyadi-iio repository has been cloned to user analog’s home directory, the path +to the cn0566 examples is: + +:: + + analog@phaser:~/pyadi-iio/examples/cn0566 $ + +Configuration and Calibration files +----------------------------------- + +There are several calibration and configuration files that the software uses. +Calibration files are generated as described in `CN0566 +Calibration `__, +and are as follows: + +:: + + hb100_freq_val.pkl - Measured frequency of microwave source + gain_cal_val.pkl - Gain calibration coefficients + phase_cal_val.pkl - Phase calibration offsets + +While these are intended to be generated once and re-used each time a program is +run, they are easy to recreate as the physical surroundings change - microwave +reflective surfaces, distance between the phaser array and source, changing +between the onboard transmitter or independent microwave source, etc. If these +files are deleted (or not present in the first place), default values will be +used. + +The **config.py** file contains parameters for the operation of the phaser, +including signal frequencies, sample rates, bandwidths, etc. This file can be +edited directly, after which any software using it must be restarted. + +As a convenience for staying consistent with the Pyadi-iio Git repository, the +config.py file can be copied to **config_custom.py**. If present, software +will use config_custom.py - this file can be edited without affecting the Git +repository. + +GUI operation +------------- + +The GUI can be launched either from the command line or from the Thonny IDE. +From the command line, run the following command: + +:: + + python3 cn0566_gui.py + +which will print debug information to the console as shown below. In this +case, gain and phase calibration files were not present, but a frequency +measurement file for an HB100 was found. + +**Typical console output:** + +:: + + analog@phaser:~/pyadi-iio/examples/cn0566 $ python3 cn0566_gui.py + file not found, loading default (all gain at maximum) + file not found, loading default (no phase shift) + Gain cal: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + Phase cal: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + Didn't find custom config, looking for default. + Found signal freq file, 10495859375.0 + Running on Linux, connecting to ip:localhost and ip:192.168.2.1 + +The GUI will launch and display an FFT of the incoming signal, with the beam set +to maximum gain, steering angle of zero. + +.. figure:: phaser_gui_overview.png + + GUI overview (FFT plot) + +If no signal is present, this indicates that the frequency is not set +properly, or if you are using an antenna connected to J1, the “Transmit +Disabled” is selected. If using an HB100, run the cn0566_find_hb100.py script +again. + +Switch to the Rectangular Plot and select ``Enable All`` in the drop-down menu. +An uncalibrated beam pattern will be displayed, which typically appears as a +distorted SINC1 pattern. + +.. figure:: phaser_gui_uncalibrated.png + + Uncalibrated Beam Pattern + +Close the GUI, Run the calibration routine to generate calibration files: + +:: + + python3 cn0566_examples.py cal + +Then re-start the GUI. The beam should be much closer to ideal, with first side +lobes approximately 13dB below the main lobe. + +.. figure:: phaser_gui_beam_pattern.png + + Beam Pattern After Calibration + +Much more detail on each control panel, walk through each experiment. + +CLI example operation +--------------------- + +A command line example is also provided. The main purpose for this script is to +provide a template for developing additional custom programs (CLI, GUI, or +other), as well as interacting directly with the CN0566 from the Python console. +Run: + +:: + + python3 cn0566_examples.py + +The script will continuously take beam pattern measurements, and plot a +representative time-domain and frequency-domain plot at mechnical boresight. + +.. figure:: cli_plots.png + + CLI Plots + +Detail on CL options, interactive operation from the +Python console, calibration, etc. diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_beam_pattern.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_beam_pattern.png new file mode 100644 index 00000000000..6cc3993b8de --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_beam_pattern.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eca43aef96b6ecf69f2d5500813b0f0dd816d411af40d57c2eee96d62f5628e7 +size 161239 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_overview.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_overview.png new file mode 100644 index 00000000000..f8e59f47c1d --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_overview.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4568b1a26174407b50d468ef5c2e307d19cd3e3c4980992d19984a9b1f255ca2 +size 245801 diff --git a/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_uncalibrated.png b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_uncalibrated.png new file mode 100644 index 00000000000..9c4f39e6250 --- /dev/null +++ b/docs/solutions/reference-designs/eval-cn0566-rpiz/software-guide/phaser_gui_uncalibrated.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e523618b05849a0fac6a8d0f060527911092c2d3b6fdb6b4e711a8fc8f826887 +size 250112