Кратко и по делу
Цель: дать конкретный чеклист и практические примеры для настройки 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/

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