58 lines
3.0 KiB
Markdown
58 lines
3.0 KiB
Markdown
# Протокол старого пульта тележки (реверс-инжиниринг)
|
||
|
||
Снято 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 в измеренных
|
||
диапазонах.
|