This project describes a joint hardware and software solution that delivers a 3D-display made from a rotating 2D panel. Depth is created by lighting the pixels at a precise time during a rotation and by using the viewer’s persistence of vision to generate animations in volume. The system is connected to a WiFi network, and can thus be used for displaying enriched types of content remotely.

System components

The main part of CyL3D is a rotating PCB. It features a 40x30 LED screen divided into 10 small areas of 15 rows and 8 columns. They are driven using a TI LED driver (TLC5957), which can drive up to 16 RGB LED, and is capable of receiving the next frame while displaying the current one. The 15 rows of each area are displayed simultaneously by each driver, and the 8 columns are multiplexed using a MOSFET (Vishay Si2333CDS) and a MOSFET driver (Renesas ISL55110). The main logic for sending frames to the drivers and multiplexing columns is implemented on an Intel Cyclone V FPGA. The system uses a magnet and a hall sensor to compute the rotation speed, and thus the correct rate at which to send frames, display frames, and change columns.

The actual data sent by the FPGA comes from an HPS (an ARM processor connected to an FPGA on the same die) running Linux. A custom kernel driver is used to exchange data between a user application and the FPGA. The user application can use any means to generate a 3D image. We made most of our tests using a simple application that can render text and images on a cylinder. But through a USB port with a WiFi dongle, we've also built an application to stream an animation from our laptops. This was a very important feature since, being a rotating screen, it was really the only way to display something without having to preload it first. (As a side note, the limit on the screen size came from the maximum throughput achievable using a rotating Wifi dongle). The rotating cube example was computed on a laptop and streamed to the platform in real-time.

Power management

The display is rotated by a brushless motor, powered separately from the rest of the electronics. A single 12V input is passed to the rotating element through the brushless motor (Turnigy Aerodrive SK3 - 4250-500kv Brushless Outrunner Motor). This 12V input is then converted to 2 different voltages: 5V for the LEDs and the WiFi dongle, and 3.3V for the System On Module containing the FPGA. The system is designed to power the LEDs up to 9A on the 5V rail, enough to give a clear rendering in a brightly lit room.


As CyL3D is connected to a WiFi network, it is possible to directly control the device through a shell. Several commands are available, here are the most interesting ones:

BTW : sorry for the videos, the smartphone cameras are not the best suited to capture what can be seen in real life