PIANO_G4_cbt6

Public

@scherbakoval

Download board files

Files for version 1. Pick what you came for.

Share PIANO_G4_cbt6

Check access before sharing the link.

Who can open this board

Anyone can open this board. No sign-in is required.

This link opens the latest version. Copying it does not grant additional access.

Loading…

README

PIANO_G4_cbt6 — Sensor board firmware / Прошивка плат-датчиков

DOI License: MIT Platform: STM32G4

Part of the custom optical digital MIDI piano project. Companion board: PIANO_H7 (controller board).

Часть проекта самодельного цифрового MIDI-пианино на оптических датчиках. Парная плата: PIANO_H7 (плата-контроллер).


English

Overview

PIANO_G4_cbt6 is the firmware for the sensor boards of a self-built digital MIDI piano with optical key sensing. Each key's hammer flies past optical sensors; the board measures the hammer flight time between sensor points and reports it to the controller, which converts it into a realistic note velocity — the principle used in high-end digital pianos.

The instrument is split across two board types:

BoardMCURole
PIANO_H7STM32H723VGTxMaster controller: UI, USB-MIDI, manages the sensor bus
PIANO_G4_cbt6 (this repo)STM32G474Distributed sensor readers (comparators + timers)

The boards were fabricated and assembled in late summer–autumn 2025 and are used to play on a real instrument.

What a G4 board does

  • Optical sensing with on-chip comparators: uses the STM32G4's analog comparators (7 per chip) to detect when a hammer crosses each optical sensor's threshold.
  • Hammer-flight timing: high-resolution timers (100 ns / ~100 µs scales) measure the time the hammer takes between sensor points, which encodes how hard the key was struck.
  • Note ON / OFF detection: each board carries an address; addresses 1–13 handle note-on sensors, 14–26 handle note-off (key release) sensors.
  • Multidrop UART link: reports note timings to the PIANO_H7 controller and receives settings/calibration over USART2 using hardware address detection, so many boards share one bus.
  • Self-calibration: per-comparator threshold calibration, driven on demand from the controller.
  • Dual bootloader: carries its own bootloader (two versions present) so the controller can update the G4 main firmware over the UART bus.

Hardware

  • MCU: STM32G474 (CBT6 / 48-pin)
  • Sensing: 7 on-chip analog comparators per board on optical sensors
  • Link: multidrop UART (USART2, address-detect) to the PIANO_H7 board
  • Hardware experiments (impedance test, IBIS) are in kicad_for_test_impedance/ and ibis model/.

3D render of the assembled boards, with the sensor-board PCB layout and schematic:

Repository layout

Piano_G4/                  Application firmware (piano_g4.cpp/.hpp)
Core/, Drivers/            STM32 HAL/LL, CMSIS, startup
G4_bootloader/             Bootloader (v1)
G4_bootloader_v2/          Bootloader (v2)
kicad_for_test_impedance/  Impedance test (KiCad)
ibis model/                IBIS models / signal-integrity
pcb/                       PCB layout, schematic and 3D render (PNG)
cmake/, CMakeLists.txt, CMakePresets.json

Building

The project uses CMake + the ARM GNU toolchain (configured via STM32CubeMX / the included presets).

cmake --preset <preset>     # see CMakePresets.json
cmake --build --preset <preset>

Flash with your usual ST tool (ST-Link / DFU), or update over the UART bus from the PIANO_H7 controller.

License

Released under the MIT License.

Citation

If you use or reference this work, please cite it via its DOI (see the badge above) or the CITATION.cff file.


Русский

Описание

PIANO_G4_cbt6 — это прошивка плат-датчиков самодельного цифрового MIDI-пианино с оптическим считыванием нажатий. Молоточек каждой клавиши пролетает мимо оптических датчиков; плата измеряет время пролёта молоточка между точками сенсоров и передаёт его контроллеру, который вычисляет реалистичную velocity ноты — принцип, используемый в дорогих цифровых пиано.

Инструмент состоит из двух типов плат:

ПлатаМКРоль
PIANO_H7STM32H723VGTxГлавный контроллер: интерфейс, USB-MIDI, управление шиной датчиков
PIANO_G4_cbt6 (этот репозиторий)STM32G474Распределённые платы-датчики (компараторы + таймеры)

Платы изготовлены и собраны в конце лета — осенью 2025 года и используются для игры на реальном инструменте.

Что делает плата G4

  • Оптическое считывание встроенными компараторами: использует аналоговые компараторы STM32G4 (по 7 на чип) для детектирования момента, когда молоточек пересекает порог оптического датчика.
  • Замер времени пролёта молоточка: таймеры высокого разрешения (масштабы 100 нс / ~100 мкс) измеряют время прохождения молоточка между точками сенсоров — это и кодирует силу удара по клавише.
  • Детектирование note ON / OFF: каждая плата имеет адрес; адреса 1–13 обрабатывают датчики note-on, 14–26 — датчики note-off (отпускание клавиши).
  • Многоточечная шина UART: передаёт тайминги нот контроллеру PIANO_H7 и принимает настройки/калибровку по USART2 с аппаратным определением адреса, поэтому много плат используют одну шину.
  • Самокалибровка: калибровка порогов по каждому компаратору, запускается по команде контроллера.
  • Двойной бутлоадер: собственный бутлоадер (присутствуют две версии), чтобы контроллер мог обновлять основную прошивку G4 по шине UART.

Аппаратная часть

  • МК: STM32G474 (CBT6 / 48 выводов)
  • Считывание: 7 встроенных аналоговых компараторов на оптических датчиках
  • Связь: многоточечный UART (USART2, address-detect) к плате PIANO_H7
  • Аппаратные эксперименты (тест импеданса, IBIS) — в kicad_for_test_impedance/ и ibis model/.

3D-вид собранных плат, трассировка платы-датчика и её схема:

Структура репозитория

Piano_G4/                  Прошивка приложения (piano_g4.cpp/.hpp)
Core/, Drivers/            STM32 HAL/LL, CMSIS, startup
G4_bootloader/             Бутлоадер (v1)
G4_bootloader_v2/          Бутлоадер (v2)
kicad_for_test_impedance/  Тест импеданса (KiCad)
ibis model/                IBIS-модели / целостность сигналов
pcb/                       Трассировка, схема и 3D-вид (PNG)
cmake/, CMakeLists.txt, CMakePresets.json

Сборка

Проект использует CMake + ARM GNU toolchain (настройка через STM32CubeMX / включённые пресеты).

cmake --preset <preset>     # см. CMakePresets.json
cmake --build --preset <preset>

Прошивка — обычным инструментом ST (ST-Link / DFU) либо обновление по шине UART с контроллера PIANO_H7.

Лицензия

Распространяется под лицензией MIT.

Цитирование

При использовании или ссылке на эту работу, пожалуйста, цитируйте по DOI (см. бейдж выше) или через файл CITATION.cff.

Comments

No comments yet. Be the first to ask about this board.

Ask about this board

Sign in to BoardRepo

New here? Signing in creates your account; there is no separate sign-up.