KELPIE - a polyphonic pocket synth
The KELPIE is a digital polyphonic synthesizer powered by the SGTL5000 audio DAC and an ARM Cortex M4 microcontroller. For a description of the full project, please visit the Hackaday Project Page
This repo houses all mechanical, electrical, and software files relating to the project, as well as graphical assets and other additional files.
- Mechanical CAD (mCAD) files can be found and viewed here via Fusion 360's online viewer. They can be downloaded directly in whatever format you need (including STLs for 3D printing). The link provided here directly reflects the most current progress and is kept up-to-date in real time.
- Electronics CAD (Autodesk Eagle) files and schematics can be found here. The parts library and full BOM can be exported from the schematic. This is the most up-to-date BOM.
- Firmware files, written in Arduino/C++ using PlatformIO can be found here
Firmware Directory Structure
The device firmware is written in C++ using the Arduino framework. The main entrypoint is
/src/main.cpp. The directory structure is as follows:
. ├── LICENSE ├── README.md ├── include │ ├── HardwareInputs.h // STRUCTS TO ORGANIZE KNOBS/BUTTON DATA │ ├── KelpieHelpers.h // SEE .src DIR │ ├── KelpieIO.h // SEE .src DIR │ ├── audioConnections.h // AUDIO CONNECTIONS GENERATED BY TEENSY DESIGN TOOL │ ├── contants.h // CONSTANTS USED TO CONVERT KNOB READINGS │ ├── freqKnobLookup.h // LOOKUP TABLE FOR LIN->LOG POT READINGS │ ├── globalSynthState.h // SOURCE OF TRUTH FOR GLOBAL STATE OF SYNTH │ ├── keyMappings.h // LOOKUP TABLE FOR NOTE->FREQ CONVERSION │ ├── pinDefines.h // MCU PIN MAPPINGS │ └── voices.h // STRUCTS TO ORGANIZE 'VOICES' ├── lib │ └── README ├── platformio.ini ├── src │ ├── KelpieHelpers.cpp // ALL HELPER FUNCTIONS │ ├── KelpieIO.cpp // LIBRARY HANDLING KNOBS/BUTTONS │ └── main.cpp // MAIN ENTRY POINT └── test └── README
The synthesizer block diagram is shown below and was designed using the Teensy Audio Design Tool
I utilized and referenced a couple of open source libraries + repos for this project, as well as some very useful tools: