Digilent ZYBO Based Oscilloscope With LabVIEW

by azorp12 in Circuits > Electronics

7422 Views, 14 Favorites, 0 Comments

Digilent ZYBO Based Oscilloscope With LabVIEW

Przechwytywanie1.PNG

This is simple "oscilloscope" using Zynq - 7000 and NI LabVIEW program. To acquire data from external generator I have used built-in 12 - bit, 1MSPS analog to digital converter.

To generate signals I have used DAC output of STM32F407 (unfortunately I don't have professional generator), which generate sine, triangle and square signal. This is preliminary version of design so I will improve some functions in future.

Download Base Design System

Przechwytywanie2.PNG

First of all - download base design system from ZYBO page and upgrade it if you have newer version of Vivado (in this tutorial I have used Vivado 2015.1 version).

Add XADC Wizard to Design

Przechwytywanie3.PNG

To acquire analog data by digital device you have to add ADC option - XADC Wizard. Right click on the block design, choose "Add IP". Then find the "XADC Wizard" and add it.

Configure XADC Wizard - Basic Tab

Przechwytywanie4.PNG

Double click on the XADC Wizard.

In Basic:

  • Interface Options: check AXI4Lite,
  • Startup Channel Selection: check Channel Sequencer
  • AXI4STREAM Option: uncheck Enable AXI4STREAM
  • Timing Mode: check Continuous Mode

Configure XADC Wizard - Channel Sequencer

Przechwytywanie5.PNG

In this stage you can choose the channels which would you like to use. It is important that not all channels all available - in ZYBO are:14, 7, 15, 6. I choosen channel vauxp6/vauxn6. Click ok and close the wizard

Constrain Your ADC

Przechwytywanie6.PNG

To do this step you can use XDC constraint file available on ZYBO site and ZYBO schematic. Schematic is needed, because channels has assigned concrete pins. To channel 6 you have to assign K14 and N14 pins.

Synthetize Your Design!

You created programmable logic part of design. Synthetize your design and export it to SDK.

Configure UART

Przechwytywanie7.PNG

Because our design will communicate by UART we have to configure this peripheral in SDK. Initialize the component and set baud rate as shown on the picture.

Of course, you can use other peripherals than UART, for example Ethernet, USB,... Now I'm trying to configure Ethernet but this is very complex thing to do and I have a lot of problems to configure it.

Configure ADC

Przechwytywanie8.PNG

Initialize ADC component using configuration functions - similar to UART configuration functions. After this start the ADC - use the function XSysMon_StartAdcConversion(&ADC)

On while loop, or in the interrupt (if you configure it) read data from your channel by function:

XSysMon_GetAdcData(&ADC,channel number + 16)

Remember - in function:

XSysMon_SetSeqChEnables(&ADC,22);

Instead 22 you have to write channel number + 16 - this is described in header file of SysMon.

To convert raw data to voltage you can use function XSysMon_RawToVoltage(), which returns float value.

Send Data to LabVIEW

Przechwytywanie9.PNG

You can do this step in main function or write your own procedure which is based on interrupts.

It is important that to send the data you have to convert float to char *.

If you write application - compile it and program the device.

Build LabVIEW Program

Przechwytywanie10.PNG

Use VISA Serial blocks and array functions to acquire data from ADC. Convert string to number and create shift register, visualize your data and do a lot of analyses of sine, triangle, square, noise signal. You can replace the for loop by while loop, but in this case you have to delete some portion of data to avoid overflow.

Acquire Signals and Analyse It!

Przechwytywanie12.PNG

Important - for tests use the voltage divider according to maximum voltage of analog to digital converter. Generate waves by microcontroller (in my case - STM32F407) or by generator - if you have this type of device.

To do:

  • Use ethernet or usb instead of serial port,
  • Use interrupts to acquire and send the data,
  • Improve LabVIEW application