Formlabs

 

I interned at Formlabs in summer 2018 with the electrical engineering team. In that time, I had the opportunity to learn about aspects of the Formlabs workflow, how to design and review electronics in a hardware engineering environment, a great deal about the wonders and horrors of Altium, and the culture of Formlabs as a fast-growing company.

Please note that I am still bound to an NDA, and cannot go into too much detail here.

During my time there, I worked principally on three projects: a calibration unit, evaluation of an electromechanical system and an analog signal shifting board for the manufacturing team. Each project was loosely defined, allowing me to define the scope and depth of each project. I also assisted others in the EE lab outside the scope of the projects. As

Calibration Unit

edited.jpg

This unit was intended to be a piece of lab equipment which is able to do automated laser diode testing and characterisation at specified temperatures.

My role in the project was to build and validate the hardware and low-level software for the project. Using the bespoke laser driver PCB as a starting point, I learned how the Formlabs Python libraries were structured and used and how to safely drive lasers with the Formlabs hardware. I designed and debugged two custom buddy boards to map laser voltage to 3V3 for the ADC and to break out the temperature controller. I also designed and routed a PCB version of the breakout and buddy boards.

The PCB for the unit, designed in Altium

The PCB for the unit, designed in Altium

Writing the C and Python code for the project proved harder than expected, due to the fact that the power readings need to be made asynchronously while the laser driver operates. Several iterations of the software later led to the implementation of a GUI, the uncovering of two firmware bugs. After a software and hardware review, I implemented the suggested modifications to a positive reception.

 

Printer Axis Hard End-Stop

The test rig I built

The test rig I built

The overall goal was to evaluate methods for homing one of the 3D printer axes without limit switches. The Trinamic TMC5160 motor driver chip was recommended to me, as it has a variety of features that allow stall detection. As I was unfamiliar with the Formlabs C toolchain, I decided that my time was better spent in evaluating the TMC5160’s built-in stall protection functions: open-loop with stallGuard2 and closed loop with the encoder interface. In order to do this, I built a test rig using scrap components from older printers.

I established that the open-loop stallGuard2 application was not a reliable long-term solution due to the threshold value needing to be changed over the lifetime of the printer to compensate for mechanical wear. The closed-loop encoder option worked well, but there was no internal register to stop the motor upon a stall event (requiring the MCU to detect the interrupt, poll a register and reset another register to stop the motor and clear the interrupt) and the firmware would have had to be rewritten to use the Trinamic internal ramp generators. This, combined with other’s work, helped make the decision to re-think the printer architecture.

Overall, I learned a great deal about validation and quick turnaround testing through this project. The rig took a week to build (mainly printer time) and could serve as a test platform for future tests.

Analog Signal Shifting Board

This was a PCB design project where a lateral position sensor interfaces with an Arduino. Manufacturing wanted to avoid needing to use the expensive proprietary solution unit. The PCB needed to:

  • Provide a low-noise ±5V power supply from the Arduino USB (achieved through using the LTC3265 integrated boost converter and dual-rail LDO regulator

  • Shift the ±4V output from the sensor to 0-3V3 for the Arduino ADC (using an op amp circuit)

  • Interface with an Arduino with a 12-bit ADC (MKRZERO)

I used Altium with the standard Formlabs templates to complete the project. I designed the schematic and had it undergo a brief design review. I also laid out, routed and assembled the PCB. I validated the analog mapping design by using a power supply to sweep ±4V at the input and checking that it mapped linearly to 0-3V3. I Also tested with the sensor itself. In total I assembled four PCBs.