CAN/UART: что реально нужно пользователю для настройки контроллера

Кратко и по делу

Цель: дать конкретный чеклист и практические примеры для настройки CAN и UART на электроконтроллерах (FOC/инверторных платах) — чтобы скорость интеграции, безопасность и телеметрия заработали без догадок.

Физика шины и базовые требования

Для CAN

  • Дифференциальная пара (CAN_H/CAN_L), витая пара, терминаторы 120 Ом на концах шины.
  • Питание и земля: общая шина GND обязательно, проверка на шум от силовой части.
  • Уровни: контроллеры обычно 3.3/5 В на трансиверах — проверьте совместимость.

Для UART

  • Настройте TX/RX, общий GND; при длинных линиях используйте уровень трансивера (RS-485) или изоляцию.
  • Проверяйте параметры: baud, parity, stop bits, flow control (RTS/CTS) если нужно.

Общая стратегия настройки (порядок)

1. Подготовьте физику: терминаторы, экранирование, общую землю.

2. Настройте базовый протокол: baud/скорость, формат пакетов.

3. Согласуйте ID/адресацию и частоты сообщений (heartbeat, telemetry).

4. Добавьте фильтры/маски на контроллерах для снижения нагрузки CPU.

5. Реализуйте timeout/watchdog и E-stop по CAN/UART.

6. Тестируйте на стенде с логированием (SocketCAN, Wireshark, minicom).

CAN: конкретные параметры и рекомендации

Baud и режимы

  • Стандартные скорости: 125k, 250k, 500k, 1M. Для автомобильных/скоростных систем — 500k или 1M.
  • Учитывайте длину шины и помехи: при длинных трассах понижайте скорость.

Формат ID и распределение ролей

  • Выберите между 11-bit (standard) и 29-bit (extended). Для простых проектов достаточно 11-bit.
  • Рекомендация по распределению ID (пример):
  • 0x100–0x11F — команды мотору (set RPM, torque, enable)
  • 0x200–0x21F — статусы мотора (rpm, current, temp)
  • 0x300–0x31F — BMS/батарея
  • 0x400–0x4FF — панель/дисплей/пульт
  • Серийность и приоритет: меньший ID = выше приоритет в CAN.

Частоты сообщений

  • Heartbeat (контроллер alive): 1–10 Hz
  • Статус мотора (RPM, ток, температура): 10–50 Hz в зависимости от требуемой точности
  • Телеметрия высоких скоростей (ток/вектор FOC): 100+ Hz только если есть пропускная способность и процессор для обработки

Маски и фильтры

  • Используйте маски на ECU, чтобы не нагружать MCU ненужными сообщениями.
  • Фильтруйте по диапазону ID вместо полного приема всех сообщений.

Безопасность и защита

  • Heartbeat timeout => выключение силовой секции.
  • Watchdog локальный + внешний E-stop.
  • Сообщения команд должны содержать CRC/контрольную сумму, а при отсутствии CRC — неверные длины/флаги блокируют исполнение.

Пример структур CAN-сообщений (рекомендуемая практика)

  • Команда скорости: ID 0x100, 8 байт: [cmd(1)=0x01][mode(1)][speed(2) LE][torque_limit(2) LE][flags(1)][crc(1)]
  • Статус мотора: ID 0x200, 8 байт: [rpm(2)LE][current_mA(2)LE][voltage_mV(2)LE][tempC(1)][flags(1)]

(LE = little-endian — согласуйте с основной системой)

UART: практическая настройка протокола

Настройки линии

  • Обычные параметры: 115200/8/N/1 — для простых телеметрий; для больших объёмов 230400 или 460800.
  • Если есть буферизация/пакетирование используйте RTS/CTS.

Фрейминг пакетов

  • Рекомендуемый шаблон пакета (байтовый протокол):
  • Header (2 байта): 0x55 0xAA
  • Length (1 байт)
  • Cmd (1 байт)
  • Payload (N байт)
  • CRC16 (2 байта, CCITT)
  • Альтернативы: SLIP/Consistent ASCII-протокол для простоты отладки.

Защита от синхронизации

  • Реализуйте escape-байт и проверку длины; на встроенных MCU используйте ring buffer и state machine для парсинга.

Пример команды UART

  • Set RPM: 0x55 0xAA 0x03 0x01 [rpm_L][rpm_H] crc_L crc_H

Инструменты и тестирование

  • CAN: SocketCAN + can-utils (candump, cansend), Peak/Vector для продвинутых тестов, Wireshark с плагинами для CAN.
  • UART: minicom, PuTTY, Python (pyserial) с тестовыми скриптами для эмуляции команд.
  • Логирование: записывайте timestamps и используйте частоту дискретизации для сравнения с физикой.

Прошивки и специфичные контроллеры

  • В разных прошивках имена и ID отличаются. Проверяйте документацию конкретного контроллера и соответствующие примеры.
  • Для настройки параметров FOC и контроля фазных токов используйте GUI/утилиты производителя: примерные инструкции по Votol и управлению токами/рекуперации описаны в статье по Votol: https://dellerev.com/2026/01/nastroyka-votol-toki-rekuperaciya-start-zashchita-temperatury/.
  • При выборе датчиков положения (Холл / энкодер) учитывайте формат выходных данных и необходимость прокидывать показания по CAN — пример сравнения датчиков: https://dellerev.com/2026/01/datchiki-holla-encoder-vybor-ryvkov/.
  • Подбор двигателя и соответствие команд/телеметрии подробно рассматривается в обзоре подбора мотора QS: https://dellerev.com/2026/01/podbor-elektromotora-qs-motor/.

Масштабирование, единицы и документирование

  • Зафиксируйте единицы: RPM, mA, mV, °C. Документируйте масштабные коэффициенты (например, RPM = raw/10).
  • Версионирование протокола: включайте поле protocol_version в heartbeat.
  • Документируйте пример пакета, частоту и поведение при ошибках в README проекта/инструкции.

Практические советы по интеграции

  • Начинайте с простой команды ENABLE/DISABLE и heartbeat, затем добавляйте setpoint и telem.
  • При отладке включайте только необходимые сообщения (фильтры), чтобы не перегружать CAN.
  • Используйте последовательное тестирование: аппарат на столе → нагрузка симулятор → дорожная проверка.

Заключение

Сфокусируйтесь на физике шины, согласованных ID/частотах, четком фрейминге сообщений и обязательных защитах (watchdog/timeout/CRC). Это сокращает время интеграции и уменьшает риски на этапе тестирования.

Читайте также

  • https://dellerev.com/2026/01/nastroyka-votol-toki-rekuperaciya-start-zashchita-temperatury/
  • https://dellerev.com/2026/01/datchiki-holla-encoder-vybor-ryvkov/
  • https://dellerev.com/2026/01/podbor-elektromotora-qs-motor/

3 комментария к “CAN/UART: что реально нужно пользователю для настройки контроллера”

  1. Екатерина

    Практичный чеклист для FOC/инверторных плат: для CAN — дифф. пара, 120Ω терминаторы, общий GND и совместимые уровни трансивера; для UART — TX/RX с общим GND, согласование уровней и RS‑трансивер для длинных

    1. @simple_truth

      Практичный чеклист: дифференциальная пара + 120 Ом для CAN, общий GND и проверка уровней 3.3/5 В; для UART — TX/RX и трансивер на длинных линиях. Такие конкретные примеры реально ускоряют и обезопасят интеграцию

      1. @deep_focus

        Конкретно и полезно: для CAN — витая диффпара, 120Ω терминаторы, общий GND и проверка 3.3/5В совместимости трансиверов. Для UART — общий GND, при длинных линиях использовать RS‑трансиверы и экранирование, чтобы телеметрия и безопасность не

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Корзина для покупок