BEAMACE - INDUSTRIAL HANDHELD MEASURING DEVICE
This project demonstrates how a customer's request evolved into a working product. This was a challenging and interesting project that involved a variety of different technologies.
The development of the product was started with a small team. Later on I became the sole developer and architect on the development of the product. Both the software and the electronics were designed and developed by first the whole team and then by me from scratch.
We chose an STM32F4 MCU as the heart of the system and was later on upgraded to an STM32F7 MCU. During the development I became quite familiar with STM32F-series features and interfacing with ARM Cortex-M7 processor cores in general.
Initial prototyping was done mainly using the STM32 HAL library, but later on the project was ported to CMSIS entirely.
Here are some of the peripheral drivers created:
Setting up and using ADC for battery management and membrane potentiometer input monitoring
Using hardware timer in encoder mode to interface with a rotary encoder in an efficient way
Setting up RCC, IWDG and other utilities
Writing drivers for- and using different communication protocols such as I2C, SPI and UART
Interfacing with a small display using the MCUs LTDC interface
A lot of debugging was done and the methods varied. Here's a list of some of the debugging methods used:
GDB debugging with OpenOCD on the target
Good ol' debug printing over serial connection (UART)
Using oscilloscope (on encoder signals, power/ground plane fluctuations etc.)
Using logic analyzer on communication protocols (I2C, SPI, UART, etc.)
Pen and paper 👌
For task management and threading we chose FreeRTOS with all its fancy features. In addition, I created a Finite State Machine (FSM) to implement an event-driven system.
As mentioned I was also responsible for developing electronics for the product. The schematics, layout and routing was done with PADS So here're a few notes of what I did in the process:
Power management (Li-Ion battery management, linear regulator, step-up converter, etc)
Design for display interfacing (from processor's LTDC (RGB) interface to display panel's LVDS interface)
Layout (decal design, placing etc.)
Routing (with ESD considerations etc.)
Battery protection circuit (schematics and layout) using KiCad
At the beginning of the project I had an awesome team-mate with me, with whom we pieced everything together from scratch. Later on, when I continued the development alone, I had a great product owner to discuss the big picture with.