Mobile Developer in the past. Former product manager in AppCode. Engineer.
·
1 min read
RF-001 prototype
This is a short post about my main embedded side-project.
Overview
It’s a musical pedal that transmits real-time audio over the air. The purpose is a flexible monitoring solution for professional musicians: sometimes you need to monitor a specific subset of band members during rehearsal, and it would be nice to have such ability without lots of wires.
Features
- Universal transceiver module and case design. Modules can be combined into a supermodule (stacked side to side using the 9-pin D-subs):
- Real-time low-latency audio, 32-bit 44100 Khz mono channel (stereo in the future).
- Full software control over the codec functions, analog mixing for modules connected:
- EQ
- Volume
- Balance
- Other functions
- DFU update over the USB.
- Desktop software for device management:
- Single encoder / push-button control over the OLED screen.
- Line / mic input, headphones (single output) / line out (single output)
- Inter-module communication: ability to have the first module connected to the laptop as a master module for controlling other modules (to easily change settings)
Details of the prototype / schematics:
- STM32F103RCT6 as a core.
- AK4954AEN as a codec. Custom module board from the reference schematics:
- SSD1306 OLED screen module
- Amicom A7190 transceiver module as RF core for audio transmission.
- 8k-bit EEPROM (from STM, random one)
Early version testing (first successfull full-speed audio transfer):
All together (single module prototype):
Project architecture / parts
- DFU Bootloader (standard one)
- Firmware:
- HAL part (generated via STM32Cube for faster prototyping)
- FreeRTOS (because of queues and ability to structure the code properly)
- C/C++ mix (generated sources in C, my code in C++)
- RTT for debugging / logging
- Drivers for peripherals (with abstract drivers for easier work with DMA / non-DMA transfers)
- All peripherals configured with DMA (maximum speed)
- Small custom UI framework (rendering based on the Adafruit Driver, to be changed in the future)
- Catch tests with simple mocks for peripherals / interfaces:
- UI simulator:
- Granular run configurations for the whole project:
- CMake as a build system