Can шина в stm32f103

Использование модулей CAN на STM32 для разных целей

В последнее время, к сожалению, выросла цена на многие импортные радиодетали, в том числе и на отладочные платы с микроконтроллерами. А потребность в изготовлении разных поделок к счастью не пропала. Волей случая у меня в руках оказалось несколько интересных модулей от компании Starline, которая выпускает автомобильные сигнализации и много других полезных вещей (Можете поспрашивать у установщиков сигнализаций, или на сайте производителя). Целей раскрыть секреты работы этих модулей не стояло. Но ввиду их хорошего изготовления и оснащения оставить пропадать их без дела наше время тоже нехорошо.
Вкратце о модулях:
Модуль CAN — STM32F103RBT8 + SST25V016 + TJA1042, силовые ключи, микросхемы питания.
Модуль 2CAN — STM32F105RBT8 + SST25V032 + TJA1048, микросхемы питания.

Can шина в stm32f103

(процессоры STM32F103 и STM32F105 (7) друг от друга функционально отличаются блоками тактирования, USB и CAN, надо обратить на это внимание далее)
Вооружившись тестером, разрисовал схемы модулей, возможно с ошибками. Наиболее интересным естественно оказывается модуль 2CAN, он позволяет одновременную работу USB FS и двух приемопередатчиков CAN. У первого модуля либо CAN, либо USB.
Скриншот схемы модуля CAN:

Can шина в stm32f103

для поделок организация ввода вывода неплохая, но модуль 2CAN для интеграции в автомобиль интереснее, схема:

Can шина в stm32f103

Так как на некоторых компонентах была неизвестная мне маркировка, то соответственно, я рисовал своё видение схемы.

Из модуля CAN на досуге сделал два полезных устройства – блок управления ходовыми огнями, и блок тестирования шаговых двигателей. Причем управление этими блоками осуществлялось как с внешних датчиков, так и по шине USB. Со стороны компьютера, подключенные блоки виделись как устройства с последовательным портом RS232. Причины изготовления блока управления ходовыми огнями – установленные китайские жгут чрезмерным током свои же светодиоды, от любой импульсной помехи выгорают с дымом. Блок их управления, не защищены от влаги, нет защиты от помех по питанию, нет экранировки. На CAN модуль была возложена функция управления логикой работы ходовых огней и дублирующих сигналов поворота, управление силовым транзистором повышающего преобразователя напряжения (на линейки светодиодов требуется порядка 24В), управление силовыми транзисторами, подающие питание на 4 линейки светодиодов, задержка выключения света в течение заданного времени после выключения зажигания.

Can шина в stm32f103

Вот внутренности фонарей:

Can шина в stm32f103

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

Помехи от проводов от китайского ксенона погасили ходовые огни :). Ну а если делать с большим запасом надежности, и использовать модуль CAN, получается примерно так (еще без корпуса на этапе настройки под капризы заказчика):

Can шина в stm32f103

Can шина в stm32f103

Схема обвязки для модуля довольно простая (скриншот):

Видео:STM32 настройка CANСкачать

STM32 настройка CAN

Устройство тестирования шаговых двигателей, применяемых в автомобиле, задавать режим работы можно с компьютера (через терминал), и с кнопок тоже:

Can шина в stm32f103

Can шина в stm32f103

Это все конечно баловство, но работает. Вот подключится к блокам управления автомобиля уже интереснее. Модуль 2CAN решил подключить к центральному блоку управления легкового автомобиля, и по USB подключить его к персональному компьютеру, чтобы иметь возможность видеть какими данными обмениваются многочисленные блоки управления в автомобиле (оснащенного CAN шиной), и по необходимости самому посылать произвольные команды. Для начала, чтобы потренироваться пересылать данные по CAN шине между собой (двумя интегрированными на модуле блоками CAN), желательно сделать вот такую схему:

Читайте также: Шина для вальгуса стопы

Can шина в stm32f103

Хотя бы так:

Can шина в stm32f103

С другой стороны:

Но если вы подключаетесь уже к готовой функционирующей сети CAN, то это делать нет необходимости. К модулю допаяны светодиоды и кнопка, для отладки и наблюдения за работой модуля. И контакты для программирования по SWD. Что и куда подробно написано в комментариях в проекте. Модуль также при подключении к компьютеру по USB и будет определяться как последовательный порт (с использованием драйвера от ST). На что надо обратить внимание, блоки CAN микроконтроллера будут инициализироваться если:

Выводы микроконтроллера правильно сконфигурированы.

Выводы подключены к микросхемам – драйверам CAN шины.

На CAN шине выставлено правильное напряжение.

форма сигналов должна быть примерно такой:

Can шина в stm32f103

Небольшая проблема возникла при приеме сигналов в модуль CAN2 (Sleave), нет смысла искать ответа в интернете и на форумах, в большинстве случаев будет лишняя трата времени, да и примеры готовые то в eclipse, то Iar, или вообще на ассемблере. А Я вот пишу в Keil (можно скачать бесплатно, немного обрезанную функционально версию). Оказывается, надо любить внимательно читать комментарии в стандартной библиотеке от STM. Необходимо просто правильно настраивать фильтр приема сообщений, и вот как раз на CAN2 (CAN Sleave) там отдельная процедура дополнительная. Для примера и приведу инициализацию CAN Sleave:

Обработчик прерываний CAN Sleave:

Добавлю и тактирование процессора stm32f105 (у stm32f103 все проще):

Видео:STM32 CAN шина. Часть 1. Настройка и странности HALСкачать

STM32 CAN шина. Часть 1. Настройка и странности HAL

Все подробно можно посмотреть будет уже в проекте (KEIL).

Can шина в stm32f103

Can шина в stm32f103

Слева направо: плата STM32L в качестве программатора, модуль 2CAN, центральный блок управления автомобиля с двумя шинами CAN (высокоскоростная и низкоскоростная).

Вид без корпуса на процессор блока управления:

Can шина в stm32f103

Can шина в stm32f103

После того как запрограммировали модуль (прямо из KEIL, ST-Link SWD), через пару секунд после подключения USB кабеля в micro-USB разъем модуля 2CAN в компьютере определяется последовательный порт. Добавляем драйвера по необходимости, настраиваем номер порта, запускаем терминал, подаем команду «?»+«Enter», модуль отвечает своим меню:

Can шина в stm32f103

Подаем питание на блок управления автомобиля (в соответствии с документацией производителя), и видим сообщения, в которых блок управления пытается понять где сам автомобиль:

Can шина в stm32f103

Сигнал CANH на приборе(CANL зеркален по горизонтали и немного смещен):

В остальном все заработало без проблем. Данные с блока управления автомобиля по его шинам CAN High Speed (500) и CAN Low Speed (250) сыпались в терминал без ошибок и пропусков. Более глобальной цели на данный момент я не ставил. В проекте часть кода заимствована из выложенных проектов других людей, часть написал, конечно сам. Добавлял комментарии на русском. Так как управление модулем происходило по виртуальному последовательному порту, через программу «Терминал», в микроконтроллере постоянно работает процедура, принимающая данные от компьютера, разбирающая их на команды и аргументы. Нажав в терминале «?» и «Enter», получим от микроконтроллера список доступных команд и аргументов. По крайней мере, можно наверняка найти и другие недорогие способы использования для подобных вещей. В остальном, думаю разберетесь. Если что, можно задавать вопросы. Попробую выложить заодно файлы проектов, схем и документации, как появится возможность на этой страничке. Или если есть куда выложить мег. 70 полного архива, включающего полную документации и библиотеки. Извиняюсь за стиль кода и изложение, так как программирование не моя основная работа, делал все урывками, и ушло на все времени две недели.

Читайте также: Хорошие бренды шин для авто

Или спрашивайте тут, постараюсь ответить (статья начала 2015 года).

Далее, на примере данного блока напишу работу с автомобилем.

(в связи с кончиной сайта, где я раньше публиковался, ветка общения со специалистами пропала к сожалению)

С уважением, Астанин Сергей.
ICQ 164487932
Проект приложен.
схемы в лучшем разрешении в pdf в архивах.

Видео:Металлизация переходных отверстий в реальной работе. Разработка индикатора CAN шины на STM32F103.Скачать

Металлизация переходных отверстий в реальной работе. Разработка индикатора CAN шины на STM32F103.

Настройка модуля CAN на микроконтроллере STM32F103. Часть 1

Заказал как-то в Китае такую вот отладочную плату. На ней имеется USB/UART конвертер на микросхеме PL2303, две кнопки для экспериментов, кнопка питания, кнопка сброса, два светодиода для экспериментов, светодиод питания, стабилизатор на 3.3В, два разъема мини-USB, разъем JTAG для подключения отладчика, например J-Link. В комплекте также шел USB-кабель, изображенный на фото. Плата питается от USB-порта компьютера.

Can шина в stm32f103

Сегодня я попробую написать драйвер для модуля CAN и поделиться своими наработками.

Сразу скажу, что разжевывать информация что такое CAN шина не буду, но приведу пару документов, где можно почитать о CAN шине на русском языке:

1986ВЕ9х, К1986ВЕ9х и MDR32F9Qx — это Российские аналоги микроконтроллеров STM32. Но все же модуль CAN, описанный в документации, немного отличается от модуля CAN для STM32.

Еще одно важное замечание: изначально на плате нет драйвера CAN-шины (микросхемы, согласующей уровни сигналов шины и цифровые уровни микроконтроллера). Я запаял микросхему MCP2551, но есть и другие аналоги, подходящие по ногам.

Итак начнем. Проект я буду создавать в среде CooCox IDE версии 1.7.8. Здесь сразу можно выбрать нужные библиотеки и они автоматически добавятся в проект. Из всего изобилия я выбираю только CMSIS core и CMSIS_boot. Признаться четсно, библиотека от STM32 stm32f10x_stdperiph_lib мне не нравится из-за своей избыточности, хотя я частенько подсматриваю код ее исходников, когда разбираюсь с каким-либо новым модулем. Возможно наш драйвер не будет сильно отличаться от уже готового драйвера библиотеки StdPeriph, но я считают, что материал лучше запоминается, когда все пробуешь делать сам с нуля.

Can шина в stm32f103

CMSIS core содержит описание всех регистров микроконтроллера, а также обработчики прерываний по умолчанию и т.д. В CMSIS_boot содержатся все необходимы функции для инициализации контроллера, те, что выполняются до запуска функции main. Здесь происходит настройка системы тактирования. Очень приятная вещь, контроллер уже сразу настраивается на тактирование от внешнего генератора 8МГц и частота шины SYSCLK выбирается максимальная 72 МГц. При желании можно покопаться в файле system_stm32f10x.c и настроить другую частоту, а также выбрать другой источник тактирования.

Вообще можно написать и свою функцию настройки системы тактирования RCC. Обычно я пользуюсь для этого двумя программами-калькуляторами. Первая — это STM32generator. В ней можно настраивать еще и DMA, USART, порты ввода-вывода, а также она может генерировать сразу готовый код программы.

Can шина в stm32f103

Вторая — программа с оффициального сайт ST Electronics STM32CubeMX. Это визуальный конструктор программы для STM32 микроконтроллера, она позволяет выбрать необходимые модули, настроить их конфигурации и генерирует готовые проекты в самых популярных IDE на основе конечно же StdPeriph_lib. Она нам еще понадобится для расчета скорости CAN. А пока пример настройки системы RCC. Что в ней очень удобно, так это то, что можно сразу же вбить в поле HCLK нужную частоту и программа автоматически просчитает все остальные настройки RCC.

Читайте также: Нормативы давления в шинах таблица

Can шина в stm32f103

В нашем проекте мы не будем перенастраивать систему тактирования и остановимся на частоте SYSCLK = 72 МГц.

Инициализация

Как обычно начинаем с инициализации модуля CAN1. Здесь нужно выполнить следующие действия:

Видео:CAN Эмулятор скорости из модуля CAN StarLine Stm32f103c8t6 Подмотчик скорости по кан шине (без схем)Скачать

CAN Эмулятор скорости из модуля CAN StarLine Stm32f103c8t6 Подмотчик скорости по кан шине (без схем)
  • Разрешить тактирование модуля CAN1;
  • Войти в режим инициализации (после сброса модуль находится в спящем режиме);
  • Настроить скорость передачи данных в регистре CAN_BTR;
  • Выбрать режим работы модуля один из трех (обычный, только приема, режим петли);
  • По необходимости включить/выключить дополнительные функции, такие как автоматическое пробуждение при появлении на шине данных, блокировка FIFO при переполнении и другие.
  • Выйти из режима инициализации.

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

Самым сложным пунктом здесь является настройка скорости передачи. Но на самом деле сложного ничего нет, нужно руководствоваться несколькими правилами. Как известно, максимальная скорость передачи CAN-шины может достигать 1 Мбит/с. Т.е. время минимального битового интервала определяется по формуле:

TBIT = 1/Скорость передачи

Выходит, что для скорость передачи данных 1 Мбит/с битовый интервал долже быть равен 1 мкс (или 1000 нс).

Битовый интервал рабивается еще на более мелкие интервалы, называемые квантами TQ (Time Quanta). Обязательным условием правильной настройки бит тайминга (скорости передачи) является равенство TBIT = 8. 25TQ. Из мануала следует, что битовый интервал состоит из трех частей:

  • SYNC_SEG;
  • BIT SEGMENT 1;
  • BIT SEGMENT 2;

Can шина в stm32f103

Что это такое можете почитать подробно в мануале на контроллер. Из илюстрации видно, что SYNC_SEG всегда равен 1TQ, а сумма (BS1 + BS2) = 7. 24TQ. При этом BS1 = 1..16TQ, BS2 = 1. 8TQ.

BRP — это делитель входной частоты. С помощью него мы получаем нужный битовый интервал.

Как известно из даташита модуль CAN1 тактируется от шины PCLK1 , частота которой не может быть выше 36 МГц. По умолчанию в CMSIS boot именно эта частота и настраивается. От нее мы и будет вести все расчеты, в которых нам снова поможет STM32CubeMX.

Выбираем Pinout->Periphrerals->CAN->Mater Mode.

Переходим на вкладку Configuration и нажимам кнопку CAN.

Can шина в stm32f103

Допустим мы хотим получить скорость передачи данных 1 Мбит/с. Тогда нужно настроить битовый интервал длительностью 1000 нс. Устанавливаем делитель шины тактирования PCLK1 = 36МГц/4, т.е. BRP = 4, тогда время одного кванта получится около 111 нс. Отсюда получаем, что битовый интервал равен 9TQ. SYNC_SEG = 1TQ. Остается (BS1+BS2) = 8TQ. Устанавливаем их значение по 4TQ. В своем проект я создал таблицу настроек для скоростей передачи 1 Мбит/с, 500 кбит/с, 250 кбит/с, 125 кбит/с и 62,5 кбит/с. Вот какие временный настройки я получил:

Структура t_can_timing не случайно имеет такой формат. Он совпадает с форматом регистра CAN_BTR за исключением полей выбора режима работы. Необходимо также заметить, что от всех коэффициентов, полученных в STM32CubeMX отнимается единица.

Переход в режим инициализации происходит установкой бита INRQ в регистре CAN_MCR, при этом сбрасывается бит спящего режима SLEEP. Проверка перехода в режим инициализации осуществляется в регистра CAN_MSR, установкой бита INAK. Выход из режима инициализации осуществляется сбросом бита INRQ .

  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле

    Видео:CAN шина👏 Как это работаетСкачать

    CAN шина👏 Как это работает


    📸 Видео

    STM32 CAN шина. Часть 2. Фильтрация и демонстрация работыСкачать

    STM32 CAN шина. Часть 2. Фильтрация и демонстрация работы

    Передача данных по CAN-шине STM32Скачать

    Передача данных по CAN-шине STM32

    MCP2515, контроллер CAN шины с интерфейсом SPIСкачать

    MCP2515, контроллер CAN шины с интерфейсом SPI

    поиск нерабочей can шины, часть дваСкачать

    поиск нерабочей can шины, часть два

    Как проверить CAN шину Используем симулятор ElectudeСкачать

    Как проверить CAN шину  Используем симулятор Electude

    лекция 403 CAN шина- введениеСкачать

    лекция 403  CAN шина- введение

    Подробно про CAN шинуСкачать

    Подробно про CAN шину

    Экспресс диагностика CAN шины на автомобиле. №21Скачать

    Экспресс диагностика CAN шины на автомобиле. №21

    Как управлять автомобилем через CAN-шину?Скачать

    Как управлять автомобилем через CAN-шину?

    Компьютерная диагностика авто. K-линия и CAN шинаСкачать

    Компьютерная диагностика авто. K-линия и CAN шина

    STM32 CAN Communication || NORMAL ModeСкачать

    STM32 CAN Communication || NORMAL Mode

    CAN шина на осциллографе FINIRSI ADS1013DСкачать

    CAN шина на осциллографе FINIRSI ADS1013D

    Простая проверка CAN шины. Сканер не видит автомобиль через OBD2. Как правильно выбрать изоленту.Скачать

    Простая проверка CAN шины. Сканер не видит автомобиль через OBD2. Как правильно выбрать изоленту.
Поделиться или сохранить к себе:
Технарь знаток