Files
2026-08-26 15:40:10 +03:00

3.0 KiB
Raw Permalink Blame History

Протокол старого пульта тележки (реверс-инжиниринг)

Снято 2026-08-20 осциллографом Hantek DPO7204C с сигнального провода пульта (канал CH3). Инструменты: tools/capture.py (захват), tools/decode.py (декодер), сырые данные и картинки — в captures/.

Физический уровень

  • Один сигнальный провод, логика 3.3 В.
  • Инвертированный UART (стандартная полярность SBUS): в покое линия низкая (~0 В), импульсы вверх до ~3.3 В.
  • Скорость 100 000 бод, формат 8E2 (8 бит данных, чётность even, 2 стоп-бита), биты LSB-first. Длительность бита 10 мкс.

Кадровый уровень — SBUS

Стандартный кадр Futaba SBUS, 25 байт (3 мс на линии):

Смещение Размер Содержимое
0 1 Заголовок 0x0F
1 22 16 каналов × 11 бит, упакованы подряд LSB-first
23 1 Флаги: bit0=CH17, bit1=CH18, bit2=frame_lost, bit3=failsafe
24 1 Футер 0x00

Распаковка каналов: 22 байта складываются в 176-битное число LSB-first, канал N (N=0..15) = биты [11·N .. 11·N+10], диапазон значений 0–2047.

  • Кадры отправляются каждые 50 мс (20 Гц). Это медленнее стандартного SBUS (7/14 мс) — ответная часть с этим темпом работает.
  • Флаги во всех наблюдениях = 0x00.

Карта каналов (нумерация с 1)

Управление Канал Мин Нейтраль Макс
Стик вперёд/назад 2 433 (назад) 1024 1643 (вперёд)
Стик влево/вправо 4 446 (влево) 1024 1654 (вправо)
Остальные 14 всегда 1024

Диапазон осей ~±600 от нейтрали (не полная шкала SBUS). Других органов управления на пульте нет.

Эталонный кадр нейтрали (hex):

0F 00 04 20 00 01 08 40 00 02 10 80 00 04 20 00 01 08 40 00 02 10 80 00 00

Воспроизведение на STM32G431

  • USART: 100000 бод, 8 бит + чётность even (в терминах STM32: M=1, 9-bit с PCE=1), 2 стоп-бита, TXINV=1 (аппаратная инверсия TX) — бит-бэнг не нужен.
  • Отправлять 25-байтовый кадр по таймеру каждые 50 мс.
  • Нейтраль: все каналы 1024; управление — каналы 2 и 4 в измеренных диапазонах.