For nearly two weeks now I’ve been working on a voxelizer, to convert a 3D model into an image that can be displayed by LitSpin. The goal of voxelization is simple: we need to display an image on a grid of leds, which means that the input image needs to be divided into voxels (3D pixels), each voxel representing a led.
Our grid looks like this:
The number of voxels corresponds to our desired resolution (20 circles, 128 angles and 32 leds from top to bottom).
The voxelization algorithm consists in tracing rays across the model to detect intersections with the triangles of the model.… Read more
First, since we don’t plan on controlling the rotation speed from the HPS anymore, this feature has been removed from the architecture.
Moreover, the SCLK and GCLK are now generated by each of the 20 LED band controllers since we have enough ouput pins on the FPGA. This results in a simpler design and better signal integrity on these two signals.
Each LED band controller controls a LED driver. More information on the way this driver works can be found on this post.
For the inner memory of the LED band controller we use a dual port, dual clock synchronous RAM, which is proposed in Intel’s recommended HDL coding style for memory inference.… Read more
We decided to use the TLC5957 LED driver of Texas Instruments with Broadcom RGB LEDs: ASMB-KTF0-0A306.
First, we have to determine the maximum current which will be used. The 3 colours of the RGB LEDs can get a 20 mA input current max and the driver can handle 20mA sink current max. So we choose a maximum current of 20mA.
We decided to configure the driver with the maximum value for the Brightness Control (BC) (and by consequence, the maximum gain) to provide the intensity to go over 20mA. So we have to choose a value of BC equals to 7.… Read more
Update on the choices in components for Litspin. All of the main components have been chosen. Here are the ones we landed on :
System on Module
After looking at the schematics for CyL3D, we saw that they used around 40 pins on the FPGA IO. This meant that we could use the same Aries Embedded SoM based on a Cyclone V combined with two ARM cores.
For our LED drivers, we’ve chosen the Texas Instruments TLC5957. They give us a high enough input data rate and PWM reference frequency as well as enough channels to drive our LEDs.… Read more
The past week I’ve been looking through datasheet after datasheet in order to find several components that would fit our project.
Hall effect sensor:
Looking through the different types of hall sensors, I found that a switch sensor was the best fit, since we will use it to get the motor’s speed rotation, we only need to know when the magnet will be aligned with the sensor. The constraints we had on the choice of sensor were not numerous: we need a sensor with digital output, with 3.3V in input. However, one interrogation I have is whether or not the inductive power transmission will infer with the sensor.… Read more
When you try to rotate at a relatively high speed, centrifugal force comes with the territory. The issue is that PCBs are not the most robust pieces in a mechanical system. We need to find a way to make them stronger to hold them in place so they don’t fly away and/or break and find their way into a bystander’s face.
We tried to figure out how much the PCBs would flex. Thankfully, Wikipedia exists and our problem is a classic strength of material case. We have an issue similar to beam theory’s cantilever beam case with a spread out force.… Read more
In order to synchronize the LEDs and create a persistence of vision image, we use a CycloneV SOC.
Here is a first idea of the architecture we might use :
The ARM processor fills a buffer with the next image to be displayed, that is then swapped with the second buffer. It can pull this image from the SD card, or from another source such as the text printing function we plan on adding.
The full buffer is then accessed by a Direct Memory Access (DMA) IP that then sends the relevant cylinder (32 * 128 pixels) to each LED band controller that is then stored in their memory.… Read more
As referenced in a previous post we need a way to wirelessly transfer power from the static part to the rotating part of our system. We found a 200W dev kit from Würth Elektronik but it seemed over-powered for our needs. Another integrated solution exists but is only good for 60W. Therefore we needed to estimate how much power our rotating system would need.
The bulk of our needs is in the LEDs. Considering 1280 LEDs and a multiplexing factor of 1:4, we would consume at most the power of 320 LEDs at a time. According to the specifications, an LED could use 60mA@3.3V… Read more
LitSimulate is a simulator which simulates what LitSpin will display. We developed the first versions with PyOpenGL and PyGame.
Each 3D image is represented by a classical image. If we note r the radial resolution (total number of columns), h the number of LEDs by column and n the number of steps by rotation, our image dimensions are rh x n. In our case r=20, h=32 and n=128. So we have 640×128. One line represents the n points one led will display. And each block of h lines represents the 360° image of a column from the outermost to the innermost (from 1 to r).… Read more
In order to better understand how to make LitSpin a coherent and functionnal device, we created a diagram of its architecture .
The following represents how the different modules will communicate and work together. Technical details will come later as choices in components and communication buses are made. This is not supposed to be a drawing so it is not representative of how LitSpin will look but it should give an idea of how it will work.
Basically, there will be two main systems. A static system that will have an electric motor and what is needed to control it : a control board that will communicate with an Electronic Speed Controller, the accompanying BLDC motor, an IR receiver that will get information from the rotating system and the induction power transmitter.… Read more