Универсальный CAN-адаптер на STM32F103: как подключить аналоговые датчики и селектор АКПП в CAN-шину


При глубоком тюнинге автомобиля, замене двигателя (SWAP) или установке спортивного блока управления (Standalone ECU) инженеры неизбежно сталкиваются с проблемой несовместимости протоколов. Как запустить родную приборную панель от неродного мотора? Как передать показания со старых аналоговых датчиков давления или температуры в современную цифровую Dash-панель (например, RealDash)?

Универсальный CAN-контроллер на базе STM32F103C8T6 с 6 аналоговыми входами

Идеальное решение для таких задач — универсальный CAN-интерфейс (шлюз) на базе микроконтроллера STM32F103C8T6. Код полностью открыт и лежит на ГитХабе. В этой статье мы разберем, как с помощью одной надежной платы и 6 защищенных аналоговых входов решить проблему интеграции любого оборудования в CAN-шину автомобиля.


Почему обычная Blue Pill не подходит для автотюнинга?

Многие начинающие разработчики пытаются собирать подобные устройства на базе популярной китайской отладочной платы Blue Pill. Однако автомобильная бортовая сеть — это агрессивная среда. Вот почему «колхозные» сборки быстро выходят из строя:

  1. Отсутствие защиты входов: Выбросы напряжения в бортовой сети мгновенно выжигают нежные порты STM32.
  2. Проблемы с CAN-трансивером: На Blue Pill его просто нет, приходится городить внешние модули TJA1050 на вечно отваливающихся проводах.
  3. Китайские клоны чипов: Дешевые подделки (CS32, GD32) нестабильно работают с CAN-периферией при отрицательных температурах зимой.

Для гарантированной надежности необходимо использовать специализированную плату (CAN Shield), где применен оригинальный чип STM32F103, встроенный трансивер и аппаратная защита всех 6 входов стабилитронами. Такое решение работает годами без единого сбоя.


Сферы применения CAN-контроллера на STM32

1. Эмуляция селектора АКПП / Вариатора при Свапе (SWAP)

Классический пример: установка автоматической (или механики) коробки на Nissan Murano Z50 или Nissan Juke (Кашкай и все остальные). Чтобы штатные блоки управления и приборная панель корректно видели выбранную передачу (P, R, N, D), плата считывает физические концевики селектора и на лету транслирует нужные пакеты в шину.

2. Сбор данных с аналоговых датчиков (Data Logging)

Вы можете подключить до 6 любых аналоговых датчиков:

  • Датчик давления масла / топлива (0-5V).
  • Сенсор температуры выхлопных газов (EGT).
  • Линейные потенциометры положения подвески.

Плата оцифровывает их сигналы с помощью встроенного 12-битного АЦП и отправляет в CAN-сеть для записи логов или отображения на кастомных дисплеях, или всё на что хватит фантазии (но для этого нужно доработать входа на плате, добавить нижнюю ветвь делителя).

3. Интеграция кнопок руля

Многие мультирули выдают аналоговый сигнал разного сопротивления (резистивные кнопки). Наш CAN-модуль позволяет оцифровать эти нажатия и преобразовать их в цифровые CAN-команды для управления неродной магнитолой или Android-системой.


Быстрый старт: программирование в Arduino IDE и PlatformIO

Больше не нужно мучаться со сложным STM32CubeIDE. Плата полностью поддерживает программирование в привычной среде Arduino IDE и современной PlatformIO (VS Code) через библиотеку STM32_CAN (от pazi88).

Для запуска вам понадобятся:

  1. Программатор ST-Link v2.
  2. Включенный флаг поддержки CAN в настройках компилятора (-D HAL_CAN_MODULE_ENABLED).

Пример универсального шаблона кода

Код устроен по принципу «вставил и поехало». В цикле loop вы просто указываете, какой пин опрашивать и в какой байт CAN-пакета положить данные:

cpp

// Пример для чтения кнопки селектора (Цифровой режим)
if (digitalRead(PA2) == LOW) {
    can_tx_data[0] |= (1 << 0); // Устанавливаем бит передачи "P"
}

// Пример для чтения датчика давления (Аналоговый режим)
uint16_t raw_adc = analogRead(PIN_IN5); 
can_tx_data[4] = raw_adc / 16; // Пакуем 12-битный АЦП в 1 байт (0-255)

Полный, готовый к компиляции проект со всеми настроенными файлами конфигурации и .gitignore доступен в нашем официальном репозитории на GitHub.


Где купить?

Вы можете приобрести устройство в удобном для вас формате на маркетплейсе OZON:

  • Готовая собранная плата (модуль разработчика) — для тех, кому нужно готовое железное решение «из коробки».
  • Набор для сборки (DIY Kit / Конструктор электроники) — идеальный вариант для любителей пайки, который включает в себя печатную плату и полный комплект оригинальных радиокомпонентов.