[CyL3D] Size constraints

As we are proceeding with the schematics and the PCB placing, we are realizing that we will need more than a single PCB to make everything fit. We will then design an horizontal PCB, very much like SpiRose, though ours will be rectangular for budgetary reasons and it will only host our voltage regulators. The interface between the horizontal and vertical PCBs will be three big pads: GND, 3.3V and 5V. Hence, no signal integrity concerns (at least not at this interface). I placed our 12 to 5V converter on Xpedition Layout while conforming to the PCB layout guide of the module.


Furthermore, it appears that the PCB size of 190 by 190mm that we initially chose will be problematic for us to solder the LED automatically: the problem being the width of the PCB. I was going through the process of routing the LED drivers so that we could be stacking five of them on each side of the panel (according to our previous PCB layout idea), but that will have to be abandoned in order to make our PCB thinner. We will put 4 driver on each side and 2 above.

[CyL3D] Finalizing the schematics of our ULPI transceiver

Last friday we had a class about signal integrity. As we learnt about all the problems we could have, I finally understood the use of all the bypass capacitors and some of the other esoteric symbols or annotation that are no longer a mystery (such as 0-ohm resistors or DNI annotations)

Thus, I had to update the schematic of the ULPI/USB subsystem of our project.  You can see it below. Here are some important changes :

  • Disconnected the oscillator ENA pin : according to the datasheet, having the pin on high impedance does enable the oscillator.
  • Added USB power distribution switch, the TPS2051C that is needed not to break our USB device. It limits the current of our usb device to 500mA.
  • Added bypass capacitor to oscillator and power switch.
  • Updated power supply capacitors
  • Added 10K resistor for VBUS, connected to a 10uF capacitor that should be enough for our system. The USB 2.0 specification recommends a 120uF capacitor for hosts but we do not intend to hot-plug our USB device or have a cable between our device and our system. 
  • Added names to everything.
  • Connected the RESETBn pin to our nRST.
ULPI/USB Subsystem Schematic

As such, our ULPI/USB system should work. However, I have a doubt about whether or not I should add a resistor on the wire between the oscillator’s CLK and the USB3320C REFCLK. Our development kit has a resistor on its schematic, but the oscillator’s datasheet does not mention to put a resistor on the CLK output. If anybody has an idea about it, I’d be happy to hear it.

[bouLED] Drawing the main board’s schematics

Today, I started drawing the main board’s schematics. It’s not finished yet: the decoupling capacitors have yet to be chosen and I’m not done with the STM32H7 (pins like VBAT, VREF, BOOT0, etc.). As a teaser, here’s the power supply:

It takes a 14.80V input (from a 4S LiPo) and steps it down to 3.3V. That’s not the right buck converter (it should be a LT1765-3.3), but the pinout is the same, so when it’s done I’ll only have to change U1. The SDHDN_n pin is left floating on purpose, according to the datasheet.

Here’s a sneak peek at the unfinished parts of the schematic:

[bouLED] Triangles’ circuit diagrams

The electrical design of the faces is almost done. The triangles were first thought to be the equivalent of the LED strips:

78 APA102C

But then we chose to put one 14.8 to 5V regulator on each face:

The buck regulator

Add a few connectors and that’s all there is to these PCBs.

In addition to not being decided about the internal structure of bouLed, we also need to choose the enclosing transparent sphere. This constitutes an important size constraint, and we might have to reduce bouLED’s size by a few millimeters to fit it. More on that soon.

[bouLED] Designing the main board

I’m currently designing the main board. First, I had to create a routing table for the STM32H743VIT6 using one Alexis made as a base. We’re only able to have 5 SPIs, a SD card in 1-bit mode and an UART. Programming and debugging will be done over SWD.

The next step is the power supply, using an LT1765-3.3 buck converter. Using the datasheet, I started choosing ratings for its peripheral components, but it’s getting late so I’ll finish that tomorrow. Next step: drawing the schematic.

[CyL3D] LED Rooting

Quick post.

I finished placing and routing the LEDs, one each 3.4mm (not minimal but required to ease soldering).

We have less space and MOSFETs are going to take more space than I originally thought. Although, if we use less MOSFETs, it should be fine.

Still, we won’t have much free space at the top of the panel for the LED drivers. Since they are quite small, I think we can put them on the two sides.

Here is the updated routing idea:

[LASMO] PCB progress

Externals Clocks

In my previous article, I talk about the STM32F7’s and the STM32F1’s clock.  However, according to the STM32CubeMX and after talked with Alexis, we will use for each controller a 8MHz external clock (for consumption questions) and rise the frequency using the PLL until 216 MHz for the STM32F7 and 72MHz for the STM32F103. According the oscillator design guide for STM32, we have 

with CL the load capacity of the clock wich is 18pF here and Cs the stray capacitance of the printed circuit board and connections wich is 10pF here. So, we have the construction for each controller : 

Also, we have a ESP32devKitC which don’t must to have an external clock because the ESP32 WROOM integrated has one.

XLR connection

We also work an the XLR connection but due to the phantom and the symetrisation we had some problem with the architerture, so we decided to use a jack connector. We talked about an architecture but we change again for RCA connectors which Pierre will talk about.   


The drivers of the laser work with a balanced analog input ranging from 0 to 5V. Since the DAC of the MAX outputs a single-ended signal ranging from 0 to 3.3V , this is an issue we had to resolve. 

We basically had to convert an analog single-ended signal to a other one, and amplify it with a 5/3.3 ratio. We achieved this by using an ADA4500-2 amplifier with two resistances, as represented below.

This circuit is composed of a non-inverting amplifier (taking the out of the MAX5105 as entry), which, with the resistances of 1kΩ and 1.96 kΩ, multiplies the signal by 1+1/1.96 = 1.51 = 5/3.3 (approximately). Then an inverting amplifier with a gain of 1, create aa signal which is going to the input of the laser

After talking with Sam, we decided to delete the DAC_OUT signals from the MAX5101  to the F103 microcontroller because their are not essential. So, we configure the HREF of the MAX5101 at 5V, and not at 3.3 V. So, we don’t need this architecture for the lasers’ inputs.

Project architecture

We also decided about the architecture of our project and about the workflow. I put the configurations files of the STM32F4 controller that we use in TP in order to begin to code with the board that we have. Let’s begin !


I worked on the programming of the MARG. We use Ultimate Sensor Fusion Solution designed by Pesky Product. It is made up of an EM7180 Sensor Hub coupled with an MPU9250 IMU. The EM7180 outputs quaternions. We tested with the Lucas’ simulation.


We judged this model will be enough for us and bouLED. So we will definitely use it for the design of our PCB.

Booting the FPGA & Schematization of the USB3320

For the past days, I have been working on the schematics of our ULPI transceiver, the USB3320 and when my colleagues were working on other parts of the schematics, I had to focus on other stuff such as making our SOM work and improving our system architecture.

Making our Cyclone V SOM work was a breath of air compared to the schematic part. Following the Quick Start Guide of our development kit, I had to make sure the jumpers were setup correctly (and they were – not sure if it was the factory default or if Alexis did his magic before giving us the devkit) and configure the UART0 interface. Once everything was set and connected on /dev/ttyUSB0, I simply plugged in the devkit and it booted correctly.

You can see the booting log on this pastebin post

As we would like to be able to use Wi-Fi USB dongles, we are currently adding host USB 2.0 support. Unfortunately, we must use the ULPI interface to communicate with our USB devices. Thus, we have to use a ULPI-USB transceiver.

ULPI works with a 60MHz clock and I am unsure for now if our FPGA can generate such an accurate reference. However, the USB3320 can work with a external oscillator and it has its own PLLs to generate a 60MHz clock from a 12MHz reference clock.

Below is a work in progress of the schematic of the USB3320 in our system. It also includes a Linear Voltage Regulator as the transceiver also needs a 1.8V DC supply. 

What is definitely missing are the appropiate capacitors and resistors that I have not added everywhere yet.

USB3320 Schematic (WIP)

[bouLED] LED layout redux and component choice

LED layout

We settled for a layout with 78 LEDs per facet, with a slightly modified border clearance. It looks pretty great on the simulator:

Don’t pay attention to that triangle with white LEDs, it’s coplanar with the z=0 plane, as a reference. You’re seeing the icosahedron from above. The important thing is that the layout looks regular enough, without any weird stuff in the corners, where 5 triangles meet.

Next step: build a paper version of bouLED. Behold !

That thing is HUGE. It was a pain to build using only paper and scotch tape, but it’s really useful to get a better idea of how to design the inner structure. On the flip side, I messed the dimensions up when printing the triangles, they’ve got 21cm sides instead of 18.5cm. The triangles I showed in my last post had the right scale, though (but the LED-to-side margins are slightly different). Notwithstanding my clumsiness while building this, it gives a good idea of what the end result will look like.

Power supply

Choosing a battery

With Lucas, we thought that by limiting the LED brightness, we’d be able to downscale the power supply a bit. The 3D printed prototype triangle (103 LEDs) was already unbearably bright when drawing 1A in white, so we’ll avoid drawing over 20A for all the triangles, at 5V. The main board will run on 3.3V, and 3A is way more than enough for it. That’s 110 watts.

A 4S LiPo battery has a 14.8V output voltage, and for a 110W output it’d spit 7.4A out. That’s a very conservative discharge current for LiPo batteries, a 4S 3000mAh 35C battery like this one can deliver more than 90 amps continuously and its peak current is probably even higher.

With 3Ah, this battery could supply bouLED power (at full brightness !) for 24 minutes. We could have picked one with a beefier capacity, at the expense of its weight. This one weighs 308g.

Voltage regulator choice

Alexis suggested using a small regulator per facet (and another one for the main board), saying that’s it’s way easier than finding a big regulator.

What we need is a buck converter: it reduces voltage but increases current. The part Alexis suggested is a LT1765 from Analog Devices: it’s rated for voltage inputs up to 25V and the output current limit is guaranteed by the datasheet to be above 3A. It has fixed-voltage versions that can output 5V or 3.3V without having to add an external voltage divider.

My previous calculations for LiPo sizing didn’t take into account the fact that a buck regulator transmits constant (without taking efficiency into account, of course) power but at a different voltage. Basically, I did them as if I had a linear regulator. Now, the battery is one third of the price of the one I mistakenly chose, same for the weight.