
Projects
Some interesting projects I've worked on so far, both professional and DIY ones. The list is not full, though. I put only the bigger projects here, in chronological order, starting from the latest ones.
HAL libraries for CPU peripherals measuring the silicon die aging
Set of several low-level drivers for quite unusual CPU/MCU peripherals dedicated to measuring various parameters of silicon chips in order to determine their current 'health', speed of aging processes, safe operating conditions at a given temperature, supply voltage, etc. A very interesting part of this project was the fact that I worked only with Verilog-based models of chips (SoCs with various CPUs such as ARM Cortex, ARC, and RISC-V) because the monitoring software needed to be ready before an actual silicon production phase. Thanks to this the chip manufacturers were able to measure the dies from the very beginning of their lifecycle. Another important feature of these drivers was their compatibility with MISRA rules and other safety-related standards.
In this project, I was deeply involved in almost all steps of the software development process: gathering requirements, creating software architecture, writing all the code of the drivers, multi-platform building system, unit and integration tests, documentation, and CI/CD automation.
Tools & technologies: C, CMake, Make, cmocka, Verilog, and a bit of Python.
Smart-home controller for central heating systems and gas boilers
The device responsible for controlling indoor temperature in houses with water-based heating systems using radiators and underfloor heating, where gas boilers are a primary source of heat. The main controller unit was able to maintain temperatures in the rooms individually thanks to wireless connection to wall-mounted remote control panels, sensors, and TRVs (Thermostatic Radiator Valves). To minimize energy consumption, the device was communicating with the boiler and other parts of the system (such as mixing valves) to change their parameters according to the current heat demand. Users were able to change all settings and monitor heating system parameters in real time through a dedicated mobile app. The electronics was based on an ESP32 Wi-Fi SoC. It was working as a gateway to the cloud, exchanging information with Microchip's 8-bit microcontroller (communication with boiler) and a proprietary ISM-band module (for TRVs, remote panels and sensors).
In this project, I've created the architecture of the whole system, designed PCBs, written software for the ESP32 chip, and configured all the needed cloud services. I made tools and apps required to test and provision the devices at the final production phase. I was also responsible for maintaining legal requirements like safety (related to gas-powered heating devices) and compatibility with EMC and RED directives.
Tools & technologies: C, ESP-IDF, MQTT, Python, JavaScript, AWS, KiCAD.
Overhead line disconnector controller
Special extension module for railway-grade PLCs designed to control an overhead line disconnector drive. Such kind of drives have a unique method of steering and checking their position simultaneously through long (up to hundreds of meters) three-wire cables and special multi-tap isolation transformers. The extension unit was based on an STM32 microcontroller measuring AC currents and voltages of the disconnector motor, selecting transformer's taps via relays, and communicating with the master PLC through an RS-485 interface. The AC current/voltage measurements taken by the module were the only way to determine the position of the motor, so the algorithm had an auto-tuning mode eliminating the influence of such factors as impedance of long steering cables or motor parameter's variations due to different weather conditions.
That was a very interesting project requiring a lot of simulations and measurements done before creating any electronics. I was responsible for all the research, designing circuits, and writing software for the microcontroller based on the FreeRTOS system.
Tools & technologies: C, FreeRTOS, STM32, Altium, LTSpice.
3kV DC energy meter for trains and traction substations
Big multi-part project with smart meters mounted in locomotives or at substations, and backend plus frontend software running on electricity provider's servers, gathering the data from all the meters and allowing the provider to issue electricity bills to vehicle operators. The meter itself was a two-device solution. One part responsible for measuring the energy flow was directly connected to the high voltage and the second "smart" part acting as a local storage and a gate talking with the backend on servers through GSM and with train's on-board wired interfaces. Both devices were connected with to each other via the fiber-optic link to provide an isolation from the high voltage because the measurement part was powered directly from the measured voltage - the small 3.3V supply was derived from 3kV using special kind of DC/DC converter.
My main task was to design the measurement part of the meter: a low-power STM32-based circuit with external ADCs and op-amps shaping signals coming from high-voltage resistive dividers and current sensing shunts, and the 3kV to 3.3V power supply being an unusual mix of a fly-back converter and high-voltage current sources. Designing such a weird mix of high voltages, low power, and precise analogue circuits was a very demanding process, which required quite a lot of initial research, simulations, many prototypes, and months of official trials needed for legal approvals. Apart from creating the electronics, I've also designed the mechanical parts, like water-tight enclosures for mounting the meter on a train's roof.
The follow-up from this industrial project was the research I did in my master's thesis, where I created a prototype of another measurement device, based on a specialized mixed-signal microcontroller from the MSP430 family. I tested it and proved that it can be used as an energy meter in multi-system locomotives powered with different kinds of voltages: 1.5kV and 3kV DC, 15kV AC 16.7Hz, and 25kV AC 50Hz.
Tools & technologies: C, Python, STM32, MSP430, Altium, KiCAD, LTSpice.
