diff --git a/docs/conf.py b/docs/conf.py index 7a5e12c4a..22c9366a5 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,11 +12,12 @@ # -- General configuration --------------------------------------------------- extensions = [ + "sphinx.ext.todo", "adi_doctools" ] needs_extensions = { - 'adi_doctools': '0.3.48' + 'adi_doctools': '0.3.49' } exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] @@ -30,3 +31,14 @@ html_theme = 'cosmic' html_favicon = path.join("sources", "icon.svg") +numfig = True +numfig_per_doc = True + +numfig_format = {'figure': 'Figure %s', + 'table': 'Table %s', + 'code-block': 'Listing %s', + 'section': 'Section %s'} + +# -- Show TODOs --------------------------------------------------------------- + +todo_include_todos = True diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_adicup3029_connections.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_adicup3029_connections.jpg new file mode 100644 index 000000000..4abdc828b --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_adicup3029_connections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6d6660620ec8733bcfd90c0095f216659958994c5a5324a156aa523f0e9763e +size 580347 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_debug.png b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_debug.png new file mode 100644 index 000000000..d4775f523 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_debug.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea0abd21c36e0cb2f97d3285916f6cf0c5f6fc57ec38e324f6e34d8639ffaa03 +size 34446 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_dmm_panel.png b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_dmm_panel.png new file mode 100644 index 000000000..dc197fa56 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_dmm_panel.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7948bf74e9a5c952f0b963baa08fefc403516823220daec1d619a39eaf55ffd3 +size 29077 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_osc.png b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_osc.png new file mode 100644 index 000000000..37022e76a --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_iio_osc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7a245485a37b58d1e8a36da7bb24fa67d79c2b7945033eab562825f3e633ea83 +size 41548 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_layout.png b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_layout.png new file mode 100644 index 000000000..47bcdaafb --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_layout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20dd9c7c8afa180feca85f6e0009f609d0eb1b10b5198f3aa4abe7175265d22a +size 32474 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_max32655fthr_connections.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_max32655fthr_connections.jpg new file mode 100644 index 000000000..13e7f015a --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_max32655fthr_connections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7328f3af4e4d5d6630e30e4e3252b0b0af4aacd48c3940e1fdd2f69302524515 +size 321468 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_pmdz.png b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_pmdz.png new file mode 100644 index 000000000..2661c6745 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_pmdz.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:491dee2d8493e81e49ae41aead179a8492d6e16dc7d24a78a2e94341e4d4d2eb +size 116598 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_python_example_rpi.png b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_python_example_rpi.png new file mode 100644 index 000000000..868f4e3c0 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_python_example_rpi.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f861456611a90122a07a32cbcc19c19008a1aa795b5689cdad5966f2542c937b +size 267983 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_connections.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_connections.jpg new file mode 100644 index 000000000..3863b67e7 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_connections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef1ee35e3ac96c34cd8478cc23fb09236a3ea6ee7ed4365fc782d610138a5765 +size 462660 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_pico_connections.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_pico_connections.jpg new file mode 100644 index 000000000..be682226a --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_pico_connections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25c3ee5fc7c113faa1a7e5ae535c0af101daf1a2dec2572681d32b297a6702a4 +size 1044982 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_pico_connections_old.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_pico_connections_old.jpg new file mode 100644 index 000000000..a5946bf8c --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_rpi_pico_connections_old.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59aa377ed771ce4d40c1200f60a3273f85a173f74b47c87fc37aa654c2734b9c +size 272190 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_sdp-k1_connections.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_sdp-k1_connections.jpg new file mode 100644 index 000000000..986e42998 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/adxl355_sdp-k1_connections.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1291f68ffec075fe2ef513fdbb26f1bef3256a8d84df3cb901b980b733d6ef5a +size 582947 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/basic_putty_adxl355.png b/docs/eval/user-guide/eval-adxl355-pmdz/basic_putty_adxl355.png new file mode 100644 index 000000000..a64c6a27f --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/basic_putty_adxl355.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:408f59adfb969d730e90dea58e03260209986d9646c5a1116743fa98fb37966f +size 91805 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/daplink.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/daplink.jpg new file mode 100644 index 000000000..3efb91124 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/daplink.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cfcd7950a0d15328ccfc2b7ef577f03526360fb8e00256882bd906d31e17bcc +size 9990 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/eval-adxl355-pmdz_overall_setup.png b/docs/eval/user-guide/eval-adxl355-pmdz/eval-adxl355-pmdz_overall_setup.png new file mode 100644 index 000000000..d8e0cd591 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/eval-adxl355-pmdz_overall_setup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:243b5cccdb4b80fff718b121a981364d9c667725880310a9045aef18f5b859c6 +size 233632 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/index.rst b/docs/eval/user-guide/eval-adxl355-pmdz/index.rst new file mode 100644 index 000000000..9bdc34a97 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/index.rst @@ -0,0 +1,677 @@ +EVAL-ADXL355-PMDZ User Guide +############################ + +Overview +======== + +The :adi:`EVAL-ADXL355-PMDZ` is a compact, low-cost, +Pmod-compatible evaluation board for the :adi:`ADXL355` low noise +density, low zero-g offset drift, low power, 3-axis MEMS accelerometer with +selectable measurement ranges. The ADXL355 supports the ±2g, ±4g, and ±8g +ranges, and offers industry leading noise, offset drift over temperature, and +long term stability, enabling precision applications with minimal calibration +and with very low power consumption. Applications include: + +- Inertial measurement units (IMUs)/altitude and heading reference systems (AHRS) +- Platform stabilization systems +- Structural health monitoring +- Seismic imaging +- Tilt sensing +- Robotics +- Condition monitoring + +The ADXL355 accelerometers offer guaranteed temperature stability with null +offset coefficients of 0.15mg/°C (max). The stability minimizes resource and +expense associated with calibration and testing effort, helping to achieve +higher throughput for device OEMs. In addition, the hermetic package helps +ensure that the end product conforms to its repeatability and stability +specifications long after they leave the factory. + +With output of ±2g to ±8g full scale range (FSR), selectable digital +filtering from 1 Hz to 1 kHz, and low noise density of 25µ/√Hz at less than +200µA current consumption, ADXL355 MEMS accelerometer offers performance level +comparable to much more expensive devices with less power consumption and BOM +cost. + +.. image:: adxl355_pmdz.png + :width: 350px + +Input and Output Connections and Configurations +=============================================== + +The PMOD board is small in size with dimensions approximately 2.5 cm in width +by 2.5 cm in length. + +Pmod Processor Connector +------------------------- + +The PMOD interface is a series of standardized digital interfaces for various +digital communication protocols such as SPI, I2C, and UART. These interface +types were standardized by Digilent, which is now a division of National +Instruments. Complete details on the Pmod specification can be found on the +`Digilent Pmod landing page `__. + +The specific interface used for the EVAL-ADXL355-PMDZ boards is the extended +SPI. In general ADI has adopted the extended SPI connector for all PMOD devices +which have an SPI interface. It provides flexibility to add interrupts, general +purpose I/O, resets, and other digitally controlled functions. + ++---------------+---------------------+----------+---------------+----------------+----------+ +| P1 Pin Number | Pin Function | Mnemonic | P1 Pin Number | Pin Function | Mnemonic | ++===============+=====================+==========+===============+================+==========+ +| Pin 1 | Chip Select | CS | Pin 7 | Interrupt 1 | INT1 | ++---------------+---------------------+----------+---------------+----------------+----------+ +| Pin 2 | Master Out Slave In | MOSI | Pin 8 | Not Connected | NC | ++---------------+---------------------+----------+---------------+----------------+----------+ +| Pin 3 | Master In Slave Out | MISO | Pin 9 | Interrupt 2 | INT2 | ++---------------+---------------------+----------+---------------+----------------+----------+ +| Pin 4 | Serial Clock | SCLK | Pin 10 | Data Ready | DRDY | ++---------------+---------------------+----------+---------------+----------------+----------+ +| Pin 5 | Digital Ground | DGND | Pin 11 | Digital Ground | DGND | ++---------------+---------------------+----------+---------------+----------------+----------+ +| Pin 6 | Digital Power | VDD | Pin 12 | Digital Power | VDD | ++---------------+---------------------+----------+---------------+----------------+----------+ + +.. image:: adxl355_layout.png + :width: 300px + +ADXL355 Interrupt Pins +---------------------- + +The EVAL-ADXL355-PMDZ has two interrupt pins and a data ready pin which can be +used as external indicators for the user. The interrupt pins can be programmed +through software to reflect various status flags within the ADXL355, and those +pins are accessible through the SPI PMOD header. For complete details on the +individual status flags, what they mean, and how to program the chip to reflect +those interrupts, please consult the :adi:`ADXL355` data sheet. + +Power Supply Considerations and Configuration +--------------------------------------------- + +When using the ADXL355 PMOD board, the 3.3V power for the PMOD comes directly +from the host board it is connected to. Most Pmod platform boards can supply at +least 100 mA, more than adquate for the EVAL-ADXL355-PMDZ. + +Device Driver and Software Support +================================== + +There are two device driver and accompanying software solutions provided for +the EVAL-ADXL355-PMDZ: + +**ADXL355 no-OS Driver** + + * The :git-no-OS:`ADXL355 no-OS driver ` is used + in bare-metal applications, typically running on low-power, embedded + microcontrollers. + + * The :git-no-OS:`ADXL355 no-OS example project ` + uses the ADXL355 no-OS driver and has several configuration options: + + * The tinyiiod configuration emulates the Linux IIO framework through the + tinyiiod daemon library. The application communicates with the host computer + via the serial backend, over a USB-UART physical connection. This facilitates + rapid application development on a host computer, independent from embedded + code development. This is the configuration that will be referenced in the + no-OS platform setups below. + * The "dummy" configuration implements a simple command-line program that + can be run on a terminal. + +.. ADMONITION:: Download + + A zip file containing prebuilt programming files for the no-OS example project, + targeting platforms below are available at: + :git-no-OS:`eval-adxl355-pmdz.zip `. + + More details are provided in the platform-specific sections below. + +**ADXL355 Linux Driver** + +* The :dokuwiki:`ADXL355 Linux driver ` is used in + applications running the Linux operating system, typically on larger processors + and SoC devices. +* The ADXL355 Linux driver uses the Industrial Input/Output (IIO) framework, + greatly simplifying the development of application code via the cross-platform + Libiio library, which is written in C and includes bindings for Python, MATLAB, + C#, and other languages. Application code can run directly on the platform + board, communicating with the device over the local backend, or from a remote + host over the network or USB backends. + + + +System Setup Using ADICUP3029 +============================= + +The EVAL-ADXL355-PMDZ can be used with :adi:`ADICUP3029 `. + +Demo Requirements +----------------- + +The following is the list of items needed in order to replicate this demo. + +- Hardware + + - :adi:`EVAL-ADICUP3029` + - :adi:`EVAL-ADXL355-PMDZ` + - Micro-USB to USB Cable + - PC or Laptop with USB Port + +- Software + + - For IIO / libiio: eval-adxl355-pmdz_aducm3029_iio_example.hex from the + programming file zip + - For terminal CLI: eval-adxl355-pmdz_aducm3029_dummy_example.hex from the + programming file zip + +.. TIP:: + + There are two basic ways to program the ADICUP3029 with the software for the + ADXL355. + + #. Dragging and Dropping the .Hex to the Daplink drive + + #. Using the drag and drop method, the software is going to be a version + that Analog Devices creates for testing and evaluation purposes. + This is the **EASIEST** way to get started with the reference design. + + +Setting up the Hardware +----------------------- + +#. Connect **EVAL-ADXL355-PMDZ** board at connector **P9** of the + **EVAL-ADICUP3029**. + +#. Connect a micro-USB cable to the P10 connector of the EVAL-ADICUP3029 and + connect it to a computer. The final setup should look similar to the picture + below. + + .. figure:: adxl355_adicup3029_connections.jpg + :width: 900px + + Hardware Setup + +#. Make sure the following switches are as shown from the table below. + + .. figure:: switch_config.png + :width: 900px + + Switch Confuguration + +#. From your PC, open My Computer and look for the DAPLINK drive, if you see + this then the drivers are complete and correct. + + .. figure:: daplink.jpg + :width: 300px + + DAPLINK Drive + +#. Drag and drop the eval-adxl355-pmdz_aducm3029_iio_example.hex file to the + DAPLINK drive and your ADICUP3029 board will be programmed. The DS2 (red) LED + will blink rapidly. + +#. The DS2 will stop blinking and will stay ON once the programming is done. + +#. For demo purposes, place the board horizontally such that the Z-axis reading + will be approximately 9.8 m/s^2. + + +System Setup Using MAX32655FTHR or MAX32650FTHR +=============================================== + +The **EVAL-ADXL355-PMDZ** can be used with the MAX32655FTHR or +MAX32650FTHR. + +.. _demo-requirements-1: + +Demo Requirements +----------------- + +The following is the list of items needed in order to replicate this demo. + +- **Hardware** + + - :adi:`MAX32655FTHR ` or :adi:`MAX32650FTHR ` + with :adi:`MAX32625PICO ` + - :adi:`FTHR-PMD-INTZ ` + - :adi:`EVAL-ADXL355-PMDZ ` + - Micro-USB to USB Cable + - 10-pin ribbon cable + - PC or Laptop with USB Port + +- **Software** + + - For MAX32655FTHR, programming file from zip: + + - For IIO / libiio: eval-adxl355-pmdz_maxim_iio_example_max32655_adxl355.hex + - For terminal CLI: eval-adxl355-pmdz_maxim_dummy_example_max32655_adxl355.hex + + - For MAX32650FTHR, + + - For IIO / libiio: eval-adxl355-pmdz_maxim_iio_example_max32650_adxl355.hex + - For terminal CLI: eval-adxl355-pmdz_maxim_dummy_example_max32650_adxl355.hex + +MAX32655FTHR +------------ + +1. Connect **MAX32655FTHR** with the **FTHR-PMOD-INTZ**. Note that MAXIM +feather board should have stacking headers for feather board where the +interposer board will be connected. + +2. Connect **EVAL-ADXL355-PMDZ** to the **FTHR-PMOD-INTZ**. + +3. Power up the **MAX32655FTHR** by connecting it to your laptop using micro-USB + +4. Open the file explorer. Drag-and-drop the pre-built hex file to the DAPLINK. +If the transfer was not completed, update the firmware for the DAPLINK. Follow +the steps here: https://github.com/MaximIntegrated/max32625pico-firmware-images/ + +5. Open PuTTY or other similar software. Check the Device Manager to set +correct COM for the MAX32655FTHR. Set baud rate according to hex file used: + ++------------------------------------------------------------------+-----------+ +| Hex file | Baud rate | ++==================================================================+===========+ +| eval-adxl355-pmdz_maxim_dummy_example_max32655_adxl355 | 57600 | ++------------------------------------------------------------------+-----------+ +| eval-adxl355-pmdz_maxim_iio_example_max32655_adxl355 | 115200 | ++------------------------------------------------------------------+-----------+ +| eval-adxl355-pmdz_maxim_iio_trigger_example_max32655_adxl355.hex | 115200 | ++------------------------------------------------------------------+-----------+ + +The final setup should look similar to the picture below. + +.. image:: adxl355_max32655fthr_connections.jpg + :width: 450px + +MAX32650FTHR +------------ + +#. Using a 10-pin ribbon cable, connect the **MAX32625PICO** to the + **MAX32650FTHR**. + + .. image:: max32650fthr_with_pico.png + :width: 400px + +#. Connect **MAX32650FTHR** to the **FTHR-PMOD-INTZ**. + +#. Connect **EVAL-ADXL355-PMDZ** to the **FTHR-PMOD-INTZ**. + + ===================== ================== + MAX31855PMB1 FTHR-PMOD-INTZ SPI + ===================== ================== + Pin 1 (Chip Enable) CS + Pin 2 (Not connected) MOSI + Pin 3 (MISO) MISO + Pin 4 (SCK) SCK + Pin 5 (GND) GND + Pin 6 (VCC) VCC + ===================== ================== + + The final setup should look similar as shown below. + + .. image:: max32650fthr_adxl355pmod.jpg + :width: 450px + +#. Power up the **MAX32650FTHR** by connecting it to your laptop using + micro-USB. Connect **MAX32625PICO** to your laptop as well. + +#. Open the file explorer. Drag-and-drop the pre-built hex file to the DAPLINK. + If the transfer was not completed, update the firmware for the DAPLINK. Follow + the steps here: https://github.com/MaximIntegrated/max32625pico-firmware-images/ + +#. Open PuTTY or other similar software. Check the Device Manager to set the + correct COM port for the **MAX32650FTHR**. + +#. Set baud rate according to the hex file used available in + :git-no-OS:`MAX32650FTHR_demo_ADXL355.hex `: + +====================================================== ========= +Hex file Baud rate +====================================================== ========= +eval-adxl355-pmdz_maxim_dummy_example_max32650_adxl355 57600 +eval-adxl355-pmdz_maxim_iio_example_max32650_adxl355 115200 +====================================================== ========= + +The expected output viewed in the PuTTY is shown below. + +.. image:: basic_putty_adxl355.png + :width: 600px + +System Setup Using Raspberry Pi +=============================== + +The EVAL-ADXL355-PMDZ can be used with a Raspberry Pi. + +Demo Requirements +----------------- + +The following is a list of items needed in order to replicate this demo. + +- **Hardware** + + - :adi:`EVAL-ADXL355-PMDZ ` + - :adi:`PMOD to Raspberry Pi Adapter (PMD-RPI-INTZ) ` + - Raspberry PI Zero, Zero W, 3B+, or 4 + - 16GB (or larger) Class 10 (or faster) micro-SD card + - 5Vdc, 2.5A power supply with micro USB connector (USB-C power supply for Raspberry Pi 4) + - User interface setup (choose one): + + - HDMI monitor, keyboard, mouse plugged directly into Raspberry Pi + - Host Windows/Linux/Mac computer on the same network as Raspberry Pi + +- **Software** + + - :dokuwiki:`Kuiper Linux Image ` + + +Loading Image on SD Card +------------------------ + +In order to boot the Raspberry Pi and control the **EVAL-ADXL355-PMDZ**, you +will need to install ADI Kuiper Linux on an SD card. Complete instructions, +including where to download the SD card image, how to write it to the SD card, +and how to configure the system are provided on the :ref:`kuiper`. + +Configuring the SD Card +----------------------- + +Follow the configuration procedure under **Configuring the SD Card for +Raspberry Pi Projects** at :ref:`kuiper sdcard`, substituting the +following lines in **config.txt**: + +:: + + dtoverlay=rpi-adxl355 + +Setting up the Hardware +----------------------- + +To set up the circuit for evaluation, consider the following steps: + +#. Connect the **P9** of the **PMOD to Raspberry Pi Interposer** board at the + male header GPIO pin connector of the **Raspberry Pi** as shown below. + + .. image:: interposer.png + :width: 500px + +#. Connect the :adi:`EVAL-ADXL355-PMDZ ` on the + PMOD to Raspberry Pi Interposer board either via Port P1 or P2. + + .. |image3| image:: adxl355_rpi_connections.jpg + :width: 600px + +#. Burn the SD card with the proper ADI Kuiper Linux image. Insert the burned + SD card on the designated slot on the RPi. +#. Connect the system to a monitor using an HDMI cable through the mini HDMI + connector on the RPi. +#. Connect a USB keyboard and mouse to the RPi through the USB ports. +#. Power on the RPi board by plugging in a 5V power supply with a micro-USB + connector. The final setup should look similar to the picture below. + + .. image:: eval-adxl355-pmdz_overall_setup.png + :width: 600px + +System Setup Using EVAL-ADICUP360 **(DEPRECATED)** +================================================== + +The original software example for the ADXL355 was developed on the ADICUP360 +platform, and is a simple, terminal-based command line interface. This type of +example program is being deprecated in favor of tinyiiod-based servers for +embedded platforms, however this example is still available for reference here: +:dokuwiki:`ADXL355 Accelerometer PMOD Demo on ADICUP360`. + +.. IMPORTANT:: + + In order to use the **EVAL-ADXL355-PMDZ** with the **ADICUP360**, the user + **MUST** remove resistor R1. The ADXL355 holds the DATA_RDY pin low during + powerup, and that holds the EVAL-ADICUP360 in UART boot mode. When this mode is + active the MCU will stay in standby mode till it receives the proper command, + effectively making the ADuCM360 not run. So to avoid this, please remove R1 and + note that you can't use the DATA_RDY pin with the ADICUP360. + +.. NOTE:: + + Note that the libiio, iio oscilloscope, and pyadi-iio sections below do NOT + apply to this example. + +Application Software (All Platforms) +==================================== + +The Libiio is a library used for interfacing with IIO devices and is required +to be installed on your computer. + +.. ADMONITION:: Download + + Download and install the latest :git-libiio:`Libiio package ` on + your machine. + + +To be able to connect your device, the software must be able to create a +context. The context creation in the software depends on the backend used to +connect to the device as well as the platform where the EVAL-ADXL355-PMDZ is +attached. Two platforms are currently supported for the EVAL-ADXL355-PMDZ: +Raspberry Pi using the ADI Kuiper Linux and the ADICUP3029 running the no-OS +ADXL355 demo project. The user needs to supply a **URI** which will be used in +the context creation. + +The :ref:`libiio iio_info` command is a part of the libIIO package that reports +all IIO attributes. + +Upon installation, simply enter the command on the terminal command line to +access it. + +For RPI Direct Local Access: +---------------------------- + +.. shell:: + + $iio_info + +For Windows machine connected to Raspberry Pi: +---------------------------------------------- + +.. shell:: + + $iio_info -u ip: + +For example, if your Raspberry Pi has the IP address 192.168.1.7, then enter: + +.. shell:: + + $iio_info -u ip:192.168.1.7 + + + +.. NOTE:: + + Do note that the Windows machine and the RPI board should be connected to + the same network in order for the machine to detect the device. + +For Windows machine connected to ADICUP3029: +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. shell:: + + $iio_info -u serial: + +Examples: + +* In a Windows machine, you can check the port of your ADICUP3029 via Device + Manager in the Ports (COM & LPT) section. If your device is in COM4, enter: + +.. shell:: + + $iio_info -u serial:COM4 + +On a Unix-based machine, you will see it under the /dev/ directory in this +format "ttyUSBn", where n is a number depending on how many serial USB devices +attached. If you see that your device is ttyUSB0, enter: + +.. shell:: + + $iio_info -u serial:/dev/ttyUSB0 + +IIO Commands +~~~~~~~~~~~~ + +There are different commands that can be used to manage and control the device +being used. The :ref:`libiio iio_attr` command reads and writes IIO attributes. + +.. shell:: + + $iio_attr [OPTION]... + +To look at the context attributes, enter the following command on the terminal: + +.. shell:: + + $iio_attr -a -C + +The :ref:`libiio iio_reg` command reads or writes SPI or I2C registers in an +IIO device. This is generally not needed for end applications, but can be +useful in debugging drivers. Note that you need to specify a context using the +*-u* qualifier when you are not directly accessing the device via RPI or when +you are using the ADICUP3029 platform. + +.. shell:: + + $iio_reg -u [] + +To read the device ID (register = 0x02) of an ADXL355 interfaced via RPI from a +Windows machine, enter the following code on the terminal: + +.. shell:: + + $iio_reg -u ip: adxl355 0x02 + + +IIO Oscilloscope +~~~~~~~~~~~~~~~~ + +Download and install the latest version of IIO Oscilloscope from: +:git-iio-oscilloscope:`IIO Oscilloscope Installers `. + +Once done with the installation or an update of the latest IIO Oscilloscope, +open the application. The user needs to supply a URI which will be used in the +context creation of the IIO Oscilloscope and the instructions can be seen from +the previous section. +Press refresh to display available IIO Devices, once ADXL355 appeared, press +connect. + +.. image:: adxl355_iio_osc.png + :width: 300px + +Debug Panel +^^^^^^^^^^^ + +Below is the Debug panel of ADXL355 wherein you can directly access the +attributes of the device. + +.. image:: adxl355_iio_debug.png + :width: 400px + +DMM Panel +^^^^^^^^^ + +Access the DMM panel to see the instantaneous reading of the x, y and z axis +acceleration readings and the device temperature. + +.. image:: adxl355_iio_dmm_panel.png + :width: 400px + +PyADI-IIO +~~~~~~~~~ + +:ref:`pyadi-iio` is a python abstraction module for ADI hardware with IIO +drivers to make them easier to use. This module provides device-specific APIs +built on top of the current libIIO python bindings. These interfaces try to +match the driver naming as much as possible without the need to understand the +complexities of libIIO and IIO. + +Follow the step-by-step procedure on how to install, configure, and set up +PYADI-IIO and install the necessary packages/modules needed by referring to +this :ref:`link `. + +Running the example +^^^^^^^^^^^^^^^^^^^ + +After installing and configuring PYADI-IIO in your machine, you are now ready +to run python script examples. In our case, run the **adxl355_example.py** +found in the examples folder. + +.. NOTE:: + + Github link for the python sample script: :git-pyadi-iio:`ADXL355 Python + Example ` + +Running directly on the RPi +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. shell:: ps1 + + /d/pyadi-iio/examples + $python adxl355_example.py + +Press enter and you will get these readings. + +.. image:: adxl355_python_example_rpi.png + :width: 600px + +For No-OS +^^^^^^^^^ + +.. shell:: ps1 + + /d/pyadi-iio/examples + $python adxl355_no_os_example.py serial:,57600 + +In a Windows machine, you can check the port of your MAX32655FTHR and +MAX32650FTHR via Device Manager in the Ports (COM & LPT) section. If your +device is in COM8, you have to use: + +.. shell:: + + $python pyadi-iio/examples/adxl355_no_os_example.py serial:COM8,57600 + +Press enter and you will get these readings. + +.. image:: no_os_adxl355_pyadi.png + :width: 600px + + +More information and useful links +--------------------------------- + +- :adi:`EVAL-ADXL355-PMDZ Product Page ` +- :adi:`ADXL355 Product Page ` +- :git-no-OS:`EVAL-ADXL355-PMDZ no-OS projects ` + +Schematic, PCB Layout, Bill of Materials +---------------------------------------- + +.. ADMONITION:: Download + + :adi:`EVAL-ADXL355-PMDZ Design & Integration Files ` + + * Schematics + * Bill of Materials + * Gerber Files + * Assembly Files + * Allegro Layout File + + +Additional Information +---------------------- + +- :ref:`pyadi-iio` +- :ref:`iio-oscilloscope` +- :ref:`kuiper` + +Hardware Registration +--------------------- + +.. tip:: + + Receive software update notifications, documentation updates, view the + latest videos, and more when you register your hardware. + `Register `__ + to receive all these great benefits and more! diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/interposer.png b/docs/eval/user-guide/eval-adxl355-pmdz/interposer.png new file mode 100644 index 000000000..a9d4e296c --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/interposer.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f371590927cb3e07add859d46cc2d9be05649e1a6b323393e17dd4b57802bbbe +size 221044 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/max32650fthr_adxl355pmod.jpg b/docs/eval/user-guide/eval-adxl355-pmdz/max32650fthr_adxl355pmod.jpg new file mode 100644 index 000000000..9e1333194 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/max32650fthr_adxl355pmod.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14e3e7a730edd43828798963c03f9f7ebf5743a81a58986dddd9f7f6761fe899 +size 2380945 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/max32650fthr_with_pico.png b/docs/eval/user-guide/eval-adxl355-pmdz/max32650fthr_with_pico.png new file mode 100644 index 000000000..eea4661b2 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/max32650fthr_with_pico.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49e4be4f94b8af29675b4dd8ac4511e5e69b1799a782aaa33e4ffc8565bc9fa9 +size 89785 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/no_os_adxl355_pyadi.png b/docs/eval/user-guide/eval-adxl355-pmdz/no_os_adxl355_pyadi.png new file mode 100644 index 000000000..71ec344c5 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/no_os_adxl355_pyadi.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d347182be7421bb6e8914099e3d3bbdc0343740ddbf887702b5b48ecfe8167cb +size 402140 diff --git a/docs/eval/user-guide/eval-adxl355-pmdz/switch_config.png b/docs/eval/user-guide/eval-adxl355-pmdz/switch_config.png new file mode 100644 index 000000000..3845f63f3 --- /dev/null +++ b/docs/eval/user-guide/eval-adxl355-pmdz/switch_config.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f48cd3c779809c017158e678cba604a41c7b355f0a170695c747567b0148c61a +size 175323 diff --git a/docs/eval/user-guide/index.rst b/docs/eval/user-guide/index.rst index a84bb826d..c88453d8b 100644 --- a/docs/eval/user-guide/index.rst +++ b/docs/eval/user-guide/index.rst @@ -30,6 +30,12 @@ Industrial Ethernet Inertial MEMS Sensors ------------------------------------------------------------------------------- +.. toctree:: + :caption: MEMS Accelerometers + :maxdepth: 1 + + eval-adxl355-pmdz/index + Interface and Isolation ------------------------------------------------------------------------------- diff --git a/docs/index.rst b/docs/index.rst index f431619f0..7e4594b6e 100755 --- a/docs/index.rst +++ b/docs/index.rst @@ -39,10 +39,16 @@ Contents .. toctree:: :caption: University Program - :maxdepth: 1 + :maxdepth: 4 university/index +.. toctree:: + :caption: Learning + :maxdepth: 4 + + ./learning/index + .. toctree:: :caption: Contributing and Guidelines :maxdepth: 4 diff --git a/docs/learning/converter_connectivity_tutorial/2-23-2023_4-37-00_pm.png b/docs/learning/converter_connectivity_tutorial/2-23-2023_4-37-00_pm.png new file mode 100644 index 000000000..1bcf684a7 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/2-23-2023_4-37-00_pm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:896a9dbd53f559c1ae8af5f12a39f3f4d1cebee43f3930ef759980c3b7e00368 +size 203318 diff --git a/docs/learning/converter_connectivity_tutorial/adxl354_pmd-rpi-intz.jpg b/docs/learning/converter_connectivity_tutorial/adxl354_pmd-rpi-intz.jpg new file mode 100644 index 000000000..480b58f38 Binary files /dev/null and b/docs/learning/converter_connectivity_tutorial/adxl354_pmd-rpi-intz.jpg differ diff --git a/docs/learning/converter_connectivity_tutorial/device_tree.png b/docs/learning/converter_connectivity_tutorial/device_tree.png new file mode 100644 index 000000000..10b37ccbd --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/device_tree.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35672063504fde6e534c8d5a95fe1c62becdb329339d9dbb6168875b642c8129 +size 50903 diff --git a/docs/learning/converter_connectivity_tutorial/edit_config.png b/docs/learning/converter_connectivity_tutorial/edit_config.png new file mode 100644 index 000000000..07fa476fc --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/edit_config.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ef4d089aec42fe1d105571face975d4a44555b8551dc09d5daa5f38d3aeb921 +size 111390 diff --git a/docs/learning/converter_connectivity_tutorial/iio_info_local_remote.png b/docs/learning/converter_connectivity_tutorial/iio_info_local_remote.png new file mode 100644 index 000000000..05fb6e98e --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/iio_info_local_remote.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5be20d0280d37a90addb75beab4c34c69eb4bebe8291b7e474507fd3c4f13ced +size 1019317 diff --git a/docs/learning/converter_connectivity_tutorial/iio_scope_adxl345.png b/docs/learning/converter_connectivity_tutorial/iio_scope_adxl345.png new file mode 100644 index 000000000..b75c0adeb --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/iio_scope_adxl345.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36b4f960975f2e52f063e603ab2a6a7d36c77ad21ca9d248e9bdb8970d77233a +size 51725 diff --git a/docs/learning/converter_connectivity_tutorial/iiod_process_screenshot.png b/docs/learning/converter_connectivity_tutorial/iiod_process_screenshot.png new file mode 100644 index 000000000..89a93e4ad --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/iiod_process_screenshot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7c00f5625b0aab7a33a6bd99cb6b24e01fedd3b4c477b79ddc1bfa04c3b4f32 +size 570944 diff --git a/docs/learning/converter_connectivity_tutorial/index.rst b/docs/learning/converter_connectivity_tutorial/index.rst new file mode 100644 index 000000000..42ee70ee5 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/index.rst @@ -0,0 +1,798 @@ +Converter Connectivity Tutorial +=============================== + +Introduction +------------ + +You don't have to be a software engineer in order to leverage device drivers +and example code as you are evaluating and prototyping with Analog Devices' +data converters and converter-like products. Selection of an ADC, DAC, or +sensor often starts by finding something that meets performance requirements +(obviously). This may be followed with some experimentation with the device's +evaluation board and accompanying software, but at some point you need to "take +the next step". This "next step" could be any one of a wide array of things - +wiring the eval board to a prototype of a larger system, deeper +characterization using your own benchtop test equipment, or any one of a +plethora of random requirements. This tutorial will arm you with a number of +tools to this end + +.. NOTE:: + + **Update:** + The first version of this tutorial was published in early 2020, after test + driving the setup with a few select field engineers. A lot has happened since + then: + + - :ref:`kuiper` has matured considerably, with broad support for ADI devices + and popular processor and FPGA development platforms + + - The very popular :adi:`ADXL355 Pmod ` would have been + used initially, but the Linux driver had not been upstreamed yet. It has since + been released, and is being added as an option for this tutorial. (The original + ADXL345 / Digilent Pmod-ACL is still included.) + + - LibIIO now supports HWMON devices (if these terms aren't familiar, you'll + learn about them soon), enabling the use of the absolute **best** device to + start learning about embedded Linux systems: the LM75 temperature sensor. + It is an industry standard with several manufacturers, including the + :adi:`Maxim LM75 ` and ADI's variant, :adi:`ADT75 ` + + So while it's generally not a good idea to have too many options in a basic + tutorial, we felt that having a couple was appropriate here, including one that + is very low cost (the LM75)g + +Analog Devices provides an assortment of evaluation boards and reference +designs for converters of various channel counts, bandwidths, and other +functionality, whose drivers fit into the Industrial Input Output (IIO) +framework. This framework facilitates robust data transfer to or from the +converter into "userspace", where the user program could be a MATLAB script for +device characterization, a Python script that talks to benchtop signal +generators and spectrum analyzers via GPIB in addition to the ADI part under +test, or a C program embedded in the end product. Most of these involve fairly +costly reference design hardware installed on even more costly FPGA platform +boards, which, to extract maximum performance, require test equipment exceeding +the cost of a luxury car. So the question arises - what is the simplest, lowest +cost system that captures the important aspects of these larger systems? $50 +total for a Raspberry Pi, SD card, and an LM75 temperature sensor (or ADXL355 +or ADXL345 board) sounds like a pretty reasonable deal. The only test equipment +required is: + +- You (your finger to warm up the LM75, or shake the ADXL3x5) +- The Earth (to provide a precise, low-noise, -9.8m/s\ :sup:`2` acceleration) + +.. _fig-simple_iio_hardware: + +.. figure:: simple_iio_hardware.png + :align: center + :width: 400 + + Ultra-simple IIO-based system + +**A Note on Security:** The Raspberry Pi is a fantastic tool, but it can +represent a network security gap if used improperly. Our Raspberry Pi will +start out configured in a fairly open state - a simple root password, SSH login +enabled. This isn't an issue if the Raspberry Pi does not have internet access +or is behind a firewall, but if you are going to connect to your network, it's +a good idea to change the password to something secure. Refer to this article +on Raspberry Pi Security: +`Securing your Raspberry Pi `__. + +**A Note on the Tutorial:** This tutorial is hands-on, and attempts to be clear +and consistent. But there are often several "right" ways of doing a step - +choice of editor to modify files on an SD card, using a Windows, Mac, or Linux +machine, etc. When in doubt: **Double-check your wiring**, and just try stuff. +Worst case, you'll need to re-burn your SD card to get back to the starting +point. + +Representative systems +---------------------- + +We are intentionally starting with an extremely simple example. But once you +understand how to communicate with an LM74, ADXL345, or ADXL355, you're well +over the initial learning curve to understanding much more complicated +systems. The :dokuwiki:`ADALM-Pluto ` is a great example - +it contains an AD9363 RF Agile Transcieiver, Zynq SoC FPGA, Memory, USB interface, +and much more. Even the simplified block diagram is pretty daunting: + +.. _fig-pluto_medium_block_diagram: + +.. figure:: pluto_medium_block_diagram.png + :width: 200 + + Pluto Simplified Block Diagram + +If the Pluto wasn't scary enough, the :adi:`Phased Array (Phaser) Development +Platform ` might be a step in that direction. It incorporates two +:adi:`ADAR1000 ` beamformers, an :adi:`ADF4159 ` Fast +Waveform Generating, 13 GHz, Fractional-N Frequency Synthesizer and uses the +Pluto as its IF digitizer. It's also got a :adi:`AD7291 ` 8-Channel, +I2C, 12-Bit SAR ADC with Temperature Sensor for basic monitoring; a simple +device by comparison, but it's got its own device driver, and is adjacent the +more complex devices both physically and in software. + +.. _fig-2-23-2023_4-37-00_pm: + +.. figure:: 2-23-2023_4-37-00_pm.png + :width: 600 + + Phaser System Overview + +But - all of the phaser's devices work together, and by the time you finish +this tutorial you'll be able to chip away at understanding how the individual +devices work, and eventually, how they whole system works. + +Connecting the Hardware +----------------------- + +Before we dig too deep into software stuff, let's prepare the hardware. There +are lots of ways to connect boards together, custom adapters, Raspberry Pi +prototyping hats, etc. The :adi:`PMD-RPI-INTZ ` is an interposer +that simplifies connecting I2C and SPI Pmod boards, QuikEval compatible eval +boards, and Power System Managemement (PSM) eval boards to a Raspberry Pi. +:numref:`fig-adxl354_pmd-rpi-intz` shows the +`ADXL345 Pmod `__ +(available directly from Digilent and from various distributors) mounted to the +PMD-RPI-INTZ board. Note that the Pmod must be installed on P1, which uses SPI +CS0 and has the interrupt pin connected to GPIO 19g + +.. _fig-adxl354_pmd-rpi-intz: + +.. figure:: adxl354_pmd-rpi-intz.jpg + :width: 400 + + ADXL345 Pmod Mounted to PMD-RPI-INTZ Interposer + +Another option that generally applies to eval boards with test points on the +digital signals is to use discrete jumper wires. Five inch jumpers from +Schmartboard: `Schmartboard Jumpers +`_ are very +convenientg + +If you are using Jumpers, use :numref:`fig-simple_iio_hardware` as a visual aid and make the connections +shown in :numref:`fig-rpi_adxl345_connections`. +The accelerometer board is a Digilent model Pmod:ACL, +it is essentially a breakout board for the ADXL345. + +In theory, any Raspberry Pi should work, although it is probably best to use +a modern model with a 40-pin expansion header. +(The model shown in :numref:`fig-simple_iio_hardware` is a model 3B, version 1.2.) +Note that there are TWO SPI ports - SPI0 and SPI1. We will be using SPI0 +(Pins 8, 19, 21, 23) + +.. _fig-rpi_adxl345_connections: + +.. figure:: rpi_adxl345_connections.png + :align: center + :width: 400 + + RPi-Pmod connections + + +.. todo:: + + - Add detailed pictures of ADXL355 Pmod and options for LM75 and ADT75g + In the meantime - it's straightforward: + + - The ADXL355 Pmod plugs into the same P1 location on the PMD-RPI-INTZ + - The Digilent `Pmod TMP3 `__ + uses the + compatible Microchip TCN75A temperature sensor. It's not the most convenient; + it's not truly Pmod compatible because the header is mounted vertically, the + easiest way to connect it to the Pi is with Schmartboard jumpersg + + - The Analog Devices LM75 and ADT75 don't have convenient eval boards so + the best option is to solder them to breakout boards + - There are several "maker style" LM75 breakout boards offered by your + favorite online vendors that should work fineg + +Burning SD cards +---------------- + +In order to boot the Raspberry Pi, you will need to obtain an SD card +"image", and write (or "burn") it to a card. We'll talk about where to get the +correct image shortly. This is a fairly common step in bringing up embedded +computers - Raspberry Pi, BeagleBone, Zedboard, Arrow SoCkit, or any machine +that boots from an SD card. There are lots of ways to burn images, but the most +straightforward way is to use the standard Raspberry Pi Imager, available here: +`Raspberry Pi OS (including Raspbery Pi Imager `__ + +There are instructions for Windows, Mac, and Linux. The imager also works on +machines that encrypt data being written to external drives since it's writing +"raw" data. HOWEVER - beware encryption software when editing configuration +files! (More on that later...) + +.. _fig-raspberry_pi_imager: + +.. figure:: raspberry_pi_imager.png + :align: center + :width: 600 + + Raspberry Pi Imager Screenshot + +A new SD card is usually preformatted as a single EXFAT partition, usable by +all operating system. But after burning an image to the card, it will show up +as several partitions, not all of which are visible to all operating systems. +So if you burn a card in Windows, and a popup appears saying "This drive needs +to be formatted, would you like to format now?", the answer is **NO!** +:numref:`fig-sd_card_partitions`. +shows the SD card partitions before and after burning the image. Attempting to +read the partition map in Windows (under Administrative Tools, Disk Management) +will show the ext4 partition as "unknown". + +.. _fig-sd_card_partitions: + +.. figure:: sd_card_partitions.png + :align: center + :width: 600 + + SD card partitions before and after "burning" + +Helpful Hint: It may happen that an SD card becomes corrupted somehow. This can +sometimes be fixed in Windows by opening storage manager in Administrative +tools, then removing all partitions, and reformatting as EXFAT (a similar +procedure can be followed using fdisk in Linux.) But computers are smart - +sometimes too smart - and there are cases where these tools fail to repartition +a drive. However - digital cameras are not as smart, and using a digital +camera's (such as a Nikon D90) SD card formatting feature will often resurrect +a "bricked" cardg + +ADI Kuiper Linux +---------------- + +What is "ADI Kuiper Linux"? Here's a little glossary: + +- Debian = A Popular Linux Distribution +- Raspberry Pi OS = Debian customized for Raspberry Pi +- ADI Kuiper Linux = ADI's Raspberry Pi OS variant with extra goodies: + + - All drivers for ADI, LTC parts that make sense enabled + - Boot files for FPGA-based reference designs and evaluation boards + targetting a number of popular FPGA platforms, including: + + - Data acquisition and transciever boards (FMCOMMSx, FMCDAQx, etc.) + - ZedBoard, Digilent Cora Z7, ZCU102, Intel DE10-Nano, Arria 10 SoC dev kit + + - LibIIO, IIO Oscilloscope, other ADI programs and utilitiesg + - iiod runs at startup + - GNURadio + +More information on Raspberry Pi OS can be found at `Raspberry Pi OS `__. +Raspberry Pi OS includes lots of fun stuff - Minecraft, an office suite, web browser, sound processing labs, +other games, etc. We won't cover any of that, but do explore on your own! +(More information on the Kuiper Belt can be found at `Kuiper_belt `__) +The SD card image is available at :ref:`kuiper sdcard`. + +Download the compressed zip file, and extract the .img file. (tar.gz files can +be extracted using 7zip in Windows.) Follow the procedure for burning SD +cards above, using a 16GB (or larger), high-quality, Class 10 or faster SD card. + +At this point, you should be able to: + +#. Insert the card into the Raspberry Pi +#. Connect an HDMI monitor +#. Connect a USB keyboard and mouse +#. Supply power via a micro-USB cable and old phone charger. + +.. note:: + + It is possible to use the Raspberry Pi without a local keyboard, mouse, + monitor - see the "Going Headless" section below. + +If all goes well, you should see a desktop. From the start menu, click Other -> +IIO Oscilloscope (or open a terminal and run IIO Oscilloscope): + +.. shell:: + + $sudo osc + +(Enter the root password, "analog" by default unless you followed the advice +above to change it.) You should then see IIO oscilloscope running as shown in +:numref:`fig-rpi_desktop`! +Also note that IIO Oscilloscope will run without root privileges, but +all devices will be read-only. For example, you won't be able to change the +ADXL3x5's sampling frequency, or LM75's over/under temperature thresholdsg + +.. _fig-rpi_desktop: + +.. figure:: rpi_desktop.png + :align: center + :width: 600 + + Raspberry Pi w/ ADI Kuiper Linux desktop + +But... if you look at the IIO oscilloscope panels, where's the ADXL3x5 or LM75? +Well, the Linux kernel does a bunch of stuff during boot, controlled by various +configuration files (remember autoexec.bat and config.sys on old DOS systems?, +Yup, the authore has suppressed that memory, too.) One of them, +/boot/config.txt, is how you tell Linux about what hardware is connected, and +the default is NOT the ADXL345... so let's fix thatg + +Device Tree Overlays +-------------------- + +When we first powered up the Raspberry Pi and ran IIO Oscilloscope it didn't +find anything. While we do have our ADXL3x5/LM75 physically connected to the +board, Linux doesn't know about it yet because UNlike USB, PCI, SCSI, Firewire, +HDMI, etc, SPI and I2C devices do not support enumeration. How do we tell the +Linux kernel what we've connected to the expansion header? The answer is the +"Device Tree Overlay"g + +While you won't have to do anything more than editing a couple of files in this +tutorial, it helps to understand a bit about what is going on under the +surface. A "Device Tree" contains information about a system's hardware - what +peripherals exist (like displays, memory, USB, Ethernet controllers, GPIO pins, +etc.) A "Device Tree Overlay" contains information about additional connected +hardware, like our ADXL3x5/LM75. :numref:`fig-device_tree` shows a screenshot +of the ADXL345's overlay source. +It shows that the ADXL345 is connected to the SPI port, using +the first CS signal (CS0), the maximum SPI clock frequency is 1MHz, and the +interrupt signal is connected to Pin 19 (as shown in the connection diagram +above.) + +.. _fig-device_tree: + +.. figure:: device_tree.png + :align: center + :width: 600 + + Partial ADXL345 overlay source (dts) + +The device tree source is then compiled into a "flattened" device tree that the +Linux kernel reads directly. While this process is fairly straightforward, it's +beyond the scope of this tutorial. Furthermore, the device tree overlay for +this tutorial is already included on the SD card, along with several other +overlays for other hardware configurations. (Note that the device tree overlay +is specific to a particular device AND how it is connected to the Raspberry Pi. +Any changes to the connections - SPI CS line, interrrupt line, etc. will +require a corresponding modification to the overlay.) + +For reference, here are the overlay source files for the three devices in this +tutorial. These are in the Linux rpi-5.15.y branch, used for Kuiper Linux +2022_r2 release: + +- `LM75 Device Tree Overlay `__ +- `ADXL345 Device Tree Overlay `__ +- `ADXL355 Device Tree Overlay `__ + +.. NOTE:: + + For more gory details on device trees, a great resource is + `Device Tree for Dummies `__ + by Thomas Petazzonig. + +So keeping with the spirit of doing while we're learning, let's configure the +overlay for this experiment. The device tree overlay is specified in the +config.txt file, which lives in the BOOT partition on the SD card. There are +several ways to edit this file - Since the BOOT partition is a FAT filesystem, +you can use any text editor on any operating system; Notepad on Windows, Kedit +on Linux, etc. Or... if your Raspberry Pi is booted up, you can edit directly +on the Pi! Just open a command prompt, and type: + +.. shell:: + + $sudo mousepad /boot/config.txt + +Which will bring up the file in the Mousepad editor. Scroll down until you find +the line that begins with "dtoverlay", and, whatever it happens to be, change +it to: + +.. code-block:: + + dtoverlay=rpi-adxl345 + # dtoverlay=rpi-adxl345 + # dtoverlay=rpi-lm75,addr=0x48 + dtparam=act_led_trigger=heartbeat + dtoverlay=gpio-shutdown,gpio_pin=21,active_low=1,gpiopull=up + +.. _fig-edit_config: + +.. figure:: edit_config.png + :align: center + :width: 600 + + Editing config.txt directly on Raspberry Pi + +Notice the two commented lines beginning with **#**. As you might expect, you +should UN-comment the appropriate line for the device you have connectedg +Also notice that there are a couple of additional lines - there are lots of +useful optional parameters that can be set in the config.txt file, here we're +setting the onboard LED to the "heartbeat" function, this makes it easy to see +if the board is running or shut down, even if you don't have a display +connected. The other line turns GPIO21 into a hardware shutdown function, also +very useful if you are operating the board without a displayg +| If you want to make it easy to revert back to some other overlay, comment out +the original line with a pound sign / hashtag: + +:: + + #dtoverlay=rpi-something-other-than-adxl345 + dtoverlay=rpi-adxl345 + +One last thing worth noting - the default video resolution is 1920x1080. If +this causes problems with your monitor, hanging hdmi_group, mode to 2, 58: + +:: + + hdmi_group=2 + hdmi_mode=58 + +will set the screen resolution to 1680x1050. Information on other video modes +is available here: +`Raspberry Pi Video Modes `__ + +However you edit the file, save, close, cross your fingers, and... reboot! You +can do this from the start menu, or from a terminal type: + +:: + + sudo reboot + +To shut down at the end of the day, type: + +:: + + sudo shutdown -h now + +Hello, ADXL345, ADXL355, or LM75! +--------------------------------- + +If all went well, Linux should have booted, found the ADXL3x5 or LM75, and +loaded its driver. Run IIO Oscilloscope again. locate the DMM screen, check the +ADXL345, select all channels, and click the triangular "play" button. You +should see acceleration values displayed as shown in :numref:`fig-iio_scope_adxl345` + +.. _fig-iio_scope_adxl345: + +.. figure:: iio_scope_adxl345.png + :align: center + :width: 600 + + IIO Oscilloscope showing ADXL345 channels + +IIO Oscilloscope is a great tool for establishing signs of life, but really +isn't intended for much more, so let's start digging deeper into how to +communicate with the ADXL345 programmatically. Close out of IIO Oscilloscope, +open a terminal and enter: + +.. shell:: + + $iio_info + +You should see the screen filled with information about the ADXL345 - sample +rates, "raw" values, scale values, etc. This means that you're ready to start +writing programs to do useful stuff with the ADXL345... on the Raspberry Pi +itself. But before we go there, let's introduce one more extraordinarily +powerful feature of the IIO framework - the ability to communicate remotely +over a network connection. This ability is made up of two components: an IIOD +server running on the Raspberry Pi, and LibIIO running on the remote machine. +LibIIO is cross-platform, so client applications can be written on Windows / +Mac / Linuxg + +Let's take a peek at the IIOD server. In the Raspberry Pi terminal, enter: + +.. shell:: + + $ps aux | grep iiod + +Which means "list all processes from all users, but only display ones that +include the text "iiod"". You should see a process running as shown in +:numref:`fig-iiod_process_screenshot` below. +(Note that this is the login screen for an ADALM2000 - it's all the same.) + +And the red line relates this process back to the handy little diagram from +:ref:`libiio` (We will be recycling that diagram - a lot.) + +.. _fig-iiod_process_screenshot: + +.. figure:: iiod_process_screenshot.png + :align: center + :width: 600 + + IIOD process + +The other piece is libiio on the remote host. LibIIO can be obtained from: +:git-libiio:`releases+` + +Download and install the appropriate latest version for your remote host (For +example, libiio-0.24.gc4498c2-Windows-setup.exe for Windows) Once this is done, +open a command prompt, and enter: + +.. shell:: + + $iio_info -u ip:analog.local + +(Where the IP address may be different, depending on how you've connected.) If +all goes well, you should see lots of information associated with the +ADXL345... that is connected to your Raspberry Pi... but from your Windows / +Linux / Mac machine! *(How cool is that?)* + +.. _fig-iio_info_local_remote: + +.. figure:: iio_info_local_remote.png + :align: center + :width: 600 + + iio_info run locally and remotely + +NOW you've got all the pieces for some fun hacking - you can write software +that runs directly on the Raspberry Pi and talks to the ADXL345 (which... is +conceptually similar to writing software that runs on a Xilinx SoC board and +grabs data from an attached high-speed ADC) AND, you can write software on a +remote host - useful if you want a larger application that is more appropriate +to run on the host, or if you want to grab large amounts of data for analysis + +LibIIO is written natively in C, but there are bindings for MATLAB, C#, and +Python. Let's use Python..g + +Python +------ + +Any language that can call a shared library can communicate with libiio. But +Python is attractive for getting started for several reasons: + +It's FREE It's tremendously popular It's got tons of number crunching +libraries It's got tons of libraries for communicating with hardware (It's also +really really fun!) And - it's easy to learn. If you've never touched Python +before, there are lots of free resources, including this 4-hour course on +YouTube from freeCodeCamp.org: + +.. video:: https://www.youtube.com/watch?v=rfscVS0vtbw + +And this very nice interactive tutorial: +`Learn Python `__ +in which code snippets run in the browser (no need to intall Python.) +If you prefer paper, `Python for Kids by Jason R. Briggs `__ is a well written books for +kids of all ages. +(And `Learn to Program with Minecraft: Transform Your World with the Power of Python `__ by +Craig Richardson is a pretty nice introduction to the idea of communicating +over a network connection; the Minecraft world is a process that communicates +over network ports.) + +There are several choices of Python installations, and which one to use is +largely a matter of preference. You can install from scratch from +`Python.org `__, or a more full featured distribution such as +Anaconda, PyCharm, or VS Code. And **Python is pre-installed on ADI Kuiper +Linux**, as is the Thonny IDE. Thonny is basic as far as IDEs go, but it +provides breakpoints, variable watches, and is perfectly adequate for simple to +intermediate development. + +.. NOTE:: + + On Python Versions - We're using Python 3 (3.9.2 in Kuiper 2022_r2 to be + specific.) So if you're installing on your remote host, make sure to get a + recent version of Python 3. Previous Kuiper Linux releases had multiple Python + versions installed, defaulting to Python 2.x. The current Kuiper Linux defaults + to Python 3 so this is no longer an issue, but for historical curiosity the + procedure for setting the default to Python 3 is to run the following commands: + + .. shell:: + + $sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 + $sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2 + + (This only needs to be done once.) + +PyADI-IIO +--------- + +PyADI-IIO (pronounced "Py-odi" [1]_ is like `peyote `__, +but with a Py) is a python abstraction module for ADI hardware with IIO drivers +to make them easier to use. +Pyadi-iio can be installed through pip, and is pre-installed on ADI Kuiper +Linux, but if you're reading this you'll probably want to be hacking around a +bit so go to :git-pyadi-iio:`/` and follow the "installing +from source" instructions. And note that this can be done on your remote +Windows / Mac / Linux host AND... on the Raspberry Pi itself! Git is already +installed on ADI Kuiper Linux, but may need to be installed on a Windows host. +(You can also download the repository as a zip, but cloning will make it easier +to update.) Let's install pyadi-iio. + +.. shell:: + + $git clone https://github.com/analogdevicesinc/pyadi-iio.git + $cd pyadi-iio + $sudo pip install . + +Note: This requires that your Raspberry Pi be able to access the internet. If +you've followed the "headless" instructions below, this may not be the case. +However - if you have access to a wireless network and your Raspberry Pi has an +Ethernet adapter, you can connect in this way. Just click the WiFi icon and log +on as you would on any other machine, supplying a password if necessary + +.. _fig-rpi_wifi_login: + +.. figure:: rpi_wifi_login.png + :align: center + :width: 600 + + WiFi logon + +Now it's (almost) trivial to grab data from the ADXL345 used in this tutorial, +as well as more complicated hardware. With pyadi-iio installed, you should be +able to run the ADXL345 example. + +.. todo:: + + Update ADXL345 pyadi-iio example. + As of Feb. 2024, the ADXL345 example has a hardcoded ip address. Most newer + examples allow the context to be passed via command line argument, but in the + meantime change line 10 from: + +:: + + myacc = adi.adxl345(uri="ip:192.168.1.232") + +To: + +:: + + myacc = adi.adxl345(uri="ip:localhost") + + + +Enter the following commands, making sure you're in the pyadi-iio root +directory: + +.. shell:: + + ~/pyadi-iio + $cd examples + $python adxl345_example.py + +The example program takes a few acceleration readings, shows how to set the +sample rate, and shows how to convert values to SI units. + +If you're running the example on the remote host, you should be able to talk to +the Pi by using the context "ip:analog.local", the address noted for the +"headless" configuration below. If your Raspberry Pi's address is different +(supplied by DHCP, for example), change it accordingly. The example will also +run locally, with the same IP address! But as soon as the IP address changes, +the example won't work any more. Since we're running locally, you can set the +IP address to the local loopback address: + +:: + + myacc = adi.adxl345(uri="ip:localhost") + +But since we're running locally, why bother talking through IIOD? Setting the +context to local takes care of that: + +:: + + myacc = adi.adxl345(uri="local:") + +But there's one subtlety... run Python as root (``sudo python adxl345_example.py``). +The reason is that IIOD runs with root privileges and can read / write to +devices. The example script will be able to read just fine, but writing even +something as mundane as the sample rate requires root privileges. + +The example script should run just fine on the Raspberry Pi itself, and on the +remote host. Try writing a program to read out a hundred samples from each +channel (X,Y,Z) and store to a file, or if you're really adventurous, display +the 3-axis acceleration as an arrow in a graphical screen. + +The ADXL355 and LM75 examples allow the IIO context to be passed as a command +line argument. From the command line, run the following for the ADXL355: + +.. shell:: + + ~/pyadi-iio/examples + $python adxl355_example.py ip:localhost + +And this for the LM75: + +.. shell:: + + ~/pyadi-iio/examples + $python lm75_example.py ip:localhost + +Tools for your Toolbox: SSH, SCP, VNC +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Putty and TeraTerm are popular (and free) SSH clients that let you log into a +console on your Raspberry Pi (or other remote client). They are available at +`PuTTY Homepage `__ and `TeraTerm Homepage `__, +respectively. +Try both, which one is better is largely a matter of preference. + +On Mac and Linux machines, you can simply log in via ssh from the command line. + +WinSCP is a handy tool that lets you copy files between a Windows machine and +your Raspberry Pi, for example, let's say you collect some data on your Pi +using a Python script, and want to get it over to your Windows machine. It is +available from `WinSCP Homepage `__. + +As with SSH, Mac and Linux machines include SCP alreadyg + +VNC is a remote desktop application, and Kuiper Linux runs a VNC server by +default. There are several clients available; RealVNC works well and is +available at `RealVNC Viewer `__. +A screenshot of VNC logged into the Raspberry Pi is shown in :numref:`fig-rpi_vnc` + +.. _fig-rpi_vnc: + +.. figure:: rpi_vnc.png + :align: center + :width: 600 + + VNC desktop + +Going "Headless" +---------------- + +(Ignore if you're using a monitor / keyboard / mouse) If it happens that you +don't have a spare monitor / keyboard / mouse, or it's just inconvenient, you +can operate the Raspberry Pi with only a network connection. By default, the +ADI Kuiper Linux network hostname is **analog**, and the machine can be +accessed as **analog.local**. + +The Raspberry Pi can also be accessed directly by its IP address. If your +network has a DHCP server, and you can find the IP address that it assigned to +the Raspberry Pi, you're all set. But a very robust way is to set the Raspberry +Pi's address manually, and do the same to one network adapter on the host. To +set the Raspberry Pi's address, open the boot partition on a host machine (once +again... BEWARE ENCRYPTION!), and note that this host machine could be the +Raspberry Pi itself, with a montior / keyboard / mouse attached. Open the file +"cmdline.txt" and add the following to the end: + +:: + + ip=192.168.1.232::192.168.1.1:255.255.255.0:rpi:eth0:off + +Where, the 192.168.1.232 is somewhat arbitrary - just make sure that the first +3 octets (192.168.1) are DIFFERENT from those of any other network adapters on +your host machine. The next step is to configure your host's network adapter. +Open your computer's "Network Connections" control panel note that your host +could have lots of adapters. Sometimes it's obvious - if you're using a cable +connection, it's obviously NOT your WiFi adapter. If you're using a +USB-Ethernet adapter (a super convenient option sometimes), plugging and +unplugging the adapter, and seeing which disappears. Open the adapter's +configuration (right-click, "Properties") and configure the IPV4 properties as +shown in :numref:`fig-static_ip_host` below. +Make sure the last octet in the IP address is DIFFERENT from that set on the Raspberry Pig + +.. _fig-static_ip_host: + +.. figure:: static_ip_host.png + :align: center + :width: 600 + + Setting Up Static IP on Windows Host + +Finally, open a command prompt, and ping your Raspberry Pi as shown in +:numref:`fig-ping_rpi`: + +.. _fig-ping_rpi: + +.. figure:: ping_rpi.png + :align: center + :width: 600 + + Pinging the Headless Pi + +If you get a reply, you're all set! You can now log into the Raspberry Pi using +PuTTY, VNC, and talk to attached IIO devices via IIO oscilloscope or libiio on +the remote host. + +**Leveraged Learning:** This process (and any frustrations accompanied on the +way) is the same for using any network connected embedded computer, test +equipment, etc. + +Conclusion +---------- + +You're now armed to start building interesting application circuits with the +ADXL345, starting with a solid software foundation. Applications can either be +connected to a host computer, or can run remotely on the Raspberry Pi itself. +Hopefully you're left with one of two feelings: + +#. Device drivers look really complicated, thank goodness I can dive in as a + user and do something useful without having to fully understand the details. + (If this is the case, see if the devices you're using in your present work are + supported in ADI Kuiper Linux, and try to get them up and running.) +#. This is really interesting! I want to know more! (If this is the case, + great! A good starting point would be + :dokuwiki:`Building for Raspberry PI `) + +.. [1] + pei·ow·tee : 'p' in pie; 'a' in about; 'y' yes; 'o' in code; 't' in tie; 'y' in happy diff --git a/docs/learning/converter_connectivity_tutorial/ping_rpi.png b/docs/learning/converter_connectivity_tutorial/ping_rpi.png new file mode 100644 index 000000000..61daa55ad --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/ping_rpi.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce93cc1166bf555316db9226a6fd098e2d43b171e95b1459c094036d82e8dd93 +size 48333 diff --git a/docs/learning/converter_connectivity_tutorial/pluto_medium_block_diagram.png b/docs/learning/converter_connectivity_tutorial/pluto_medium_block_diagram.png new file mode 100644 index 000000000..5375d825c --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/pluto_medium_block_diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87227abb6cb61ed3415be8310789b12fb875bbad60753cc65ca8a9686f08f647 +size 42038 diff --git a/docs/learning/converter_connectivity_tutorial/raspberry_pi_imager.png b/docs/learning/converter_connectivity_tutorial/raspberry_pi_imager.png new file mode 100644 index 000000000..c6513a853 Binary files /dev/null and b/docs/learning/converter_connectivity_tutorial/raspberry_pi_imager.png differ diff --git a/docs/learning/converter_connectivity_tutorial/rpi_adxl345_connections.png b/docs/learning/converter_connectivity_tutorial/rpi_adxl345_connections.png new file mode 100644 index 000000000..445e16167 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/rpi_adxl345_connections.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ca8a4c34117a78a396a33c8e2c977ea819da8a56544aec773063badc1dd0a62 +size 852417 diff --git a/docs/learning/converter_connectivity_tutorial/rpi_desktop.png b/docs/learning/converter_connectivity_tutorial/rpi_desktop.png new file mode 100644 index 000000000..a5db4a324 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/rpi_desktop.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8655f32f6ba22d359454a154ef5d832561f04eaf08d8527f000bdcbfad67ecf +size 459059 diff --git a/docs/learning/converter_connectivity_tutorial/rpi_desktop_old.png b/docs/learning/converter_connectivity_tutorial/rpi_desktop_old.png new file mode 100644 index 000000000..555452143 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/rpi_desktop_old.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3daf9ba38bddc346e2deb4734ddbda1ccc0064521f31424a5db661a47885a4f5 +size 595880 diff --git a/docs/learning/converter_connectivity_tutorial/rpi_vnc.png b/docs/learning/converter_connectivity_tutorial/rpi_vnc.png new file mode 100644 index 000000000..68f38be54 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/rpi_vnc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f56b8dc2b5e6796d74fb598676006ba4db224a9c2c4297cae0eb66c32b6d89d +size 82507 diff --git a/docs/learning/converter_connectivity_tutorial/rpi_wifi_login.png b/docs/learning/converter_connectivity_tutorial/rpi_wifi_login.png new file mode 100644 index 000000000..cd38a1d4a --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/rpi_wifi_login.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be9c7a4c492239cd04b881745263dce2d6152f14102d2e80bcb0cce86d9bac88 +size 145578 diff --git a/docs/learning/converter_connectivity_tutorial/s-l1600.jpg b/docs/learning/converter_connectivity_tutorial/s-l1600.jpg new file mode 100644 index 000000000..8a6cb57cc --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/s-l1600.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:156ab17ae470258368a326675535862f500465f6bc2807118418eb295d491887 +size 87228 diff --git a/docs/learning/converter_connectivity_tutorial/s-l1600_back.jpg b/docs/learning/converter_connectivity_tutorial/s-l1600_back.jpg new file mode 100644 index 000000000..9713b248c --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/s-l1600_back.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:625c4d3080d13f6ef3a732a8b70afc2b5f5d2c4dfcbfeeae93d17ef186771654 +size 91503 diff --git a/docs/learning/converter_connectivity_tutorial/sd_card_partitions.png b/docs/learning/converter_connectivity_tutorial/sd_card_partitions.png new file mode 100644 index 000000000..2e30451bb --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/sd_card_partitions.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfefee3ca40c0620b9ebad2eb33bd3e2e5b8adfd4b207f122b7a73bdbc0176c1 +size 98950 diff --git a/docs/learning/converter_connectivity_tutorial/set_device_tree.png b/docs/learning/converter_connectivity_tutorial/set_device_tree.png new file mode 100644 index 000000000..065fb570d --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/set_device_tree.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d08f842495ab4ca0052959d1b7a62dbb96628f8bb8d7d6de2d829120ee181e3 +size 58588 diff --git a/docs/learning/converter_connectivity_tutorial/simple_iio_hardware.png b/docs/learning/converter_connectivity_tutorial/simple_iio_hardware.png new file mode 100644 index 000000000..09b7fcac0 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/simple_iio_hardware.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf9efe31b0514b4f39182b4b1c9a01f295d707adb0ff86f84f768de5658d60e5 +size 402490 diff --git a/docs/learning/converter_connectivity_tutorial/static_ip_host.png b/docs/learning/converter_connectivity_tutorial/static_ip_host.png new file mode 100644 index 000000000..9db14268b --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/static_ip_host.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a59b95aac57fd6706632bcf9804819ef4bedfc38df5fa3b32b17af73eba66314 +size 173807 diff --git a/docs/learning/converter_connectivity_tutorial/win32diskimager_screenshot.png b/docs/learning/converter_connectivity_tutorial/win32diskimager_screenshot.png new file mode 100644 index 000000000..721b6a696 --- /dev/null +++ b/docs/learning/converter_connectivity_tutorial/win32diskimager_screenshot.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f951ae383facc2226802eb672e4c28bda0c1152b66a4c0c9b6fe208fbb2c599 +size 108002 diff --git a/docs/learning/index.rst b/docs/learning/index.rst new file mode 100644 index 000000000..d09db125c --- /dev/null +++ b/docs/learning/index.rst @@ -0,0 +1,48 @@ +Learning! Tutorials, Workshops, Etc +=============================================================================== + +.. toctree:: + :maxdepth: 4 + +Mixed Signal Basics +------------------------------------------------------------------------------- + +.. toctree:: + :caption: Precision ADC Tutorial + :maxdepth: 1 + + tutorial_prec_adc/index + + +System Design +------------------------------------------------------------------------------- + +.. toctree:: + :caption: Converter Connectivity Tutorial (IIO 101) + :maxdepth: 1 + + converter_connectivity_tutorial/index + +.. toctree:: + :caption: Key ADI’s Software Infrastructure for designing with ADCs, DACs, and Sensors + :maxdepth: 1 + + sw_infrastructure/index + +.. toctree:: + :caption: Tools for Low Speed Mixed Signal System Design + :maxdepth: 1 + + tools_for_ls/index + +.. toctree:: + :caption: Tools for Precision Wideband Mixed Signal System Design + :maxdepth: 1 + + tools_for_prec_wb/index + +.. toctree:: + :caption: Tools for High Speed Mixed Signal System Design + :maxdepth: 1 + + tools_for_hs/index \ No newline at end of file diff --git a/docs/learning/sw_infrastructure/index.rst b/docs/learning/sw_infrastructure/index.rst new file mode 100644 index 000000000..039464d45 --- /dev/null +++ b/docs/learning/sw_infrastructure/index.rst @@ -0,0 +1,9 @@ +Key ADI’s Software Infrastructure for designing with ADCs, DACs, and Sensors +=============================================================================== + +Future home of this tutorial. + +In the meantime, here is a VERY unofficial video runthrough of most of what we'll be covering: + + +.. video:: https://www.youtube.com/watch?v=UHX1njMQ7V0 diff --git a/docs/learning/sw_infrastructure/index.rst.bak b/docs/learning/sw_infrastructure/index.rst.bak new file mode 100644 index 000000000..ff2be4953 --- /dev/null +++ b/docs/learning/sw_infrastructure/index.rst.bak @@ -0,0 +1,9 @@ +Key ADI’s Software Infrastructure for designing with ADCs, DACs, and Sensors +=============================================================================== + +Future home of this tutorial. + +In the meantime, here is a VERY unofficial video runthrough of most of what we'll be covering: + + +.. video:: https://www.youtube.com/watch?v=UHX1njMQ7V0 \ No newline at end of file diff --git a/docs/learning/tools_for_hs/index.rst b/docs/learning/tools_for_hs/index.rst new file mode 100644 index 000000000..03edb582e --- /dev/null +++ b/docs/learning/tools_for_hs/index.rst @@ -0,0 +1,5 @@ +Tools for High-Speed Mixed Signal System Design +=============================================================================== + +Future home for a tutorial on high-speed system design: ADCs, DACs, etc. in the high IF (10 MHz) to low RF (hundreds of MHz) range. + diff --git a/docs/learning/tools_for_ls/Tools_for_low_speed_ms_workshop.pptx b/docs/learning/tools_for_ls/Tools_for_low_speed_ms_workshop.pptx new file mode 100644 index 000000000..ceee7bbcd Binary files /dev/null and b/docs/learning/tools_for_ls/Tools_for_low_speed_ms_workshop.pptx differ diff --git a/docs/learning/tools_for_ls/index.rst b/docs/learning/tools_for_ls/index.rst new file mode 100644 index 000000000..87c32ea47 --- /dev/null +++ b/docs/learning/tools_for_ls/index.rst @@ -0,0 +1,220 @@ +Tools for Low Speed Mixed Signal System Design +---------------------------------------------- + +.. note:: + + This is a work in progress. + +Introduction +~~~~~~~~~~~~ + +The goal of this tutorial is to equip the reader with a collection of hardware +and software tools for developing low-speed mixed-signal applications. +Content Guide: This tutorial includes complete written instructions, a video +guide, and a slide deck that can be used for delivering as a hands-on workshop. + + +What exactly does “Low Speed” mean? In the context of this tutorial, it +means that timing is not very critical. Signals are either completely static or +moving slowly such that it doesn't matter if the instant that an ADC samples +the signal wiggles around a bit relative to the previous sampling. While clock +jitter is one source of this uncertainty, software delays (such as the time +between a timer interrupt and the assertion of a “convert” edge) will +likely be dominant. Important parameters in low-speed applications are offset, +gain error, linearity, and temperature drift. “Noise” in a low-speed +application is typically synonymous with resolution, and is typically measured +by applying a noiseless input signal and taking a histogram of the output +readings. AC performance metrics such as signal to noise ratio and total +harmonic distortion extracted from a Fourier transform of the data will not be +considered. +In contrast - sample jitter is important in a “high speed” application. If +you are measuring signal to noise ratio, the Signal to Noise ratio (SNR) can be +no greater than: + +:math:`SNR <= -20 * log(2*pi*f\_{IN}*t\_{j})` + +Where: +:math:`f_{IN}` is the analog input frequency in Hz +:math:`t_{j}` is the RMS jitter in seconds RMS + +So that's it. In this tutorial, we will set voltages and currents, read +voltages and currents, do some basic math, but each reading will be treated +independently, no correlation to previous or future readings. We will NOT be +measuring AC Signal to Noise Ratio (SNR), Total Harmonic Distortion (THD), nor +measuring steps, wiggles, or any other situation where precise timing is +required. (Rest assured, there are lots of very interesting applications in +this category.) +Throughout the exercises we'll be writing simple Python code to capture and +analyze data, using the industry standard Industrial I/O (IIO) framework to +interact with the ADC, and the popular NumPy and Matplotlib Python libraries. +Thus this exercise also serves as a mini-tutorial on Python. + +Materials +~~~~~~~~~ + +- Raspberry Pi 4; 2G, 4G, or 8G version. (3B, 3B Plus will work, but + you will want the 4 :-) ) +- 5V USB-C wall adapter for Raspberry Pi (micro USB for model 3) +- :adi:`EVAL-AD5592R-PMDZ` +- Electrical connection hardware (choose one): + + - :adi:`Raspberry Pi to PMOD/QuikEval™/LTpowerPlay® Adaptor HAT` + + - 12x 15cm socket-to-socket jumpers such as `these from Schmartboard `__. +- 16GB (or larger) Class 10 (or faster) micro-SD card, with :ref:`kuiper` installed +- User interface setup (choose one): + - HDMI monitor, keyboard, mouse plugged directly into Raspberry Pi + - Host Windows/Linux/Mac computer on same network as Raspberry Pi +- :adi:`ADALM2000 ` (Not required for all experiments.) +- 2N3904 NPN Transistor +- 47Ω resistor +- 47kΩ resistor +- Breadboard or prototyping board, hookup wire +- Clone or download zip of the Python code for this tutorial +- | Python files: :git-pyadi-iio:`AD5592r Pyadi-IIO examples ` + | Note that these are included in the pyadi-iio repo, consider cloning the entire thing: + + .. shell:: + + $git clone https://github.com/analogdevicesinc/pyadi-iio.git + +- AD5592R Device Tree Overlay for alternate configuration with GPIO + pins + +.. ADMONITION:: Download + + :download:`rpi-ad5592r-with_gpios-overlay source and compiled overlay ` + +Background +~~~~~~~~~~ + +This tutorial builds on the concepts covered in: +:dokuwiki:`Converter Connectivity Tutorial ` +It also serves as a preview to this tutorial that starts to deal with +analyzing time series data: +:dokuwiki:`Precision ADC Tutorial ` + +Slide Deck and Video +~~~~~~~~~~~~~~~~~~~~ + +Since this tutorial is also designed to be presented as a live, hands-on +workshop, a slide deck is provided here: + +.. ADMONITION:: Download + + :download:`Tools for Low-Speed Mixed Signal System Design Slide Deck ` + +A complete video run-through is also provided, either as a companion to +following the tutorial yourself, or to practice before presenting as a +hands-on workshop: This video is accurate, but will be +re-done at some point: + + +.. video:: https://www.youtube.com/watch?v=tJtzUrt9_1U + + +.. todo:: + + Finish Me + (Translate slide deck and video into complete written instructions + with photos, diagrams, etc.) + +Preparation - a few resources for learning Python +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +What does “Just Enough Software” look like? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Software Stack Background +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Introducing an exciting new product that we'll apply our skills +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Component selection based on software support (rather than pure analog performance) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Hardware Setup +~~~~~~~~~~~~~~~~ + +Booting the system +~~~~~~~~~~~~~~~~~~~~~~~~ + +Post-boot housekeeping +~~~~~~~~~~~~~~~~~~~~~~~~ + +The Raspberry Pi-based hardware and Linux setup mirrors that of the ADXL345 +used in the :dokuwiki:`Converter Connectivity Toolbox and Tutorial `, +including bringing up the pyadi-iio example. Follow the instructions for downloading and +installing ADI Kuiper Linux, and editing config.txt. The only difference is the +interrupt connection and device tree overlay to be added to config.txt. For +this exercise, add the following line to config.txt: + +:: + + dtoverlay=rpi-ad5592r + +Configuring the System (and rebooting!) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Command Line Tools (Hello, AD5592r!) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +IIO Oscilloscope +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Device Trees: Telling Linux what's connected +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Pyadi-iio And examples +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Hands-On!** Working through a simple, but complete case study +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Next Steps: Developing on a remote host +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Next Steps: Other languages (C++, C#, MATLAB, etc.) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Next Steps: No-OS development on Linux? You bet! +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +...but I'm Confused... No-OS means no Operating System, but we're using Kuiper +Linux, and that's an Operating System. What gives? + +Unlike the IIO drivers used in the previous tutorial , which +**require** the Linux kernel and operating system to function, No-OS +provides a portable software stack which can run on any platform that +supports a C compiler. This could be bare metal microcontrollers, +truly running without an operating system, up through full systems +like our Kuiper Linux running on a Raspberry Pi. The No-OS repository +includes existing support for the Linux OS, Real-Time Operating +Systems Chibios, and mbed, Raspberry Pico, as well as hardware support +for Maxim/ADI, STM32, Xilinx and Altera. +But why? Well, bringing up a toolchain for a particular embedded +processor has its own set of challenges - particularly if development +will begin on a standard development platform, then be ported to a +custom board. Runnin no-OS code on Linux provides a way to get started +on the embedded code development, before actually embedding. +A full treatment of this flow is beyond the scope of this tutorial, +but will be documented in a future tutorial. + +.. todo:: + + Port the Fred in the Shed curve tracer to no-OS on Linux. + +Next Steps: Porting to a fully embedded system +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +More “Just Enough Software” examples +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Drawing parallels to other software flows +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Wrapup +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Additional References +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/learning/tools_for_ls/rpi-ad5592r-with_gpios-overlay.zip b/docs/learning/tools_for_ls/rpi-ad5592r-with_gpios-overlay.zip new file mode 100644 index 000000000..4ffa809eb Binary files /dev/null and b/docs/learning/tools_for_ls/rpi-ad5592r-with_gpios-overlay.zip differ diff --git a/docs/learning/tools_for_prec_wb/index.rst b/docs/learning/tools_for_prec_wb/index.rst new file mode 100644 index 000000000..c136b2cac --- /dev/null +++ b/docs/learning/tools_for_prec_wb/index.rst @@ -0,0 +1,142 @@ +Tools for Precision Wideband Mixed Signal System Design +=============================================================================== + +.. note:: + + This is a work in progress. + +Introduction +~~~~~~~~~~~~ + +The goal of this tutorial is to equip the reader with a collection of +hardware and software tools for developing precision wideband +mixed-signal applications. +**Content Guide:** This tutorial includes complete written +instructions, a video guide, and a slide deck that can be used for +delivering as a hands-on workshop. +What exactly does "Precision Wideband" mean? + +The "precision" part means that DC parameters such as offset, gain +error, linearity, and temperature drift are also important. + +The "wideband" part means that **unlike** "low speed" +applications, timing, or jitter, of individual samples with respect to +previous and future samples **IS** critical. The application involves +extracting information from arrays of samples that are correlated with +each other in some way. AC performance metrics such as signal to noise +ratio and total harmonic distortion extracted from a Fourier transform +of the data **will** be considered. Even if the end application does +not involve sine waves, these metrics are almost always a useful +indicator of performance. + + +An important point is that sample jitter is important for the "wideband" +aspects of these applications. If you are measuring signal to noise ratio, +the Signal to Noise ratio (SNR) can be no greater than: + +:math:`SNR <= -20 * log(2*pi*f\_{IN}*t\_{j})` + +Where: +:math:`f_{IN}` is the analog input frequency in Hz +:math:`t_{j}` is the RMS jitter in seconds RMS + +In this tutorial, we will be generating excitation waveforms, +digitizing time-domain signals, performing Fast Fourier Transforms +(FFTs), extracting features from the frequency domain, and calculating +measurement parameters. We **will** be measuring AC Signal to Noise +Ratio (SNR), Total Harmonic Distortion (THD), measuring steps, +wiggles, and other situations where precise timing is required. +Throughout the exercises we'll be writing simple Python code to +capture and analyze data, using the industry standard Industrial I/O +(IIO) framework to interact with the ADC, and the popular NumPy and +Matplotlib Python libraries. Thus this exercise also serves as a +mini-tutorial on Python. + +Materials +~~~~~~~~~~~~~~~~~~~ + +- Raspberry Pi 4; 2G, 4G, or 8G version, OR Raspberry Pi 400 (the + keyboard one). +- 5V USB-C wall adapter for Raspberry Pi +- Colorimeter Setup. This is not in production (yet), but full gerbers + are provided. The pull request is in review, + `HERE `__ +- Optical absorbance demonstration material such as: + + - Optical filters such as `Roscolux Selector Pack `__ + - `API pH test and adjust kit `__ + +- 16GB (or larger) Class 10 (or faster) micro-SD card, with + :ref:`kuiper` installed. +- User interface setup (choose one): + + - HDMI monitor, keyboard, mouse plugged directly into Raspberry Pi + - Host Windows/Linux/Mac computer on same network as Raspberry Pi + +- :adi:`ADALM2000` +- Clone or download zip of the Python code for this tutorial from: + `Python Code for the Hardware and Software Tools for Precision Wideband Instrumentation Workshop `__ + +This probably isn't necessary as of Kuiper 2022r2, but just in case +you want to update pyadi-iio or have the examples in your home +directory, run these commands in a terminal: + +.. shell:: + + $git clone https://github.com/analogdevicesinc/pyadi-iio.git + $cd pyadi-iio + $sudo pip install . + +Background +~~~~~~~~~~ + +This tutorial builds on the concepts covered in: +Introduction to the basic concepts of writing software to talk to +external devices: +`Converter Connectivity Tutorial `__ +This tutorial that starts to deal with analyzing time series data: +`Precision ADC Tutorial `__ +And this workshop in which we actually build a simple test instrument: +`Tools for Low Speed Mixed Signal System Design `__ + +Slide Deck and Video +~~~~~~~~~~~~~~~~~~~~ + +Since this tutorial is also designed to be presented as a live, hands-on +workshop, a slide deck is provided here: + +A complete video run-through is also provided, either as a companion +to following the tutorial yourself, or to practice before presenting +as a hands-on workshop: + +.. todo:: + + Video and Slide Deck + +Preparation - a few resources for learning Python +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Software Stack Review +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Introducing an exciting new product that we'll apply our skills to +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Hardware Setup +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Booting the system +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Post-boot housekeeping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Configuring the System (and rebooting!) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Command Line Tools (Hello, Colorimeter and AD4630-24!) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +IIO Oscilloscope +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Pyadi-iio And examples +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Next Steps: Other languages (C++, C#, MATLAB, etc.) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Wrapup +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Additional References +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/learning/tutorial_prec_adc/index.rst b/docs/learning/tutorial_prec_adc/index.rst new file mode 100644 index 000000000..80c4d9407 --- /dev/null +++ b/docs/learning/tutorial_prec_adc/index.rst @@ -0,0 +1,6 @@ +Precision ADC Tutorial +=============================================================================== + +Future home of this tutorial currently on the ADI wiki: + +`Precision ADC Tutorial `__ diff --git a/docs/university/active_learning/efficiency_power_loss/AD592_circuit.png b/docs/university/active_learning/efficiency_power_loss/AD592_circuit.png new file mode 100644 index 000000000..849af665f --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/AD592_circuit.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bba52153ee7935b977f801cfcd3aa17148c5fda5b82953a14d419882d9c5418 +size 12577 diff --git a/docs/university/active_learning/efficiency_power_loss/AD592_mounting.jpg b/docs/university/active_learning/efficiency_power_loss/AD592_mounting.jpg new file mode 100644 index 000000000..b1f5e383d Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/AD592_mounting.jpg differ diff --git a/docs/university/active_learning/efficiency_power_loss/AD592_temperature_sensor.jpg b/docs/university/active_learning/efficiency_power_loss/AD592_temperature_sensor.jpg new file mode 100644 index 000000000..e04892994 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/AD592_temperature_sensor.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2adac7f76efe3a49c2f64e5d52ad2db39c1f578f8cc12d23b2fa8d4ad46ed2af +size 119524 diff --git a/docs/university/active_learning/efficiency_power_loss/Cozy_Laptop_Charger.jpg b/docs/university/active_learning/efficiency_power_loss/Cozy_Laptop_Charger.jpg new file mode 100644 index 000000000..f758c2e3a Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/Cozy_Laptop_Charger.jpg differ diff --git a/docs/university/active_learning/efficiency_power_loss/LT3080_1W_temp_rise_sch.png b/docs/university/active_learning/efficiency_power_loss/LT3080_1W_temp_rise_sch.png new file mode 100644 index 000000000..c54e3cb6c Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/LT3080_1W_temp_rise_sch.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/LT3080_2W5_temp_rise_sch.png b/docs/university/active_learning/efficiency_power_loss/LT3080_2W5_temp_rise_sch.png new file mode 100644 index 000000000..382cbffc8 Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/LT3080_2W5_temp_rise_sch.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/LT3080_breadboard.jpg b/docs/university/active_learning/efficiency_power_loss/LT3080_breadboard.jpg new file mode 100644 index 000000000..c1f0d4a10 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/LT3080_breadboard.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d490e004e2f090b2cc7a93bff7b39315bba7e0aa7c1c30f6fb1642a22ead6753 +size 535166 diff --git a/docs/university/active_learning/efficiency_power_loss/LT3080_efficiency.png b/docs/university/active_learning/efficiency_power_loss/LT3080_efficiency.png new file mode 100644 index 000000000..1eeb7b4d1 Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/LT3080_efficiency.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/LT3080_schematic.png b/docs/university/active_learning/efficiency_power_loss/LT3080_schematic.png new file mode 100644 index 000000000..8afff060f --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/LT3080_schematic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c013e6ffd3fc3568ff6e1f3b97db20423ac6a8fe458ef1ce491fcb82fb5827d +size 57985 diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_block_diagram.png b/docs/university/active_learning/efficiency_power_loss/LTM8067_block_diagram.png new file mode 100644 index 000000000..86308fc83 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/LTM8067_block_diagram.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:859d58f2c0c31d8bc2cd9eeb1e5a3994674cb779aeac75a9e09faffdf4bbfdee +size 11717 diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_bob.png b/docs/university/active_learning/efficiency_power_loss/LTM8067_bob.png new file mode 100644 index 000000000..f8a8d305b Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/LTM8067_bob.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_breadboard.jpg b/docs/university/active_learning/efficiency_power_loss/LTM8067_breadboard.jpg new file mode 100644 index 000000000..64301af02 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/LTM8067_breadboard.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7190e5f1e93cb476a6220f4b355d9c1d7819889ea07018d961e2f7435473392 +size 888267 diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_efficiency.png b/docs/university/active_learning/efficiency_power_loss/LTM8067_efficiency.png new file mode 100644 index 000000000..26f8a666b Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/LTM8067_efficiency.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_iout_vs_vin.png b/docs/university/active_learning/efficiency_power_loss/LTM8067_iout_vs_vin.png new file mode 100644 index 000000000..1c00b574b --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/LTM8067_iout_vs_vin.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01b9576e85b409464d93f0b7f914bc475112893377c2dc31d5e7f9d6497ebefb +size 15909 diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_schematic.png b/docs/university/active_learning/efficiency_power_loss/LTM8067_schematic.png new file mode 100644 index 000000000..1053896f5 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/LTM8067_schematic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5df731d46ed1e01579d33a378f9f5f4e55b9a3613daaadca002348110a85289 +size 91768 diff --git a/docs/university/active_learning/efficiency_power_loss/LTM8067_waveform.png b/docs/university/active_learning/efficiency_power_loss/LTM8067_waveform.png new file mode 100644 index 000000000..14a4c8a6c Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/LTM8067_waveform.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/Workshop_Efficiency_Power_Loss.pptx b/docs/university/active_learning/efficiency_power_loss/Workshop_Efficiency_Power_Loss.pptx new file mode 100644 index 000000000..1074cd391 Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/Workshop_Efficiency_Power_Loss.pptx differ diff --git a/docs/university/active_learning/efficiency_power_loss/index.rst b/docs/university/active_learning/efficiency_power_loss/index.rst new file mode 100644 index 000000000..c68804c00 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/index.rst @@ -0,0 +1,657 @@ +Activity: Efficiency, Power Loss, and Thermal Management +======================================================== + +Objective +---------- + +The objective of this activity is to explore the concepts of efficiency, power +loss, temperature rise, and heat flow. + +Safety +------- + +This experiment deals with power electronics, and while the voltages are low, +and power is generally less than a few watts, devices and heat sinks can get +hot, and if something goes wrong, parts can fail unexpectedly. WEAR EYE +PROTECTION, and DON'T TOUCH circuits when they are running, and wait for them +to cool down after shutting off power. + +Workshop Slide Deck +------------------- + +A slide deck is provided as a companion to this exercise, and can be used to +help in presenting this material in classroom, lab setting, or in hands-on +workshops. + +.. ADMONITION:: Download + + :download:`Efficiency and Power Loss Slide Deck ` + +Background: +----------- + +All circuits require power. A smart phone is a close-to-home example; it is +compact, reliable (hopefully) and performs an astonishing array of functions. +Electric cars, network server blades, avionics, your laptop computer, and your +microwave oven, all require power. And a common theme with most modern +electronics is that powering them is not getting any easier - requirements on +voltage accuracy, current capacity, size, cost, are all being pushed further +and further. But no power conversion circuit is perfect, some power will be +lost in the process, and it is this lost power, and what do do with it, that +will be explored in this lab. + +When thinking about power supplies, the term "efficiency" often one of the +first parameter that comes to mind. And this is one way of comparing power +supplies, and is certainly important. But the idea of power loss is often a +more practical metric to keep in the forefront of your mind. Why? Consider two +laptop chargers, one is 85% efficient and the other is 90% efficient, which are +typical numbers. While paying a little more for the extra bit of energy +required for the 5% less efficient unit might be annoying, it's insignificant +compared to what it costs to run an air conditioner (or electric oven, etc.) +The real annoyance is how hot the charger gets; the 85% efficient supply +dissipates 50% more power, and the temperature rise will be 1.5X as much above +ambient. Have you ever left a laptop charger on your couch, and somehow a +pillow found its way on top of it as shown in +:numref:`fig-cozy_laptop_charger`? That extra power makes a BIG difference! + +.. _fig-cozy_laptop_charger: + +.. figure:: Cozy_Laptop_Charger.jpg + :align: center + :width: 600 + + Common Laptop Charger Situation + +Here on Earth, there is the luxury of air to carry heat away from stuff that +gets hot. What about a space application? Or even an avionic application, where +air may have a fraction of its ability to move heat that it has at sea level? +That's why the difference between a 99% efficient power supply and a 98% +efficient supply can be tremendously important - the 98% efficient supply has +double the power loss; twice as much heat must be carried away from the +application, and in space, thermal radiation is the only way. + +Whether the amount of power lost from a circuit is large or small, one thing is +true - it WILL escape to the environment. It will escape by increasing the +temperature of the circuit until the heat flowing out of the circuit is equal +to the electrical power being lost, and the goal is to make sure that when this +equilibrium is met, the circuit is still functioning properly. + +With that in mind, let's do some experiments, and try not to burn our fingers +in the process. + +Materials +--------- + +- ADALM2000 Active Learning Module OR +- 2 multimeters (minimum), preferably with a 1A current range +- Solder-less breadboard +- Jumper wires +- PC/Mac running LTspice and Scopy +- 0-24V, 1Amp, Adjustable Power supply +- LT3080 LDO regulator +- LTM8067 Isolated Switching Regulator (on BOB) +- 6.2Ω, 10W power resistor +- TO-220 heat sink, Aavid 7021 or similar, or various sizes of double-sided, + copper-clad PCB material. +- Heat sink compound / thermal grease +- AD592 Temperature Sensor +- Optional: Infrared thermometer + +Thermal Resistance Primer +------------------------- + +Why don't Linear Regulators have an efficiency number proudly displayed on the +front page of the datasheet, like switching regulators? It could be because the +relevant laws of physics are intuitively understood by most engineers using +these parts - Current through any "black box", multiplied by the voltage drop, +equals power that will leave the box somehow. In the case of an LDO regulator, +that power leaves as heat. (If the "black box" were an LED, some of that power +would leave as light, if it were a motor, the power might leave as mechanical +power through the rotating shaft.) And if the input supply to an LDO regulator +varies widely, the efficiency will also vary widely - it could be near 100% +when the input supply is just a little bit higher than the output voltage, or +10% or less, if the input is 12V and the output is 1.2V. But there are +definitely situations where linear regulators are the right tool for the job. +(We'll save that discussion for later.) + +Before even starting to build any circuitry, we know that we're going to have +to get rid of some heat. The LT3080 regulator from the parts kit is in the very +common T0-220 package, with a tab for mounting to a heat sink as shown in +:numref:`fig-lt3080_pinout`. + + +.. _fig-lt3080_pinout: + +.. figure:: wiki_LT3080_pinout.png + + LT3080 package, pinout, thermal resistance + +This shows the physical layout of the part, pinout, and three parameters, +defined as follows: + +**T JMAX** - Maximum Junction Temperature + +**Θ JC** - Thermal resistance from Junction to Case + +**Θ JA** - Thermal resistance from Junction to Ambient + +Further defining terms: + +**Thermal Resistance** - Resistance to the flow of heat, expressed as the +temperature rise due to a given power flowing through the resistance. + +**T J** - Junction Temperature - The temperature of the "important part" of +the silicon die. The junction must be kept below a certain temperature in order +for the part to function properly. It is mounted to the metal tab inside the +part, and encased in plastic. + +**T AMBIENT** - Ambient Temperature - the temperature of the environment, far +away from the part. + +**T C** - Case Temperature - Temperature of the interface between the package +and heat sink or printed circuit board. + +These seemingly simple terms are in reality quite difficult to measure. +Measuring "ambient" is not that bad; an appropriate thermometer can be used to +measure the temperature of the thermal mass that the part is dumping heat into, +which is often the air in the room. But what about the "case"? The case +temperature is defined as the temperature of a large block of copper, to which +the package is optimally mounted. It represents a theoretical minimum thermal +resistance, not achievable in actual applications (for most device packages.) +So while the top of the device's package is literally part of the case, a +measurement of its temperature is NOT the "case temperature". + +This description from Vishay Application Note 827 illustrates this point: "For +the MOSFET/heat sink assembly, a specially designed heat sink assembly of a +copper block (4 in. x 4 in. x 0.75 in.) was used to simulate an infinite heat +sink attached to the case of the TO-220 device." + +Junction temperature is, as the name suggests, the temperature of the +operational semiconductor junction in the device, which in reality may be many +junctions in a complex circuit. And it is this temperature that must be kept +below the maximum specified; if exceeded, the part is not guaranteed to +function properly. But note that unless your device has a built-in temperature +sensor (and some do), it is difficult to measure the junction temperature +directly. + +Note that the maximum junction temperature can be well above the boiling point +of water - too hot to touch. So using your finger to test if a circuit is cool +enough is not only dangerous, it is completely inaccurate. + +So how are these numbers used? The objective is to keep the junction below the +maximum allowed. So we can use knowledge of how much power is dissipated in the +part (near the junction), and the thermal resistance to the air, to calculate +how hot the junction will get. + +.. math:: + + T_{J} = T_{AMBIENT} + P_{D} + Θ_{JA} + +Where P\ :sub:`D` is the power dissipation. + +One very useful mental model is to think of thermal resistances as electrical +resistances, such that: + +1°C/W = 1 Ω + +1W of dissipation = 1A of current being driven through the resistance + +1V = 1°C temperature rise across the resistance. + +Doing a quick calculation on the LT3080 in the TO-20 package, if the input +voltage is 10V, output voltage is 5V, and the load current is 200mA, the power +dissipated in the part is (10V - 5V) \* 0.2A = 1W. This will cause a +temperature rise of 40°C, so if the air in the room is 25C, the junction will +heat up to approximately 65°C - well under the 125°C maximum (but hot enough +to burn skin!) The electrical analogy is shown in :numref:`fig-1w_temp_rise`, +running a DC operating point simulation. + + +.. _fig-1w_temp_rise: + +.. figure:: LT3080_1W_temp_rise_sch.png + + Electrical model of thermal resistance, 1W dissipation. + +Notice that Tjunction is 65 "volts", which is 65C in the analogy. + +But what happens if the load current increases to 500mA? Now you have to get +rid of 2.5W, which will cause a temperature rise of 100°C, pushing you right +up to the maximum junction of 125°C, with no safety margin. This is shown in +:numref:`fig-2w5_temp_rise`. + + +.. _fig-2w5_temp_rise: + +.. figure:: LT3080_2W5_temp_rise_sch.png + + Electrical model of thermal resistance, 2.5W dissipation. + +That doesn't sound like a very high performance part, and the datasheet clearly +says the part is capable of delivering 1.1A of current. So what is going on, +given the Θ\ :sub:`JA` of 40°C/W? Here is the key point about datasheet Θ\ +:sub:`JA` numbers: + +Θ\ :sub:`JA` is designed to be PESSIMISTIC. That is, it is purposely measured +on a circuit board, with no extra copper to spread the heat, with no extra +airflow. Almost ANYTHING that you do to spread heat will effectively lower Θ\ +:sub:`JA` . :numref:`fig-TO-220_thermals` illustrates this for the DD-Pak +package: + +.. _fig-TO-220_thermals: + +.. figure:: wiki_TO-220_thermals.png + + Table 5 from LT3080 datasheet + +And note that while Θ\ :sub:`JA` is listed for the TO-220 package on page 2 of +the datasheet, it's not even mentioned here. Why? Because the TO-220 package is +designed to be mounted to an external heat sink of some sort. It is possible to +solder the back tab of the part to a circuit board, but you would normally use +the DD-Pak in those situations (DD-Pak looks like a TO-220 with shorter leads +and no tab.) + +The LT3080 in the parts kit is the TO-220 package version, and we're not +soldering it down, which means that we really ought to be using a heat sink. +How does that affect our calculations? Luckily [#]_, the heat sink manufacturer +will provide the other number we need: Θ\ :sub:`CA` - the thermal resistance +from case to ambient. The datasheet for the Aavid 7021 heat sink provides the +graph shown in :numref:`fig-aavid_7021_thermals`: + +.. [#] This is not really luck, it's an essential piece of data. + + +.. _fig-aavid_7021_thermals: + +.. figure:: wiki_aavid_7021_thermals.png + + Aavid 7021 Temperature rise and Thermal resistance. + +This shows the following: + +Θ\ :sub:`CA` is approximately 10°C/W in still air (2 Watts causes a 20°C +temperature rise, from the graph). + +Θ\ :sub:`CA` decreases with airflow - by quite a bit - down to about 2.25°C/W +at 800ft/minute (4.06m/s) + +This is reconcilable with table 5 above - the heat sink is a folded up piece of +aluminum, with a total area of about 3060mm\ :sup:`2`, and a 2500mm\ :sup:`2` +PC board has a thermal resistance of about 25°C/W. But the heat sink is all +aluminum, and the PC board is copper foil, but it's glued to fiberglass (a poor +conductor of heat.) :numref:`fig-aavid_7021_drawing` is a mechanical drawing of +the part. + +.. _fig-aavid_7021_drawing: + +.. figure:: wiki_aavid_7021_drawing.png + + Aavid 7021 diagram + +Let's re-run the LTspice simulation one more time, with the Aavid 7021 heat +sink's thermal resistance, shown in :numref:`fig-lt3080_2w5_temp_rise_w_sink`: + + +.. _fig-lt3080_2w5_temp_rise_w_sink: + +.. figure:: wiki_LT3080_2W5_temp_rise_w_sink_sch.png + + Electrical model of thermal resistance, 2.5W dissipation with heat sink. + +The expected temperature rise is about 32.5°C, for a junction temperature of +57.5°C + +Procedure: LT3080 Linear Regulator +---------------------------------- + +Refer to the circuit shown in :numref:`fig-LT3080_sch` below. + + +.. _fig-LT3080_sch: + +.. figure:: LT3080_schematic.png + + LT3080 schematic + +The LTspice file is set up to sweep the input voltage from 5V to 12V and plot +input power, output power, and efficiency. Results are shown in +:numref:`fig-lt3080_efficiency` below, with the red trace representing +efficiency. + +.. _fig-lt3080_efficiency: + +.. figure:: LT3080_efficiency.png + :align: center + :width: 600 + + LT3080 LTspice simulation + +As expected, efficiency is relatively high (about 66%) when the input voltage +(shown in green) is low. As the input voltage increases, the power dissipation +in the LT3080 (blue) increases, and efficiency decreases (to about 28% when the +input voltage is 12V). Results of this simulation will reflect reality very +accurately. The reason is that the loss mechanisms are straightforward - power +dissipations are simply DC currents multiplied by DC voltages. + +.. _fig-lt3080_bb: + +.. figure:: lt3080_bb.png + + LT3080 Breadboard connections + +Construct the circuit on a solder-less breadboard as shown in +:numref:`fig-lt3080_bb`, keeping the following in mind: + +Mount the LT3080 to the heat sink first, with a small drop of heat sink +compound between the package and heat sink. Carefully twist the LT3080's leads +90 degrees such that they line up with the breadboard's columns. This is to +preserve the springiness of the breadboard's contacts. Note that the SET +resistor is three 1M resistors in parallel. WARNING: if the SET resistors lose +contact, the output voltage will increase to its maximum, and the 6.2Ω +resistor will get very hot! + +Also, there are several options for measuring voltages and currents. Input +voltage and current can be measured with multimeters set to appropriate voltage +and current ranges, or, can be read directly from the power supply if it +includes an accurate voltmeter and current meter. Output current can either be +measured directly with a multimeter, or calculated, by first measuring the +actual resistance of the load resistor with a multimeter and dividing the +measured output voltage by the resistance. (The resistor in the parts kit has a +10% tolerance, so it should be measured first.) Input and output voltages can +also be measured with the ADALM2000 and Scopy running in voltmeter mode, or +with a multimeter. Connections are shown in :numref:`fig-LT3080_breadboard`. + +.. _fig-LT3080_breadboard: + +.. figure:: LT3080_breadboard.jpg + :align: center + :width: 800 + + Overhead view + +Things are about to get a bit warm - too warm to touch. So we need a way of at +least getting some idea of HOW warm without getting burned. The AD592 +temperature sensor provides an easy way to do this; schematic shown in +:numref:`fig-AD592_circuit`. + +.. _fig-AD592_circuit: + +.. figure:: AD592_circuit.png + + AD592 Thermometer Circuit + +The AD592 leads can be extended, and the middle lead is not connected so it can +be used to provide extra support as shown in :numref:`fig-AD592_temp_sensor`. + +.. _fig-AD592_temp_sensor: + +.. figure:: AD592_temperature_sensor.jpg + :align: center + :width: 600 + + AD592 Connections + +A small rubber band can then be used to hold the sensor against the top surface +of the LT3080 as shown in :numref:`fig-AD592_mounting`. Use a tiny drop of +thermal grease between the sensor and top of the LT3080 package. + +.. _fig-AD592_mounting: + +.. figure:: AD592_mounting.jpg + :align: center + :width: 600 + + AD592 mounting + +It was mentioned above that the top of the "case" is not truly a measurement of +the case temperature - but it turns out that the temperature of the top of the +case can be used to approximate the temperature of the junction - which is +difficult to measure directly. Application note 834 from Vishay: +https://www.vishay.com/docs/69993/an834.pdf describes the relationship between +the measured temperature rise at the top of a package to junction temperature +rise by the following formula: + +.. math:: + + T_{j}{rise} = k * T_{top} rise + +With typical k values of 1.18 for DDPAK package (similar to TO-220) So while we +don't have actual measurements for the LT3080, we can assume that the +temperature rise of the die is about 20% greater than the temperature at the +top package surface, measured with an AD592, small thermocouple, or infrared +thermometer. + +Power up the circuit and fill out the following data :numref:`tab-lt3080`: + +.. _tab-lt3080: + +.. list-table:: LT3080 Data Table + :header-rows: 1 + :class: grid + + * - Input Voltage + - Output Voltage + - Input Current + - Output Current + - LT3080 pwr dissipation + - Load pwr dissipation + - Efficiency + - Temperature rise + * - 5V + - + - + - + - + - + - + - + * - 10V + - + - + - + - + - + - + - + * - ⠀ + - + - + - + - + - + - + - + +Note the relationship between LT3080 power dissipation, efficiency, and +temperature rise. + +Procedure: LTM8067 Isolated Flyback DC/DC Converter +--------------------------------------------------- + +Next, we'll explore the efficiency and thermal performance of the LTM8067 +Isolated flyback module. We're not interested in the fact that it's isolated +(meaning, output and input ground terminals are independent) or that it is a +module (all components encased in a single package). We are interested in the +fact that it is a switching converter, which is more efficient (and loses less +power to the environment) than a linear regulator, at least under most +circumstances. The LTM8067 in the parts kit comes mounted to a breakout board +as shown in :numref:`fig-LTM8067_bob`, with a potentiometer that allows the +output voltage to be adjusted from 3V to 15V. + +.. _fig-LTM8067_bob: + +.. figure:: LTM8067_bob.png + + LTM8067 Breakout Board + +The block diagram from the datasheet shows a basic isolated flyback circuit as +shown in :numref:`fig-LTM8067_block_diagram`. Without going into details, one +key point is worth worth noting: unlike the pass transistor in the LT3080, The +MOSFET in the LTM8067 is either off completely, or on completely, operating as +a switch. This means that very little power is dissipated in the transistor. +Furthermore, the resistance of the transformer windings is designed to be as +small as possible, also resulting in minimal power dissipation. The Schottky +diode will necessarily have some forward drop, usually about 0.4V, so that is +one loss mechanism that we can predict with some accuracy. For example, if the +load current is 250mA, the diode will dissipate 0.1W as heat. But that's still +relatively small, compared to the dissipation in an LT3080 under some +circumstances. + +.. _fig-LTM8067_block_diagram: + +.. figure:: LTM8067_block_diagram.png + + LTM8067 Block Diagram. + +Setup for this experiment is straightforward; the LTM8067 BOB has four pairs of +pins, and the pins of each pair are the same node. Note that with the +adjustment potentiometer on the left: + +- Input positive is at the top left corner +- Input ground is at the lower left corner +- Output positive is bottom center +- Output negative is top center. + +Also note that the output current capability of the LTM8067 varies with input +voltage as shown in :numref:`fig-LTM8067_iout_vs_vin`: + +.. _fig-LTM8067_iout_vs_vin: + +.. figure:: LTM8067_iout_vs_vin.png + + LTM8067 Output Current vs. Input Voltage + +Even with the BOB set to the minimum output of 3V, the 6.2 Ω power resistor +will draw 440mA, requiring about 20V input voltage. Borrow a neighbor's 6.2Ω +resistor and connect in series with your for a total load resistance of 13.6Ω, +as shown in :numref:`fig-ltm8067_schematic`. + +.. _fig-ltm8067_schematic: + +.. figure:: LTM8067_schematic.png + + LTM8067 Schematic + +Simulations of switching regulators are not as straightforward. Some aspects of +the circuit's operation are modeled well - such as the control loop dynamics, +and instantaneous voltages and currents. However, power loss mechanisms are not +well modeled, so it is better to refer to the part's datasheet for measured +results. The LTM8067 LTspice simulation is set up to show the turn-on transient +waveforms by default, shown in :numref:`fig-ltm8067_waveform`. The green trace +is the output voltage, and the red trace is input current - notice that current +is drawn in "chunks" from the source, due to switching nature of the module. + +.. _fig-ltm8067_waveform: + +.. figure:: LTM8067_waveform.png + :align: center + :width: 600 + + LTM8067 Turn-on Transient + +However, we can still try extracting efficiency from the LTspice simulation. +Disable the startup transient SPICE directives (right-click, set to "Comment") +and enable the efficiency SPICE directives (right-click, set to "SPICE +directive"). Re-run the simulation, then view the SPICE error log. Results are +shown in :numref:`fig-ltm8067_efficiency` below + +.. _fig-ltm8067_efficiency: + +.. figure:: LTM8067_efficiency.png + + LTM8067 Efficiency(%) vs Input Voltage Simulation that MUST be Compared to + Datasheet Curves + +(Comparing with datasheet figure "Efficiency vs Load Current, VOUT = 3.3V" +reveals that LTspice is optimistically high.) + +Construct the circuit on a solder-less breadboard according to +:numref:`fig-ltm8067_bb`. + +.. _fig-ltm8067_bb: + +.. figure:: ltm8067_bb.png + :width: 600 + + LTM8067 Breadboard Circuit + +As with the LT3080 circuit, construction details matter, refer to +:numref:`fig-LTM8067_breadboard`. + +.. _fig-LTM8067_breadboard: + +.. figure:: LTM8067_breadboard.jpg + :width: 600 + + LTM8067 Construction and Connection Details + +Power up the circuit and fill out the following data in :numref:`tab-ltm8067`: + +.. _tab-ltm8067: + +.. list-table:: LTM8067 Data Table + :header-rows: 1 + :class: grid + + * - Input Voltage + - Output Voltage + - Input Current + - Output Current + - LTM8067 pwr dissipation + - Load pwr dissipation + - Efficiency + - Temperature rise + * - 5V + - + - + - + - + - + - + - + * - 10V + - + - + - + - + - + - + - + * - ⠀ + - + - + - + - + - + - + - + + +Note the relationship between LTM8067 power dissipation, efficiency, and +temperature rise. + +Questions +--------- + +How does the LTM8067 efficiency, power loss, and temperature rise compare to +the LT3080? + +The temperature rise vs. heat dissipated curve for the Aavid heat sink is +slightly curved - it appears to have a lower thermal resistance as more heat is +dissipated. Why? + + +.. ADMONITION:: Download Resources: + + - `Efficiency and Power Loss Fritzing files `__ + - `Efficiency and Power Loss LTSpice files `__ + + +Further Reading +--------------- + +Using .meas and .step commands to calculate efficiency in LTspice: + +* :adi:`LTspice: Using .MEAS and .STEP Commands to Calculate Efficiency ` +* **Return to Lab Activity** :dokuwiki:`Table of Contents ` + diff --git a/docs/university/active_learning/efficiency_power_loss/index.rst.bak b/docs/university/active_learning/efficiency_power_loss/index.rst.bak new file mode 100644 index 000000000..acefb51a0 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/index.rst.bak @@ -0,0 +1,353 @@ +Activity: Efficiency, Power Loss, and Thermal Management +======================================================== + +Objective: +---------- + +The objective of this activity is to explore the concepts of efficiency, power loss, temperature rise, and heat flow. + +Safety: +------- + +This experiment deals with power electronics, and while the voltages are low, and power is generally less than a few watts, devices and heat sinks can get hot, and if something goes wrong, parts can fail unexpectedly. WEAR EYE PROTECTION, and DON'T TOUCH circuits when they are running, and wait for them to cool down after shutting off power. + +Workshop Slide Deck +------------------- + +A slide deck is provided as a companion to this exercise, and can be used to help in presenting this material in classroom, lab setting, or in hands-on workshops. + +.. ADMONITION:: Download + + :download:`Efficiency and Power Loss Slide Deck ` + +Background: +----------- + +All circuits require power. A smart phone is a close-to-home example; it is compact, reliable (hopefully) and performs an astonishing array of functions. Electric cars, network server blades, avionics, your laptop computer, and your microwave oven, all require power. And a common theme with most modern electronics is that powering them is not getting any easier - requirements on voltage accuracy, current capacity, size, cost, are all being pushed further and further. But no power conversion circuit is perfect, some power will be lost in the process, and it is this lost power, and what do do with it, that will be explored in this lab. + +When thinking about power supplies, the term "efficiency" often one of the first parameter that comes to mind. And this is one way of comparing power supplies, and is certainly important. But the idea of power loss is often a more practical metric to keep in the forefront of your mind. Why? Consider two laptop chargers, one is 85% efficient and the other is 90% efficient, which are typical numbers. While paying a little more for the extra bit of energy required for the 5% less efficient unit might be annoying, it's insignificant compared to what it costs to run an air conditioner (or electric oven, etc.) The real annoyance is how hot the charger gets; the 85% efficient supply dissipates 50% more power, and the temperature rise will be 1.5X as much above ambient. Have you ever left a laptop charger on your couch, and somehow a pillow found its way on top of it? That extra power makes a BIG difference! + +|cozy_laptop_charger.jpg| Figure 1. Common Laptop Charger Situation + +Here on Earth, there is the luxury of air to carry heat away from stuff that gets hot. What about a space application? Or even an avionic application, where air may have a fraction of its ability to move heat that it has at sea level? That's why the difference between a 99% efficient power supply and a 98% efficient supply can be tremendously important - the 98% efficient supply has double the power loss; twice as much heat must be carried away from the application, and in space, thermal radiation is the only way. + +Whether the amount of power lost from a circuit is large or small, one thing is true - it WILL escape to the environment. It will escape by increasing the temperature of the circuit until the heat flowing out of the circuit is equal to the electrical power being lost, and the goal is to make sure that when this equilibrium is met, the circuit is still functioning properly. + +With that in mind, let's do some experiments, and try not to burn our fingers in the process. + +Materials +--------- + +- ADALM2000 Active Learning Module OR +- 2 multimeters (minimum), preferably with a 1A current range +- Solder-less breadboard +- Jumper wires +- PC/Mac running LTspice and Scopy +- 0-24V, 1Amp, Adjustable Power supply +- LT3080 LDO regulator +- LTM8067 Isolated Switching Regulator (on BOB) +- 6.2Ω, 10W power resistor +- TO-220 heat sink, Aavid 7021 or similar, or various sizes of double-sided, copper-clad PCB material. +- Heat sink compound / thermal grease +- AD592 Temperature Sensor +- Optional: Infrared thermometer + +Thermal Resistance Primer +------------------------- + +Why don't Linear Regulators have an efficiency number proudly displayed on the front page of the datasheet, like switching regulators? It could be because the relevant laws of physics are intuitively understood by most engineers using these parts - Current through any "black box", multiplied by the voltage drop, equals power that will leave the box somehow. In the case of an LDO regulator, that power leaves as heat. (If the "black box" were an LED, some of that power would leave as light, if it were a motor, the power might leave as mechanical power through the rotating shaft.) And if the input supply to an LDO regulator varies widely, the efficiency will also vary widely - it could be near 100% when the input supply is just a little bit higher than the output voltage, or 10% or less, if the input is 12V and the output is 1.2V. But there are definitely situations where linear regulators are the right tool for the job. (We'll save that discussion for later.) + +Before even starting to build any circuitry, we know that we're going to have to get rid of some heat. The LT3080 regulator from the parts kit is in the very common T0-220 package, with a tab for mounting to a heat sink. + +|wiki_lt3080_pinout.png| Figure 2. LT3080 package, pinout, thermal resistance + +This shows the physical layout of the part, pinout, and three parameters, defined as follows: + +**T\ JMAX** - Maximum Junction Temperature + +**Θ\ JC** - Thermal resistance from Junction to Case + +**Θ\ JA** - Thermal resistance from Junction to Ambient + +Further defining terms: + +**Thermal Resistance** - Resistance to the flow of heat, expressed as the temperature rise due to a given power flowing through the resistance. + +**T\ J** - Junction Temperature - The temperature of the "important part" of the silicon die. The junction must be kept below a certain temperature in order for the part to function properly. It is mounted to the metal tab inside the part, and encased in plastic. + +**T\ AMBIENT** - Ambient Temperature - the temperature of the environment, far away from the part. + +**T\ C** - Case Temperature - Temperature of the interface between the package and heat sink or printed circuit board. + +These seemingly simple terms are in reality quite difficult to measure. Measuring "ambient" is not that bad; an appropriate thermometer can be used to measure the temperature of the thermal mass that the part is dumping heat into, which is often the air in the room. But what about the "case"? The case temperature is defined as the temperature of a large block of copper, to which the package is optimally mounted. It represents a theoretical minimum thermal resistance, not achievable in actual applications (for most device packages.) So while the top of the device's package is literally part of the case, a measurement of its temperature is NOT the "case temperature". + +This description from Vishay Application Note 827 illustrates this point: "For the MOSFET/heat sink assembly, a specially designed heat sink assembly of a copper block (4 in. x 4 in. x 0.75 in.) was used to simulate an infinite heat sink attached to the case of the TO-220 device." + +Junction temperature is, as the name suggests, the temperature of the operational semiconductor junction in the device, which in reality may be many junctions in a complex circuit. And it is this temperature that must be kept below the maximum specified; if exceeded, the part is not guaranteed to function properly. But note that unless your device has a built-in temperature sensor (and some do), it is difficult to measure the junction temperature directly. + +Note that the maximum junction temperature can be well above the boiling point of water - too hot to touch. So using your finger to test if a circuit is cool enough is not only dangerous, it is completely inaccurate. + +So how are these numbers used? The objective is to keep the junction below the maximum allowed. So we can use knowledge of how much power is dissipated in the part (near the junction), and the thermal resistance to the air, to calculate how hot the junction will get. + +T\ :sub:`J` = T\ :sub:`AMBIENT` + P\ :sub:`D` \* Θ\ :sub:`JA` + +Where P\ :sub:`D` is the power dissipation. + +One very useful mental model is to think of thermal resistances as electrical resistances, such that: + +1°C/W = 1 Ω + +1W of dissipation = 1A of current being driven through the resistance + +1V = 1°C temperature rise across the resistance. + +Doing a quick calculation on the LT3080 in the TO-20 package, if the input voltage is 10V, output voltage is 5V, and the load current is 200mA, the power dissipated in the part is (10V - 5V) \* 0.2A = 1W. This will cause a temperature rise of 40°C, so if the air in the room is 25C, the junction will heat up to approximately 65°C - well under the 125°C maximum (but hot enough to burn skin!) The electrical analogy is shown below, running a DC operating point simulation. + +|lt3080_1w_temp_rise_sch.png| + + Figure 3. Electrical model of thermal resistance, 1W dissipation. + +Notice that Tjunction is 65 "volts", which is 65C in the analogy. + +But what happens if the load current increases to 500mA? Now you have to get rid of 2.5W, which will cause a temperature rise of 100°C, pushing you right up to the maximum junction of 125°C, with no safety margin. + +|lt3080_2w5_temp_rise_sch.png| + + Figure 4. Electrical model of thermal resistance, 2.5W dissipation. + +That doesn't sound like a very high performance part, and the datasheet clearly says the part is capable of delivering 1.1A of current. So what is going on, given the Θ\ :sub:`JA` of 40°C/W? Here is the key point about datasheet Θ\ :sub:`JA` numbers: + +Θ\ :sub:`JA` is designed to be PESSIMISTIC. That is, it is purposely measured on a circuit board, with no extra copper to spread the heat, with no extra airflow. Almost ANYTHING that you do to spread heat will effectively lower Θ\ :sub:`JA` . Table 5 illustrates this for the DD-Pak package: + +|wiki_TO-220_thermals.png| + + Figure 5. Table 5 from LT3080 datasheet + +And note that while Θ\ :sub:`JA` is listed for the TO-220 package on page 2 of the datasheet, it's not even mentioned here. Why? Because the TO-220 package is designed to be mounted to an external heat sink of some sort. It is possible to solder the back tab of the part to a circuit board, but you would normally use the DD-Pak in those situations (DD-Pak looks like a TO-220 with shorter leads and no tab.) + +The LT3080 in the parts kit is the TO-220 package version, and we're not soldering it down, which means that we really ought to be using a heat sink. How does that affect our calculations? Luckily\*, the heat sink manufacturer will provide the other number we need: Θ\ :sub:`CA` - the thermal resistance from case to ambient. The datasheet for the Aavid 7021 heat sink provides the following graph: + +\*(This is not really luck, it's an essential piece of data.) + +|wiki_aavid_7021_thermals.png| + + Figure 6. Aavid 7021 Temperature rise and Thermal resistance. + +This shows the following: + +Θ\ :sub:`CA` is approximately 10°C/W in still air (2 Watts causes a 20°C temperature rise, from the graph). + +Θ\ :sub:`CA` decreases with airflow - by quite a bit - down to about 2.25°C/W at 800ft/minute (4.06m/s) + +This is reconcilable with table 5 above - the heat sink is a folded up piece of aluminum, with a total area of about 3060mm\ :sup:`2`, and a 2500mm\ :sup:`2` PC board has a thermal resistance of about 25°C/W. But the heat sink is all aluminum, and the PC board is copper foil, but it's glued to fiberglass (a poor conductor of heat.) + +|wiki_aavid_7021_drawing.png| + + Figure 7. Aavid 7021 diagram + +Let's re-run the LTspice simulation one more time, with the Aavid 7021 heat sink's thermal resistance: + +|wiki_lt3080_2w5_temp_rise_w_sink_sch.png| + + Figure 8. Electrical model of thermal resistance, 2.5W dissipation with heat sink. + +The expected temperature rise is about 32.5°C, for a junction temperature of 57.5°C + +Procedure: LT3080 Linear Regulator +---------------------------------- + +Refer to the circuit shown below. + +|LT3080_schematic.png| + + Figure 9. LT3080 schematic + +The LTspice file is set up to sweep the input voltage from 5V to 12V and plot input power, output power, and efficiency. Results are shown in Figure 10 below, with the red trace representing efficiency. + +|lt3080_efficiency.png| + + Figure 10. LT3080 LTspice simulation + +As expected, efficiency is relatively high (about 66%) when the input voltage (shown in green) is low. As the input voltage increases, the power dissipation in the LT3080 (blue) increases, and efficiency decreases (to about 28% when the input voltage is 12V). Results of this simulation will reflect reality very accurately. The reason is that the loss mechanisms are straightforward - power dissipations are simply DC currents multiplied by DC voltages. + +|lt3080_bb.png| + + Figure 11. LT3080 Breadboard connections + +Construct the circuit on a solder-less breadboard, keeping the following in mind: + +Mount the LT3080 to the heat sink first, with a small drop of heat sink compound between the package and heat sink. Carefully twist the LT3080's leads 90 degrees such that they line up with the breadboard's columns. This is to preserve the springiness of the breadboard's contacts. Note that the SET resistor is three 1M resistors in parallel. WARNING: if the SET resistors lose contact, the output voltage will increase to its maximum, and the 6.2Ω resistor will get very hot! + +Also, there are several options for measuring voltages and currents. Input voltage and current can be measured with multimeters set to appropriate voltage and current ranges, or, can be read directly from the power supply if it includes an accurate voltmeter and current meter. Output current can either be measured directly with a multimeter, or calculated, by first measuring the actual resistance of the load resistor with a multimeter and dividing the measured output voltage by the resistance. (The resistor in the parts kit has a 10% tolerance, so it should be measured first.) Input and output voltages can also be measured with the ADALM2000 and Scopy running in voltmeter mode, or with a multimeter. + +|LT3080_breadboard.jpg| + + Figure 12. Overhead view + +Things are about to get a bit warm - too warm to touch. So we need a way of at least getting some idea of HOW warm without getting burned. The AD592 temperature sensor provides an easy way to do this: + +|AD592_circuit.png| + + Figure 13. AD592 Thermometer Circuit + +The AD592 leads can be extended, and the middle lead is not connected so it can be used to provide extra support. + +|AD592_temperature_sensor.jpg| + + Figure 14. AD592 Connections + +A small rubber band can then be used to hold the sensor against the top surface of the LT3080 as shown in Figure 15. Use a tiny drop of thermal grease between the sensor and top of the LT3080 package. + +|AD592_mounting.jpg| + + Figure 15. AD592 mounting + +It was mentioned above that the top of the "case" is not truly a measurement of the case temperature - but it turns out that the temperature of the top of the case can be used to approximate the temperature of the junction - which is difficult to measure directly. Application note 834 from Vishay: https://www.vishay.com/docs/69993/an834.pdf describes the relationship between the measured temperature rise at the top of a package to junction temperature rise by the following formula: + +T\ :sub:`j` rise = k x T\ :sub:`top` rise + +With typical k values of 1.18 for DDPAK package (similar to TO-220) So while we don't have actual measurements for the LT3080, we can assume that the temperature rise of the die is about 20% greater than the temperature at the top package surface, measured with an AD592, small thermocouple, or infrared thermometer. + +Power up the circuit and fill out the following data table: + +|table_lt3080.png| + +Note the relationship between LT3080 power dissipation, efficiency, and temperature rise. + +Procedure: LTM8067 Isolated Flyback DC/DC Converter +--------------------------------------------------- + +Next, we'll explore the efficiency and thermal performance of the LTM8067 Isolated flyback module. We're not interested in the fact that it's isolated (meaning, output and input ground terminals are independent) or that it is a module (all components encased in a single package). We are interested in the fact that it is a switching converter, which is more efficient (and loses less power to the environment) than a linear regulator, at least under most circumstances. The LTM8067 in the parts kit comes mounted to a breakout board, with a potentiometer that allows the output voltage to be adjusted from 3V to 15V. + +|LTM8067_bob.PNG| + + Figure 16. LTM8067 Breakout Board + +The block diagram from the datasheet shows a basic isolated flyback circuit. Without going into details, one key point is worth worth noting: unlike the pass transistor in the LT3080, The MOSFET in the LTM8067 is either off completely, or on completely, operating as a switch. This means that very little power is dissipated in the transistor. Furthermore, the resistance of the transformer windings is designed to be as small as possible, also resulting in minimal power dissipation. The Schottky diode will necessarily have some forward drop, usually about 0.4V, so that is one loss mechanism that we can predict with some accuracy. For example, if the load current is 250mA, the diode will dissipate 0.1W as heat. But that's still relatively small, compared to the dissipation in an LT3080 under some circumstances. + +|LTM8067_block_diagram.png| + + Figure 17. LTM8067 Block Diagram. + +Setup for this experiment is straightforward; the LTM8067 BOB has four pairs of pins, and the pins of each pair are the same node. Note that with the adjustment potentiometer on the left: + +- Input positive is at the top left corner +- Input ground is at the lower left corner +- Output positive is bottom center +- Output negative is top center. + +Also note that the output current capability of the LTM8067 varies with input voltage as shown below: + +|LTM8067_iout_vs_vin.png| + + Figure 18. LTM8067 Output Current vs. Input Voltage + +Even with the BOB set to the minimum output of 3V, the 6.2 Ω power resistor will draw 440mA, requiring about 20V input voltage. Borrow a neighbor's 6.2Ω resistor and connect in series with your for a total load resistance of 13.6Ω, as shown in the schematic below. + +|ltm8067_schematic.png| + + Figure 19. LTM8067 Schematic + +Simulations of switching regulators are not as straightforward. Some aspects of the circuit's operation are modeled well - such as the control loop dynamics, and instantaneous voltages and currents. However, power loss mechanisms are not well modeled, so it is better to refer to the part's datasheet for measured results. The LTM8067 LTspice simulation is set up to show the turn-on transient waveforms by default. The green trace is the output voltage, and the red trace is input current - notice that current is drawn in "chunks" from the source, due to switching nature of the module. + +|ltm8067_waveform.png| + + Figure 20. LTM8067 Turn-on Transient + +However, we can still try extracting efficiency from the LTspice simulation. Disable the startup transient SPICE directives (right-click, set to "Comment") and enable the efficiency SPICE directives (right-click, set to "SPICE directive"). Re-run the simulation, then view the SPICE error log. Results are shown in the figure below + +|ltm8067_efficiency.png| + + Figure 21. LTM8067 Efficiency(%) vs Input Voltage Simulation that MUST be Compared to Datasheet Curves + +(Comparing with datasheet figure "Efficiency vs Load Current, VOUT = 3.3V" reveals that LTspice is optimistically high.) + +|ltm8067_bb.png| + + Figure 22. LTM8067 Breadboard Circuit + +Construct the circuit on a solder-less breadboard. As with the LT3080 circuit, construction details matter. + +|LTM8067_breadboard.jpg| + + Figure 23. LTM8067 Construction and Connection Details + +Power up the circuit and fill out the following data table: + +|table_ltm8067.png| + +Note the relationship between LTM8067 power dissipation, efficiency, and temperature rise. + +Questions: +---------- + +How does the LTM8067 efficiency, power loss, and temperature rise compare to the LT3080? + +The temperature rise vs. heat dissipated curve for the Aavid heat sink is slightly curved - it appears to have a lower thermal resistance as more heat is dissipated. Why? + + +.. ADMONITION:: Download Resources: + + - `Efficiency and Power Loss Fritzing files `__ + - `Efficiency and Power Loss LTSpice files `__ + + + +Further Reading +--------------- + +Using .meas and .step commands to calculate efficiency in LTspice: `en/technical-articles/ltspice-using-meas-and-step-commands-to-calculate-efficiency.html en/technical-articles/ltspice-using-meas-and-step-commands-to-calculate-efficiency.html>`__ + +**Return to Lab Activity** `Table of Contents `__ + +.. |Efficiency and Power Loss Slide Deck| image:: workshop_efficiency_power_loss.pptx +.. |cozy_laptop_charger.jpg| image:: cozy_laptop_charger.jpg + :width: 400px +.. |wiki_lt3080_pinout.png| image:: wiki_lt3080_pinout.png + :width: 400px +.. |lt3080_1w_temp_rise_sch.png| image:: lt3080_1w_temp_rise_sch.png + :width: 600px +.. |lt3080_2w5_temp_rise_sch.png| image:: lt3080_2w5_temp_rise_sch.png + :width: 600px +.. |wiki_TO-220_thermals.png| image:: wiki_TO-220_thermals.png + :width: 400px +.. |wiki_aavid_7021_thermals.png| image:: wiki_aavid_7021_thermals.png + :width: 400px +.. |wiki_aavid_7021_drawing.png| image:: wiki_aavid_7021_drawing.png + :width: 300px +.. |wiki_lt3080_2w5_temp_rise_w_sink_sch.png| image:: wiki_lt3080_2w5_temp_rise_w_sink_sch.png + :width: 600px +.. |LT3080_schematic.png| image:: LT3080_schematic.png + :width: 600px +.. |lt3080_efficiency.png| image:: lt3080_efficiency.png + :width: 600px +.. |lt3080_bb.png| image:: lt3080_bb.png + :width: 600px +.. |LT3080_breadboard.jpg| image:: LT3080_breadboard.jpg + :width: 600px +.. |AD592_circuit.png| image:: AD592_circuit.png + :width: 400px +.. |AD592_temperature_sensor.jpg| image:: AD592_temperature_sensor.jpg + :width: 400px +.. |AD592_mounting.jpg| image:: AD592_mounting.jpg + :width: 400px +.. |table_lt3080.png| image:: table_lt3080.png + :width: 600px +.. |LTM8067_bob.PNG| image:: LTM8067_bob.PNG + :width: 400px +.. |LTM8067_block_diagram.png| image:: LTM8067_block_diagram.png + :width: 400px +.. |LTM8067_iout_vs_vin.png| image:: LTM8067_iout_vs_vin.png + :width: 400px +.. |ltm8067_schematic.png| image:: ltm8067_schematic.png + :width: 800px +.. |ltm8067_waveform.png| image:: ltm8067_waveform.png + :width: 600px +.. |ltm8067_efficiency.png| image:: ltm8067_efficiency.png + :width: 600px +.. |ltm8067_bb.png| image:: ltm8067_bb.png + :width: 600px +.. |LTM8067_breadboard.jpg| image:: LTM8067_breadboard.jpg + :width: 600px +.. |table_ltm8067.png| image:: table_ltm8067.png + :width: 600px diff --git a/docs/university/active_learning/efficiency_power_loss/lt3080_bb.png b/docs/university/active_learning/efficiency_power_loss/lt3080_bb.png new file mode 100644 index 000000000..02e0ef9b6 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/lt3080_bb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:548730c3e5c6f7567523c7d9116050c5fa48f85a77ce3409e606924829459594 +size 99871 diff --git a/docs/university/active_learning/efficiency_power_loss/ltm8067_bb.png b/docs/university/active_learning/efficiency_power_loss/ltm8067_bb.png new file mode 100644 index 000000000..13a0c7115 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/ltm8067_bb.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:119f4c2b0cdd9375ccac32a0a96ccb9fbe2e01640da29384d1166cc65b27ca09 +size 354416 diff --git a/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_2W5_temp_rise_w_sink_sch.png b/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_2W5_temp_rise_w_sink_sch.png new file mode 100644 index 000000000..a7ba96476 Binary files /dev/null and b/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_2W5_temp_rise_w_sink_sch.png differ diff --git a/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_pinout.png b/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_pinout.png new file mode 100644 index 000000000..4fc21877d --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_pinout.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1ff24e94673163bacfca5f86c655e2834efa184c0d7d6888ad67a70c1c9984e +size 17056 diff --git a/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_schematic.png b/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_schematic.png new file mode 100644 index 000000000..0464ca42b --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/wiki_LT3080_schematic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45ade5250c35467901cf3e5b6073023a1023900b6d7ad490524e7210d97625c +size 34934 diff --git a/docs/university/active_learning/efficiency_power_loss/wiki_TO-220_thermals.png b/docs/university/active_learning/efficiency_power_loss/wiki_TO-220_thermals.png new file mode 100644 index 000000000..743058f4a --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/wiki_TO-220_thermals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23e0007eb0a0ebc07b8fc0f2dc238f34ce4ef23e1128ff92e5193ec1797cbf66 +size 49455 diff --git a/docs/university/active_learning/efficiency_power_loss/wiki_aavid_7021_drawing.png b/docs/university/active_learning/efficiency_power_loss/wiki_aavid_7021_drawing.png new file mode 100644 index 000000000..c50c59dd3 --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/wiki_aavid_7021_drawing.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b13c22d9ef9e86deb02eb3b3387375d64f91a7b88ffac98c825bdac56554e20 +size 23852 diff --git a/docs/university/active_learning/efficiency_power_loss/wiki_aavid_7021_thermals.png b/docs/university/active_learning/efficiency_power_loss/wiki_aavid_7021_thermals.png new file mode 100644 index 000000000..492074c1b --- /dev/null +++ b/docs/university/active_learning/efficiency_power_loss/wiki_aavid_7021_thermals.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4d17a50b4cc525461c69b1a6556cc91424e9b685433dc9baf09b53a0948f7bb +size 81774 diff --git a/docs/university/active_learning/index.rst b/docs/university/active_learning/index.rst new file mode 100644 index 000000000..876709f5b --- /dev/null +++ b/docs/university/active_learning/index.rst @@ -0,0 +1,27 @@ +Active Learning: Student-oriented Lab Exercises +=============================================================================== + +Wien Bridge Oscillator: ADALM2000 version +------------------------------------------------------------------------------- + +.. toctree:: + :maxdepth: 1 + + wien_bridge_oscillator/index + + + +Efficiency and Power Loss +------------------------------------------------------------------------------- + +.. toctree:: + :maxdepth: 1 + + efficiency_power_loss/index + + +Another Exercise: Placeholder +------------------------------------------------------------------------------- + +.. toctree:: + :maxdepth: 1 \ No newline at end of file diff --git a/docs/university/active_learning/wien_bridge_oscillator/basic_wien_ltspice.png b/docs/university/active_learning/wien_bridge_oscillator/basic_wien_ltspice.png new file mode 100644 index 000000000..d11a7beb8 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/basic_wien_ltspice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:449fdf31bf81ba5d197429cac90c65583588da0abcf34440ef9956a2602fd92e +size 36616 diff --git a/docs/university/active_learning/wien_bridge_oscillator/basic_wien_ltspice_result.png b/docs/university/active_learning/wien_bridge_oscillator/basic_wien_ltspice_result.png new file mode 100644 index 000000000..88b0586d9 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/basic_wien_ltspice_result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcd40176a9bbd349119fa492cb7626edab7c3c04d7977561bb4cc12e5eaa922d +size 105984 diff --git a/docs/university/active_learning/wien_bridge_oscillator/index.rst b/docs/university/active_learning/wien_bridge_oscillator/index.rst new file mode 100644 index 000000000..5af3f7260 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/index.rst @@ -0,0 +1,341 @@ +Activity: The Wien Bridge Oscillator +==================================== + +Objective +--------- + +The objective of this exercise is to understand the operation of a Wien bridge +oscillator, including a thorough understanding of the individual components: + +* Frequency selective feedback network +* Gain element +* Gain control + +Here is a complete video run-through of the experiment, including theory, +construction, and measurements: + +.. video:: https://www.youtube.com/watch?v=-FxNJlDDGIs + +Background +The Wien bridge oscillator was originally developed for telephony applications. +The circuits in this exercise are modern adaptations of one described by a +Stanford University student, William R. Hewlett,4 in his 1939 masters thesis +(see Linear Technology Application Note 43, Appendix C, “The Wien Bridge and +Mr. Hewlett”). + +Oscillators are circuits that generate periodic waveforms without any input +signal. They generally include some form of amplifier stage like transistors or +OP-AMPs with a feedback network consisting of passive devices such as +resistors, capacitors, or inductors. In order to oscillate, a linear circuit +must satisfy the Barkhausen_stability_criterion, which in simple terms states +that at the frequency of oscillation: + +The loop gain is equal to unity in absolute magnitude +The phase shift around the loop is zero or an integer multiple of 2π +Consider the first one, and its consequences in an oscillator: If the loop gain +is less than unity, the oscillations will die out. If the loop gain is greater +than unity, the oscillations will increase in amplitude, either forever (which +is possible in a simulation), or until something limits the amplitude +(hopefully gracefully, and not as the result of a catastrophic failure.) If the +end application is not very sensitive to distortion (output frequencies at +multiples of the desired fundamental frequency), then simple gain limiting +methods can be employed - this could be as simple as allowing the amplifier +output to “clip” at the supply voltage. But if the application requires a +pure sine wave, then carefully controlling the amplifier's gain is absolutely +critical. +There are various feedback elements employed to generate the required +frequency-dependent phase shift - quartz crystals, mechanical resonators, L-C +(inductor-capacitor) networks. The Wien_bridge was developed by Max Wien in +1891, as an extension of the Wheatstone_bridge. Whereas the Wheatstone bridge +consists of purely resistive elements, the Wien bridge can be used to measure +capacitors. While initially intended as a measurement circuit, at balance, the +phase shift of a Wien bridge is zero, so including a gain element with a phase +shift of zero will satisfy one of the Barkhausen criterion. +(It would have been impossible to make an oscillator in 1891 as no linear +electronic gain elements existed - the audion tube was invented in 1906.) +There are several advantages to using a Wien bridge as the feedback element in +an oscillator: + +Simplicity +Low distortion +Either the resistances or capacitances can be adjustable +With the phase shift satisfied, the other half of the Barkhausen criterion is a +loop gain of unity. At resonance, the reactive arm of the Wien bridge has an +attenuation of 1/3, so the amplifier must have a gain of 3. The circuit shown +in :numref:`fig-wien_simple` is a simple Wien bridge oscillator with a 1.0kHz +output that illustrates this principle. + +.. _fig-wien_simple: + +.. figure:: williams_simple_wien_bridge_osc.png + :align: center + :width: 600 + + 1.0kHz Wien Bridge Oscillator + + +Gain control is achieved with an incandescent light bulb (as it is in Bill +Hewlett's configuration.) An incandescent bulb's resistance increases with +power dissipation, and as a rough rule of thumb the hot resistance is often +about 10 times the cold resistance. The #327 lamp shown has an operating +voltage of 28V and operating current of 40mA, for a hot resistance of about 700 +ohms, and an estimated cold resistance of around 70 ohms. In order to achieve a +non inverting gain of 3, the lamp's resistance must be half of the feedback +resistance, or about 215 ohms. + +Once the circuit is oscillating, the amplitude control can be described as +follows: + +* If the gain is a little bit less than 3, the lamp cools down, its resistance + drops, tending to increase the gain. +* If the gain is higher than 3, the lamp heats up, its resistance increases, + tending to reduce the gain. + +Materials +--------- + +* ADALM2000 (M2K) Active Learning module OR: + + * Two-channel oscilloscope, signal generator, and / or network analyzer + functionality + +* ADALP2000 Parts Kit Items: + + * Solderless Breadboard + * Jumper Wire Kit + * 2 – 10nF Capacitor + * 2 – 1 µF Capacitor + * 3 – 10 kΩ Resistor + * 2 – 4.7 kΩ Resistor + * 1 – 5 kΩ Single-turn potentiometer + * 2 – 1N4148 Silicon Diode + +Directions +---------- +Wheatstone Bridge Simulation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In order to become familiar with the operation of a bridge circuit, open the +**wheatstone_bridge.asc** LTspice simulation shown in +:numref:`fig-wheatstone_ltspice`. + +.. _fig-wheatstone_ltspice: + +.. figure:: wheatstone_ltspice.png + :align: center + :width: 600 + + Wheatstone Bridge Simulation + +Note that the bridge is initially unbalanced, and a small, but nonzero voltage +appears at Vcd. (A Voltage-controlled voltage source with a gain of unity is a +convenient way to measure the difference between two nodes such that it appears +in the simulation results.) Experiment with different values for R3, noting +that a value of 10k should balance the bridge and give a zero output. Try +reducing R1 and R2 to 1k - does this have any effect on the output voltage? + +AC Wien Bridge Simulation +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Open the **basic_wein_bridge.asc** LTspice simulation shown in +:numref:`fig-basic_wien_ltspice`. The simulation is set up as an AC sweep from +100Hz to 10kHz, with the result shown in +:numref:`fig-basic_wien_ltspice_result`. (Note that a DC bridge supply would +produce a fairly predictable output - node C would be at ground potential, and +node D would be at 1/3 of the supply.) Run the simulation and probe node C, the +output of the reactive arm of the bridge. Notice the "Gentle" hump in response, +peaking somewhere slightly less than 2kHz. Probe node Vcd next. Notice the +extremely sharp null in response, making it very easy to locate the exact +resonant frequency of 1.59kHz. + +.. _fig-basic_wien_ltspice: + +.. figure:: basic_wien_ltspice.png + :align: center + :width: 400 + + Wein Bridge Frequency Response Simulation + +.. _fig-basic_wien_ltspice_result: + +.. figure:: basic_wien_ltspice_result.png + :align: center + :width: 400 + + Frequency Response Simulation Result + +Simulated Wien Bridge Oscillator +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Open the **wien_bridge_vcvs_gain.asc** LTspice simulation shown in +:numref:`fig-wien_bridge_vcvs_gain`. This is a circuit that is impossible to +build in real-life - the gain stage is essentially perfect - infinite input +impedance, zero output impedance, and no offset or gain error. But it allows us +to experiment with ideal cases, to gain some intuition into the Barkhausen +criterion and test out some assertions made in the background information. + +.. _fig-wien_bridge_vcvs_gain: + +.. figure:: wien_bridge_vcvs_gain.png + :align: center + :width: 400 + + Wien Bridge Oscillator with Ideal Gain Stage + +Ignoring V1 for the moment, note that when this simulation is started, all +voltages are zero. There is no reason for it to do anything other than stay at +zero forever. V1 is there to "kick" the circuit into operation by providing a +step to the gain stage when the simulation is first started, then it ramps back +to zero and has no further effect on the circuit's operation. +Run the simulation, and probe the output node. Results should look similar to +:numref:`fig-wien_bridge_vcvs_g_2p97`. + +.. _fig-wien_bridge_vcvs_g_2p97: + +.. figure:: wien_bridge_vcvs_g_2p97.png + :align: center + :width: 400 + + Ideal Wien Oscillator, G=2.97 + +Note that the circuit oscillates a for a few milliseconds, but the amplitude +exponentially decays to zero. This is because the gain is set 1% too low (as +you might expect if you built an amplifier with 1% resistors.) Next, set the +value for E2 to 2.997, or about 0.1% too low, as shown in +:numref:`fig-wien_bridge_vcvs_g_2p997`. Oscillations continue longer, but still +decay. + +.. _fig-wien_bridge_vcvs_g_2p997: + +.. figure:: wien_bridge_vcvs_g_2p997.png + :align: center + :width: 400 + + Ideal Wien Oscillator, G=2.997 + +Since we know that the gain needs to be exactly 3 to sustain oscillation, set +the gain to 3.0 as shown in :numref:`fig-wien_bridge_vcvs_g_3p0` and run the +simulation. + +.. _fig-wien_bridge_vcvs_g_3p0: + +.. figure:: wien_bridge_vcvs_g_3p0.png + :align: center + :width: 400 + + Ideal Wien Oscillator, G=3.0 + +Notice that the operation is exactly as predicted, with a steady amplitude for +the entire 250ms simulation time. This would never happen in real life, or even +with simulations using a model of a real amplifier - the finite gain, finite +input impedance, would cause the gain to be slightly more or less than 3. + +As a final illustration that simulations can model situations that would be +impossible in the real world, set the gain to 3.03 (1% too high) as shown in +:numref:`fig-wien_bridge_vcvs_g_3p03` and run the simulation. + +.. _fig-wien_bridge_vcvs_g_3p03: + +.. figure:: wien_bridge_vcvs_g_3p03.png + :align: center + :width: 400 + + Ideal Wien Oscillator, G=3.03 + +The output amplitude hits 15 **TERAVOLTS** after 250ms, with no end in sight. +Again, this simulation is only to build intuition about the Barkhausen +criterion and has no basis in reality. If you were to build this circuit with +an op-amp configured with a gain of 3.03 and powered by +/-5V, oscillations +would build until they approached 5V amplitude, then simply "clip" (producing a +distorted waveform). + +Complete Wien Bridge Oscillator +------------------------------------------------------------------------------- + +The circuit shown in :numref:`fig-wien_bridge_osc_complete_ltspice` is a +complete (and practical) Wein bridge oscillator circuit that can be built on a +breadboard and run as a simulation (**wien_bridge_osc_complete.asc**). Rather +than using an incandescent bulb (which has a positive coefficient of +resistance) for the amplifier's input resistor, this circuit shunts part of the +feedback resistance with diodes, which have a negative coefficient of +resistance. Ignoring the diodes, the gain would be 1+(10k+4.7k)/(4.7k+2k)), or +about 3.19. But as the voltage across D1 and D2 approaches 600mV or so, the +effective resistance of R2 is reduced, dropping the gain. + +.. _fig-wien_bridge_osc_complete_ltspice: + +.. figure:: wien_bridge_osc_complete_ltspice.png + :align: center + :width: 600 + + Complete, Practical Wien Bridge Oscillator + +Run the simulation; the output should resemble +:numref:`fig-wien_bridge_osc_complete_result`. The "kick" circuit is not +necessary to get the simulation to start... eventually. But the amplifier's +offset in the model is quite low, so the kick helps the simulation start up +much faster. Startup time is also a concern in some real-world applications, +and circuits similar to V3, such as a pulse generator made from logic gates can +be employed. Experiment with different values for vkick (including zero). + +.. _fig-wien_bridge_osc_complete_result: + +.. figure:: wien_bridge_osc_complete_result.png + :align: center + :width: 400 + + Wien Bridge Oscillator Simulation Result + +Next, construct the circuit as shown in :numref:`fig-wien_bridge_layout`. + +**To Do:** Needs Update - V- not connected + +.. _fig-wien_bridge_layout: + +.. figure:: wien_bridge_layout.jpg + :align: center + :width: 800 + + Complete Wien Bridge Oscillator + + +Note that R5 is a potentiometer, allowing the gain of the circuit to be "dialed +in" to where oscillation just starts. Measure the output with Scopy's +oscilloscope, results should be similar to +:numref:`fig-wien_bridge_osc_complete_scopy`. + + +**To Do:** Take nicer Scopyshot + +.. _fig-wien_bridge_osc_complete_scopy: + +.. figure:: wien_bridge_osc_complete_scopy.png + :align: center + :width: 600 + + Wien Bridge Oscillator Measured Output + +** To Do:** Frequency Domain measurements, Distortion vs. potentiometer setting + +Questions: + +What is the relationship between the gain control elements and distortion? + + +**Resources:** + * Fritzing files: (To Do) + * `Wien Bridge Lab LTspice files `_ + +Further Reading +--------------- + +* `"Thank You, Bill Hewlett", Jim Williams, EDN Magazine Feb. 2001 `_ +* `U.S. Patent 2,268,872: Variable Frequency Oscillation Generator `_ +* :adi:`Linear Technology Application Note 43 ` +* `Wien_bridge_oscillator `_ +* `Using lamps for stabilizing oscillators `_ + +Warning +------- + +.. esd-warning:: diff --git a/docs/university/active_learning/wien_bridge_oscillator/wheatstone_ltspice.png b/docs/university/active_learning/wien_bridge_oscillator/wheatstone_ltspice.png new file mode 100644 index 000000000..de3527659 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wheatstone_ltspice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80262b6772130f1bedfa617f239669bf011021a837576fdcb01048851ad53b21 +size 70346 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_layout.jpg b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_layout.jpg new file mode 100644 index 000000000..1531139ea --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_layout.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4125933aa34d5cae0d2c6d28260efe17a5cb8fb9e8f38ca0f3e6d70ce09dd14 +size 53503 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_ltspice.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_ltspice.png new file mode 100644 index 000000000..56de6a068 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_ltspice.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b469eb7340ce5bcc41a6c462596cf1c03899026d144bc133cf4d5092eb309087 +size 147639 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_result.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_result.png new file mode 100644 index 000000000..7684592ca --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_result.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61d29a5a41406daa3a03af2fac89ebcf486619758c81a1c881b147cc44b2ba0c +size 78679 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_scopy.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_scopy.png new file mode 100644 index 000000000..aa8428028 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_osc_complete_scopy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:258ff7bd8d5e5f162dd015bc230b3e84a76f29b6280273bfe75daa9356397808 +size 200297 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_2p97.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_2p97.png new file mode 100644 index 000000000..967aa1fdd --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_2p97.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8b505ba3fb1dc96a9dc11197502785e2da891fd40146ee348987d3dc073d646 +size 63952 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_2p997.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_2p997.png new file mode 100644 index 000000000..8de7f0864 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_2p997.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7e0ced935f4d468853a9e31d484044acb26f34a03b3d66ec93b909ba9045e88 +size 66755 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_3p0.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_3p0.png new file mode 100644 index 000000000..fe3742fea --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_3p0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12cf5c45d78ef7b3a93195603f3cde2bac8de5826e7e25d88bec4c0188b91ed7 +size 64342 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_3p03.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_3p03.png new file mode 100644 index 000000000..90b5e0994 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_g_3p03.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7365f7fc7ff3d1009789ec9e1820164a30a4079f0fd4f9304e559aee42b6952 +size 81191 diff --git a/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_gain.png b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_gain.png new file mode 100644 index 000000000..3b949f9d1 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/wien_bridge_vcvs_gain.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e6736697bfc76360b4ef59ca28e79913142d56e8077b80a2585d89dc852ecd8 +size 80993 diff --git a/docs/university/active_learning/wien_bridge_oscillator/williams_simple_wien_bridge_osc.png b/docs/university/active_learning/wien_bridge_oscillator/williams_simple_wien_bridge_osc.png new file mode 100644 index 000000000..01a3b9215 --- /dev/null +++ b/docs/university/active_learning/wien_bridge_oscillator/williams_simple_wien_bridge_osc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63363472dfdbd027e8620bac6f3c8a43079af07399db6fc8b13d46fb309430ae +size 63027 diff --git a/docs/university/index.rst b/docs/university/index.rst index 704e5ba3a..c24017481 100644 --- a/docs/university/index.rst +++ b/docs/university/index.rst @@ -1,6 +1,10 @@ Engineering University Program =============================================================================== +.. toctree:: + :maxdepth: 4 + + Mission ------------------------------------------------------------------------------- @@ -168,6 +172,15 @@ This short 6 min video was put together to describe the purpose of ADI's Univers Interviews with the following people(in order of appearance): + + + +.. toctree:: + :hidden: + :maxdepth: 4 + + active_learning/index + * Jeffrey Pawlick, `Electrical Engineering student, Rensselaer Polytechnic Institute `_, * Sarah Evans, `Applied Physics student, Rensselaer Polytechnic Institute `_, * Trent Shapiro, `Aerospace Engineering student, Rensselaer Polytechnic Institute `_,