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.
|