Перейти к статье

Структуры регистров Extension

Проверено 2026-11-01

Справочник блоков протокола v9.0. Числа смещений отсчитываются от начала каждого блока, а не являются отдельными адресами Legacy-регистров. Читайте блок целиком указанной длины. Формат пакета и порядок запуска описаны отдельно.

Блоки регистров Extension и их назначение

Смещение — начальный байт поля, считая с нуля внутри блока. Смещения ниже десятичные, селекторы — шестнадцатеричные (0x...). Все записи используют инструкцию 0x91, чтения — 0x90 с точным количеством байт.

Селектор Блок Доступ Байт
0x90 Capabilities Чтение 8
0xA0 Configuration Чтение/запись 24
0xB8 Выбор контроллера и подготовка сессии Запись 3
0xC1 Рабочая обратная связь Чтение 32
0xC2 Обратная связь для настройки Чтение 54

Capabilities — 0x90

Смещение Тип Значение / смысл
0–3 4 байта ASCII ARMC
4 u8 Основная версия: 9
5 u8 Дополнительная версия: 0
6 u8 Резерв: 0
7 u8 Обычный период регулятора: 1 мс

Версия протокола определяет доступные блоки и точную длину каждого. Выбор режима и подготовка сессии используют один блок только для записи, описанный ниже.

Конфигурация — 0xA0

Смещение Тип Поле Единицы / допустимый диапазон
0 u16 kp_q8 Коэффициент × 256; 0–65535
2 u16 kd_q8 Коэффициент × 256; 0–65535
4 u16 ki_q8 Коэффициент × 256; 0–65535
6 u16 integral_limit Воздействие; 0–effort_limit
8 u16 effort_limit Воздействие; 1–1000
10 u16 velocity_limit Отсчёты/с; 1–65535
12 u16 acceleration_limit Отсчёты/с²; 1–30000
14 u8 velocity_filter_q8 Отклик фильтра скорости; 1–255, больше — быстрее
15 u8 ramp_time_ms Нарастание ускорения; 1–255 мс
16 u16 velocity_ff.positive_gain_q8 Воздействие/(отсчёт/с) × 256; 0–65535
18 u16 velocity_ff.negative_gain_q8 Воздействие/(отсчёт/с) × 256; 0–65535
20 u16 velocity_ff.effort_limit Воздействие; 0–основной effort_limit
22 u16 gravity_slew Изменение компенсации, единицы воздействия/с; 1–10000

Коэффициенты передаются умноженными на 256. Единицы: воздействие/отсчёт для P, воздействие/(отсчёт/с) для D и воздействие/(отсчёт·с) для I. Например, P = 4.5 даёт 4.5 единицы воздействия на отсчёт ошибки и передаётся как 1152.

У сервопривода одна активная конфигурация. Запись требует выключенного мотора и неактивной сессии. Каждая запись заменяет всю конфигурацию, включая feedforward. Некорректные настройки отклоняют запись целиком, ничего не изменяя. Прочитайте 0xA0, чтобы проверить принятые значения.

Коэффициенты velocity feedforward неотрицательны. Нулевой предел этой составляющей требует нулевых коэффициентов. Один предел действует в обоих направлениях и не должен превышать основной предел воздействия.

После сброса настройте сервопривод до включения мотора. Сохранённые настройки и альтернативные коэффициенты храните на хосте; меняйте их между запусками при поддерживаемой руке и выключенном моторе.

Выбор режима и подготовка сессии — 0xB8

Смещение Тип Значение
0 u8 Режим: 0 Legacy, 1 Extension
1 u16 Сессия: 0 для Legacy, 1–65535 для Extension

Точная длина данных — 3 байта, сессия передаётся little-endian. Например, Extension с сессией 0x1234 — 01 34 12; Legacy — 00 00 00. Некорректная комбинация отклоняет запись целиком без изменения состояния. Оба режима требуют выключенного мотора и заменяют прежнюю подготовку сессии. Один выбор режима не запускает управление и не фиксирует позицию удержания.

Legacy-регистр включения удержания 40 запускает подготовленную Extension-сессию при записи 1. Требуются доступный выход мотора, корректная конфигурация, инициализированные датчики с возрастом показаний не более 2 мс, отсутствие неисправности, требующей отключения, и пригодные сохранённые Legacy-пределы. При включённых пределах измеренная позиция должна быть внутри. Проверки выполняются в момент включения, поэтому учитываются движение и неисправности между подготовкой и включением.

Torque-off отменяет и работающее управление, и неиспользованную подготовку. Ошибка датчиков, защитное отключение, изменение пределов позиции или смещения энкодера, калибровка и сохранение постоянных настроек также отменяют подготовку. Проверяйте обратную связь для подтверждения запуска: отдельной команды ARM нет. Прежний селектор 0xBA и прежние однобайтовые данные выбора режима отклоняются.

Рабочая обратная связь — 0xC1

Смещение Тип Поле / единицы
0 u32 Время измерения, мс с запуска; после 4294967295 возвращается к нулю
4 u16 Номер измерения; после 65535 возвращается к нулю
6 u16 Сессия
8 u16 Номер принятой цели
10 u16 Номер принятой гравитации
12 u16 Флаги, см. ниже
14 i32 Измеренная позиция, отсчёты Q8
18 i32 Отфильтрованная измеренная скорость, отсчёты/с Q8
22 i16 Приложенное воздействие; положительное — в сторону роста отсчётов
24 i16 Показание датчика тока относительно базового уровня; не амперы
26 u8 Напряжение питания, единицы 0.1 В
27 u8 Проверенная температура, °C
28 u8 Legacy-флаги неисправностей/состояния
29 u8 Резерв: ноль
30 u16 Возраст измерения при чтении, мс; максимум 65535
Бит флага Значение при установке
0 Измерение свежее и пригодно для текущего состояния управления
1 Регулятор активен
2 Резерв: ноль
3 Выход мотора ограничен
4 Привод руки включён
5 Сессия запущена через torque enable
6 Резерв: ноль
7 Выход готов
8 Получена команда гравитации
9 Резерв: ноль
10 Доступна проверенная температура
11 Резерв: ноль
12 Цель движения активна
13 Резерв: ноль
14 Выбран контроллер руки
15 Резерв: ноль

Каждый флаг — один бит: бит 0 имеет значение 1, бит 1 — 2, бит 2 — 4 и так далее. Одновременно могут быть установлены несколько флагов. Активный регулятор со сброшенным битом 12 удерживает цель. Один сброшенный бит движения не означает, что мотор включён или готов.

Обратная связь описывает зафиксированное измерение. Если состояние изменилось до чтения хостом, часть полей может относиться к прежнему состоянию. Бит 0 сбрасывается, если измерению больше 2 мс, контроллер больше не выбран, не запущен, не управляет выходом или не готов, либо не совпадают номера сессии/команд. Проверяйте бит 0, возраст, сессию и принятый номер вместе.

Позиция и показания состояния доступны также в Legacy и при выключенном моторе. Недоступные управляющие поля равны нулю. Номер измерения увеличивается при получении данных, а не при каждом чтении хостом, и различает измерения с одинаковой миллисекундной меткой. Неожиданные большие скачки температуры проверяются на нескольких чтениях до отображения; см. ограничение защиты.

Обратная связь для настройки — 0xC2

Байты 0–31 в точности повторяют 0xC1. Остальные байты:

Смещение Тип Поле / единицы
32 i32 Заданная позиция, отсчёты Q8
36 i32 Заданная скорость, отсчёты/с Q8
40 i16 Запрошенное воздействие после настроенного ограничения, до защиты мотора
42 i16 P-составляющая, воздействие
44 i16 D-составляющая, воздействие
46 i16 Интегральная составляющая, воздействие
48 i16 Применяемая компенсация гравитации, воздействие
50 i16 Локальная velocity feedforward, воздействие
52 u16 Накопленная дополнительная задержка регулятора, мс; максимум 65535

Счётчик задержки добавляет лишнее время, когда обновление регулятора занимает больше обычной 1 мс (elapsed_ms − 1). Он не считает потерянные сообщения. Показания P и D ограничены ±32767, поэтому сумма отображённых составляющих может не совпасть с полным внутренним расчётом.

Сервопривод передаёт обратную связь только по запросу. Для обычного наблюдения используйте 0xC1, для настройки с дополнительными данными — 0xC2. Чтение 0xC2 уже включает всё из 0xC1; чтение обоих блоков создаёт лишний трафик. Раздельные чтения могут описывать разные моменты: сравнивайте время и номера измерений.

Правила интерпретации

effort — знаковая команда в единицах PWM, не амперы и не измеренный момент. currentAdcDelta — относительное показание датчика тока, не физический ток без отдельного преобразования. У позиции и скорости Q8 разные единицы; деление на 256 убирает масштаб, но не переводит отсчёты в градусы. Для градусов нужна физическая привязка сустава.

Температура в Extension-ответе проверяется для подавления одиночных скачков. Температурная защита мотора при этом использует сырые показания: отсутствие скачка в C1/C2 не доказывает, что он не повлиял на защиту.


Главная раздела · Версия исходников: a995f77. Extension 9.0.