
Utf-9-samplified
wgd-modular/utf-9-samplified
A standalone drum machine based on the bleep drum.

USB-powered programmable function generator built around an STM32C031K6T6 microcontroller and MCP4901 DAC. Generates clean sine, triangle, and square waveforms with amplitude control via potentiometer, mode selection…
STM32-Based Programmable Waveform Generator is an open-source printed circuit board by devjamescollier, from the devjamescollier/STM-32_Based_Waveform_Generator repository on GitHub, published under the CERN-OHL-P-2.0 licence. It is a 2-layer board of 52 × 48 mm with 48 parts on 50 nets, routed with 298 tracks and 40 vias.
It is built around the MCP4901-E/P, TLV2372IP and LM1117IMP-3.3/NOPB-HXY, with the IRLML0030 among its other parts. Its parts include 14 resistors, 11 capacitors, 5 diodes, 4 ICs and 3 connectors. It belongs with the STM32 boards of this library.
USB-powered programmable function generator built around an STM32C031K6T6 microcontroller and MCP4901 DAC. Generates clean sine, triangle, and square waveforms with amplitude control via potentiometer, mode selection via buttons, and visual feedback through status/signal LEDs.
Designed for lab and bench use with an SWD programming header, multiple test points, and robust power protection.


The board is a compact USB-powered waveform generator centred on an STM32C031K6T6 microcontroller.
| Section | Description |
|---|---|
| Digital Core | The STM32 generates waveform data and drives an MCP4901 8-bit SPI DAC. |
| Analog Front-End | A TLV2372 dual op-amp and discrete MOSFET switching produce clean sine, triangle, and square outputs. |
| User Interface | Three tactile switches provide waveform selection, mode/settings control, and reset. Five status/signal LEDs provide visual feedback, while a potentiometer controls amplitude. |
| Power | A USB Micro-B input supplies the board through an LM1117 3.3 V regulator with polyfuse protection. |
| Parameter | Value |
|---|---|
| Microcontroller | STM32C031K6T6 |
| DAC | MCP4901, 8-bit SPI |
| Waveforms | Sine, triangle, and square |
| Sine/Triangle Frequency Range | 1 Hz–50 kHz |
| Square-Wave Frequency Range | 1 Hz–100 kHz |
| Amplitude | 0–3.0 Vpp, controlled by potentiometer |
| Output Impedance | ~50 Ω |
| Power Input | 5 V USB |
| Typical Current | 28 mA |
| Maximum Current | 45 mA |
| Regulation | 3.3 V ± 1.5% |
| Board size | 52 mm × 48 mm |
PCB measurements from the hand-soldered prototype:
| Waveform | Frequency | Amplitude | THD / Rise-Fall | Notes |
|---|---|---|---|---|
| Sine | 1 kHz | 2.98 Vpp | 0.72% THD | Clean across the full range |
| Triangle | 1 kHz | 2.95 Vpp | — | Linear slope confirmed |
| Square | 10 kHz | 3.01 Vpp | 12 ns / 14 ns | Fast edges with minimal ringing |
Frequency response, amplitude accuracy (±1.2%), and load regulation were verified using an Agilent Technologies InfiniiVision MSO-X 3034A and Digilent Analog Discovery 3.
The firmware targets the STM32C031K6T6 and is written in C.
Core/Src/main.c with Software/main.c.| PCB Design | Firmware Development | Version Control | Repository Hosting | Circuit Simulation | IDE | Language |
|---|---|---|---|---|---|---|
| Tool | Model | Purpose |
|---|---|---|
| Oscilloscope | Agilent Technologies InfiniiVision MSO-X 3034A | Waveform capture, THD, and rise/fall-time measurements |
| Mixed-signal tool | Digilent Analog Discovery 3 | Frequency-response and spectrum analysis |
| Multimeter | Tektronix DMM4020A | DC accuracy and current-draw measurements |
| Programmer | ST-Link/V2 | Firmware flashing and SWD debugging |
| USB Power Analyzer | — | Input-current and efficiency verification |
| Soldering station | — | Hand assembly of all SMD and through-hole components |
Production files are provided in the Manufacturing directory:
BOM.csv — Bill of materialspositions.csv — Component placement dataGerbers — Copper, mask, silkscreen, paste, outline, and drill filesVerify all fabrication outputs against the KiCad design before ordering.
STM32-Based_Programmable_Waveform_Generator
├── Docs Contains board related images
│ └── Images Contains images of the board render, board layout, and board schematic
│ ├── STM32-Based_Programmable_Waveform_Generator_3D_Model.png 3D model in PNG format
│ ├── STM32-Based_Programmable_Waveform_Generator_Schematic_Layout.png Layout in PNG format
│ ├── STM32-Based_Programmable_Waveform_Generator_Schematic.png Schematic in PNG format
│ └── STM32-Based_Programmable_Waveform_Generator_Schematic.pdf Schematic in PDF format
├── Hardware Contains all KiCad PCB files
│ └── KiCad_Files Contains 3D models for board render, footprints for layout, KiCad project files, and symbols for schematic.
│ ├── 3D_Models Contains STP files for the 3D render of the board
│ │ ├── LM1117IMP-3-3-NOPB.stp STP for LM1117IMP-3-3-NOPB linear voltage regulator
│ │ ├── TC33X-2-XXX.stp STP for TC33X-2-102E potentiometer
│ │ └── USB-B-Micro.stp STP for USB-B-Micro
│ ├── Footprints Contains footprints for PCB components
│ │ └── LM1117.pretty Contains LM1117 footprints
│ │ ├── DCY0004A_L.kicad_mod
│ │ ├── DCY0004A_M.kicad_mod
│ │ └── DCY0004A_N.kicad_mod
│ ├── STM32-Based_Programmable_Waveform_Generator.kicad_pcb KiCad PCB file
│ ├── STM32-Based_Programmable_Waveform_Generator.kicad_pro KiCad project file
│ ├── STM32-Based_Programmable_Waveform_Generator.kicad_sch KiCad Schematic file
│ ├── sym-lib-table
│ └── Symbols Contains schematic symbols for PCB schematic
│ └── LM1117 Contains LM1117 linear voltage regulator symbolCopyright © 2026 James Collier
The hardware design files are licensed under the CERN Open Hardware Licence Version 2 – Permissive. See LICENSE.
The firmware is licensed under the MIT License. See Software/LICENSE.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100n | Capacitor_SMD:C_0805_2012Metric | C1, C3, C4, C5, C9, C10 |
| 5 | 220 | Resistor_SMD:R_0805_2012Metric | R6, R10, R12, R13, R14 |
| 4 | 10k | Resistor_SMD:R_0805_2012Metric | R5, R7, R9, R11 |
| 4 | TestPoint | TestPoint:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP1, TP2, TP3, TP4 |
| 2 | 10u | Capacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-A | C7, C8 |
| 2 | 4k6 | Resistor_SMD:R_0805_2012Metric | R2, R4 |
| 2 | IRLML0030 | Package_TO_SOT_SMD:SOT-23 | Q3, Q4 |
| 1 | 100nF | Capacitor_SMD:C_0805_2012Metric | C11 |
| 1 | 10u | Capacitor_SMD:C_1206_3216Metric | C2 |
| 1 | 10u | Capacitor_SMD:C_0805_2012Metric | C6 |
| 1 | 560 | Resistor_SMD:R_0805_2012Metric | R1 |
| 1 | 5k6 | Resistor_SMD:R_0805_2012Metric | R8 |
| 1 | 6.8k | Resistor_SMD:R_0805_2012Metric | R3 |
| 1 | Conn_01x02 | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J3 |
| 1 | Conn_01x05 | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Horizontal | J1 |
| 1 | LED_SETTINGS_1 | LED_SMD:LED_0805_2012Metric | D4 |
| 1 | LED_SETTINGS_2 | LED_SMD:LED_0805_2012Metric | D5 |
| 1 | LED_SIGNAL_1 | LED_SMD:LED_0805_2012Metric | D1 |
| 1 | LED_SIGNAL_2 | LED_SMD:LED_0805_2012Metric | D2 |
| 1 | LED_SIGNAL_3 | LED_SMD:LED_0805_2012Metric | D3 |
| 1 | LM1117IMP-3.3/NOPB | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U4 |
| 1 | MCP4901 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | Polyfuse | Fuse:Fuse_1206_3216Metric | TH1 |
| 1 | RESET_SW | Button_Switch_THT:SW_PUSH_6mm | SW2 |
| 1 | R_Potentiometer | Potentiometer_SMD:Potentiometer_Bourns_TC33X_Vertical | RV1 |
| 1 | SETTINGS_SW | Button_Switch_THT:SW_PUSH_6mm | SW3 |
| 1 | SIGNAL_SW | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | STM32C031K6Tx | Package_QFP:LQFP-32_7x7mm_P0.8mm | U1 |
| 1 | TLV2372 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U5 |
| 1 | USB_B_Micro | Connector_USB:USB_Micro-B_Amphenol_10104110_Horizontal | J2 |
It measures 52 × 48 mm and has 2 copper layers, 1.6 mm thick.
48 parts, built around the MCP4901-E/P, TLV2372IP, LM1117IMP-3.3/NOPB-HXY and IRLML0030. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the devjamescollier/STM-32_Based_Waveform_Generator repository on GitHub, at the commit this page was made from: the board is Hardware/KiCad_Files/STM32-Based_Programmable_Waveform_Generator.kicad_pcb and its schematic Hardware/KiCad_Files/STM32-Based_Programmable_Waveform_Generator.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the CERN-OHL-P-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

wgd-modular/utf-9-samplified
A standalone drum machine based on the bleep drum.

LingDong-/lingcordion
Pocket-sized digital musical instrument inspired by the piano and the accordion


oficinadesonido/hanan-cumbia
Batería electrónica HANAN CUMBIA para Arduino Nano + web flasher (Web Serial)

Roman-Rice-Engineering/auto-golf-cart
This is the official repository for the autonomous golf cart project at MVTHS

Moragor/BatteryAnalyzer_MkII
Updated Version of the battery analyzer, now with constant current


dnz1666/impedance-buffer-pcb
Analog circuit design (impedance buffer + LP filter) – KiCad schematic & PCB layout for a student EV project at RWTH Aachen