MaxDuino Player (STM32) — это открытый DIY-проект аудио-плеера кассетных образов для ретро-компьютеров. Устройство эмулирует звук кассетного магнитофона, читая файлы образов ленты (
TAP, TZX, O, P, CDT, CAS, TSX, AY и др.) с SD-карты и подавая аудиосигнал прямо на вход «EAR»/MIC ретро-компьютера. Это порт известного открытого проекта
MaxDuino (автор Rafa Molina,
github.com/rcmolina/MaxDuino), изначально писавшегося под Arduino, адаптированного под
STM32F103C8T6. Аналогичная архитектура используется в коммерческом устройстве «Miniduino» от Antonio Villena.
Назначение
Замена физического кассетного магнитофона при загрузке программ и игр в:
- ZX Spectrum / ZX80 / ZX81
- Amstrad CPC
- MSX
- Dragon 32
- Oric, Acorn и другие 8-битные компьютеры с кассетным интерфейсом
Файлы хранятся на microSD-карте, пользователь выбирает нужный образ через меню на OLED-дисплее и кнопки. Устройство «проигрывает» его как аналоговый аудиосигнал, который компьютер воспринимает так же, как звук с настоящей кассеты.
Архитектура и техническая начинка
Ядро системы
| Компонент | Модель / Описание |
|---|
| Микроконтроллер | STM32F103C8T6 (ARM Cortex-M3, 72 МГц, 64 КБ Flash, 20 КБ RAM, LQFP-48) — плата типа «Blue Pill» |
| Кварц | 8 МГц (ZQ1) + конденсаторы нагрузки 22 пФ (C9, C10) |
| Программирование/отладка | Разъём SWD (XS2: SWCLK/GND/SWDIO), BOOT0 разведён для входа в системный бутлоадер |
| Прошивка | MaxDuino.hex/.bin — стартует с адреса 0x08000000, объём кода ≈46 КБ (укладывается в 64 КБ Flash) |
Хранилище
| Компонент | Описание |
|---|
| SD1 | Слот microSD (SD-MICRO), подключён по SPI-подобному интерфейсу (CS, DI, SCLK, DO + VDD/VSS), с сигналом CDN (card detect) |
Индикация и управление
| Компонент | Описание |
|---|
| OLED1 | Дисплей SSD1306, 128×64, I2C (SCL/SDA) — меню выбора файлов/папок, статус воспроизведения |
| Кнопки (S1–S5) | PLAY, STOP, DOWN, UP, ROOT — навигация по файловой структуре SD-карты и управление воспроизведением |
| J1/J2 | Джамперы (вероятно, выбор режима работы/конфигурации при старте) |
Аудиотракт
| Компонент | Описание |
|---|
| U2 LM386M-1/TR | Усилитель мощности НЧ с типовой обвязкой (развязка по питанию, цепь Boucherot). Коэффициент усиления задаётся выводами GAIN/BYPASS |
| OUTPUT1 (PJ-3126-5A) | Аудиоразъём (стерео/моно джек с определением подключения кабеля) — выход сигнала «ленты» на вход MIC/EAR ретро-компьютера |
| REMOTE1 (PJ-2040) | Разъём дистанционного управления (remote). Используется компьютером для автоматического старта/остановки воспроизведения (сигнал REMOTE управляет мотором в оригинальных магнитофонах — здесь имитируется та же логика) |
Питание
| Компонент | Описание |
|---|
| XS1 | Разъём USB-C (USB PWR) для внешнего питания 5 В |
| SA1 (MSS22D18G4) | Защита/ESD-массив на линиях USB (CC1/CC2, D+/D-) |
| FU1 | Самовосстанавливающийся предохранитель на 0.2 А |
| U3 AMS1117-3.3 | Линейный стабилизатор 5В→3.3В для питания STM32 и логики (VCC-домен) |
| Отдельная шина +5V | Питает LM386 (аудиотракт) и OLED |
Печатная плата (PCB)
| Параметр | Описание |
|---|
| Тип | Двухслойная (Top/Bottom Cu), стандартный набор слоёв: медь, шёлкография, паяльная маска, паста, отверстия PTH/NPTH/via |
| Размер | ≈ 51.4 × 41.6 мм (компактный форм-фактор, скруглённые углы) |
| Производство | Готов к заказу на типовом китайском производстве (JLCPCB-подобный формат) |
| Компоновка | МК и разъём SWD в центре; SD-карта справа; OLED и джамперы справа сверху; кнопки и аудиоузел (LM386, разъёмы OUTPUT/REMOTE) слева; блок питания (USB-C → предохранитель → 3.3В стабилизатор) снизу |
Полный перечень элементов (BOM)
| Кол-во | Номинал / Тип | Обозначения |
|---|
| 1 | USB-C разъём | XS1 |
| 4 | 10 мкФ (0805) | C1, C7, C8, C11 |
| 3 | 100 нФ (0805) | C2, C5, C6 |
| 1 | 47 нФ (0805) | C4 |
| 2 | 22 пФ (0805) | C9, C10 |
| 1 | Предохранитель 0.2А | FU1 |
| 1 | 1 кОм | R1 |
| 1 | 10 Ом | R2 |
| 3 | 10 кОм | R3, R4, R5 |
| 1 | ESD-защита MSS22D18G4 | SA1 |
| 1 | 100 мкФ (электролитический) | C3 |
| 1 | AMS1117-3.3 | U3 |
| 1 | Слот microSD | SD1 |
| 1 | Аудиоразъём PJ-3126-5A | OUTPUT1 |
| 1 | Разъём REMOTE PJ-2040 | REMOTE1 |
| 5 | Кнопки (PLAY/STOP/DOWN/UP/ROOT) | S1–S5 |
| 1 | Кварц 8 МГц | ZQ1 |
| 1 | SWD-разъём (3 pin) | XS2 |
| 1 | LM386M-1/TR (SOP-8) | U2 |
| 1 | STM32F103C8T6 (LQFP-48) | U1 |
| 1 | OLED SSD1306 128×64 | OLED1 |
| 2 | Джамперы | J1, J2 |
Принцип работы
- Пользователь копирует файлы .tap, .tzx, .cdt, .cas и т.д. на microSD-карту (FAT16/FAT32).
- На плату подаётся питание через USB-C.
- На OLED отображается файловый менеджер — кнопками UP/DOWN/ROOT выбирается папка/файл.
- Кнопкой PLAY запускается воспроизведение — STM32 декодирует структуру блоков TAP/TZX и генерирует на выходе (через LM386 и разъём OUTPUT) точный аналоговый сигнал, повторяющий кодировку кассетного сигнала (импульсы разной длительности/частоты для «0» и «1»).
- Кабель с OUTPUT1 подключается к MIC/EAR входу ретро-компьютера, который загружает программу штатным способом (например, командой LOAD "" на ZX Spectrum).
- Разъём REMOTE может использоваться для синхронизации старта/остановки с компьютером, как у настоящего магнитофона.
Файлы для загрузки
Полезные ссылки проекта:
- Источник (Telegram-канал) — https://t.me/pentagon1024zp
- Исходный проект MaxDuino (Rafa Molina) — https://github.com/rcmolina/MaxDuino
- Разработчик платы — Olexander Karnaukh (UR4QBP), апрель 2023
- Среда проектирования — EasyEDA / JLCPCB
- Репозиторий проекта — (отсутствует; проект распространяется через Telegram-канал)