BC/NW 2018 № 2 (33):5.1
РАЗРАБОТКА МАКЕТА АППАРАТНО –ПРОГРАММНОГО СИМУЛЯТОРА CAN
Абросимов Л.И., Калязин В.А.
Введение
CAN (Controller Area Network) –двухпроводная последовательная магистраль, обеспечивающая объединение в сеть устройств ввода/вывода, датчиков и исполнительных устройств . Предназначена для организации высоконадежных недорогих каналов связи в распределенных системах управления. Характеризуется протоколом, обеспечивающим возможность нахождения на магистрали нескольких ведущих устройств, передачу данных в реальном масштабе времени, эффективную коррекцию ошибок, и высокую помехоустойчивость. Элементная база CAN насчитывает сотни микросхем индустриального и специального назначения, выпускаемых в больших объемах. Разработанный в 80-х годах 20 века фирмой Роберт Бош, в настоящее время стандарт широко применяется в промышленной автоматизации, на транспорте, в авиации, медицине и изделиях спецназначения.
Стандарт ISO 11898 (ГОСТ Р ИСО 11898-12015 );
Максимальная скорость передачи 1 Мбит/с;
Максимальная длина линии до 10000 м;
Характер сигнала, Дифференциальный сигнал;
Линия передачи Витая пара.
Расстояние, м |
40 |
50 |
100 |
250 |
500 |
1000 |
2500 |
5000 |
10000 |
Скорость,Кбит/с |
1000 |
800 |
500 |
250 |
125 |
50 |
20 |
10 |
5 |
Стандарт CAN состоит из физического уровня и уровня передачи данных, определяющего несколько различных типов сообщений, правила разрешения конфликтов при доступе к шине и защиту от сбоев. Скорость передачи задается программно. Проектировщик выбирает скорость, исходя из длины линии связи, числа узлов, состояния линии, и уровня помех. Максимальное число узлов на линии связи фактически определяется нагрузочной способностью применяемых трансиверов. Для управления доступом к шине используется неразрушающее bit–wise разрешение конфликтов. В сообщениях отсутствуют явные адреса, вместо этого каждое сообщение содержит числовое значение, которое управляет его очередностью на шине, а также может служить идентификатором содержимого сообщения. Протокол имеет продуманную схему обработки ошибок, обеспечивающую повторную передачу сообщений, если они не были получены должным образом, и эффективные средства для изоляции сбоев, и сбойных узлов шины. Общая вероятность необнаруженной ошибки составляет 4.7x10-11.
1. Аппаратное обеспечение макета симулятора.
Симулятор CAN шины создается с целью детального изучения протокола и характеристик CAN интерфейса, и проработки возможности его последующей модификации. Структурная схема аппаратно-программного симулятора CAN( Arduino Uno+CAN shield+анализатор шины USBCAN-2A)приведена на Рис.1.1 Рассматриваемый в данной работе макет отличается от симулятора только уменьшенным количеством приемопередающих узлов CAN шины (2 вместо 3)
В условиях определенного дефицита времени было принято решение о создании макета симулятора с использованием готовых компонентов аппаратной платформы Arduino, имеющей собственную среду поддержки разработки-Arduino IDE.
В качестве устройства управления передающего узла CAN применен наиболее популярный, и, следовательно, хорошо документированный микроконтроллер (далее-МК) Arduino Uno на базе МК ATMega 328 (подробнее-Wiki: https://ru.wikipedia.org/wiki/Arduino). Принципиальная схема Arduino Uno приведена на рис.1.3.
Использованная в узле CAN плата контроллера CAN интерфейса создана на основе МК CAN шины Microchip MCP2515, и приемопередатчика (CAN-трансивера) Microchip MCP2551 (подробнее-: https://www.microchip.com/wwwproducts/en/MCP2515 , https://www.microchip.com/wwwproducts/en/en010405). Плата контроллера CAN интерфейса работает с платой устройства управления по интерфейсу SPI.
Принципиальная схема контроллера CAN интерфейса приведена на рис. 1.4.
Для работы в качестве приемника сообщений CAN, и отображения сообщений CAN на экране компьютера, использован двухканальный (задействован 1 канал)модуль контроллера и анализатора CAN шины USB-CAN 2A. Данный модуль подключается к USB порту компьютера, и работает c компьютером через виртуальный порт USB-UART под управлением программы USB CAN Tool, которая используется, в том числе, и для инициализации модуля для работы в качестве приемника-декодера CAN.
Фото МК Arduino Uno, CAN-модуля на базе Arduino Uno с CAN-контроллером (Microchip MCP2515+MCP2551),и анализатора шины USB-CAN 2A приведено на Рис.1.2.
Рис.1.1 Структурная схема аппаратно-программного симулятора CAN( Arduino Uno+CAN shield+анализатор шины USB-CAN2A)*
Рис. 1.2 МК Arduino Uno, CAN-модуль на базе Arduino Uno с CAN-контроллером (Microchip MCP2515+MCP2551),и анализатор шины USB-CAN 2A
Рис. 1.3 МК Arduino Uno (Rev.3), схема электрическая принципиальная.
Рис. 1.4. Контроллер CAN(Microchip MCP2515+MCP2551),схема электрическая принципиальная
2. Тестовая программа.
Программа для тестирования макета симулятора CAN создана в среде поддержки разработки Arduino IDE (подробнее: https://www.arduino.cc/en/Guide/Environment).
Данная среда поддерживает язык программирования Processing , созданный на основе C++,обладает возможностью подгрузки нестандартных библиотечных модулей (в данном случае- модулей SPI.h, и mcp.can.h для поддержки шин CAN и SPI), и позволяет загружать исполняемый модуль программы в память Arduino Uno через USB-порт компьютера.
Программа предназначена для инициализации передающего узла CAN на базе Arduino, описанного в П.1. В ходе ее выполнения происходит формирование пакета с расширенным 29-битовым идентификатором и 8 байтами данных, инициализация интерфейса SPI для работы с CAN модулем передающего узла, настройка скорости сети (100 Кбит/с), и организация бесконечного цикла передачи пакета.
// CAN TRANSMITTER
#include <mcp_can.h>
#include <SPI.h>
#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
const int SPI_CS_PIN = 10;
// Инициализация передатчика
long unsigned int txID = 0x1881ABBA; // Формат расширенного идентификатора (29 бит) ,MSD<=1)
unsigned char stmp[8] = {0x0E, 0x00, 0xFF, 0x22, 0xE9, 0xFA, 0xDD, 0x51}; 8 байт данных
MCP_CAN CAN(SPI_CS_PIN); Установка сигнала обращения к контроллеру CAN (SPI_CS) на 10 контакт;
void setup()
{
Serial.begin(115200);
//Цикл инициализации контроллера модуля CAN
while (CAN_OK != CAN.begin(CAN_100KBPS))// установка частоты CAN (100Kбит/c)
{
//Serial.println("CAN BUS Module Cannot Initialize");//Вывод на жк дисплей (ошибка инициализации контроллера)
//Serial.println("Retry");// Вывод на жк дисплей (повторение попытки инициализации…)
delay(200);//…через 200 ms
}
// Serial.println("CAN BUS Shield init ok!");// Вывод на жк дисплей (успешная инициализация)
}
void loop()//цикл передачи-передавать, пока подключено питание
{
//LiquidCrystal_I2C lcd(0x27,20,4); //установка параметров отображения жк дисплея
//Serial.println("CAN_TRANSMIT");// Вывод на жк дисплей (режим передачи)
CAN.sendMsgBuf(txID,1, 8, stmp); // передавать пакет (расширенный Id/29 бит и 8 байт данных)…
delay(25); //…каждые 25ms
}
Рис. 2.1 Листинг программы инициализации модуля CAN.
Рис. 3.1 Прототип симулятора в работе. Передающий модуль на базе Arduino Uno с CAN-контроллером (Microchip MSP2515+MSP2551), приемное устройство-PC+анализатор шины USB-CAN 2A, и устройство контроля и сбора данных (осциллограф Rigol DS 1054Z)
Рис. 3.2 Прототип симулятора в работе.СПД-1xUTP 5E, макетная плата для межсоединений, контрольные точки (осциллограф Rigol DS1054Z) на контактах терминирующего резистора, подключенного к анализатору шины USB-CAN 2A
Рис. 3.3 Развертка тестового пакета CAN (Захват изображения с экрана осциллографа Rigol DS1054Z в приложении UltraScope/Windows 10)
Рис.3.4 Программное декодирование CAN-пакета в приложении PulseView (логический анализатор и декодер протоколов с открытым кодом/Win 10).
Рис. 3.5 Экран приложения PulseView c перечнем поддерживаемых протоколов.
Рис. 3.6 Иллюстрация корректной работы прототипа симулятора, и достоверности полученных результатов. Справа-окно приложения USB_CAN_Tool (управление анализатором шины USB-CAN 2A). Запрограммированные идентификатор и данные передатчика приняты, и декодированы безошибочно.
3.Обработка полученных данных.
Фото макета симулятора в работе представлено на рис. 3.1, 3.2. Осциллограф Rigol DS 1054Z, подключенный к компьютеру по LAN-интерфейсу, используется для наблюдения развертки пакета, и сбора данных для последующего анализа и декодирования установленным на компьютере приложением PulseView. Окно программы с перечнем поддерживаемых протоколов представлено на рис. 3.5.
Контроль работоспособности прототипа симулятора CAN проводится с использованием двух независимых приборов: анализатора шины USB-CAN 2A, работающим под управлением приложения USB CAN Tool путем визуального наблюдения (вывод результатов декодирования принятого пакета в окне приложения), и путем программного декодирования CAN пакета с использованием приложения PulseView кроссплатформенного проекта Sigrok ( подробнее: https://sigrok.org/), которое представляет собой логический анализатор, и декодер протоколов с открытым исходным кодом, распространяемый свободно. Окно приложения PulseView с нормализованными исходными данными, и результатами декодирования представлено на рис. 3.4.
и рис.3.6.
Как видно из информации рис. 3.6., результат декодирования принятых узлом-приемником CAN-шины пакетов(анализатор шины USB-CAN 2A) совпадает с результатом декодирования CAN-пакетов, полученным с помощью программного логического анализатора-декодера протоколов PulseView, что подтверждает успешный результат проектирования, и правильность работы прототипа симулятора CAN.
Заключение.
Результаты выполнения курсового проекта позволяют сделать следующие выводы:
1) Применение готовых модулей семейства контроллеров Arduino для оценки работоспособности устройств на базе микроконтроллеров позволяет значительно ускорить прототипирование;
2) Подтверждены работоспособность, эффективность и удобство применения программного
логического анализатора и декодера протоколов PulseView (совместно с осциллографом, имеющим возможность сетевого подключения) при исследовании протоколов последовательных интерфейсов передачи данных;
3) Полученный макет симулятора CAN работоспособен, и может служить основой для создания симулятора CAN с целью исследования параметров протокола, и/или построения сетей контроллеров с большим числом узлов/большей сложности/протяженности.
Литература .
1.Paret D. Multiplexed Networks for Embedded Systems, John Wiley&Sons Ltd,2007,
ISBN 978-0-470-03416-3 (HB)
2.