Управляем Smart Display с помощью протокола custom CAN

30 октября 2023

системы безопасностиавтоматизацияответственные примененияинтернет вещейWinstar DisplayстатьяоптоэлектроникаArduinoCANДисплеи

Инженеры компании Winstar создали руководство, которое будет полезно как начинающим, так и опытным разработчикам, желающим использовать в своих проектах модуль Arduino, плату расширения CAN bus shield и датчики для контроля устройств с помощью протокола custom CAN ID. Материал содержит обзор компонентов, которые были использованы для создания проекта, а также подробный разбор функциональности программы, включая инструкцию по переключению страниц на Smart Display 7” с помощью CAN-контроллера. В руководстве описаны основы применения этих компонентов для контроля устройств и ключевые моменты процесса переключения страниц с помощью CAN ID, а также базовые знания, которые пригодятся для дальнейшей работы с более сложными проектами.

Интеллектуальные CAN-дисплеи Smart Display используют различные протоколы, включая стандартизированный CANopen и специальный custom CAN. Протокол CANopen определяет профиль коммуникации и устройств, а также модели объекта при использовании разных типов оборудования. Он предлагает стандартные решения по конфигурации, мониторингу и контролю устройств по CAN-шине.

Специальный протокол custom CAN лучше подходит в случаях, когда устройства на CAN-шине обладают уникальными характеристиками или имеют особенности, требования которых стандартные протоколы удовлетворить не могут. Специальные протоколы расширяют возможности проектирования, за счет чего являются более эффективными.

В качестве основных компонентов были использованы модуль контроллера Arduino со средой IDE v 2.0.4 и плата расширения CAN bus shield (рисунок 1). Плата расширения обеспечивает интерфейс CAN-шины для модуля Arduino. Она использует микроконтроллер CAN MCP2515 и приемопередатчик CAN MCP2551 для обмена данными других устройств на CAN-шине.

Рис. 1. Блок-схема системы

Рис. 1. Блок-схема системы

Демо-пакет включает в себя следующие компоненты:

  • 7” Smart Display;
  • Arduino Mega 2560;
  • плату расширения CAN;
  • адаптер CAN-шины;
  • датчик с физической кнопкой;
  • светодиод;
  • графический интерфейс GUI-Builder v4.5 или более поздней версии.

Работа с демо-пакетом состоит из трех этапов:

  • разработки демо-проекта в графическом интерфейсе пользователя;
  • построения и загрузки проекта;
  • программирования модуля Arduino.

Создание страницы в графическом интерфейсе пользователя 

Первый шаг – запуск актуальной версии приложения GUI-Builder и создание нового проекта. Проекту необходимо присвоить название, и папка для него будет создана автоматически.

Далее необходимо выбрать тип устройства (в данном случае это 7”), далее – выбрать протокол «custom CAN ID». Ориентация дисплея по умолчанию будет горизонтальная. После этого нужно выбрать пустой шаблон интерфейса пользователя, а затем нажать кнопку «Create», чтобы сгенерировать новый проект (рисунок 2).

Рис. 2. Создание нового проекта

Рис. 2. Создание нового проекта

На рисунке 3 показана страница, которая открывается после создания шаблона проекта.

Рис. 3. Графический интерфейс

Рис. 3. Графический интерфейс

По сценарию для этой демо-версии требуется дополнительная страница. Чтобы добавить такую страницу, нажмите кнопки «Page» и затем «+» (рисунок 4).

Рис. 4. Создание дополнительной страницы

Рис. 4. Создание дополнительной страницы

На панели ресурсов можно выбрать понравившийся стиль фона (рисунок 5).

Рис. 5. Выбор стиля фона

Рис. 5. Выбор стиля фона

Также предпочтительный стиль фона можно выбрать во вкладке «Page» (рисунок 6).

Рис. 6. Выбор фона во вкладке «Page»

Рис. 6. Выбор фона во вкладке «Page»

Разработка и загрузка проекта

Следующий этап работы – настройка параметров проекта. Нажмите на кнопку «Устройство» и выберите «Свойство устройства». Ознакомьтесь со стандартным протоколом и установите нужную скорость передачи данных. Для обеспечения совместимости рекомендуется устанавливать ту же скорость, что и в коде Arduino и графическом интерфейсе. После этого нужно кликнуть по команде «Соединить с кнопкой устройства». Если соединение завершится успешно, нажмите кнопку «Загрузить» (рисунок 7).

Рис. 7. Настройка скорости передачи данных и загрузка проекта

Рис. 7. Настройка скорости передачи данных и загрузка проекта

После завершения загрузки проекта нажмите кнопку «ОК» (рисунок 8).

Рис. 8. Завершение загрузки

Рис. 8. Завершение загрузки

Далее откроется стартовое окно (рисунок 9).

Рис. 9. Стартовое окно

Рис. 9. Стартовое окно

Затем вы увидите страницу, которую создали. Теперь этап загрузки и создания страницы с помощью графического интерфейса можно считать завершенным (рисунок 10).

Рис. 10. Завершение этапа «создание проекта»

Рис. 10. Завершение этапа «создание проекта»

Программирование модуля Arduino

Ранее для протоколов Custom CAN ID использовалась только библиотека mcp2515_can.h, а SPI.h применялась для связи через последовательный периферийный интерфейс (SPI). В данном решении mcp2515_can.h используется для взаимодействия с контроллером CAN MCP2515, который часто применяется во встроенных системах.

Библиотека mcp2515_can.h предоставляет функции инициализации контроллера MCP2515, настройки параметров связи (скорости передачи данных, фильтра и маски) по CAN-шине, передачи и приема сообщений, а также проверки на наличие ошибок. Здесь все необходимые адреса регистров определяются программой в среде Arduino IDE. Сегмент кода на рисунке 11 инициализирует различные глобальные переменные, константы и массивы с соответствующими типами данных, которые позже используются в коде.

Рис. 11. Сегмент кода для инициации различных глобальных переменных, констант и массивов

Рис. 11. Сегмент кода для инициации различных глобальных переменных, констант и массивов

Сегмент кода на рисунке 12 представляет собой функцию setup(), которая вызывается один раз в начале программы. Последовательный интерфейс для монитора инициализируется со скоростью передачи данных 115200 с помощью Serial.begin(). Встроенный светодиод на контакте 13 устанавливается как выход с помощью pinMode(). Контакт физической кнопки устанавливается в качестве ввода с помощью pinMode(). Цикл while используется для инициализации контроллера CAN MCP2515. Функция CAN.begin() вызывается с аргументом скорости передачи данных CAN_250KBPS.

Рис. 12. Функция setup()

Рис. 12. Функция setup()

На рисунке 13 функция ChangePageFunction() отправляет команды на MCP2515 для переключения между режимами отображения. Это делается путем отправки сообщений с определенными байтами данных на MCP2515. Функция сначала отправляет команду режима устройства для переключения MCP2515 в режим конфигурации, затем – команду «сменить страницу» с нужным номером страницы и, наконец, еще одну команду режима устройства, чтобы снова переключить MCP2515 в режим отображения.

Рис. 13. Функция ChangePageFunction()

Рис. 13. Функция ChangePageFunction()

Сегмент кода на рисунке 14 представляет собой функцию loop(), которая выполняется повторно после вызова setup(). Функция считывает значение напряжения физической кнопки с помощью AnalogRead() и сохраняет его в переменной buttonValue. Если значение buttonValue больше THRESHOLD, это сигнализирует о том, что нажата физическая кнопка. В этом случае функция увеличивает переменную nowPage на 1 и передает текущее значение nowPage на монитор последовательного интерфейса с помощью sprintf() и Serial.println().

Затем loop() вызывает функцию changePageFunction() с текущим значением nowPage, чтобы переключиться на нужную страницу отображения. Если значение nowPage не равно 0, встроенный светодиод на контакте 13 включается с помощью функции digitalWrite(). В противном случае светодиод выключается.

Переменная LastDebounce обновляется с учетом текущего времени с помощью aeyrwbb millis(), чтобы отслеживать, когда в последний раз была нажата кнопки. Функция ожидает размыкание контакта физической кнопки, непрерывно считывая значение buttonValue с помощью AnalogRead() внутри цикла while.

Важно: оператор задержки (100) в конце функции вводит задержку в 100 мс перед повторным запуском функции. Данная задержка гарантирует отправку сообщений CAN-шины с разумным интервалом.

Рис. 14. Функция loop()

Рис. 14. Функция loop()

Более подробную информацию можно найти в коде Arduino. Важно записать адрес для подключения хоста к Smart Display. Если вы хотите больше узнать о том, как осуществляется связь между хостом и интеллектуальным дисплеем через плату расширения CAN, обратитесь к журналу связи GUI builder. 

Дополнение к настройке проекта

После успешной проверки и загрузки программы с помощью среды Arduino IDE появляется возможность переключаться между страницами, нажимая физические кнопки. Когда на экране отобразится первая страница, светодиод погаснет. Нажатие физической кнопки для переключения на вторую страницу приведет к включению светодиода, как показано на рисунке 15.

Рис. 15. Индикация нажатия кнопки

Рис. 15. Индикация нажатия кнопки

Поздравляем! Дизайн и демо-версия Smart Display дополнены физической кнопкой и светодиодом для сигнализации нажатия физической или сенсорной кнопки.

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

Рис. 16. Пример проекта

Рис. 16. Пример проекта

Используя модуль Arduino и CAN-контроллер MCP2515, вы можете легко управлять переключением страниц на SmartDisplay с помощью физической кнопки. Сегменты кода демонстрируют, как отправлять команды на контроллер MCP2515 для переключения между режимами отображения и считывать напряжение физической кнопки для запуска этих команд. Эту систему можно расширить, включив в нее другие функции, например, дополнительные кнопки, датчики или другие периферийные устройства. Контроллер MCP2515 и модуль Arduino – это гибкая и простая в использовании платформа. Кроме того, она достаточно универсальна и подойдет для любых приложений: от автомобильной и промышленной до домашней автоматизации.

Оригинал статьи

Перевела Анна Конева по заказу АО КОМПЭЛ

•••

Наши информационные каналы

О компании Winstar Display

Winstar Display Co.,Ltd. (Winstar) – крупнейший в Юго-Восточной Азии и один из ведущих в мире производителей промышленных решений для отображения информации (дисплеев и дисплейных модулей). Компания была основана близ города Тайчжун на западе Тайваня в 1998 году. Winstar – ведущий на мировом рынке производитель малых и средних дисплеев. Бизнес-модель компании LVHM (Low-Volume/High-Mix) позволяет клиентам размещать заказы на стандартную продукцию без ограничения на ее минимальное количество. Wi ...читать далее

Товары
Наименование
WF24LTYAJDNN0# (WINSTAR)
 
WF150ATYAMLNN0# (WINSTAR)
 
WF70A6TIFGDBT0# (WINSTAR)
 
WF70C4TIFGDBT0# (WINSTAR)
 
WF70QTIFGDBT0# (WINSTAR)
 
WO12864C2-TFH# (WINSTAR)
 
WO12864D3-TFH# (WINSTAR)
 
WO1602I-YYH-AT# (WINSTAR)
 
WEA012864AWAP3N00000 (WINSTAR)
 
WEA012864DWPP3N00003 (WINSTAR)