Files
smart-trainer/SPEC.md
sm c76ca89cc9 Initial commit: project docs and wiring diagram
Smart bench press trainer with electric motor (M365 Pro).
CAN Bus architecture: ESP32-S3 (master) + Flipsky 75100 (VESC) + STM32 Blue Pill (carriage).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 19:03:55 +03:00

11 KiB
Raw Permalink Blame History

Умный тренажёр для жима лёжа — Спецификация проекта

Концепция

Уличный тренажёр с электронным управлением нагрузкой. Мотор-колесо Xiaomi M365 Pro работает как управляемый тормоз/генератор через барабан кабестана. Нагрузка регулируется током VESC-контроллера (FOC). Питание от сети 220В + батарея-буфер для рекуперации и UPS.

Мотор M365 Pro — паспортные данные

  • Kt = 0.511 Н·м/А (моментная постоянная)
  • Ke = 0.511 В/(рад/с) (противо-ЭДС)
  • R = 0.392 Ом (сопротивление обмоток)
  • KV = 16.67 об/(мин·В)
  • 15 пар полюсов, Hall-сенсоры встроены (U/V/W + 5V + GND)
  • NTC 10K термистор встроен
  • Outrunner — ротор снаружи

Барабан кабестана

  • Диаметр: D = 30мм (оптимальный выбор по расчёту)
  • Материал: нержавеющая сталь 12Х18Н10Т
  • 3 канавки под трос D4мм, шаг 6мм, глубина 2мм (полукруглый профиль R2)
  • Крепление: фланец к ободу ротора (outrunner)
  • Кабестан: 3 витка, μ=0.25 (сталь-полимер), коэффициент удержания e^(0.25×6π) = 14.1
  • Свободный конец троса → пружина-натяжитель 1-2 кг

Нагрузки на барабане D30мм

Ток (А) Сила (кг) Режим
20 65 лёгкий
30 100 рабочий (подход 30с)
40 135 пик (3-5с)
50 170 абсолютный максимум

Электроника — CAN Bus архитектура (3 узла)

CAN узел #1: Flipsky 75100 Pro V2 (ID: 10)

  • VESC 6.0, 100А длительно, 84В макс
  • FOC current control
  • BT встроен (VESC Tool настройка по Bluetooth)
  • Фазный EMI фильтр на плате
  • CAN 2.0B встроен
  • Стоимость: ~$90
  • Расположение: низ рамы, в электрощите
  • Отдаёт: ERPM, I_mot, T_mot, V_bat (100 Гц)
  • Принимает: set_current(I_ref) от ESP32

CAN узел #2: Waveshare ESP32-S3 Touch LCD 3.5" (ID: 20) — МАСТЕР

  • ESP32-S3R8, двухъядерный LX7 240МГц
  • 3.5" IPS тачскрин 320×480, ёмкостный (ST7796 + FT6336)
  • QMI8658 6-осевой IMU на плате (бортовой, для диагностики вибраций)
  • PCF85063 RTC часы реального времени
  • AXP2101 управление питанием + зарядка Li-ion
  • TF-карта слот (логирование тренировок)
  • WiFi 802.11 b/g/n + BLE 5
  • TWAI (CAN) контроллер встроен в ESP32-S3
  • Стоимость: ~$20
  • Расположение: верхняя перекладина рамы, тачскрин к спортсмену
  • Подключение к CAN через внешний трансивер SN65HVD230 ($1)
  • Дополнительная периферия (локально на ESP32):
    • Концевики ×2 (GPIO, НЗ, pull-up 10K, RC-фильтр 1К+100нФ)
    • RC522 NFC (SPI, идентификация пользователей)
    • BLE → смартфон (настройки, статистика)

CAN узел #3: STM32F103C8T6 Blue Pill (ID: 30) — КАРЕТКА

  • Cortex-M3, 72МГц, CAN 2.0B встроен
  • Стоимость: ~$2
  • Расположение: на каретке штанги (движется)
  • Подключение к CAN через SN65HVD230 ($1)
  • Локальные датчики:
    • MPU6050 (I2C): 6-осевой IMU, 200 Гц, ускорение + гироскоп
    • HX711 + тензодатчик S-тип 200кг (GPIO): реальная сила на тросе, 80 Гц
  • Тензодатчик inline: между кареткой и точкой крепления троса
  • Кабель к основной шине: 4 провода (CAN_H, CAN_L, 5V, GND), гибкий шлейф вдоль направляющей
  • Отдаёт: accel[3], gyro[3], force_N (200 Гц)

CAN шина

  • Стандарт: CAN 2.0B, 250 Кбит/с
  • Топология: линейная, витая пара
  • Терминаторы: 120Ω на обоих концах (ESP32 сверху, VESC снизу)
  • Blue Pill — отвод к каретке (без терминатора, посередине шины)
  • Загрузка шины: ~30%, запас для расширения
  • Протокол: VESC CAN (стандартные команды set_current, get_values, status msgs)

Питание

  • Сеть 220В → вводной щит (автомат + УЗО) → БП 48В
  • Батарея 48В 100-250Вт·ч (буфер рекуперации + UPS)
    • Заряд до 90% (50.4В на 13S), оставляя буфер для рекуперации
  • DC-DC 48В → 5В для логики, LDO 3.3В на каждом узле
  • Тормозной резистор: 100-200Вт, 1-5Ом, через MOSFET
    • Сброс излишков рекуперации при полной батарее
    • Flipsky 75100 поддерживает brake resistor нативно (настройка порога в VESC Tool)
    • Расположение: в щите или на раме (нужна вентиляция)

Безопасность — аппаратная цепь

  • ESP32 GPIO → Watchdog (555/TPL5010, 50мс) → реле НЗ → замыкание обмоток мотора
  • Реле: 3× автомобильных НЗ 40А, катушки параллельно ИЛИ трёхфазный контактор НЗ на DIN-рейку в щите
  • Логика: ESP32 генерирует импульсы ~100Гц → watchdog сбрасывается. Сбой/зависание → watchdog timeout 50мс → реле отпускает → НЗ контакты замыкают три фазы → электромагнитное торможение
  • Тормозная сила при замкнутых обмотках: F = Kt² × v / (R × r²). При 0.5 м/с → ~150 кг
  • Опционально: резистор 0.1-0.3Ω / 100Вт в цепи замыкания для смягчения торможения
  • Софтовый лимит позиции по ERPM (дополнительно к аппаратному)
  • VESC: max input voltage лимит (ослабление рекуперации при высоком напряжении)

Концевики

  • Нижний: homing (нулевая точка отсчёта позиции)
  • Верхний: аварийный стоп
  • НЗ контакты, pull-up 10K к 3.3В
  • RC-фильтр: 1К + 100нФ на входе GPIO ESP32 (τ = 0.1мс, подавление наводок)
  • Debounce программный: 10-20мс
  • Подключены напрямую к GPIO ESP32 (бинарный сигнал, помехозащита RC-фильтром достаточна)

Механика

  • Рама: профиль 80×80×4мм, сталь 09Г2С, сварная
  • Высота стоек ~1200мм, ширина между стойками ~340мм, глубина ~700мм
  • Анкеры 4×M12 в бетон
  • Направляющие: 2 вала D25мм, сталь 40Х хромированная, длина 900мм
  • Линейные подшипники LM25UU ×4 на каретке
  • Ход каретки: 650мм
  • Каретка: масса 8кг (с грифом), крепление троса снизу через тензодатчик
  • Компенсация веса каретки: противовес 8кг на тросе через ролик наверху (груз в стойке: стальной цилиндр D60×300мм)
  • Трос: D4мм, сталь в полимерной оболочке, разрывная нагрузка 8000Н
  • Путь троса: каретка → тензодатчик (inline) → вниз → ролик D60мм (подшипник 6201-2RS, поворот 90°) → горизонтально к барабану мотора → 3 витка → пружина-натяжитель
  • Мотор: закреплён за ось внизу рамы, антивандальный кожух сталь 2мм
  • Вводной щит 220В: на раме или рядом (DIN-рейка: автомат, УЗО, БП 48В, контактор НЗ, тормозной резистор)
  • Электроника: IP54 бокс (VESC, DC-DC, Watchdog) внизу рамы / в щите
  • Батарея: IP67 бокс
  • Габариты: Ш×Г×В ≈ 800×700×1250мм

Режимы нагрузки

  1. Постоянная: фиксированный ток, опц. виртуальная инерция (F = m_virtual × a)
  2. Эксцентрический: разная нагрузка вверх/вниз (направление по ERPM)
  3. Аккомодационное: F(x) = F_min + (F_max - F_min) × x / L
  4. Интервальный: чередование нагрузок по повторениям
  5. Изокинетический: постоянная скорость, VESC speed control
  6. Страховщик: v_up < 0.05 м/с > 0.5с → снизить 30%; v_down > 0.7 м/с > 0.3с → аварийное торможение

BOM (оценка)

Компонент Стоимость
Waveshare ESP32-S3 LCD 3.5" ~$20
Flipsky 75100 Pro V2 ~$90
Blue Pill STM32F103 ~$2
SN65HVD230 ×2 ~$2
MPU6050 + HX711 + тензодатчик S-тип 200кг ~$10
3× реле НЗ 40А / контактор НЗ ~$15
Watchdog 555 + обвязка ~$2
RC522 NFC ~$3
Концевики ×2 ~$2
DC-DC 48→5V ~$5
Тормозной резистор 100Вт + MOSFET ~$5
Батарея 48V 100-250Вт·ч ~$100-150
БП 48В от сети ~$25
Мотор M365 Pro (б/у) ~$60
Рама + направляющие + механика ~$120
Щит 220В (автомат + УЗО) ~$20
ИТОГО ~$480-530

Файлы проекта

  • SPEC.md — этот файл
  • CHANGELOG.md — история решений
  • wiring.html — схема подключения (модульная, CSS grid)
  • (будущее) firmware/ — прошивки ESP32, STM32
  • (будущее) cad/ — чертежи барабана, каретки, рамы